我有一个奇怪的问题,从Apache运行cgi。我有以下cgi:
#!"C:\xampp\perl\bin\perl.exe"
use File::Basename;
use Cwd 'chdir';
$DIR=dirname($0);
chdir $DIR;
print "Content-type: text/plain; charset=iso-8859-1\n\n";
#print $DIR;
$Result = `java -classpath . CONCATARR`;
print $result;
这个cgi在命令行中运行正常,但不能从浏览器运行。从浏览器java抛出以下错误:错误:无法找到或加载主类CONCATARR
文件CONCATARR.class当然是在cgi文件夹中。当我打印目录时,它也指向cgi文件夹。
这就是问题,以不同的方式测试它我也做了一个php文件:
<html> <head> <title>Test</title> </head>
<body> <?
chdir('C:/xampp/cgi-bin');
$output = shell_exec("java -classpath . CONCATARR");
echo $output;
?> </body> </html>
具有相同的问题,从命令行运行正常但不是从浏览器运行(相同的错误)。
cgi-bin文件夹已按照手册中的建议进行配置(实际上,执行了cgi,java失败了......),cgi-bin中的所有文件和文件夹都有权读取和执行,Apache服务允许与桌面交互。
我一直试图让它工作两天并检查了几十个论坛,所以我可能已经尝试了更多我现在不记得的事情......
非常欢迎任何帮助。
配置:Windows Server 2008 R2,xammp。 (如果需要更多细节来找出解决方案,请询问)
编辑以回应第一个答案:
感谢您的回答,关于这三件事,我想我已经覆盖了他们:
1:名称正确,文件在那里,全部带有大写字母。
2:.class有一个main方法,实际上是之前在iOS系统中使用过的。该类的.java通讯员就是这样开始的:
import java.util.*;
import java.lang.*;
import java.net.URLDecoder;
class CONCATARR
{
public static void main( String args[] ) throws Exception
{
System.out.print("Content-type: text/xml\n");
System.out.print("Access-Control-Allow-Origin: *\n\n");
3:这是httpd.conf文件(关于cgi目录的部分
)ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "C:/xampp/cgi-bin">
AllowOverride None
Options None FollowSymLinks
Order allow,deny
Allow from all
</Directory>
文件和文件夹具有为所有用户阅读和执行的所有权限......
我错过了什么吗?
答案 0 :(得分:0)
它应该有用...... This (old) tutorial表明,一般方法是正确的。
您的脚本正在执行,JVM已启动,只是无法找到或加载类文件。
我想到的一些原因
cgi-bin
文件夹必须包含名为CONCATARR.class
的文件(确切拼写)CONCATARR.class
需要有效的main
方法cgi-bin
文件夹和类文件您可以尝试执行java -version
(只是为了验证,启动了正确的java)并添加-verbose
选项以获得更多输出。