【问题标题】:Permission denied when executing php from command line, and crontab从命令行执行 php 和 crontab 时权限被拒绝
【发布时间】:2015-04-04 11:12:43
【问题描述】:

我正在尝试在用户 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 组。

【问题讨论】:

  • 脚本分配给谁?
  • 脚本分配给apache
  • 文件第 26 行发生了什么?
  • 好的,谢谢! cron 工作有效,只是不能从命令行工作,我猜这是可以接受的。我能够通过每分钟运行一次并输出日志来解决我遇到的问题,该问题仅在执行 cron 作业时出现。
  • 对于命令行,也许你已经将它作为 sudo 运行了?无论如何,很高兴它正在工作

标签: php cron centos


【解决方案1】:

问题是由于请求的文件不是文字位置。这是无效的代码:

$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 用户无权访问的目录,例如正在执行终端中的命令的当前工作目录。

【讨论】:

    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多