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

问题描述 投票:1回答:2

这听起来非常简单,但我不能让它发挥作用。我有它使用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向我展示的结果中有很多猜测,但没有实际的工作示例。

windows apache cgi
2个回答
2
投票
  1. 首先检查apache mine.types,注释掉这一行。 #application/x-msdownload exe dll com bat msiapplication/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. 写你的蝙蝠文件 #!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协议。
  3. 将ur bat / cmd / exe文件放入cgi-bin目录。 现在,看看吧。
  4. 建议:阅读HTTP协议。
  5. 其他问题: 如果您在诸如curl.exe之类的ur cgi bat文件中调用其他exe,它将无法按预期工作,我不知道为什么,任何信息都将得到感谢。
  6. 是指:http://www.jlk.net/apache/debugging_cgi.shtml

-1
投票

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

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

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

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

而且我相信你也可以通过perl做类似于exec()的事情。

© www.soinside.com 2019 - 2024. All rights reserved.