【问题标题】:PHP script running at Apache and Linux doesn't create file在 Apache 和 Linux 上运行的 PHP 脚本不会创建文件
【发布时间】:2015-10-17 08:05:11
【问题描述】:

我需要一些帮助,因为我的脚本没有创建文件。我想在 cronjob 上运行这个脚本。我正在将 Debian Linux 与 PHP 和 Apache 一起使用。

我的脚本位于 /var/www/myapplication 文件夹。我想在 /var/www/myapplication/testfolder 创建/写入一个文件。

我在php脚本中使用的命令是:

echo `whoami`;
exec ('whatever >> testfolder/testing.txt');

文件夹权限:

drwxrwxrwx 2 www-data www-data 4096 Jul 27 09:55 testfolder
  1. 当我直接从浏览器运行脚本时 (http://127.0.0.1/myscript.php)

    • 它不会创建文件 (testing.txt)
    • echo whoami 说:www-data
  2. 当我从具有 root 权限 (su) 的服务器运行脚本时:

php -q /var/www/myapplication/myscript.php >>log3.txt

  • 它创建文件 (testing.txt)
  • echo whoami 说:root
  • log3.txt 在 /var/www/myapplication 文件夹中创建

    1. 当我从 crontab 运行脚本时:

              • /usr/bin/php -q /var/www/myapplication/myscript.php >>log3.txt
  • 它不会创建文件 (testing.txt)

  • echo whoami 说:root
  • log3.txt 在 /root 文件夹中创建

为什么没有创建 testing.txt 我从 crontab 作为 cronjob 运行我的脚本?

【问题讨论】:

  • 你为什么不用内置的 PHP 文件函数?
  • EM-Creations:因为我想重定向'whatever'命令输出来创建必要的文件(testing.txt)。
  • 试试shell_exec。另外,请确保 www-data 用户对该目录具有正确的写入权限。
  • EM-Creations:谢谢。我试过shell_exec,但结果是一样的:没有创建测试文件,只有log3.txt。 log3.txt 包含:root

标签: php file crontab


【解决方案1】:

您不应该直接执行操作系统命令,PHP 中已经有函数和对象可用于写入和读取文件。同样,您不应该授予他们将文件写入 / 的权限。即使您是从 localhost 运行它,如果您公开该服务,您就是允许公共用户运行操作系统命令。

您还在评论中提到要将“whatever”的输出重定向到文件,但我仍然不明白为什么您不能使用 PHP 提供的函数来执行此操作。

无论如何,当您通过 localhost 运行脚本时,要回答原始问题,您是通过 Apache 访问它,这意味着用户 www-data 正在运行 PHP 脚本。当您通过 cronjob 访问它时,您正在从命令行调用 PHP,而另一个用户正在访问该服务。

您可以通过使用运行 cronjob 的用户登录并使用 echo exec(...) 来查看尝试写入文件时返回的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2012-06-18
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多