PHP exec() 可以在 WAMP 中工作,但不能读取图像


php exec() can work in wamp but can't read image

我想上传图像并将图像作为参数读取到我的程序中。
上传部分正常。exec() 可以在 hello.exe 上工作(只需打印"Hello world!"),但它不能在我的程序上运行(ImageAesthetic2013.exe)
这是我的代码

if ($_FILES["file"]["error"] > 0){
echo "Error: " . $_FILES["file"]["error"];
}else{
echo "File name: " . $_FILES["file"]["name"]."<br/>";
echo "File type: " . $_FILES["file"]["type"]."<br/>";
echo "File size: " . ($_FILES["file"]["size"] / 1024)." Kb<br />";
echo "temp name: " . $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
}
exec("C:''wamp''www''ImageAesthetic2013.exe C:''wamp''www''Lena.jpg",  $output,$return_var);
exec("C:''wamp''www''hello.exe", $out);
var_dump($out);
var_dump($output);
print_r($return_var);

正如 PHP 手册所指出的,

在 Windows 中,exec() 发出对 "cmd/c your_command" 的内部调用。这意味着您的命令必须遵循 cmd 强加的规则.exe其中包括完整命令周围的一组额外的引号:

http://ss64.com/nt/cmd.html

当前的PHP版本考虑到了这一点并自动添加引号,但旧版本没有。

显然,更改是在 PHP/5.3.0 中进行的,但尚未向后移植到 5.2.x,因为它是一个向后不兼容的更改。总结一下:

  • PHP/5.2 及更早版本中,您必须将完整的命令和参数括在双引号中
  • 在 PHP/5.3 及更高版本中,您不必这样做(如果这样做,您的脚本将中断)

没关系。谢谢!但这是发布构建问题。文件放入WWW文件夹可以解决问题!

相关文章: