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

时间:2013-01-11 08:25:52

标签: php command-line imagemagick exec tesseract

我正在尝试在基于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 ......

帮助!

1 个答案:

答案 0 :(得分:1)

假设PHP具有所有必需的权限,在PHP {* 3}}上运行的PHP / 5.3.0之前的版本围绕您的完整命令:

<?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;