PHP中的Exec不起作用,而从提示符运行命令时则可以正常工作


Exec in PHP doesn't work whereas the command works fine when run from the prompt

我试图在基于Windows的Apache服务器上使用tesseract执行OCR。这让我很生气。下面的命令不会产生期望的E:'zzz.txt文件:

<?php
$command = "'"C:''ocr''tesseract.exe'" '"E:''www''test''upload''proofs''src''yehia.raef.jpg'" '"E:''zzz'" 2>&1";
print $command;
exec("$command", $msg);
print_r($msg);
?>

当我运行程序时,得到的结果如下:

C:'Users'blob'Desktop>php ici.php
"C:'ocr'tesseract.exe" "E:'www'test'upload'proofs'src'yehia.raef.jpg" "E:'zzz" 2>&1
Array
(
    [0] => The filename, directory name, or volume label syntax is incorrect.
)

但是现在如果从提示符直接运行命令:

C:'Users'blob'Desktop>"C:'ocr'tesseract.exe" "E:'www'test'upload'proofs'src'yehia.raef.jpg" "E:'zzz" 2>&
Tesseract Open Source OCR Engine v3.02 with Leptonica

效果很好。请注意,这种命令完全可以与其他软件一起使用,例如ImageMagick…

帮助!

假设PHP具有所有必需的权限,在Windows上运行的PHP/5.3.0之前的PHP版本中,您需要在完整的命令周围添加一组额外的引号:

<?php
$command = "'"C:''ocr''tesseract.exe'" '"E:''www''test''upload''proofs''src''yehia.raef.jpg'" '"E:''zzz'" 2>&1";
if( PHP_OS=='WINNT' && version_compare(PHP_VERSION, '5.3.0', '<') ){
    $command = '"' . $command . '"';
}
print $command;