从PHP调用的Shell脚本不起作用,但它在命令行中起作用

时间:2017-07-06 07:52:54

标签: php linux django shell

我想通过从PHP调用的shell脚本复制文件。 但是cp命令无法正常工作。

我的系统如下:  Linux:Ubuntu MATE 16.01,Apache2(端口80),django(端口8000),php(端口80)

Shell脚本是这样的:

 #!/bin/sh
 cp /var/www/html/aaa.html /home/user/test/aaa.html

aaa.html是django上的一个网页,保存在/ var / www / html /下的php中。 我在aaa.html上调用php,然后上传aaa.html。之后我在php上面执行shell脚本。

当我输入' cp /var/www/html/aaa.html /home/user/test/aaa.html'在命令行(SSH连接)中,即使django的runserver正在运行,它也可以更新并更新aaa.html。但是,当我在shell脚本中执行命令时,aaa.html不会更新。

如何通过PHP调用的shell脚本更新aaa.html? 我想如果我能杀死runserver,aaa.html会更新。 虽然从shell脚本调用的命令kill也不起作用。 无论如何都要这样做吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

通常对于这些问题,如果有更多的信息,例如给出的错误,那就太好了。 但是10次中有9次这是一个许可问题。

当您通过SSH执行此操作时,它将以您用于登录的用户身份完成。这显然有权更改此文件。

当PHP尝试执行此操作时,通常由用于Web服务器的用户完成(例如:www-data)。您需要确保此用户对该文件具有权限。

您可以使用更改文件权限的Chmod执行此操作:

chmod g+w <myfile>
adduser www-data(or the webserver user) <the group belonging to the file> 

此更改允许组写入的权限,并将用户添加到该文件所属的组。

注意:可能通过在ssh上更改/创建此文件,它属于您的用户,而不是使用Web服务器的用户。

相关问题