这听起来非常简单,但我不能让它发挥作用。我有它使用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向我展示的结果中有很多猜测,但没有实际的工作示例。
答案 0 :(得分:2)
首先检查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服务器。所以请不要管它。
写下你的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协议。
将ur bat / cmd / exe文件放入cgi-bin目录。
现在,看看吧。
建议:阅读HTTP协议。
其他问题:
如果你在你的cgi bat文件中调用其他exe文件,例如curl.exe,它将无法按预期工作,我不知道为什么,任何信息都将被感谢。
答案 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()
类似的操作。