这听起来非常简单,但我不能使它工作。 我有awk和perl的工作,但cmd.exe并没有被devise成一个CGI程序,所以不pipe我做什么,我要么浏览器下载文件,内部服务器错误,要么我得到当前的path目录作为第一行。
你必须把一个#! 在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,没有任何数量的排列,它总是先打印当前的工作目录,所以我不能打印出内容types作为标题。
有人得到这个工作? 我看到很多的猜测结果谷歌显示我,但没有实际的工作示例。
首先检查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服务器。 所以就把它放在一边吧
写你的蝙蝠文件
#!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协议。
把你的bat / cmd / exe文件放到cgi-bin目录下。
现在,检查出来。
建议:阅读HTTP协议。
其他事宜:
如果你在其他的cgi bat文件中调用其他exe文件,比如curl.exe ,它将不能正常工作,我不知道为什么,任何信息都会感谢。
我现在不是100%清楚你正在使用的方法,但是…
我不认为你可以将exe文件(即cmd.exe)作为CGI二进制文件(例如, AddHandler cgi-script .exe
),也不直接运行.bat文件。
如果要通过Apache执行批处理文件(并在页面上显示输出),最简单的方法是通过运行使用exec(path to bat file)
的PHP脚本来执行该批处理文件,以执行该命令在线操作并回显其输出。
除了通过URL在浏览器中执行此操作外,还可以使用wget / curl从命令行执行此操作,也可以绕过Apache并直接运行PHP解释器。
我相信你也可以通过perl做类似于exec()
事情。