Мне нужно помочь здесь, потому что я сошел с ума! У меня есть PHP-скрипт, который, насколько я могу судить, работает, когда он был создан, как в браузере, так и через cron/cli. Однако это недавно перестало работать по какой-то причине, и после расследования он возвращает ошибку «Неопределенная переменная» :(PHP работает в браузере, но не cron
Итак, я просмотрел файлme.php, который называется checklogin.php, который, в свою очередь, вызывает функции .inc. php.
При запуске непосредственно из браузера скрипт выполняется из конца в конец и выполняет все действия, для которых он был создан. Однако, когда я запускаю это в cron с помощью «/ usr/bin/php /bla/cron_updateviewed.php », он возвращает сообщение об ошибке ...
PHP Примечание: Undefined переменной: матч в /bla/bla/functions.inc.php на линии 79
Что еще более раздражает для меня, у меня есть много других скриптов, все из которых запускаются из cron, вызывая одну и ту же функцию таким же образом, без ошибок.
Это мой viewedme.php ...
<?php
include_once('checklogin.inc.php');
include_once('mysqli.inc.php');
$ch = curl_init();
// more curl settings here but removed as not important
$html = striplinks($html);
?>
checklogin.inc.php называет functions.inc.php, которая включает в себя эту функцию ...
// Function to strip down to links
function striplinks($document) {
preg_match_all("'<\s*a\s.*?href\s*=\s* # find <a href=
([\"\'])? # find single or double quote
(?(1) (.*?)\\1 | ([^\s\>]+)) # if quote found, match up to next matching
# quote, otherwise match up to next space
'isx", $document, $links);
while (list($key, $val) = each($links[2])) {
if (!empty($val))
$match[] = $val;
}
while (list($key, $val) = each($links[3])) {
if (!empty($val))
$match[] = $val;
}
return $match;
}
Как я уже сказал, Viewed.php работает при доступе из браузера, но только не cron. Также важно добавить, что через браузер ничего не пропускают, как POST или GET, что помешает этому работать.
У меня есть другие скрипты, такие как checkinbox.php, который использует функцию striplinks fron cron без каких-либо проблем.
Я действительно в убыток, чтобы WTF происходит :(
Обновлено
решаемые "неопределенная переменная" вопрос, но все-таки возвращается Nill
Как было предложено регулярное выражение не было выполнено, поэтому я добавил $ match = array() в функцию перед циклами while. Это исправляет неопределенную ошибку переменной, но она все равно возвращает 0.
После настройки нескольких тестовых сценариев, которые я обнаружил при выполнении кода, хотя браузер, используются куки-файлы в curl. Однако при выполнении через cron/cli они не используются, поэтому отображается другая веб-страница.
Вот мой локон код ...
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie');
curl_setopt($ch, CURLOPT_URL, 'http://www.bla.com/');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html = curl_exec($ch);
Что-то случилось с ним, почему печенье не используются при выполнении через хрон/кли?
вы подталкиваете значения к '$ match' без инициализации (например,' $ match = []; '), вы, вероятно, получаете такое же предупреждение в браузере, но оно подавляется. тем не менее, его просто уведомление, поэтому оно не должно ломаться. – chiliNUT