我最近发现CGI脚本可以用几乎任何可以打印到stdout的语言编写。我已经写了一个小的guile cgi脚本,它可以在我本地的apache安装上运行,但不能在我的共享主机上运行:
#!/usr/local/bin/guile -s
!#
(display "Content-Type: text/html")
(newline)
(newline)
(display "hi")
(newline)这是我通过ssh从我的主机上的shell运行脚本时的输出:
$ ./scheme.cgi
Content-Type: text/html
hi所以,很明显我的主机已经安装了guile。然而,当我试图在浏览器中访问这个文件时,我得到了一个"500 Internal Server Error“。当查看我的错误日志时,我看到了可怕的“脚本头过早结束”错误:
[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] (2)No such file or directory:
exec of '/home/www/vhosts/jcw.geekisp.com/cgi-bin/scheme.cgi' failed
[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] Premature end
of script headers: scheme.cgi因为我在一台共享主机上,所以使用mod_lisp或guile的fastcgi实现是不可能的。话虽如此,这里的问题可能是什么?我用python、perl、ruby和sh编写的类似的cgi脚本可以在服务器上运行,没有错误。我看到主机上安装了guile 1.8.7,但我的本地计算机使用的是最新版本。
我明白这是一个令人难以置信的小众问题,任何帮助都将不胜感激!
发布于 2010-08-22 04:21:03
您还可以编译您自己的guile副本或诸如此类的东西,并将其存储在~/bin/目录中,并让脚本指向该目录。
发布于 2010-08-18 03:52:21
我认为这个错误意味着你的web服务器进程不能访问/usr/local/bin/guile解释器。检查该文件的权限,确保它是可访问的,如果服务器在chroot中运行或在强制访问控制下,等等。当你在脚本上时,仔细检查脚本上的权限。
发布于 2010-08-19 22:19:23
事实证明,在服务器上执行ssh命令时存在的/usr/local/bin目录与通过浏览器提供和访问脚本时的/usr/local/bin目录不同。我找出了通过这个CGI脚本可用的解释器:
#!/bin/sh
echo "Content type: text/html\r\n\r\n"
echo "ls /usr/local/bin"当我通过浏览器运行此脚本时,我发现列出了mzscheme,但没有列出guile。所以,问题解决了,我使用mzscheme。
谢谢,卡尔。
https://stackoverflow.com/questions/3505430
复制相似问题