php shell_exec() - ampps - scrapy 命令的权限被拒绝

php shell_exec() - ampps - permission denied for scrapy command

我有一个 scrapy 蜘蛛配置为从某些站点获取数据。我在 php 和 html 中开发了一个 ui 来显示从 json 文件中提取的 data.this 数据是在 运行 scrapy 上生成的命令。 我正在为 运行 php 使用 ampps。 最初我的 php 代码如下所示

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

我得到的结果是 'scrapy command not found'。所以我更改了我的代码以设置 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'

我们将不胜感激。

问题的根源在于 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 目录是一个对此类事情有用的位置。 (一定要处理完后删除文件,以防里面的数据敏感)