Ручной запуск работает, но не cron - PullRequest
0 голосов
/ 06 декабря 2009

Возникла проблема с php-скриптом для получения заголовка URL. Он работает, когда я запускаю его вручную, но не когда я запускаю его через cron.

Погуглил, чтобы получить небольшой скрипт для получения заголовка URL:

function getTitle($url) {
    $fh = fopen($url, "r");
    $str = fread($fh, 7500);
    fclose($fh);
    $str2 = strtolower($str);
    $start = strpos($str2, "<title>")+7;
    $len   = strpos($str2, "</title>") - $start;
    if ($start == 7)
            return $url;
    return substr($str, $start, $len);
}

Затем я запускаю нижеследующее, где я ищу URL-адреса в текстах и ​​печатаю URL-адрес с заголовком:

$data = mysql_query('SELECT * FROM msgs ORDER BY id DESC LIMIT 100');
while ($rad = mysql_fetch_array($data)) {
    preg_match_all($pattern, $rad["text"], $a);
    $count = count($a[1]);
    for ($row = 0; $row < $count ; $row++) {
        echo 'URL:'.$a[1]["$row"].'<BR>';
        echo 'TITLE:'.getTitle($a[1]["$row"]).'<BR><BR>';
    }
}

Приведенный выше код находится в url.php. Когда я запускаю его вручную через браузер, он работает нормально и печатает URL с правильным названием. Однако, когда я запускаюсь как запланированное задание cron (раз в минуту), оно записывает url и url, то есть кажется, что getTitle всегда интерпретирует «$ start == 7» как истинное.

Может ли это быть связано со временем? Fopen и fread занимают много времени? Если так, как я могу это исправить.

Я видел типичную проблему cron - env. переменные, но я не понимаю, как это может повлиять на это?

Любая помощь или идеи приветствуются!

1 Ответ

2 голосов
/ 06 декабря 2009

Обычно это происходит из-за того, что у вас другая среда в вашем cron (или когда вы работаете как другой пользователь).

Когда вы запускаете его в командной строке, у вас другая среда, которую вы можете прочитать, запустив "env".

Вы можете изменить переменные, предшествующие среде, на команду, которую вы выполняете. Как:

PATH = / bin: / usr / local / bin php myprogram.php

Что-то еще, что вы должны сделать, это включить отчеты об ошибках в вашем скрипте PHP.

fopen может вернуть FALSE, например, и вы должны отлавливать такие ошибки. «$ start == 7» происходит, когда вы добавляете пустую строку к своему выражению, поэтому это может быть результатом необработанной ошибки.

Здесь может помочь запуск error_reporting (E_ALL) во время отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...