PHP 7.4 не правильная работа get_headers()


Алексей Теплов
129

Сначала объясню для чего и как я использую get_headers().

У меня сайт с музыкальными клипами Ютуба. В конце кода страницы исполнителя или клипа я сделал проверку когда последний раз проверялись обновления и если прошло более 2 дней, то запускаем чекер обновлений командой get_headers($url). Почему командой get_headers(), а не инкладом? Да потому что чекер довольно долго отрабатывает, он скачивает автоплейлист исполнителя, все альбомы с композициями и постеры к ним и в конце уже создаёт новый кешь страницы. Всё хорошо работало больше года, но сегодня при попытке открыть страницу одного исполнителя, сайт «завис» секунд на 20-30! Пока не отработался чекер! Чекер с Ютубом работает через его стандартный API, но лимит на ключь доступа к API зарезали до 10к, а это очень мало, поэтому я юзаю 100 ключей… В чекере я сделал ошибку, если при запросе к Ютубу получаю 403 ошибку, то начинаю перебор ключей доступа, но тут ошибка не ключа доступа, а сам канал заблокирован, то есть 403 ошибка канала, а не ключа! Чекер через курлы перебирает всё 100 ключей доступа, но почему не отдается заголовок при этом? Как такое может быть?

Буду очень благодарен если кто ни будь подскажет как можно из файла php запустить паралельно другой файл php? Чекеру нужно передать только один параметр это id исполнителя, всю полученную инфу чекер не куда не передаёт, просто записывает в БД. Браузерные варианты не подходят, ну типа через скрипт JS или через картинку с редиректом. Чаще всего чекер запускают поисковые боты, а они не запускают JS скрипты и не грузят картинки…


LEOnidUKG

Для того, чтобы проверять 403 не нужно вам хеадер проверять. CURL уже без вас всё сделал. 

https://www.php.net/manual/ru/function.curl-getinfo.php


Алексей Теплов

Я проверяю хедер лишь с одной целью — запустить параллельно другой php файл!

А в заголовке ответа на файл cheker.php нет 403 ошибки, да я и не проверяю ответ собственно…


Алексей Теплов

Выполнив

$url=»https://site.ru/cheker.php?id=’.$id;

get_headers($url);

exit;

я запускаю файл cheker.php и не дожидаюсь окончания работы этого скрипта, он всё равно на экран не чего не выдаёт, все обновы пишет в базу, а если выполнить include_once(«cheker.php»); то пришлось бы ждать несколько секунд, а то и все 30 сек., когда скрипт отработает и только после этого получить страницу сайта.


lutskboy

паралельно запустить скрипт не дожижаясь его окончания работы можно с помощью socket или curl. 

выстави таймаут 1сек 


Алексей Теплов

1 секунда это очень много в нынешних реалиях… Обдумываю пока вариант с кроном.

Мне просто интересно, по какой причине запрос заголовка не проходит? Из за того что ли, что вызываемый скрипт запулил серию из 100 запусков курлов?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *