2012-05-02 81 views
1

我正在與一位同事一起在XAMPP中的MAC上設置本地環境,在Windows上,我的虛擬主機看起來像下面那樣。在documentroot(cgi-bin文件夾)之外運行PHP文件

當我訪問諸如http://domain.local/cgi-bin/handler.php一個URL的Web服務器正確處理PHP,但在他的,我們得到一個500服務器錯誤和消息...

The server encountered an internal error and was unable to complete your request. 

Error message: 
Premature end of script headers: 

我們試圖改變的cgi-bin的名字文件夾到別的東西,因爲我注意到在httpd.conf中有另一個別名,但這沒有效果......所以在我看來,這個問題與權限有關。

我們認爲別名設置正常,因爲訪問http://domain.local/cgi-bin/filenothere.php不存在將拋出一個404像預期的那樣,任何.html/.pl文件無法執行。

存在於在cgi-bin文件夾是權限...

rwxrwxrwx戴夫人員

,並通過用戶和組擁有....

戴夫人員

Vhost

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.domain.local 
    ServerAlias domain.local 
ServerAlias api.domain.local 

    # Indexes + Directory Root. 
    DirectoryIndex index.php 
    DocumentRoot E:/home/www/www.domain.co.uk/htdocs/ 

    # CGI Directory 
    ScriptAlias /cgi-bin/ E:/home/www/www.domain.co.uk/cgi-bin/ 
    <Location /cgi-bin> 
      Options +ExecCGI 
    </Location> 

    # Logfiles 
    ErrorLog E:/home/www/www.domain.co.uk/logs/error.log 
    CustomLog E:/home/www/www.domain.co.uk/logs/access.log combined 
</VirtualHost> 

任何想法是什麼導致這個PHP文件不被執行?

UPDATE 試圖添加一個頭來說PHP的內容是PHP的開始,現在只需輸出PHP代碼。

它彷彿在爲別名指定的路徑是可訪問的,但服務器不知道如何執行的內容,這是對HTML和PHP

+0

你確定問題不在handler.php中嗎?該文件的權限是什麼? –

+0

權限是遞歸設置的整個文件夾,試圖使其工作。 我更新了一些額外信息的問題。 – Carlton

+0

感謝您的建議傢伙,今天會看看他們,並嘗試分配這個賞金 – Carlton

回答

3

我認爲你需要爲你的cgi-bin的部分。

您的服務器可以向您顯示腳本源的事實意味着服務器至少對/ file/system/path/to/cgi-bin和IIRC的讀取權限與ScriptAlias b/c ScriptAlias預期/ file /系統/ path/to/cgi-bin由於安全原因無法訪問。我認爲您的解決方案看起來應該沿着線:

<Directory /file/system/path/to/cgi-bin> 
    Options ExecCGI 
    SetHandler cgi-script 
</Directory 
+0

剛剛選中:[apache文檔](http://httpd.apache.org/docs/2.0/mod/mod_alias.html#scriptalias)似乎同意我的回答。至少它提出了關於相同的配置指令... – user1129682

+0

感謝這似乎有助於我們遇到的問題,但是我確實將sethandler的值更改爲@A所建議的值。 R. Younce讓我更新了他的答案。 – Carlton

1

有(非常)很少需要運行PHP腳本爲給定的CGI對於Apache的PHP模塊可以直接執行它們。嘗試添加這對你的Apache配置:

<FilesMatch \.php$> 
    SetHandler application/x-httpd-php 
</FilesMatch> 

之後只需將PHP腳本到文檔根目錄網站,看看他們的工作。你會想要刪除/ cgi-bin/URL的一部分

你說你在Mac上設置XAMMP,但是你的路徑前綴有一個驅動器號(E :)。 OS X沒有像Windows這樣的驅動器盤符,這也可能導致(部分)你的問題。

0

假設PHP以安全模式運行,您可能需要「打開」cgi-bin目錄,因爲用戶(PHP)腳本的執行僅限於DocumentRoot及其子文件夾。

對於所有我知道你能做到這一點有兩種方式

1。編輯php.ini

找到包含open_basedir行。如果在行首有一個評論 - 分號 - 將其刪除。然後添加您的cgi-bin目錄。

open_basedir = "E:\home\www\www.domain.co.uk\cgi-bin\"

如果需要打開多個目錄,你可以使用分號;作爲分隔符。在基於Linux的服務器,使用冒號:

open_basedir = "E:\home\www\www.domain.co.uk\cgi-bin\;E:\home\www\www.domain.co.uk\another_dir\"

像我這樣的,你的服務器是由第三方託管的情況下,你需要第二個選項(好樣的)

2 。編輯您的虛擬主機

以下內容添加到您的虛擬主機,DocumentRoot後即:

php_admin_value open_basedir "E:\home\www\www.domain.co.uk\cgi-bin\"

同樣的規則適用於多個目錄以及上述Linux和Windows系統之間的區別。

希望幫助

+0

感謝您的迴應,不幸的是,前兩個答案的組合解決了問題,所以我沒有去嘗試上述......我看了一下PHP手冊,我可以想象,像這樣的東西也有很好的機會也解決了這個問題。 – Carlton

+0

重要的是你已經解決了你的問題:)在SafeMode爲On的情況下(這是可取的),並且你想從其他目錄運行php腳本,這與DocumentRoot不同); – Havelock

0

你知道PHP是否運行爲CGI程序或Web服務器模塊?如果你可以得到一個phpinfo()頁面(可能來自網站根目錄中的常規文件夾),你應該能夠找到它。如果您作爲網絡​​服務器模塊運行,那麼您應該在頂部附近有一個標題爲Server API的部分,該部分表示Apache 2.0 Handler(或同等)。

從這些網頁:

...看來,它可以是由於PHP運行的CGI腳本,要不然PHP和另一個CGI處理程序之間的衝突。

第三個鏈接頁面上的一張海報發現,他們類似聽起來的end of script headers問題已通過在其.htconfig/vhosts文件中刪除/註釋掉Options +ExecCGI行來解決。

可能值得通過上面的鏈接看看你的問題是否有關。