我需要一些帮助,因为我的脚本没有创建文件。我想在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
当我直接从浏览器(http://127.0.0.1/myscript.php)
运行脚本时当我从具有root权限(su)的服务器运行脚本时:
php -q /var/www/myapplication/myscript.php>> log3.txt
log3.txt在/ var / www / myapplication文件夹
创建当我从crontab运行脚本时:
它没有创建文件(testing.txt)
为什么没有test.txt创建我从crontab运行我的脚本作为cronjob?
答案 0 :(得分:1)
您不应该直接执行操作系统命令,PHP中已经存在可用于写入和读取文件的函数和对象。同样,您不应该允许他们将文件写入/。即使您是从localhost运行它,如果您公开该服务,您也允许公共用户运行操作系统命令。
您还在评论中提到要将'whatever'的输出重定向到文件,但我仍然不明白为什么不能使用PHP提供的函数来执行此操作。
无论如何,当您通过localhost运行脚本时回答原始问题,您将通过Apache访问它,这意味着用户www-data
正在运行PHP脚本。当您通过cronjob访问它时,您从命令行调用PHP,而另一个用户正在访问该服务。
通过使用运行cronjob并使用echo exec(...)
的用户登录,您可以看到尝试写入文件时返回的错误。