作者i9100 (i9100)
看板PHP
標題Re: [請益] 執行PHP出現"伺服器錯誤",其可能的原因?
時間Wed Jul 24 14:16:06 2013
※ 引述《dudeboy (微瓦弟)》之銘言:
: 各位前輩大家好,雖然題目有點籠統,大致上是這樣的。
:
: 我在「網樂通」上面架站,安裝了php,mysql,httpd伺服器了。
: 資料庫可以用navicat premium連上,而丟一個簡單的php語法,網頁也可以呈現。
: 所以我覺得三個程式應該都是OK的。
:
: 可是我想要執行phpmyadmin,joomla這些東西的時候,點入他們的index.php
: 都沒有出現安裝導引頁,而出現「伺服器錯誤」,錯誤代碼:500
:
: 嘗試把權限改成777也一樣,不知道跟php.ini有沒有關係...
: 因為網樂通是linux系統,以前用win系統架sever都沒問題。
: 所以我也不太知道問題會出在哪。
: 故請前輩們幫忙想想。
:
:
: 都不是欸,是Busybox內建的http服務,見 http://ppt.cc/8IAM
: 也試過lighttpd,但是都一樣開不起來。
: 有看過log,可是看不出個所以然,見 http://ppt.cc/AnA8
:
500, Internal Server Error.
通常(只會)發生在 CGI, 舉凡 CGI程式語法錯誤(直譯式語言),沒有傳回正確的http header,
無執行權限等。
基本上,http server 非設定 CGI 權限的目錄是不會發生這種錯誤
例如,我寫個 CGI 程式放到 /usr/local/www/cgi-bin/ 下面
1. http server 需增加 CGI 目錄設定 (略)
2. chmod +x /usr/local/www/cgi-bin/ ===> 沒做會有 500 錯誤
3. 假設我的程式語言是 perl , 名字叫做 printenv
檔案內容
#!/usr/local/bin/perl
print "Content-type: text/plain; charset=iso-8859-1\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}
假設
3-1. 檔案無執行權限 ===> 500 錯誤
3-2. 第一行路徑錯誤 ===> 500 錯誤
3-3. 少第三行 http header ===> 500錯誤
3-4. 語法錯誤 ===> 500 錯誤
遇到 500 錯誤的情況, 如果: CGI 是你需要的模式
那應該直接執行看看是否有誤,不透過網頁。如
$ cd /usr/local/www/cgi-bin (最好使用apache帳號)
$ ./printenv
先這樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.40.61
1F:→ i9100:我的意思是, php要看到500錯誤幾乎很難,應該先看看php設定 07/24 14:38
2F:→ i9100:先確定php是否以cgi執行, 是否需要以cgi執行等等 07/24 14:38
3F:推 dudeboy:您的意思是不是指,檢查php.ini中關於CGI的設定 07/24 15:02
4F:→ i9100:看來,你用 Busybox 內建的 httpd CGI模式應該是固定的 07/24 15:26
5F:→ i9100:那你應該用最後兩行設定, shell介面執行一下看看是否有錯 07/24 15:26
6F:→ i9100:前面推文有,如 # /usr/local/bin/php index.php看看是否有錯 07/24 15:27
7F:→ i9100:前面你提到,你有另外裝 lightphp server,也許你可以朝這方向 07/24 15:29
8F:→ i9100:畢竟你的php程式並不獨特,另裝其他httpd應該是可以執行的 07/24 15:29
9F:→ i9100:畢竟 CGI 的應用稍微麻煩一些.CGI活躍在1992~1998,現已少用 07/24 15:33
10F:→ i9100:和php.ini無關.你也提到,同樣程式裝在win下正常. 另外裝一個 07/24 15:35
11F:→ i9100:你熟悉的httpd server會比較好,比較快 07/24 15:35
12F:推 dudeboy:所以問題可能是出在httpd server就對了... 07/24 15:39
14F:→ i9100:用 CGI, 07/24 15:54
15F:→ i9100:直覺上,一般php網頁程式目錄,放到cgi-bin目錄 (非php cgi) 07/24 15:55
16F:→ i9100:至少要1.全加執行權限 chmod -R +x .../cgi-bin/ 07/24 15:56
17F:→ i9100:2. 每個php檔案第一行加上 #!/usr/local/bin/php 07/24 15:56
18F:→ i9100:看了 Busybox後, 你的問題應該是第二點, 不能執行是正常的 07/24 15:57
19F:→ i9100:建議你另外安裝server比較快. 07/24 15:58
20F:→ i9100:或者原則上,一般通用的php程式目錄不應該放入/cgi-bin/目錄 07/24 16:01
21F:推 dudeboy:可惜APACHE好像太肥了,不太能跑。謝謝您解答。 07/24 22:33
22F:推 a60301:你可以裝 nginx 07/25 14:58