- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Суть такова есть некий парсер который парсит ссылки с jpeg файлами, далее ссылки выдает в масив, однако не по всем ссылкам есть jpeg файлы иногда их нет вообще а иногда банальный редирект на страницу html, как по быстрому проверить наличие файла по ссылкам из масива?
пробовал так:
1. вариант проверяет долго и сервак умирает иногда не доходит до конца проверки не подошел:
2. вариант имхо не очень так как проверяет на наличие файла а не на майм работает быстрее немного чем первый но все равно ужасно медленно
подскажите как оптимизировать/ускорить, на выдаваемой странице в конце идет пейджинг может быть по странично както или рабить на пакеты буду благодарен за ваши предложения с примерами, спасибо.
Если картинки не нужно загружать - вместо file_get_contents используйте fopen ($pic_array[$i], "r"); и закрывайте файл после проверки @fclose($pic);
как оптимизировать/ускорить,
CURLOPT_TIMEOUT
на выдаваемой странице в конце идет пейджинг может быть по странично както или рабить на пакеты
Я полагаю, "пейджинг" рассчитывается не на основе напарсенного в реальном времени? Или скрипт пытается качать все "много" картинок и потом ещё на странички разбивает? Хотя, если всё это не для всегобщего обозрения (админка?), то промежуточное сохранение результатов смысла не имеет.
ivan-lev, спасибо както не подумал об этом сразу об CURLOPT_TIMEOUT, качает все наживую и выдает, кешированием сейчас занимаюсь
Ускорить можно использую мультикурл (несколько потоков),
Когда-то делал так
function s_curl($urls){
$uagent = "Opera/9.80 (Windows NT 6.1; U; MRA 5.7 (build 03755); ru) Presto/2.6.30 Version/10.63";
$cmh = curl_multi_init();
$tasks = array();
foreach ($urls as $url) {
$site = str_replace('http://', '', $url);
$site = str_replace('www.', '', $site);
$site = substr($site, 0, stripos($site,'.'));
$site = $_SERVER['DOCUMENT_ROOT'].'/'.$site.'.txt';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); // если будет редирект - непереходим
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращать результат
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращать http-заголовок
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // браузер
if (is_file($site)){
curl_setopt($ch, CURLOPT_COOKIEFILE, $site); // куки
curl_setopt($ch, CURLOPT_COOKIEJAR, $site); //
}
curl_setopt($ch, CURLOPT_REFERER, $url); // реферер
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // таймаут ожидания
$tasks[$url] = $ch; // добавляем дескриптор потока в массив заданий
curl_multi_add_handle($cmh, $ch); // добавляем дескриптор потока в мультикурл
}
$active = null;
do {
$mrc = curl_multi_exec($cmh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && ($mrc == CURLM_OK)) {
if (curl_multi_select($cmh) != -1) {
do {
$mrc = curl_multi_exec($cmh, $active);
$info = curl_multi_info_read($cmh);
if ($info['msg'] == CURLMSG_DONE) {
$ch = $info['handle'];
$url = array_search($ch, $tasks);
$tasks[$url] = curl_multi_getcontent($ch);
curl_multi_remove_handle($cmh, $ch);
curl_close($ch);
}
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
// закрываем мультикурл
curl_multi_close($cmh);
return $tasks;
}
Собственно вопрос редиректа тут тоже решен.
По поводу того что это, может не картинка - стоит проверить заголовки (CURLOPT_HEADER)
и после скачивания проверять картинку: http://habrahabr.ru/post/44610/ а то мало ли)