【问题标题】:Shell script called from PHP does not work, but it works in command line从 PHP 调用的 Shell 脚本不起作用,但它在命令行中起作用
【发布时间】:2017-07-06 07:52:53
【问题描述】:

我想通过从 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 上的一个网页,由 php 保存在 /var/www/html/ 下。 我在aaa.html上调用php,然后上传aaa.html。之后我在 php 上执行上面的 shell 脚本。

当我在命令行(SSH 连接)中输入 'cp /var/www/html/aaa.html /home/user/test/aaa.html' 时,它可以工作并且 aaa.html 会更新,即使 django 的运行服务器是下运行。但是,当我在 shell 脚本中执行命令时,aaa.html 没有更新。

如何通过 PHP 调用的 shell 脚本更新 aaa.html? 我想如果我能杀死 runserver,aaa.html 就会被更新。 虽然从 shell 脚本调用的命令 kill 也不起作用。 有什么办法吗?

谢谢。

【问题讨论】:

  • 命令 'cp /var/www/html/aaa.html /home/user/test/bbb.html' 工作正常。

标签: php linux django shell


【解决方案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 更改/创建此文件,它属于您的用户,而不是使用网络服务器的用户。

【讨论】:

  • 非常感谢您的快速回复!该命令在更改权限后正常工作。
  • @user8257918 如果您愿意将此问题标记为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2016-09-15
  • 2013-11-24
  • 1970-01-01
相关资源
最近更新 更多