我正在使用Linux服务器开发一个php应用程序.我的问题是执行shell_exec()来调用一些exe文件是不行的(实际上不是exe,它是一种linux可执行文件)
echo shell_exec("whoami");
我有守护进程
echo shell_exec("ls")
我有一些文件名
但
echo shell_exec("php -v")
我什么都没有,一页空白
echo shell_exec("php ....bla bla bla")
一张空白页面.
如果我输入终端(用户hu),所有这些命令都可以.我搜索谷歌几个小时,人们说,因为许可.我没有Linux的经验.在php中执行程序需要做什么?
解决方法:
Apache的用户www-data需要被授予使用sudo执行某些应用程序的权限.
>运行命令sudo visudo.实际上我们想在etc / sudoers中编辑文件.为此,通过在终端中使用sudo visudo,它复制(temp)sudoers文件进行编辑.
>在文件的末尾,添加以下ex: – 如果我们想要使用command for restart smokeping和php命令来解决你问题中的另一个动作,
www-data ALL = NOPASSWD:/etc/init.d/smokeping/restart,usr/bin/php
(这假设您希望使用超级用户运行restart和php命令
(root)privileges.And你在usr / bin / path中使用php命令)
但是,如果您希望使用每个应用程序运行
超级用户权限,然后添加以下内容而不是上面的内容.您可能不想这样做,不是所有命令,非常危险.
www-data ALL=NOPASSWD: ALL
3.编辑sudoers文件后(通过visudo我们编辑sudoers的临时文件,然后保存并退出临时文件(visudo)写入sudoers文件.(wq!)
4.就是这样,现在在xxx.phpscript.keep中以下列方式使用exec()或shell_exec,记得在php脚本中使用命令之前使用sudo.
例如: –
exec ("sudo /etc/init.d/smokeping restart 2>&1");
要么
shell_exec("sudo php -v");
因此,在您的问题中,将您希望使用的命令添加到步骤号(2.),因为我添加并更改您的php脚本.
标签:php,linux,shell,exec
来源: https://codeday.me/bug/20190809/1629370.html