这听起来非常简单,但我不能让它发挥作用。我有它使用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向我展示的结果中有很多猜测,但没有实际的工作示例。
#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服务器。所以不要管它。#!c:\windows\system32\cmd.exe /c
这种类似shell的注释不起作用,在bat / cmd文件的第一个,你需要写:
@echo off
echo Content-type: text/plain
echo.
上面的这一行意味着输出一个新行,如果你不这样做,你将得到“脚本标题的过早结束:xxx.bat”500 HTTP错误。
echo ^<html^>
“^”是cmd的转义字符。
echo ....
你的蝙蝠不工作的原因是因为你不遵守HTTP协议。我现在对你正在使用的方法不是100%清楚,但......
我认为您不能将exe文件(即cmd.exe)视为CGI二进制文件(例如,AddHandler cgi-script .exe
),也不能直接运行.bat文件。
如果要通过Apache执行批处理文件(并在页面上显示输出),最简单的方法是通过运行PHP脚本来执行该批处理文件,该脚本使用exec(path to bat file)
执行命令行操作并回显其输出。
除了通过URL在浏览器中执行此操作外,您还可以使用wget / curl从命令行执行此操作,或者您可以绕过Apache并直接运行PHP解释器。
而且我相信你也可以通过perl做类似于exec()
的事情。