我尝试使用.exe文件执行计算并将输出传递给PHP。我使用C ++制作了一个Hello World .exe文件,但是我无法让PHP执行它。
如果我从CMD运行此命令,我会得到正确的输出:
C:\path\file.exe
但如果我在PHP中执行此操作,则输出为空字符串:
exec('C:\path\file.exe',$out);
var_dump($out);
但是这会显示正确的输出:
exec('ipconfig',$out);
var_dump($out);
我在Windows 7上使用WAMP。
编辑:这是C ++程序:
#include <iostream>
using namespace std;
int main() {
cout << "Hello World" << endl;
return 0;
}
答案 0 :(得分:7)
可能有所帮助的建议很少:
/
代替,它也适用于Windows。$exec = '"C:/my path/file.exe"';
$exec = '"C:/my path/file.exe" /help';
答案 1 :(得分:5)
在单引号字符串中,您仍需要转义反斜杠,以便\
获得\\
:
exec('C:\\path\\file.exe',$out);
答案 2 :(得分:2)
检查你的config / php.ini文件,exec函数可以在 disable_functions 下删除或检查行 open_basedir ,PHP可以限制访问某些目录
答案 3 :(得分:2)
使用 return_var 参数检查命令的返回值。
$return = -1;
exec('C:\path\file.exe',$out,$return);
echo "Return value: $return\n";
var_dump($out);
在你的情况下,如果它被成功执行,它应该返回0.如果找不到文件,它可能会返回1.如果我的怀疑是正确的,我认为最可能的返回值是-1073741515。 / p>
错误-1073741515(0xc0000135)是应用程序缺少DLL时返回的内容。如果您使用编译器的运行时库的DLL版本,则会发生这种情况。
当您在本地运行时,应用程序可能正常运行,您可以在其中安装DLL,但在从Web服务器运行时可能仍然会失败,这不一定会有。
如果这是问题,您需要重新编译应用程序以使用静态库,或者在Web服务器上安装必要的DLL。您没有说明您使用的是哪种编译器,但有关Visual C ++使用的DLL的更多信息,请参阅here。
答案 4 :(得分:1)
我已经复制了你的代码来测试它并且:
我第一次没有输出。
我添加了file_exists测试并获取:
Warning: file_exists(): open_basedir restriction in effect.
File(xxxxxxxxx) is not within the allowed path(s): (xxxxx:xxxx:xxxx:xxxx:xxx:xxx:)
in xxxxxx/test.php on line 4
Call Stack: 0.0004 645640 1. {main}() xxxx/test.php:0 0.0004 646016 2.
file_exists() xxxxxx/test.php:4
我将file.exe移动到test.php的同一目录并获取:
array(1) { [0]=> string(11) "Hello World" }
PHP:
<?php
$file = 'xxxxx/file.exe';
if (!file_exists($file)) echo 'File does not exists';
exec($file, $out);
var_dump($out);
?>
答案 5 :(得分:1)
这应该有效:
exec('"C:\\folder name with space\\program.exe" argument1 "argument2 with space"', $output, $return);
var_dump($output); //"Hello World"
var_dump($return); //0
答案 6 :(得分:0)
我有同样的问题。您可以创建test.bat
文件并在其中输入(fwrite()
)命令。然后执行(exec('test.bat', $out, $ret)
)该bat文件。
test.bat
包含:
C:\path\file.exe