Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проверка ссылки на активность (https://javascript.ru/forum/jquery/79699-proverka-ssylki-na-aktivnost.html)

laimas 12.03.2020 12:49

Цитата:

Сообщение от drmodjo
Ну это же надо в совокупности с основным кодом.

Каким кодом?

Сервер может поступать как ему вздумается, вернее разработчик - организовал передачу заголовка/статуса 404 если страница не найдена, или отдает статус 200, а на странице картинка 404. Не трудно догадаться, что это в общем-то нерабочая ссылка. Но никакой РНР скрипт этого проанализировать не может. Все что вам нужно, это get_headers(URL, 1) и анализировать статус. Все.

drmodjo 12.03.2020 13:21

А как тогда это мой скрипт проверяет если это невозможно?

laimas 12.03.2020 13:51

Цитата:

Сообщение от drmodjo
А как тогда это мой скрипт проверяет если это невозможно?

Ваш анализирует заголовки ответа. Тоже самое и я написал, только без лишнего мусора. А вот обмануть скрипт как два пальца ...

drmodjo 12.03.2020 15:24

Да, но мой скрипт проверяет ссылку полностью, так как надо. А ваш скрипт проверяет только до слеша. Об этой разнице я и пишу уже несколько страниц.

laimas 13.03.2020 00:27

Ну-ка пример такого URL, только реального, а не фейка или из не доверенных

drmodjo 13.03.2020 01:47

<li class="span3">
<div class="thumbnail">
<a href="https://bprice.ge/keis191" target="_blank"><img src="<?=LINK?>/image/catalog/cases/191/1.jpg" width="150">
<div class="caption">
<?PHP
$content = @file_get_contents("$link/keis191");
if (strpos($http_response_header[0], "200")) {
echo "<h5>Текст при живой ссылке</h5>";
} else {
echo "<font color=red><h5>Текст если ссылка не существует</h5></font>";
}
?>
</a>
</div>
</div>
</li>

laimas 13.03.2020 02:06

Это не URL, это хрень, которую никто проверить не сможет. Вам вообще чего надо, проверять есть ли картинка? Так для этого ну клиенте нужно проверять событие ее загрузки, а на севере настроить .htaccess, скриптов для этого не нужно.

Malleys 13.03.2020 02:18

drmodjo, вы можете через сервер узнать, какой статус возвращает ресурс, и уже на клиенте раскрасить ссылки в зависимости от статуса ссылки. Вот PHP-скрипт, который «узнаёт» статус запрашиваемого ресурса...
<?php
$headers = get_headers($_GET['url']);
header($headers ? $headers[0] : $_SERVER['SERVER_PROTOCOL'] . ' 500');
header('Access-Control-Allow-Origin: *');
Для примера я его опубликовал на https://is-valid-url.malleys.repl.co/index.php

Пример...
<section>
	<a href="https://javascript.ru/forum/jquery/79699-proverka-ssylki-na-aktivnost-3.html">javascript.ru/forum/jquery/79699-proverka-ssylki-na-aktivnost-3</a>
	<a href="http://javascript.ru/forum/jquery/ams">javascript.ru/forum/jquery/ams</a>
	<a href="https://site.ru/public/1024">site.ru/public/1024</a>
	<a href="https://google.ru/">google.ru</a>
	<a href="https://bprice.ge/keis191">bprice.ge/keis191</a>
	<a href="https://javascript.ru/cat/list/j_s.gif">javascript.ru/cat/list/j_s.gif</a>
	<a href="https://javascript.ru/cat/list/js.gif">javascript.ru/cat/list/js.gif</a>
</section>

<style>
	a {
		all: unset;
		display: block;
		pointer-events: none;
		font-size: 200%;
	}

	a:before {
		content: "♻";
		color: gold;
		width: 1em;
		display: inline-block;
	}

	a.ok {
		pointer-events: all;
		text-decoration: underline;
		color: blue;
		cursor: pointer;
	}

	a.ok:before {
		content: "✔";
		color: yellowgreen;
	}

	a.error:before {
		content: "✖";
		color: red;
	}
</style>

<script>

(async function main() {
	for (const link of document.links) {
		const { status } = await fetch("https://is-valid-url.malleys.repl.co/index.php?url=" + encodeURIComponent(link));
		link.classList.add(status >= 200 && status < 400 ? "ok" : "error");
	}
})();

</script>


Всё просто — в зависимости от статуса на ссылку добавляется соответствующий класс — "ok" или "error".

laimas 13.03.2020 02:18

Вы пишите какую-т хрень. Проверяем - берем url реально существующей картинки на этом форуме и запрашиваем заголовки:

print_r(get_headers('https://javascript.ru/cat/list/js.gif', 1));


Ответ:

Код:

Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Thu, 12 Mar 2020 23:24:05 GMT
    [Content-Type] => image/gif
    [Content-Length] => 2602
    [Connection] => close
    [Set-Cookie] => __cfduid=d17f92f66d695c0ffc5d1e1bc04e392951584055445; ...
    [Cache-Control] => max-age=315360000
    [Cf-Bgj] => imgq:100
    [Cf-Polished] => status=not_needed
    [ETag] => "59159012-a2a"
    [Expires] => Thu, 31 Dec 2037 23:55:55 GMT
    [Last-Modified] => Fri, 12 May 2017 10:36:02 GMT
    [CF-Cache-Status] => HIT
    [Age] => 175
    [Accept-Ranges] => bytes
    [Expect-CT] => max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
    [Server] => cloudflare
    [CF-RAY] => 57314444aa28dfe3-FRA
)

Изменим адрес на фиктивный, просто укажем несуществующее имя:

print_r(get_headers('https://javascript.ru/cat/list/j_s.gif', 1));


Ответ:

Код:

Array
(
    [0] => HTTP/1.1 404 Not Found
    [Date] => Thu, 12 Mar 2020 23:25:30 GMT
    [Content-Type] => text/html; charset=utf-8
    [Content-Length] => 162
    [Connection] => close
    [Set-Cookie] => __cfduid=d5cd26eb70e3ca33ff307d37733935bf61584055530; ...
    [Cache-Control] => max-age=86400
    [CF-Cache-Status] => EXPIRED
    [Expect-CT] => max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
    [Server] => cloudflare
    [CF-RAY] => 5731465629ec1f45-FRA
)

А что вы там у себя вытворяете, бог его знает.

drmodjo 13.03.2020 02:23

Я удивлен. Где вы там проверку картинки увидели?
Скрипт который вы всю переписку критикуете делает свое дело. А ваш не справляется с поставленной задачей. И только одно радует, что вы считаете невозможным делает этот скрипт. Наверное зря потратил ваше время. Просто надежду подал ваш статус "Профессор" под вашим псевдонимом. Извините за беспокойство.


Часовой пояс GMT +3, время: 02:44.