Благодарю за помощь.
|
drmodjo, например, на РНР чтобы узнать "живой/нет" совсем не нужно делать так, как это делаете вы - получаете содержимое, а затем проверяете статус. Наоборот, сначала get_headers(), проверяем статус, и затем, если нужно file_get_contents. Кстати, "собачка" тут совсем не нужна.
А на клиенте то ведь DOM, все иначе, и кто вам может ответить конкретно куда вам что-то вставить, имея только общее представление чего нужно? То есть, описывайте конкретно, конкретный и код будет. Только лишь всего. |
Ладно. Задайте конкретный вопрос и я дам конкретный ответ. Может что и выйдет. Что нужно вам знать?
|
Цитата:
Вам нужен будет серверный прокси, который запросит ссылку и вернёт ответ - жива или не жива, точно также как это сделано у вас сейчас. Пример: условно так
// links - массив ссылок, // success - колбэк получающий ссылку в случае удачи // error - колбэк получающий ссылку в случае неудачи async function tryFetchList(links, success, error) { for(let link of links) { const result = await fetch('/check-link-api.php?url=' + encodeURIComponent(link.href)) if(result === 'ok') success(link) else error(link) } } // или скопом, смотря как у вас сервер работать будет async function tryFetchList(links, success, error) { links = Array.prototype.slice.call(links); const results = await fetch('/check-links-api.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify( links.map(({href}) => href) ) }).then(res => res.json()); results.forEach((result, i) => { if(result === 'ok') success(links[i]) else error(links[i]) } } |
Тогда может подскажете как поступить? Ибо когда на одной странице много запросов на проверку, то она весьма долго загружается и это проблема. Может как-то можно реализовать это иначе?
<?PHP $content = @file_get_contents("ССЫЛКА НА РЕСУРС"); if (strpos($http_response_header[0], "200")) { echo "<h5>ЕСЛИ СУЩЕСТВУЕТ</h5>"; } else { echo "<font color=red><h5>ЕСЛИ НЕ СУЩЕСТВУЕТ</h5></font>"; } ?> |
Замените file_get_contents на get_headers, как посоветовал laimas - уже будет быстрей.
А дальше надо сделать таки отдельным файлом проверку. Я иду спать, так что не сегодня. М.б. дальше laimas и поможет, ведь теперь ясно что: а) Есть сервер с php. б) Ссылки появляются из php и изначально там доступны. с) Проблема лишь в долгой загрузке. =) |
То есть вот так?
<?PHP $content = @file_get_headers("ССЫЛКА НА РЕСУРС"); if (strpos($http_response_header[0], "200")) { echo "<h5>ЕСЛИ СУЩЕСТВУЕТ</h5>"; } else { echo "<font color=red><h5>ЕСЛИ НЕ СУЩЕСТВУЕТ</h5></font>"; } ?> Все равно долго. |
Цитата:
function isValid($url) { if(!filter_var($url, FILTER_VALIDATE_URL)) return false; $curl = curl_init($url); curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10); curl_setopt($curl,CURLOPT_HEADER,true); curl_setopt($curl,CURLOPT_NOBODY,true); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $resp = curl_exec($curl); curl_close($curl); return $resp ? true : false; } echo isValid(\'https://javascript.ru/forum/jquery/79699-proverka-ssylki-na-aktivnost-3.html\') ? 'Yes' : 'No'; |
Вставил ваш код на сайт. Заменил ссылку на нужную, живую. И отображается текст Yes. Меняю ссылку на несуществующую, не живую и отображается тоже самое. Что не так делаю?
|
Сейчас заметил такую вещь.
Живая ссылка: https://site.ru/public/1024 Если меняю последние символы ссылки, то скрипт не работает. Если в начале, где site.ru, то меняет на No. В чем может быть проблема? |
Часовой пояс GMT +3, время: 20:50. |