php web端不能调用shell_exec运行linux命令(unoconv为例)

新建一个php文件(test.php)

将下面的代码进行粘贴到新建的PHP文件中

shell_exec("unoconv -f pdf test.odt");

?>

(1)在终端中执行php test.php,此时生成了test.pdf文件

(2)在web端输入链接访问test.php,发现此时test.pdf文件没有生成。这时可以有80%怀疑权限问题(且php并没有报错)

(3)进入test.php所在的目录,

将下面的代码进行粘贴到test.php文件中

print_r(shell_exec("ls"));

?>

在web端使用链接进行访问,发现可以运行的,这时有基本可以确定是权限的问题了

(4)那么错误在什么地方可以看到呢,在终端下运行下面的命令

find / -name auth.log

比如 /var/log/auth.log

(5)打开 auth.log找出问题所在可以发现报错为:www-data:user not in sudoers;............改怎么改呢

(6)本人是在虚拟机中进行测试的,现在讲讲这个解决方法

在终端下运行su root输入密码,这时你会发现不管你怎么输入密码均是错误的,那该怎么解决呢,不要急,听我慢慢讲来

在终端下输入su passwd 这时会提醒你输入密码,随便输入一个密码如:123456,回车再次确认下密码;此时的root密码为123456了

在终端下输入su root,输入刚刚设置的密码,你会发现你进入了root权限了,这时在终端下运行chmod u+w /etc/sudoers,

在终端下输入vim /etc/sudoers,修改文件,将下面的话添加到文件中

www-data ALL=(ALL) NOPASSWD: ALL;这边为啥是NOPASSWD:因为,你没有给www-data设置密码啊

在终端下分别运行chmod u-w /etc/sudoers,exit

(7)这时你再次在web使用链接运行test.php文件

shell_exec("unoconv -f pdf test.odt");

?>

哈哈:文件出来了







你可能感兴趣的:(linux)