Изменение на сервере Разрешает скрипт не работать. Может ли это быть из-за того, что PHP.ini отличается? - PullRequest
0 голосов
/ 20 марта 2009

Вот доказательство того, что мой сайт не является переносимым. У меня было несколько регулярных выражений, которые отлично работали на моем старом сервере. Я перенес свой сайт на новый сервер, и он не работает.

$handle = popen('/usr/bin/python '.YOUTUBEDL.'youtube-dl.py -o '.VIDEOPATH.$fileName.'.flv '.$url.' 2>&1', 'rb');

while(!feof($handle))
{
    $progress = fread($handle, 8192);
    $pattern = '/(?<percent>[0-9]{1,3}\.[0-9]{1,2})% of (?<filesize>.+) at/';
    ///######Does not execute this if - no matches
    if(preg_match_all($pattern, $progress, $matches)){
    fwrite($fh, $matches[0][0]."\r\n");
    }
}

Вывод из оболочки выглядит примерно так, и регулярное выражение должно соответствовать размеру файла и проценту.

[download]  56.8% of 4.40M at  142.40k/s ETA 00:13

Регулярное выражение работало на предыдущем сервере, но не на этом. Зачем? Как я могу отладить это?

Разница в серверах заключается в том, что предыдущим был Fedora, а теперь - Centos. Также я указал оболочку как /bin/bash.

Есть ли в PHP.ini что-нибудь, что могло бы вызвать изменения в этом?

Пожалуйста, помогите.

Обновление

Вывод $ progress выглядит так: (просто небольшой пример)

[download] 87.1% of 4.40M at 107.90k/s ETA 00:05 
[download] 89.0% of 4.40M at 107.88k/s ETA 00:04 
[download] 91.4% of 4.40M at 106.09k/s ETA 00:03 
[download] 92.9% of 4.40M at 105.55k/s ETA 00:03

Обновление 2

Может ли это регулярное выражение дать сбой из-за дополнительного интервала в выходных данных?

Также будет ли иметь значение другая оболочка?

* +1025 * [решено] * * тысяча двадцать шесть

Это было решено, и это было связано с регулярным выражением, требующим P - смотрите здесь для получения более подробной информации: Работает ли это регулярное выражение в PHP на самом деле?

Ответы [ 2 ]

1 голос
/ 20 марта 2009

Выход с рабочего или нерабочего сервера? Возможно, безопасный режим включен на втором этапе, и сценарий отказывается выполнять. Проверьте раздел Примечания на этой странице для получения дополнительной информации http://us.php.net/popen

Чтобы проверить, и я вижу комментарии, в которых вы разместили вывод команды python, выведите переменную $ progress в сценарии php. Я не уверен, что вы предоставили вывод, когда вы запустили команду python из cli или получили ее из самого скрипта php. Но если это вывод скрипта python, то переменная $ progress поможет определить, действительно ли popen () выполняет эту команду.

(Вы можете узнать, включен ли безопасный режим, запустив phpinfo () в вашем скрипте)

Или вы могли бы сделать это

if( ini_get('safe_mode') ){
    print "safe mode on\n";
}else{
    print "safe mode off\n";
}
0 голосов
/ 20 марта 2009

Я никогда не слышал о разрыве регулярных выражений при переключении конфигов PHP, поэтому мне интересно, может ли это нарушить питон. Это может быть глупый вопрос, но вы проверили, работает ли ваша строка exec с терминала?

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