У меня есть файл PHP на моем веб-сервере, который должен вызывать скрипт Python (та же папка), который записывает в файл, а затем получает его содержимое и отображает данные.
Файл PHP называется q.php
это содержит
<?php
$tmp = exec("trivia.py");
sleep(4);
$homepage = file_get_contents('./testfile.txt', true);
echo $homepage + '<p>exec ret:' + $tmp;
echo exec("whoami");
?>
Этот файл вызывает trivia.py
который записывает файл («./testfile.txt»), а затем php получает данные из файла и отображает их. Я добавил переменную, чтобы увидеть, работает ли exec, и он возвращает 0
, Сервер PHP выполняется пользователем http
,
сейчас для trivia.py
, У меня есть следующая строка в верхней части файла
#!/usr/bin/env python
и он прекрасно работает, когда я SSH на сервер. Из SSH я запускаю скрипт, и он создает файл, указанный выше, и веб-страница работает нормально. Однако, если я использовал файл PHP для его создания, он не будет работать из Интернета.
Я почти уверен, что это как-то связано с разрешениями, но я не настолько хорош в разрешениях для Linux.
ИНФОРМАЦИЯ О СИСТЕМЕ: Synology Diskstation, DSM5, PHP5, Python 2.7
РЕДАКТИРОВАТЬ:
trivia.py
В настоящее время 777 разрешений admin
владелец и группа users
При запуске файла через exec необходимо указать полный путь к файлу, не имеет значения, находится ли файл в том же каталоге.
Пожалуйста, попробуйте с этим (при условии, что файл находится в / var / www / public)
exec('/var/www/public/trivia.py');
Для пользователей Windows —
Проблема была решена здесь PHP Exec Python
Предлагаю заменить $tmp = exec("trivia.py");
для этого
$tmp = exec("C:\\Python27\\python.exe trivia.py");
// Add your python.exe route before the file
Надеюсь, что это работает!!