首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从命令行执行php和crontab时权限被拒绝

从命令行执行php和crontab时权限被拒绝
EN

Stack Overflow用户
提问于 2015-04-04 07:26:57
回答 1查看 1.5K关注 0票数 0

我试图在用户apache下创建一个cronjob,但程序访问的文件出现权限被拒绝的错误。我的php脚本无法访问的特定文件是/var/www/html/amazon/amazon_data.txt。这是我检查权限,并测试我是否可以写入文件:

代码语言:javascript
复制
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

现在,我尝试运行一个脚本,试图访问该文件,并收到以下警告:

代码语言:javascript
复制
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组中。

EN

回答 1

Stack Overflow用户

发布于 2015-04-04 11:12:44

该问题是由于所请求的文件不是文字位置。这是不起作用的代码:

代码语言:javascript
复制
$filename = "amazon_data.txt";
$file = fopen($filename, "a+") or die("Unable to open $filename!\n");

当脚本通过HTTP远程运行时,这可能工作得很好,但在终端中运行cron作业或执行时可能会出现问题。将$filename更改为完整位置修复了此问题。

代码语言:javascript
复制
$filename = dirname(__FILE__)."/"."amazon_data.txt";
$file = fopen($filename, "a+") or die("Unable to open $filename!\n");

这一切为什么要发生?我猜使用的不是php文件的文件夹,而是apache用户无权访问的目录,例如执行终端中的命令的当前工作目录。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29441036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档