你可以在CGI脚本的输出中嵌入PHP代码吗?

时间:2010-05-20 20:04:43

标签: php cgi

我正在使用基于CGI的表单,我希望能够在生成的结果中包含一些PHP代码。但是,当我这样做时,PHP似乎没有得到处理,只是最终显示在生成的网页中。

我在做什么才有可能或者我错过了什么?

感谢。

4 个答案:

答案 0 :(得分:2)

不,那是不可能的。但是,您可以在PHP脚本中include('http://url.to/cgi/script');,然后将浏览器指向PHP脚本而不是CGI脚本。这将导致PHP打开与服务器的新连接,执行CGI脚本,然后将其输出解析为PHP脚本。

EDIT2 :以下是使用postdata(包括文件上传)的方法:

// 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 :(得分:2)

没有。 PHP是一种服务器端语言。必须在服务器上执行PHP代码。如果将其包含在输出中,则代码将通过TCP连接发送到用户的Web浏览器。

尝试调用php可执行文件,而不是打印PHP,例如通过system("php myscript.php")

请注意,PHP喜欢在其输出中显示一整套HTTP标头,因此如果在CGI输出中间执行它,可能无法获得所需的信息。

答案 2 :(得分:1)

确保在PHP代码到达PHP解析器之前将其放入页面中。

我已成功使用PHP执行CGI脚本并将其输出到页面,但您通常必须评估返回的代码或其他内容。

您可以通过包含PHP的CGI脚本来做一些技巧。假设PHP运行时将接受该脚本并且您的脚本返回有效的PHP代码,那么应该执行该操作(脚本将在页面完全解析之前运行并返回代码,因此应正确处理代码)。

可能有更好的官方方式来处理它,但那些对我有用。

答案 3 :(得分:0)

最后。 Apache2有一些称为过滤器的东西。 mod_ext_filter 可能会获得CGI输出并再次通过PHP传递。

但是,我不确定这是你想要的。如果,如何配置它。 但请看这里:http://httpd.apache.org/docs/2.2/filter.html