Почему мой PHP exec () не работает при попытке вызвать функцию Python? - PullRequest
1 голос
/ 20 февраля 2012

Я пишу веб-приложение, которое будет использовать HTML для отображения формы.Затем пользователь заполняет форму, и при отправке форма отправляется в PHP.В файле PHP он настроен на вызов и команду exec () для файла Python, который будет возвращать данные.Но по какой-то причине я ничего не получаю обратно.Когда я выполняю команду в терминале, она прекрасно работает, но без ответа мы запустили веб-браузер.

HTML:

<form id ="nameForm" action="python.php" method="post" target="_blank">
     <label>First Name:</label><input type="text" id="firstName" name="firstName"><br>
     <label>Last Name:</label><input type="text" id="lastName" name="lastName"><br>
     <input type="submit" id="submitName" value="Submit">
</form>

PHP:

$firstName = $_REQUEST['firstName'];
$lastName = $_REQUEST['lastName'];

exec("/opt/http/PythonWeb/web/python pythonName.py " . $firstName . " " . $lastName, $response);

echo $response;

Python:

import sys

def main():
    firstName = sys.argv[1]
    lastName = sys.argv[2]

    output = ""

    output += "<html>\n"
    output += "  <head><title></title></head>\n"
    output += "  <body>\n"
    output += "      <p>Hi " + firstName + " " + lastName + "</p>\n"
    output += "  </body>\n"
    output += "</html>\n"

    print output

if __name__ == '__main__': main()

Пожалуйста, дайте мне несколько советов о том, что может быть не так,Я новичок в Python, но это то, что хочет начальник ... поэтому я собираюсь сделать эту работу.Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 февраля 2012

Убедитесь, что вы не остановлены в безопасном режиме .

Убедитесь, что вы не используете свои аргументы.Попробуйте:

$response = shell_exec("/opt/http/PythonWeb/web/python pythonName.py " . escapeshellarg($firstName) . " " . escapeshellarg($lastName));

echo $response;

Если проблемы все еще возникают, вы можете продолжить расследование, убедившись, что отчеты об ошибках включены, поместив это в верхней части вашего PHP-скрипта:

ini_set('display_errors', 1);
error_reporting(E_ALL);
0 голосов
/ 20 февраля 2012

Я не уверен, почему это не работает, но вы должны использовать EscapeShellArgs и, возможно, EscapeShellCmd .

Они защитят вас от любого хитрого пользовательского ввода и часто помогают убедиться, что exec действительно работает должным образом.

Кроме того, помещение строки, которую вы передаете в 'Exec', в переменную и вывод этой переменной, а затем вырезание и вставка точного вывода в оболочку часто помогает выяснить, в чем проблема.

0 голосов
/ 20 февраля 2012

В соответствии с этим http://www.php.net/manual/en/function.passthru.php, вы неправильно используете сквозной переход. Это для двоичных данных ...

Эта функция должна использоваться вместо exec () или system (), когда вывод команды Unix - это двоичные данные, которые необходимо передать обратно в браузер.

Попробуйте Exec ().

Надеюсь, я помог.

...