php - shell_exec为什么不执行文件,但执行简单命令?

  显示原文与译文双语对照的内容
0 0

为什么我不能在 shell_exec/exec/system 函数的中遵守文件?

在php函数的命令行 和shell_exec中工作的示例:


<?php
$data = shell_exec("ls");
echo $data;
?>

在php函数的shell_exec中无法工作的示例,但将在 命令行 ( 我可以确认) 中工作:


<?php
$data = shell_exec("./c-compiled-file argv1 argv2 argv3");
echo $data;
?>

我的服务器上有什么可以做的这样可以? 我到处找,没有找到解决问题的解决方案。 编译的文件与PHP脚本位于同一目录中,它不会执行它。 如果你问,是的,我和SSH2尝试过,它仍然不会执行。

PHP也不处于安全模式,没有功能被禁用。

时间: 原作者:

0 0

从PHP执行外部命令的一些常见故障来自 shell:

  • 命令使用相对路径,但PHP是从任意位置启动的:

  • PHP和 shell 使用不同的用户凭据运行。 当PHP通过web服务器运行时,这种情况常常发生。

  • PHP和 shell 运行不同的命令。 很多人都会像 exec("foo $bar") 一样调用内容,甚至不检查 "foo $bar" 包含什么内容。

  • 未完成错误检查。 最简单的方法是捕获和打印标准输出。标准错误。状态代码,当然还有所有PHP错误消息,包括警告和通知。

  • 不允许web服务器在操作系统级别执行该命令。

    • 查看 se linux或者类似工具。
0 0

只是猜测,但是你试图执行的二进制文件可能没有适当的权限。 在 命令行 中使用 ./ 进行Prepeding强制执行,但是PHP可以能会带来安全目的。 尝试这个:


chmod +x c-compiled-file

原作者:
0 0

你希望在第二个案例中使用 system,而不是 shell_exec

系统执行外部程序并显示输出。

通过 shell 执行命令,并将完整输出作为字符串返回。

为了:

exec 只执行外部程序。

此外,你希望确保外部程序是可以执行的,并且( 尽管你已经声明了,我还是会重申) 对运行web服务器的用户具有执行权限。 你还希望确保外部程序运行的目录能够写入它的目录或者/tmp 或者你设置的任何输出目录。

最后,你应该始终使用绝对路径来执行类似于或者php之类的事情。 所以不要用 ./c-compiled-file argv1 argv2 argv3 ,而是使用 /home/username/c-compiled-file argv1 argv2 argv3 或者什么是完整的路径。

...