無法讓 PHP 在 Apache VirtualHosting 環境中運行

無法讓 PHP 在 Apache VirtualHosting 環境中運行

嘗試在 DigitalOcean 雲端伺服器下新建的 CentOS 節點中使用 PHP 設定 Apache VirtualHosting 環境。

問題是,雖然虛擬主機本身可以工作,但 PHP 不能

伺服器設定:

  • 網路伺服器:CentOS 6.5 和 Apache/2.2.15
  • PHP 版本:5.3.3(用作 Apache 模組)

採取的步驟:

以以下身分登入用戶,

  • 安裝 Apache 和 php :yum -y install httpd php
  • 建立一個新的虛擬主機設定文件,如下所示:

文件:/etc/httpd/conf.d/vhosts.conf

NameVirtualHost *:80
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.org
     ServerAlias www.example.org
     DocumentRoot /srv/www/example.org/public_html/
     ErrorLog /srv/www/example.org/logs/error.log
     CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
  • 為虛擬主機網站建立新目錄

就像下面這樣,

mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
  • 放置一個.php.html測試文件,如下所示:

/srv/www/example.org/public_html/(DocumentRoot)下的文件

echo "<HTML>It work's</HTML>"      > /srv/www/example.org/public_html/index.html
echo "<?php echo ("It works"); ?>" > /srv/www/example.org/public_html/index.php

接下來,當我將瀏覽器指向 時index.html,它就起作用了。但當我將我的瀏覽器指向index.php空白頁面

故障排除

(我已經做過/檢查過但沒有運氣的事情)

  • 確保 Apache 正在運行並且DocumentRoot可訪問
  • 所有目錄755和文件644
  • 檢查了 Apache 訪問日誌。 html 頁面請求的狀態代碼為 200,但.php訪問日誌中沒有頁面請求
  • Apache 或 PHP 錯誤日誌中沒有錯誤,/var/log/messages
  • 嘗試新增php_admin_flag engine on虛擬主機設定檔

另請參閱下面的內容/etc/httpd/conf.d/php.conf

<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php

答案1

根據我的經驗,當 PHP 遇到嚴重的潛在錯誤時,它會呈現一個空白頁面。它通常很容易修復,但不幸的是,Apache 日誌、PHP 日誌或系統日誌中通常不會記錄任何內容,這使得故障排除過程變得困難。

使用以下命令查找 php.ini 設定檔:

php -i | grep "php.ini"

這應該會產生類似這樣的結果:

Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

使用您喜歡的文字編輯器編輯此設定檔(在本例中為 /etc/php.ini),並確保開啟顯示錯誤和啟動錯誤。這些條目應如下所示:

display_errors = On
display_startup_errors = On

最後重新啟動 Apache,以便它讀取新的 PHP 配置並透過curl 或瀏覽器存取您的頁面。這應該會產生一條錯誤訊息,這將有助於故障排除過程。

答案2

您應該做的第一件事是檢查您在 Apache 配置中設定的 Apache 錯誤日誌;複製如下:

NameVirtualHost *:80
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.org
     ServerAlias www.example.org
     DocumentRoot /srv/www/example.org/public_html/
     ErrorLog /srv/www/example.org/logs/error.log
     CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>

PHP 在 Apache 下運行,因此彈出的任何錯誤都會顯示在伺服器日誌中。我建議登入伺服器並tail像這樣使用:

tail -f -n 200 /srv/www/example.org/logs/error.log

但這是您的一般 Apache 日誌嗎?還是這是 DigitalOcean 的設定?因為那條路/srv/www/example.org/logs/看起來很奇怪。在標準 Linux 下,它會位於這樣的位置:

tail -f -n 200 /var/log/apache2/error.log

無論日誌實際發送到何處,這都將是伺服器上 PHP 和 Apache 發生或未發生情況的關鍵。

相關內容