Apache + PHP 安裝日誌

來源:互聯網
上載者:User

背景:想用 drupal 弄一個論壇,其系統要求是 Apache + PHP + MySQL (推薦),又因為最近在玩Linux,所以...

機子是windows2003系統。

 

 首先:安裝 Apache (裝的是apache_2.2.11-win32-x86-openssl-0.9.8i.msi ),安裝時一路“next”。

有文章說:“安裝過程,任何目錄和檔案名稱都不要使用空格” 。不過我是裝在“D:\Program Files”,運行正常......

由於原生IIS已經佔用了80連接埠,所以為 Apache  配置了1080的連接埠(很奇怪的就是配8080竟然不行,可能是被其他程式佔用了,沒細查)。

但是,輸入:http://localhost:1080/ 後,一直沒有反映 。查看logs\error.log 如下:

[error] (OS 10038)在一個非通訊端上嘗試了一個操作。  : Child 816: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.

並且 Httpd.exe 佔用 CPU 資源很高。

  網上一些做法是:(Window下APACHE的Win32DisableAcceptEx的問題)

在httpd.conf檔案中添加 Win32DisableAcceptEx 標記,如下:
<IfModule mpm_winnt.c>
ThreadsPerChild 1000
MaxRequestsPerChild  10000
Win32DisableAcceptEx

</IfModule>

這樣可以允許並發串連更大一些。同時效能上也不會有明顯的降低.

一般,這樣設定基本就能搞定,但是我碰到的情況,就是想上面那樣關閉AcceptEx,也會出現類似問題,Apache還是不能正常運 作,error.log出項了大量的:Sat Dec 24 17:21:28 2006] [warn] (OS 64)指定的網路名稱不再可用。 : winnt_accept: Asynchronous AcceptEx failed.。又找了一下,發現了如下的一種解決辦法,我試了試,果然可以,而且在多台伺服器上試過,只要出現了AcceptEx 的問題,就能解決,具體設定為:1、網路位置->本地串連->屬性->internet協議(TCP/IP)->屬性->進階->wins標籤->去掉啟用LMhosts查詢前的勾. 2、控制面版->windows防火牆->進階標籤->本地串連設定->服務的標籤裡勾選安全Web伺服器(HTTPS)。3、然後退出Apache,再開啟啟動就可以了 ,一開始我沒有退出,直接在那重啟,就是不可以,一定要先停止,在開啟即可。

 以上是一種情況。而我的情況是:cpu佔有率降低,但還是出錯,logs\error.log 如下:

[Mon Dec 24 16:48:06 2007] [error] (OS 10038)在一個非通訊端上嘗試了一個操作。 : Too many errors in select loop. Child process exiting.
[Mon Dec 24 16:48:06 2007] [notice] Child 1916: Exit event signaled. Child process is ending.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Released the start mutex
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Waiting for 250 worker threads to exit.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: All worker threads have exited.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Child process is exiting
[Mon Dec 24 16:48:07 2007] [notice] Parent: child process exited with status 0 -- Restarting.
[Mon Dec 24 16:48:07 2007] [notice] Apache/2.0.55 (Win32) configured -- resuming normal operations
[Mon Dec 24 16:48:07 2007] [notice] Server built: Oct 9 2005 19:16:56
[Mon Dec 24 16:48:07 2007] [notice] Parent: Created child process 3028
[Mon Dec 24 16:48:07 2007] [notice] Disabled use of AcceptEx() WinSock2 API
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Child process is running
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Acquired the start mutex.
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Starting 250 worker threads.
[Mon Dec 24 16:48:08 2007] [notice] Child 3028: Listening on port 80.

 解決辦法:Apache錯誤:[error] (OS 10038)在一個非通訊端上嘗試了一個操作

cmd下

netsh winsock reset

然後重啟,並且不用設定 Win32DisableAcceptEx。

其實發生上述錯誤都是 windows 中某些軟體更改了 winsock 導致的。

另:在查詢資料時找到這個:apache2.2.11 詳細配置最佳化

 

 

 接下來是安裝 PHP (首先弄了個 PHP 5.0.0 後下來最新的 PHP 5.2.9-2 zip package) 參考了很多安裝文章。

首先,很多文章都說最好是下載解壓版的, installer 版的好像有限制的......(沒試過)。

第二,PHP解壓後,“把 php5ts.dll 放到 Windows 路徑中,最好的位置是 Windows 的 system 目錄”(某文章說)。若不行就把PHP目錄下的所有 dll 檔案都複製到c:/windows/system32/下(另一篇文章說,-_-!)。而“複製 D:\PHPServer\php5 目錄下的php5ts.dll,libmysql.dll 到C:\windows\system32”。(又一文章說)(@_@)。最後我是效仿這篇文章的第4點 :將 PHP 目錄添加到環境變數 Path 中(但在安裝 PHP 5.2.9-2沒設定環境變數也是可以啟動並執行,可能我還沒用用到這篇文章裡所說的 extension 吧)。安裝 phpMyAdmin 證實若用到 extension 時必須把其相應的 lib***.DLL 檔案複製到 c:/windows/system32/下,設定環境變數不起作用。譬如 extiension php_mysql.dll 需要將 php 目錄下的 libmysql.DLL 檔案複製到 c:/windows/system32/下,否則提示無法載入 MySQL extension。libmcrypt.dll 也要複製到 system32/下,否則 phpMyAdmin 會提示 Access denied for user ’(亂碼)’@’localhost’ (using password: YES)無法登入,phpMyAdmin 應該用到了 extiension php_mcrypt 加密解密。

