php shell_exec()-ampps-对于scrapy命令,权限被拒绝

时间:2019-03-21 10:02:28

标签: php linux scrapy ampps

我有一个可抓取的蜘蛛,配置为从某些站点获取数据。我已经在php和html中开发了一个ui,以显示已抓取的数据。此数据是从运行scrapy命令时生成的json文件中提取的。 iam使用ampps运行php。 最初我的php代码如下所示

$output= shell_exec('cd /home/testuser/Desktop/scrapy_tutorial/ && scrapy crawl example -o example.json 2>&1');
print_r($output);

我得到的结果是“找不到scrapy命令”。所以我更改了代码以设置scrapy bin的完整路径

$output= shell_exec('cd /home/testuser/Desktop/scrapy_tutorial/ && /usr/local/bin/scrapy crawl example -o example.json 2>&1');
print_r($output);

现在我正在获取包含消息的输出

PermissionError: [Errno 13] Permission denied: 'example.json'

看起来抓取工具工作正常,但没有写入文件的权限。

我检查了使用

执行php脚本的用户
exec('whoami');

并输出'ampps'

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题的根源在于,PHP以对尝试存储输出的位置没有写特权的用户身份运行。

有两种简单的解决方案:

  1. 使目标位置可由用户PHP写入。

    • 每个人都可以访问该目录:

      chmod a+w /path/to/location

    • 像这样,只有组成员才能访问该目录:

      usermod -aG <group-name-of-the-location-owner> ampps

      chmod g+w /path/to/location

  2. 将输出保存到其他位置。 /tmp目录是可用于此类事情的位置。 (请确保在处理后删除文件,以防内部数据敏感)