PHP 脚本 运行 在 Apache 和 Linux 不创建文件

PHP script running at Apache and Linux doesn't create file

我需要一些帮助,因为我的脚本没有创建文件。我想在 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 没有从 crontab 创建我的 运行 我的脚本作为 cronjob?

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

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

无论如何,要回答最初的问题,当您通过本地主机 运行 脚本时,您正在通过 Apache 访问它,这意味着用户 www-data 正在 运行 宁 PHP 脚本。当您通过 cronjob 访问它时,您正在从命令行调用 PHP 并且另一个用户正在访问该服务。

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