linux - 服务器更改允许脚本不起作用。这可能是因为 PHP.ini 不同吗?

标签 linux php

这是证明我的网站不可移植的证据。我有一些在我的旧服务器上完美运行的正则表达式。我现在已将我的网站转移到新服务器,但它不起作用。

$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");
    }
}

shell 的输出是这样的,正则表达式应该匹配文件大小和百分比。

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

正则表达式适用于以前的服务器,但不适用于这台服务器。为什么?我该如何调试?

服务器的不同之处在于,以前的服务器是 Fedora,现在是 Centos。我还指定了 shell 为/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

正则表达式是否会因为输出中的额外空格而失败?

另外,不同的 shell 会有所不同吗??

[已解决]

这已解决,这是由于正则表达式需要一个 P - 有关更多详细信息,请参见此处:Does this regex in PHP actually work?

最佳答案

是工作服务器还是非工作服务器的输出?第二次可能启用了安全模式,脚本拒绝执行。查看此页面上的注释部分以获取更多信息 http://us.php.net/popen

为了验证,我确实看到了放置 python 命令输出的注释,打印出 php 脚本中的 $progress 变量。我不确定您提供的输出是从 cli 运行 python 命令还是从 php 脚本本身获取的。但如果它来自 python 脚本输出,则 $progress 变量将有助于确定 popen() 是否真的在执行该命令。

(您应该能够通过在脚本中运行 phpinfo() 来判断是否启用了安全模式)

或者你可以这样做

if( ini_get('safe_mode') ){
    print "safe mode on\n";
}else{
    print "safe mode off\n";
}

关于linux - 服务器更改允许脚本不起作用。这可能是因为 PHP.ini 不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/664332/

相关文章:

python - cron python 文件在 centos 7 上不起作用

android - 如何防止 calabash-android "App did not start"错误?

php - 如何在 PHP 中创建幻方?

php - SQL INSERT 语句在不应该执行的时候执行

php - 如何将结帐页面中的文本 "place your order"更改为 "Book"?

ruby - 我的 linux 终端中的 rvm 出现错误

c - 为什么我在只读对象中收到错误消息 "assignment of member ‘readdir’”

linux - ps h -fwC 有什么作用?

php - 使用 MySQL 进行基于标签的搜索

php - 将 UNIX 时间戳转换为格式化的日期字符串