这是一件非常奇怪的事情:
$txt = '/some/dir/some/file.txt';
$content = shell_exec('cat "'.$txt.'"');
然后:
preg_match_all("![some regex]!", $content, $matches);
但是preg_match没有返回/ false因为$ content“似乎”是空的(虽然它实际上是一个txt文件正在填充一些信息:正在进行下载的wget输出)。
奇怪的是,如果我这样做:
echo $content; exit;
它完美地显示了我的txt文件的当前内容。当我F5 /刷新时,内容被准确更新并再次打印。但是preg_match仍然无法解析它......
$content = shell_exec('cat "'.$txt.'"' 2>&1);
没有做得更好。
注意:文件路径正确,chmod正确等等......
我甚至尝试了以下内容:
$content = file_get_contents(dirname(__FILE__).'/'.$txt, true);
或
$ch_txt = curl_init();
curl_setopt($ch_txt, CURLOPT_URL, dirname(__FILE__).'/'.$txt);
curl_setopt($ch_txt, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch_txt, CURLOPT_FOLLOWLOCATION, 1);
$content = curl_exec($ch_txt);
curl_close($ch_txt);
同样的行为继续!
我从未见过有趣的事。
附加信息:
正则表达式是:
preg_match_all("!([0-9A-Za-z]+)([ \.]+)([0-9]+)% ([0-9\.A-Za-z]+) ([0-9a-zA-Z]+)!", $content, $matches);
文件内容如下:
323600K .......... .......... .......... .......... .......... 49% 114K 36m48s
323650K .......... .......... .......... .......... .......... 49% 249K 36m47s
323700K .......... .......... .......... .......... .......... 49% 116K 36m47s
323750K .......... .......... .......... .......... .......... 49% 242K 36m47s
323800K .......... .......... .......... .......... .......... 49% 114K 36m46s
323850K .......... .......... .......... .......... .......... 49% 237K 36m46s
输出:
system("wget '".$file_to_download."' --load-cookies=".$directory."cookie.txt --output-document='".$directory.$new_directory."/".$output."' -P ".$directory." --output-file='".$directory.$output.".txt' -b >/dev/null 2>&1");
答案 0 :(得分:0)
preg_match_all("!([0-9A-Za-z]+)([ \.]+)([0-9]+)%([ ]+)([0-9\.A-Za-z]+) ([0-9a-zA-Z]+)!", $content, $matches);