第三,就是配置PHP了,將“php.ini-recommended”檔案複製到“c:/windows”下,更名為“php.ini”(我也是沒有複製過去的)(另,很多文章說用 php.ini-recommended 而不是 php.ini-dist ,有文章解釋說“php.ini-recommended 在對預設設定作了效能和安全上的最佳化”)。

第四,修改 php.ini :

(1)尋找“extension_dir”欄位,賦值為php解壓路徑中的ext目錄下,如"D:\php5\ext"

(2)尋找 cgi.force_redirect 字串.預設值為1.將其修改為0.並取消前面的;號

 

 用到哪些 extensions 去掉其前面的 “;” 號

extension=php_mbstring.dll(寬字元,用於支援PhpMyAdmin,避免出現字元顯示問題)
extension=php_mcrypt.dll(用於支援PhpMyAdmin)
extension=php_mysql.dll(MySql模組,開啟之後才能訪問MySql資料庫)

extension=php_mysqli.dll(MySql模組)

extension=php_curl.dll
extension=php_gd2.dll

 第五,配置Apache以支援php5:

設定php起始頁:

<IfModule dir_module>
  DirectoryIndex index.php index.html default.php default.html index.htm

</IfModule>

 可以自己增加需要的起始頁檔案名稱。注意檔案名稱之間用空格隔開,而不是用逗號。

有兩種方法使得 PHP 工作在 Windows 下的 Apache。一是使用 CGI 二進位檔案,另一是使用 Apache 模組 DLL(這種做法比較好)。

1. PHP 以 CGI 方式安裝到 Apache

將如下指令插入到 Apache 的 httpd.conf 設定檔中

ScriptAlias /php/ "D:/php/"
AddType application/x-httpd-php .php #(支援 php 副檔名)
Action application/x-httpd-php "/php/php-cgi.exe" #(注意是 php-cgi.exe,不是 php.exe,否則會出現如下錯誤)

 以CGI的方式安裝到 Apache時,logs\error.log 出現了以下錯誤

[error] [client 127.0.0.1] Premature end of script headers: php.exe

 原因是:php5下面裝成cgi模式調用的是php-cgi.exe 不是php.exe。

 2. PHP 以模組方式安裝到 Apache

找到 #LoadModule ssl_module modules/mod_ssl.so 這行,在此行後加入

PHPIniDir "D:/php5/"

LoadModule php5_module "D:/php5/php5apache2_2.dll"

#(其中D:/php5/php5apache2_2.dll是你安裝php的相應路徑.注意不要把php5apache2_2.dll,php5apache2.dll和php5apache.dll混淆.php5apache.dll只適用於apache 版本1的.PHP5壓縮包裡的php5apache2.dll只適用於apache2.0.*版本,如果是2.2.*以上版本,必須使用php5apache2_2.dll.否則就可能會出現如下的問題)

有很多文章是 “添加 php 副檔名支援 ” 如下句的

AddType application/x-httpd-php .php #(這句是要的,不然無法識別 php 檔案)

 以模組方式安裝到 Apache時,出現錯誤:

"Cannot load C:/php/php5apache2.dll into server: The specified module could not be found."

或者:

"The requested operation has failed"

 解決辦法可參考:http://www.phpfans.net/bbs/viewthread.php?tid=857&extra=page%3D1(不過這是針對 php 5.1.* 的)

 或者:在http://snaps.php.net/index.php下載最新的開發版,用其中的php5apache2_2.dll替換(好像也是針對 php 5.1.*的)

本機 php 5.0.0 以上兩種方法都不行,至今還沒找到解決辦法(誰知道,謝謝告知) 反正都是下載了最新的 php 版本了,所以最後乾脆 用 php 5.2.9-2 了......安裝的很順利,可能是之前錯得多了。哈~

注意,如果安裝後出現You don’t have permission to access / on this server.

更改 如下

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all #Deny from all(修改這裡)
</Directory>

 由於用的是 php 5.0.0 安裝完後運行(我是以CGI方式啟動並執行)出現如下錯誤

“unable   to   load   dynamic   library   'C:\AppServ\php\extension\php_mcrypt.dll'   -找不到指定模組”

而實際上這個檔案和路徑都是正確的

解決方案:win2k下appserv啟用php_mycrypt.dll時“找不到指定模組”的問題

php_mcrypt.dll   需要   libmcrypt.dll   支援,php並不預設提供。(php 5.2.9-2 是提供的)

注意   libmcrypt.dll   有多個版本,你可通過實驗找到與你的php版本相適應的libmcrypt.dll。

最新的http://files.edin.dk/php/win32/mcrypt/163k

 

不過 php 5.0.0  要到http://files.edin.dk/php/win32/mcrypt/old/   下一個247K才行

 

 

 最後附上PHP 手冊

 

順便說說  phpMyAdmin 登入後 出現“設定檔現在需要絕密的短語密碼(blowfish_secret)”

解決辦法:從PhpMyAdmin\libraries目錄下 找到config.default.php 檔案,找到$cfg['blowfish_secret'],其值為空白或值太少,隨意添加個值就 ok 了。

另,在較早版本中 好像是設定根目錄下 config.inc.php 檔案的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.