Можете ли вы встроить код PHP в вывод сценария CGI? - PullRequest
1 голос
/ 21 мая 2010

У меня есть форма на основе CGI, с которой я работаю, и я хотел бы иметь возможность включать некоторый код PHP в сгенерированные результаты.Однако, когда я делаю это, PHP, кажется, не обрабатывается, а просто заканчивается отображением на конечной веб-странице.

Возможно ли то, что я делаю, или я что-то упускаю?1004 * Спасибо.

Ответы [ 4 ]

2 голосов
/ 21 мая 2010

Нет. PHP - это серверный язык. PHP-код должен быть выполнен на сервере. Если вы включите его в свой вывод, тогда код будет отправлен через ваше TCP-соединение в веб-браузер пользователя.

Вместо печати PHP, попробуйте вызвать исполняемый файл php, например, через system("php myscript.php").

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

2 голосов
/ 21 мая 2010

Нет, это невозможно. Однако в сценарии PHP вы можете include('http://url.to/cgi/script');, а затем указать браузеру сценарий PHP, а не сценарий CGI. Это заставит PHP открыть новое соединение с сервером, выполнить скрипт CGI, а затем проанализировать его вывод, как если бы это был скрипт PHP.

EDIT2 : Вот как вы могли бы сделать это с постданными, включая загрузку файлов:

// Edit to match your CGI URI:
$url_to_cgi = "http://{$_SERVER['SERVER_NAME']}/cgi-bin/something.cgi";

$curl = curl_init($url_to_cgi);
curl_setopt($curl,CURLOPT_POST, true);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);

// Pass POSTDATA along to the CGI script:
$postdata = $_POST;

// If we have file uploads, pass those along too:
if(is_array($_FILES)) foreach($_FILES as $key => $file)
  $post[$key] = "@{$file['tmp_name']}";

curl_setopt($curl,CURLOPT_POSTFIELDS, $postdata);

$file = tempnam('/tmp','php-curl-');
file_put_contente($file, curl_exec($curl);

include($file);

unlink($file);

Обратите внимание, что это не проверено ...

1 голос
/ 21 мая 2010

Убедитесь, что код PHP помещается на страницу до того, как он попадет на синтаксический анализатор PHP.

Я успешно использовал PHP для выполнения сценария CGI и вывода его на страницу, но вы обычно имеетеоценить возвращенный код или что-то в этом роде.

Вы можете сделать некоторую хитрость, включив скрипт CGI из PHP.Предполагая, что среда выполнения PHP примет это, и ваш сценарий вернет действительный код PHP, это должно сработать (сценарий будет запущен, а код возвращен до того, как страница будет полностью проанализирована, поэтому ваш код должен обрабатываться правильно).1006 * Может быть, есть и лучшие официальные способы справиться с этим, но они сработали для меня.

0 голосов
/ 21 мая 2010

В конце концов. В Apache2 есть нечто, называемое фильтрами. mod_ext_filter может получить выход CGI и снова передать его через PHP.

Однако я не уверен, что это то, что вы хотите. И если, как это настроить. Но просто посмотрите здесь: http://httpd.apache.org/docs/2.2/filter.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...