![](/img/trans.png)
[英]Run a .bat file from a Python CGI file with Apache Webserver
[英]Is it possible to run a batch file as a cgi in apache under windows?
这听起来非常简单,但是我无法使其正常工作。 我可以将其与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向我展示的结果中看到了很多猜测,但没有实际的工作示例。
首先检查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 ....
.bat
无法正常工作的原因是,您未遵循HTTP协议。
将您的.bat
/ .cmd
/ .exe
文件放入cgi-bin目录。
现在,检查一下。
忠告:阅读HTTP协议。
其他事宜:
如果您在cgi bat文件中调用其他.exe
(例如curl.exe) ,它将无法按预期运行,我不知道为什么,感谢您提供任何信息。
我目前尚不清楚您正在使用的方法,但...
我认为您不能将exe文件(即cmd.exe)视为CGI二进制文件(例如AddHandler cgi-script .exe
),也不能直接运行.bat文件。
如果要通过Apache执行批处理文件(并在页面上显示输出),最简单的方法是通过运行使用exec(path to bat file)
的PHP脚本来执行该批处理文件来执行命令行操作并回显其输出。
除了通过URL在浏览器中执行此操作外,还可以使用wget / curl在命令行中执行此操作,或者可以绕过Apache并直接运行PHP解释器。
而且我相信您也可以通过perl exec()
类似于exec()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.