不能在PHP文件中包含/执行CGI文件

问题描述 投票:2回答:7

使用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怎么可能是一个“未定义的函数”?它的listed in the official PHP docs对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文件的结果我需要做什么?这似乎应该很容易,但我不知道还有什么可以尝试。

我在Apache / Linux服务器(cPanel)上有权编辑htaccess文件。它正在运行PHP版本5.2.17。

是的,当我在浏览器中提取CGI文件时,它会执行并显示结果,因此我们知道服务器已配置为执行CGI文件。

php parsing cgi execution
7个回答
0
投票

尝试

passthru("/usr/bin/perl /full/path/script.cgi");

0
投票
system("/usr/bin/perl /full/path/to/cgi-bin/script.cgi");

0
投票

我已经尝试了一切,似乎没有任何工作正常或根本没有。因此,对我来说,唯一的答案是它不能或不应该这样做。此外,将CGI / Perl与PHP混合可能不是最佳实践。

简单地将任何小的CGI / Perl脚本重写为PHP应该不会太困难。任何太大而无法重写,然后在整个网站上坚持使用Perl将是最好的情况。


0
投票

如何像apache2一样执行CGI会执行它?

我经常在PHP5中包装二进制CGI,没有任何问题。

您需要通过在exec()之前放置一些putenv()指令来模拟Web服务器调用,并使用带有3个给定参数的exec()(以便检查返回值为0)。

putenv()可用于建立与apache2提供CGI相同的环境 - 它也适用于传递URL参数。

如果一个人可以选择用一种语言写作总是更好 -

但是有一个场景需要接口 - 只需要创建I / O包装器。

如果你不能以这种方式成功 - 如果你用cURL调用cgi,apache2将通过调用创建所需的环境。这可能比需要的更复杂 - 更有点万不得已。

对不起,我不能提供一个例子,可能足够公平地告诉它是如何工作的。

而是寻找一种从CGI执行PHP的方法,反过来:)


0
投票
<?php
$cgi = exec_cgi("path to cgi");
$cgi->addParameter->contentType("typeofcode");
?>

0
投票

对我这样做

<?
echo "sometextadd".shell_exec( "/dirtofile/filecontaincgi.cgi  | {

#commandinssh as sed 's/.*$/&<\/TR><TD>/' | and other

}")."sometextadd";

?>

-2
投票

我从这里得到了以下解决方案,对我有用:link

为方便起见,转储代码:

    <?php
    $data = file_get_contents("http://fullpathto.cgi",0);
    echo $data;
    ?>

安装程序是在zend server + unix框上运行的C ++编译的.cgi模块

© www.soinside.com 2019 - 2024. All rights reserved.