使用 SSI,我可以简单地将其包含在我的 HTML 文件中,并且 CGI 脚本的输出会显示在页面上:
<!--#include virtual="script.cgi"-->
现在我正在尝试做同样的事情,但它不是 HTML 文件,而是在 PHP 文件中。我整天都在研究这个问题,每个解决方案都给我带来了以下问题。我将列出它们,从我认为应该工作以及晦涩难懂的开始...
1) <?php include("script.cgi"); ?>
结果: 没有执行。这只是打印出 CGI 文件的全部内容,就好像它只是一个文本文件一样。
2) <?php virtual("script.cgi"); ?>
结果: Fatal error: Call to undefined function virtual() in test.php on line #
。
这让我很困扰,因为我读到的所有内容都表明这是正确的做法。我不是 PHP 专家,但怎么可能virtual
是“未定义函数”?它在官方 PHP 文档中被列为对 PHP 版本 5 有效。
3) <?php exec("script.cgi"); ?>
结果: 空白。没有什么。
4)
<?php
$fd = fopen("script.cgi", "r");
fpassthru($fd);
?>
结果: 没有执行。这只是打印出 CGI 文件的全部内容,就好像它只是一个文本文件一样。
5)<?php echo system("script.cgi"); ?>
结果: 喜忧参半。它会执行,但 CGI 脚本的“结果”会打印两次,并且前面是“Content-type: text/html”。这个我不明白。
Content-type: text/html resultresult
并通过删除echo
...
<?php system("script.cgi"); ?>
, 结果是...
Content-type: text/html result
6)<?php print("/usr/bin/perl script.cgi"); ?>
结果:没有执行。它只是打印出 print 语句 ( /usr/bin/perl script.cgi
) 之后包含的内容。(我并不感到惊讶,但论坛中有人声称这对他们有用。)
那么我需要做什么才能执行并包含 CGI 文件的结果呢?这似乎应该很容易,但我不知道还能尝试什么。
我在有权编辑htaccess
文件的 Apache/Linux 服务器 (cPanel) 上。它运行 PHP 版本 5.2.17。
是的,当我在浏览器中打开 CGI 文件时,它会执行并显示结果,因此我们知道服务器已配置为执行 CGI 文件。