Проверка ссылки на активность
Всем привет.
Помогите пожалуйста. Нужен код, который автоматически проверит определенную ссылку на существование и выведет текст. Если ссылка существует, то отобразить один текст, а если не существует, то красным цветом отобразить другой текст. Я в этом чайник. Помогите добрые люди. |
http://htmlbook.ru/css/active + content: attr() позволит это сделать без скриптов.
|
Простите наверно не правильно выразился. Скрипт должен проверить существование ссылки.
|
Цитата:
Если считать активной существующие ссылки, следовательно несуществующие неактивными будут, то какой же у них может быть текст? |
Проверить надо внешнюю ссылку. (Ссылка на другой сайт)
Если она существует, то выдать указанный текст. Если не существует, то выдать другой указанный текст но уже красным цветом. И это должно происходит автоматически, то есть без каких либо нажатий. |
Наконец-то добрались до истины. )
$('a').each(function() { //здесь проверяйте значение атрибута href - this.href //если домен ссылки не равен домену сайта, значит внешняя ссылка }) Или с JS вообще проблемы и самостоятельно не ...? |
Как я уже честно признался полный чайник.
Помогите пожалуйста с полным кодом. Кроме вас тут никто не отозвался. Заранее благодарю. |
Ну на jQuery это так:
$(function() { var host = location.hostname; $('a').each(function() { if(!~this.href.indexOf(host)) //это внешние ссылки, что-то делаем else //иначе своя ссылка, что-то делаем }) }) А вот что делаем ... ? |
Цитата:
Похоже под "активной" ссылкой подразумевается то, что страница, на которую она указывает - существует. |
А куда вставить ссылку? Нужно проверить определенную ссылку.
Куда вставить текст "Существует" и "Не существует" (красным цветом) :( |
drmodjo, чтобы проверить существование ссылки, это просто проверить есть ли такая на странице. А вот если "мертвая/живая" она, это только запросом к домену. Вам чего надо то?
|
Как сложно все. )
Представим сайт. На котором есть публикация по ссылке sait_publikacia1.php. Когда публикация не актуальна, то ее отключают и ссылки sait_publikacia1.php не существует. Поэтому при загрузке страницы совсем другого домена и хостинга должна проверяться данная ссылка. Если публикация существует, то ссылка тоже активна. |
Цитата:
То есть, если правильно понимать выше написанное, то страницу некоего домена загружает другой домен, и эта страница содержит битые ссылки? Если да, то браузер запрещает доступ к содержимому с другого домена, если домен источник этого содержимого не дает на это добро. |
Меня не интересует политика поисковых систем и рейтинг ресурса. Это специфический проект. Просто помогите это реализовать. Я не сразу сюда написал. Два дня помучался и не получилось. Просто знаний не хватает.
По поводу так не сработает не согласен. Скажу что на PHP все работает, но не подходит. Уже даже не знаю куда подробнее описать, задачу. Вроде даже некуда больше. Вот пример на PHP может он поможет вам определить смысл: <?PHP $content = @file_get_contents("ССЫЛКА НА РЕСУРС"); if (strpos($http_response_header[0], "200")) { echo "<h5>ЕСЛИ СУЩЕСТВУЕТ</h5>"; } else { echo "<font color=red><h5>ЕСЛИ НЕ СУЩЕСТВУЕТ</h5></font>"; } ?> |
Цитата:
На клиенте есть ограничение на доступ, о чем написано выше, поэтому нужно хотя бы вкратце понимать что значит "берется другим хостом", то есть будет ли доступ к самой странице со ссылками? А вот сами ссылки проверить, это ajax и анализировать заголовки ответа. |
Цитата:
$.get(url-прокси+url-страницы, function(html) { var html = $(html); html.find('a').each(function() { //а здесь ajax запросы по url ссылкам с анализом заголовков ответа }) }) Типа такого по сути, а если иначе "берет другой хост", то не известно как и не факт что все получится. |
Прошу прощенья. Но я все равно не понимаю, что, куда вставить. Не могли бы вы указать, куда что вставить и ajax запрос. Чтобы как шаблон было. А я бы потом просто заменил ссылки и тексты на свои.
Понимаю, что замучал вас. Но нет другого выхода у меня. |
Цитата:
1) Страница "источник", на которой нужно анализировать ссылки, уже вставлена в страницу "приемник"? Если да, то как и кем? 2) Если на первый вопрос ответ отрицательный, то что в конечном итоге должно быть, например, как предполагалось выше - получить страницу, пометить на ней ссылки и вставить в страницу? Если вставить, то во что? Вы просите конкретного, но для этого и от вас все должна быть конкретика, как техзадание для работы. А иначе можно только догадываться и предполагать. А у меня и работа есть, и извилины беспокоятся совсем не о вашей проблеме, а о своих. Пишите конкретно, что и как, народу на форуме много, ответят. |
Честно говоря уже не знаю что добавить.
1. Из описанного выше и так ясно, что сайт со скриптом анализа (источник) не имеет отношения к сайту ссылку которого надо проанализировать. 2. Из предоставленного мною скрипта видно, что анализируемая ссылка указана в коде мною. 2. Ни о каких пометках ссылок или вставлениях их куда либо речь изначальна не шла вообще. На сайте А нужен скрипт, который проверит ссылку на сайте В и если ссылка существует, то выдаст указанный заранее текст. В случае если ссылка не существует, то выдаст другой текст красного цвета. Конкретнее просто некуда. |
drmodjo, вы думаете, что из ваших ответов понятно все и я могу точно ответить на ваш? Я точно также не знаю, что во что вам нужно вставить - "я все равно не понимаю, что, куда вставить". А ваши ответы, это нечто генеральное, и я точно также ответил примерами кода "как по сути" делать нужно.
|
Благодарю за помощь.
|
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. В чем может быть проблема? |
(Не работает, в смысле ссылку считает рабочей и отображает Yes)
|
Цитата:
|
Цитата:
echo '<pre>' . print_r(get_headers(URL, 1), 1); и проанализируйте заголовки. PS. Вашей ссылке нет доверия со стороны браузера, такое же недоверие будет и со стороны РНР - проблема в сертификате, от чего функция не будет выполнена. |
Дорогой laimas, ссылку указал верно. Полный URL и соответствующий домен. Исходя из тестов скрипт не проверят ссылку после слэша. Как можно это исправить?
|
Цитата:
Opera Ваше подключение не является приватным Не удалось подтвердить, что это сервер site.ru. Его сертификат безопасности относится к home.inforos.ru. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. NET::ERR_CERT_COMMON_NAME_INVALID Firefox Предупреждение: Вероятная угроза безопасности Firefox Developer Edition обнаружил вероятную угрозу безопасности и не стал открывать site.ru. Если вы посетите этот сайт, нападавшие могут попытаться похитить вашу информацию, такую как пароли, адреса электронной почты или данные банковских карт. Другие браузеры также соблюдают меры безопасности, это же делает и РНР (вернее сказать сервер), запрашивая по безопасному протоколу, проверят сертификат. |
site. ru - это просто пример.
И данный скрипт прекрасно делает свою работу. Проблема в задержке. <?PHP $content = @file_get_contents("ССЫЛКА НА РЕСУРС"); if (strpos($http_response_header[0], "200")) { echo "<h5>ЕСЛИ СУЩЕСТВУЕТ</h5>"; } else { echo "<font color=red><h5>ЕСЛИ НЕ СУЩЕСТВУЕТ</h5></font>"; } ?> Еще раз отмечу, что ваш скрипт работает в формате site.ru, а если ссылка имеет продолжение типа site.ru/что-тотам, то он не проверят все что после слеша. А ведь весь смысл в этом. |
Сколько же вам можно повторять, что $content = @file_get_contents("ССЫЛКА НА РЕСУРС"); полнейшая хрень в контексте вашей задачи. Вам нужно только знать есть или нет, зачем вы загружаете содержимое?
echo print_r(get_headers('http://javascript.ru/forum/jquery/ams', 1), 1); Такого нет на форуме, и что вы получаете? А о времени отклика, так это будет зависеть от множества факторов, мгновенного ответа вы и не получите. |
Это я уже понял.
Прошу вас без лишних текстов, чтобы уже оставить вас в покое. :-) Напишите мною присланный скрипт в исправленном виде, полностью. Чтобы скопировать и вставить. Либо ваш скрипт, но чтобы он проверял ссылку полностью. Ибо то, что после слеша он не проверяет. И все, больше мучать вас не буду. |
Цитата:
|
Ну это же надо в совокупности с основным кодом. Который под header надо сделать так? Полностью можете код прислать?
|
Часовой пояс GMT +3, время: 03:33. |