php shell_exec () - ampps - в команде scopy отказано в разрешении - PullRequest
1 голос
/ 21 марта 2019

У меня есть паук-скрап, настроенный на получение данных с некоторых сайтов. и я разработал пользовательский интерфейс в php и html, чтобы показать очищенные данные. эти данные извлекаются из файла json, генерируемого при запуске команды scrapy. я использую ampps для запуска php. изначально мой PHP-код выглядит следующим образом

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

и я получил результат как «команда scrapy not found». Поэтому я изменил свой код, чтобы задать полный путь к корзине scrapy

$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 Ответ

1 голос
/ 21 марта 2019

Корень проблемы в том, что 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 - это место, полезное для таких вещей. (Обязательно удалите файл после обработки, если данные внутри него являются конфиденциальными)

...