Ответ 1
Вам необходимо передать полный путь к script, и вам также необходимо убедиться, что script читается пользователем, выполняющим веб-сервер (что означает, что каждый каталог в пути должен быть + x на веб-пользователя).
Я пытаюсь запустить программу Python с помощью PHP. Здесь код
$command = '/usr/local/bin/python script.py file';
$temp = exec($command, $output);
Это работает через командную строку, но не запускается через браузер. Я использую Apache, поэтому, возможно, ему нужны правильные привилегии? Я новичок в Linux и понятия не имею, как это сделать.
Любая помощь будет оценена!
Изменить 1:
Пытался использовать proc_open
, но ничего не происходит. Я дал полный путь к script. Сделал исполняемый файл script, но не повезло. Любые другие вещи, которые я могу попробовать на сервере? (Это CentOS 5)
Вам необходимо передать полный путь к script, и вам также необходимо убедиться, что script читается пользователем, выполняющим веб-сервер (что означает, что каждый каталог в пути должен быть + x на веб-пользователя).
Понял, что не так:
Домен был настроен как виртуальный хост, и PHP safe_mode был включен. proc_open, exec, system, passthru и т.д. не работают под safe_mode. Думаю.
Поместите script в каталог, доступный для vhost. Apache не смог получить доступ к каталогам за пределами корня документа vhost.
Спасибо за помощь!
Несколько контрольных точек
/home/abhinav/script.py
chmod +x script.py
Чтобы получить помощника CodeIgniter для запуска python script, мне пришлось помещать #!/usr/bin/python в первую строку моего python script и НЕ вызывать python из exec.
+1 для выполнения chmod + x
Мой помощник выглядит так:
<?php
function scrape($site, $key, $user_id)
{
$cmd = str_replace('system/','',BASEPATH).APPPATH."python/spider.py -u $site -k $key -i $user_id";
$resp = exec($cmd, $out);
return $out;
}
?>