是否可以在Windows下的apache中将批处理文件作为cgi运行?

时间:2014-08-19 16:35:29

标签: windows apache cgi

这听起来非常简单,但我不能让它发挥作用。我有它使用awk和perl,但是cmd.exe并不是设计成cgi程序所以无论我做什么,我要么让浏览器下载文件,内部服务器错误,要么我得到了当前的路径目录作为第一行。

你必须要#!在cgi的第一行,或者你得到一个内部服务器错误,但我最终得到

C:\Program Files (x86)\Apache Software Foundation\Apache2.2\cgi-bin>#!c:\windows\system32\cmd.exe /c
Content-Type: text/html

<HTML><BODY>
<PRE>Your environment variables are:
</PRE></BODY></HTML>

我尝试使用/ c,没有任何数量的排列,它总是先打印当前的工作目录,所以我不能打印出内容类型作为标题。

有人有过这样的工作吗?我看到google向我展示的结果中有很多猜测,但没有实际的工作示例。

2 个答案:

答案 0 :(得分:2)

  1. 首先检查apache mine.types,注释掉这一行。

    #application/x-msdownload exe dll com bat msi

    application/x-msdownload exe dll com bat msi

    这一行意味着:apache将exe,dll,com,bat,msi文件作为下载文件处理,而不是将其排除。 所以,如果你想在cgi中运行bat文件,你需要对它进行评论。(我想你已经这样做了,以防万一新人不知道。

    #AddHandler cgi-script .cgi .bat .ext

    正如我试过的那样,如果你把这条上面的内容注释掉,就不会有影响。我正在使用Zend的apache 2.2服务器。所以请不要管它。

  2. 写下你的bat文件

    #!c:\windows\system32\cmd.exe /c

    这种类似shell的注释无效,在bat / cmd文件的第一个,你需要写:

    @echo off

    echo Content-type: text/plain

    echo.

    上面的这一行意味着输出一个新行,如果你没有这样做,你将得到&#34;脚本标题的过早结束:xxx.bat&#34; 500 HTTP错误。

    echo ^<html^>

    &#34; ^&#34;是cmd的转义字符。

    echo ....

    ur bat不工作的原因是因为你不遵守HTTP协议。

  3. 将ur bat / cmd / exe文件放入cgi-bin目录。

    现在,看看吧。

  4. 建议:阅读HTTP协议。

  5. 其他问题:

    如果你在你的cgi bat文件中调用其他exe文件,例如curl.exe,它将无法按预期工作,我不知道为什么,任何信息都将被感谢。

  6. 表示:http://www.jlk.net/apache/debugging_cgi.shtml

答案 1 :(得分:-1)

我现在对你正在使用的方法不是100%清楚,但是......

我认为您不能将exe文件(即cmd.exe)视为CGI二进制文件(例如AddHandler cgi-script .exe),也不能直接运行.bat文件。

如果要通过Apache执行批处理文件(并在页面上显示输出),最简单的方法是通过运行使用exec(path to bat file)执行的{PHP}脚本来执行该批处理文件命令行操作并回显其输出。

除了通过URL在浏览器中执行此操作外,您还可以使用wget / curl从命令行执行此操作,或者您可以绕过Apache并直接运行PHP解释器。

我确信您也可以通过perl执行与exec()类似的操作。