QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5041|回复: 16

帮忙看看为什么php文件放在cgi-bin里不执行?

[复制链接]
发表于 2005-4-21 11:36:36 | 显示全部楼层 |阅读模式
一个问题,希望能得到指点,谢谢先!

在FC3:apache+mysql+php上

写了test_mysql.php程序要测试mysql是否连上:

<?php
$connect = mysql_connect("localhost", "user", "passwd");
if ($connect)
{echo "OK";}
else {echo "NO"; die;}
?>

将此程序放在cgi-bin下面,改755。

在与cgi-bin平级的html目录下写test.html
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<FORM METHOD="POST" ACTION="/cgi-bin/test_mysql.php"  ENCTYPE="multipart/form-data">
         
        <div align="center">
          <input type="SUBMIT" value="test_mysql" name="SUBMIT">
          <input type="RESET" value="Reset" name="RESET">

        </div>
</FORM>
</body>
</html>

运行后出错,apache的log里说:
[Thu Apr 21 11:26:31 2005] [error] [client *] (Exec format error: exec of '/var/www/cgi-bin/test_mysql.php' failed, referer: http://IP/test.html
[Thu Apr 21 11:26:31 2005] [error] [client *] Premature end of script headers: test_mysql.php, referer: http://IP/test.html

但是把这个php文件直接放在html目录下,就可以得到OK。
此外,在cgi-bin下的perl程序都可以通过页面请求而运行。
请问为什么这个php程序不能在cgi-bin下运行呢?是不是什么地方写错了?还是apache里cgi-bin方面关于php的设置没写好?

谢谢指教!
发表于 2005-4-23 09:47:43 | 显示全部楼层
把 test_mysql.php 属性改成777,试下。还有你的cgi-bin的权限,查看下。
回复

使用道具 举报

 楼主| 发表于 2005-4-23 10:44:19 | 显示全部楼层
谢谢!我会再试试。不过这个问题我在windows下装php+apache时也同样遇到,想不到linux里也是这样,可是放在cgi-bin下的perl就可以运行,真是奇怪。还是要多谢提醒。
回复

使用道具 举报

发表于 2005-4-24 22:25:38 | 显示全部楼层
[quote:f91fc7d685="alice_alice"]帮忙看看为什么php文件放在cgi-bin里不执行?[/quote]php不是纯粹的CGI,根本不可能被“执行”。
回复

使用道具 举报

 楼主| 发表于 2005-4-25 08:41:49 | 显示全部楼层
那是我“用词不当”么,我的意思是说把一个php程序放在cgi-bin里,按放在html目录下的网页上的submit,得不到返回的结果。但是同样的程序我用perl写好,放在cgi-bin里,用同样的网页就能得到结果,我不知道是什么原因造成的,因此请教各位。如果不能用“执行”,那应该是用个什么词来说才是对的?
回复

使用道具 举报

发表于 2005-4-25 10:19:29 | 显示全部楼层
php程序没必要放cgi-bin里面的。
回复

使用道具 举报

 楼主| 发表于 2005-4-25 11:40:37 | 显示全部楼层
那你们都把php程序放在哪里呢?直接放在html目录下面吗?我放过,那样是可以得到结果的,但是是不是会不安全呢?
回复

使用道具 举报

发表于 2005-4-25 11:43:11 | 显示全部楼层
[quote:52ade92811="alice_alice"]那你们都把php程序放在哪里呢?直接放在html目录下面吗?我放过,那样是可以得到结果的,但是是不是会不安全呢?[/quote]
無語!-_-!
回复

使用道具 举报

发表于 2005-4-25 12:35:59 | 显示全部楼层
[quote:2a342c6ce3="alice_alice"]那是我“用词不当”么,我的意思是说把一个php程序放在cgi-bin里,按放在html目录下的网页上的submit,得不到返回的结果。但是同样的程序我用perl写好,放在cgi-bin里,用同样的网页就能得到结果,我不知道是什么原因造成的,因此请教各位。如果不能用“执行”,那应该是用个什么词来说才是对的?[/quote]不是用词的问题。我想是因为你还没有理解什么是CGI。

给你一个简单的判断点:

CGI 程序是可以在命令行下被SHELL(而不是被 HTTP 服务器直接执行的程序,也就是说你可以直接用 ./file_name 这种形式来运行。
于是,传统的 CGI 都是各类二进制程序。而脚本,比如 Perl ,虽然它是需要 Perl 环境才能正确执行,但是通过文件头部的“#!/usr/bin/perl”可以让 Shell 知道如何处理它。

ASP、JSP、PHP 这类“服务器端脚本”则不同,它是依赖于 HTTP 服务器模块来运行的,脱离了 HTTP 服务器就无法独立运行。
回复

使用道具 举报

 楼主| 发表于 2005-4-25 12:55:09 | 显示全部楼层
谢谢版主的指教。请不要笑我的问题有些“外行”,虽然你的那只猫晃得我头都晕了,但我想我明白我的原因了。谢谢,不多问了。
回复

使用道具 举报

发表于 2005-4-25 13:38:21 | 显示全部楼层
[quote:cced0202e8="alice_alice"]... 虽然你的那只猫晃得我头都晕了...[/quote] 猫?……

其实大家都是外行。 大概是我太懒了吧,是不是说话有点太过“简练”
回复

使用道具 举报

 楼主| 发表于 2005-4-25 13:49:46 | 显示全部楼层
不是猫,难道还是老虎不成?脑门上那个是王字吗?

“简练”不是问题,只要看得明白就成了,我想也许是我一直以来的理解有问题,所以才会有这样的问题出现,我还要再多看看。我自己并不怕被人笑,只是怕问题多了让别人觉得不耐烦,周围没什么干同样事情的朋友可以交流,所以就到这里来找找专家了。再次多谢各位的指点。
回复

使用道具 举报

发表于 2005-4-27 12:04:11 | 显示全部楼层
呵呵,版主的解答精彩。PHP文件可以另放文件夹的,名字起得复杂就行!
回复

使用道具 举报

 楼主| 发表于 2005-4-27 12:23:36 | 显示全部楼层
[quote:a9dd7b6fd8="ROOT"]名字起得复杂就行![/quote]

有这事儿?你确定这不是瞎掰?
回复

使用道具 举报

发表于 2005-5-1 01:12:59 | 显示全部楼层
我记得在apache的配置文件里有关于cgi-bin文件家的定义.要是你真的想把php放到这个目录下的话,那就要改以下了.scripalias /cgi-bin/ /.......(记不清了)不好意思.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 22:47 , Processed in 0.052354 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表