PHP - 无法执行 c++ 二进制文件?
PHP - Can't execute c++ binary files?
我正在尝试执行c++二进制文件,我使用cmake和make命令从PHP生成。如果我尝试从终端执行相同的命令,一切都很完美,但从php似乎没有发生任何事情。我检查了safe_mode,它关闭了。我已经给了所有的可执行权限使用chmod。我试过把东西放在同一个文件夹,不同的文件夹。事实上,我已经尝试了我能想到的所有可能的解决方案,但我仍然无法执行这些二进制文件。知道为什么我不能这样做吗?
任何帮助都将是非常非常感激的。
提前感谢。
使用步骤:-
if($dir !== FALSE) {
$command = "./segmentation.sh $dir->dirname >> $dir->dirname/log";
$output = $this->terminal($command);
echo $output['output'];
}
终端功能
public function terminal($command)
{
if(function_exists('system'))
{
ob_start();
system($command , $return_var);
$output = ob_get_contents();
ob_end_clean();
}
else if(function_exists('passthru'))
{
ob_start();
passthru($command , $return_var);
$output = ob_get_contents();
ob_end_clean();
}
else if(function_exists('exec'))
{
exec($command , $output , $return_var);
$output = implode("n" , $output);
}
else if(function_exists('shell_exec'))
{
$output = shell_exec($command) ;
}
else
{
$output = 'Command execution not possible on this system';
$return_var = 1;
}
return array('output' => $output , 'status' => $return_var);
}
我的shell脚本有一个正常的对二进制文件的调用,比如
/path/to/folder/binary_file $args
我尝试了echo, ls, mkdir cmd从我的shell脚本,它工作完美,只有这些二进制文件没有得到执行。
看起来你的工作目录可能和你想象的不一样。
试试这个:
$path = realpath(dirname(__FILE__) );
$cmd = $path . $command;
并尝试执行该命令(假设c++文件与您正在运行的PHP文件在同一目录下)
是MAMP造成了这个问题。
如果你像我一样使用MAMP,那么你必须再执行一件事。
进入菜单->进入文件夹->在文本框中写入"/Applications/MAMP/Library/bin/" ->按回车
查找名为" envars "的文件,并使用#注释以下行:-
DYLD_LIBRARY_PATH = "/应用程序/MAMP/图书馆/lib: $ DYLD_LIBRARY_PATH"出口DYLD_LIBRARY_PATH
现在一切都好了。
感谢这个博客-作者jonathan Hill
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- C++中读/写二进制文件
- 如何忽略某些二进制文件的执行?
- 对在不同二进制文件中创建的对象文件的依赖关系
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作