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

时间:2015-07-27 08:11:01

标签: php file crontab

我需要一些帮助,因为我的脚本没有创建文件。我想在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)的服务器运行脚本时:

  3. 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文件夹
    • 创建

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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