我试图在用户apache下创建一个cronjob,但程序访问的文件出现权限被拒绝的错误。我的php脚本无法访问的特定文件是/var/www/html/amazon/amazon_data.txt。这是我检查权限,并测试我是否可以写入文件:
bash-3.2$ whoami
apache
bash-3.2$ ls -l /var/www/html/amazon/amazon_data.txt
-rwxrwxr-- 1 apache apache 1082 Apr 3 15:43 /var/www/html/amazon/amazon_data.txt
bash-3.2$ vi /var/www/html/amazon/amazon_data.txt现在,我尝试运行一个脚本,试图访问该文件,并收到以下警告:
bash-3.2$ /usr/bin/php /var/www/html/amazon/amazon_inventory_sync.php
PHP Warning: Module 'json' already loaded in Unknown on line 0
PHP Warning: fopen(amazon_data.txt): failed to open stream: Permission denied in /var/www/html/amazon/amazon_inventory_sync.php on line 26
Warning: fopen(amazon_data.txt): failed to open stream: Permission denied in /var/www/html/amazon/amazon_inventory_sync.php on line 26
Unable to open amazon_data.txt!bash-3.2$为什么我可以用用户访问和编辑文件,但不能在php脚本中通过命令行执行它?当我从浏览器运行脚本时没有问题。
编辑:我可以在组apache中的用户soh下很好地运行它。apache也在apache组中。
发布于 2015-04-04 11:12:44
该问题是由于所请求的文件不是文字位置。这是不起作用的代码:
$filename = "amazon_data.txt";
$file = fopen($filename, "a+") or die("Unable to open $filename!\n");当脚本通过HTTP远程运行时,这可能工作得很好,但在终端中运行cron作业或执行时可能会出现问题。将$filename更改为完整位置修复了此问题。
$filename = dirname(__FILE__)."/"."amazon_data.txt";
$file = fopen($filename, "a+") or die("Unable to open $filename!\n");这一切为什么要发生?我猜使用的不是php文件的文件夹,而是apache用户无权访问的目录,例如执行终端中的命令的当前工作目录。
https://stackoverflow.com/questions/29441036
复制相似问题