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