⑴ 如何配置apache以fastcgi模式運行php
第一步:下載安裝的文件
1. Apache 版本 httpd-2.2.21-win32-x86-no_ssl.msi
2. mod_fcgid 版本 mod_fcgid-2.3.6-win32-x86.zip
3. MySQL 版本 mysql-5.5.19-win32.msi
4. PHP 版本 php-5.3.5-nts-Win32-VC6-x86.zip
提示:
1. 建議選擇無SSL功能的Apache版本來完成開發,我們這里使用了httpd-2.2.21-win32-x86-no_ssl.msi。
2. 建議選擇由Apache官方所提供的mod_fcgid 作為FastCGI模塊。我們這里使用目前最新版本2.3.6。 mod_fcgid官方地址
3. Windows下安裝MySQL就選擇.msi安裝包格式,我們選擇了mysql-5.5.19-win32.msi ,雙擊根據向導安裝即可,簡單方便。
4. PHP我們選擇用php-5.3.5-nts-Win32-VC6-x86.zip 這個版本。這個是nts(非線程安全)版本,是針對PHP的FastCGI安裝方式。
第二步:安裝文件
1. 在要安裝的磁碟建一個文件夾。為了以後管理方便我們在D盤的根目錄下創建一個WAMP文件夾。 D:\WAMP(WAMP是 windows+apache+mysql+php的縮寫)。
2. 在WAMP文件夾下創建一個WWW文件夾,用來存放你的PHP網站程序。D:\WAMP\WWW。
3. 安裝Apache伺服器,把Apache伺服器安裝到 D:\WAMP\Apache 文件夾。具體Apache安裝過程可以參考文檔 Apache安裝圖解。
4. 把下載的php-5.3.5-nts-Win32-VC6-x86 解壓到 D:\WAMP\PHP 文件夾。
5. 安裝MySql資料庫,把MySQL安裝到 D:\WAMP\MySQL文件夾。具體MySQL安裝過程可以參考文檔MySQL安裝圖解。
第三步:配置 Apache
首先使用文本編輯工具(推薦 EditPlus )打開 D:\WAMP\Apache\conf\httpd.conf 文件,這個文件是Apache的配置文件,下面幾步都是在修改這個文件的內容。
要注意的是修改完 httpd.conf 文件需重新啟動Apache服務,新設置才會生效。
1. 設置監聽埠
打開 httpd.conf 文件後,找到 Listen(大概在第46行),將它後面的數字改為8080,如下:
Listen 8080
這個參數用來設置Apache伺服器的監聽埠,一般默認為80。修改為8080 是為了避免和Windows 2003系統的IIS埠號沖突,如果你沒有啟用IIS,也可以使用默認的80埠號。
2. 修改網站存放目錄
我們知道Apache默認的網站存放目錄為Apache安裝目錄下的htdocs文件夾。當你更改網站存放目錄,就必須修改相應的Apache配置。
在配置文件 httpd.conf 中查找 DocumentRoot,將其修改為指向網站目錄的正確文件夾。我們這里改為
DocumentRoot "D:/WAMP/www"
同時,查找 This should be changed to whatever you set DocumentRoot to,在它下面有行 <Directoy 默認的DocumentRoot >,將其修改為你自己配置的DocumentRoot 路徑。我們這里修改為:
<Directory "D:/WAMP/www">
3. mod_fcgid 配置
我們將下載的 mod_fcgid-2.3.6-win32-x86.zip 壓縮包中的「mod_fcgid.so」文件復制到apache的「moles」目錄。
打開 httpd.conf 文件,在最後加入如下配置:
LoadMole fcgid_mole moles/mod_fcgid.so
<IfMole mod_fcgid.c>
AddHandler fcgid-script .fcgi .php
#php.ini的存放目錄
FcgidInitialEnv PHPRC "D:/WAMP/PHP"
# 設置PHP_FCGI_MAX_REQUESTS大於或等於FcgidMaxRequestsPerProcess,防止php-cgi進程在處理完所有請求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每個進程的最大請求數
FcgidMaxRequestsPerProcess 1000
#php-cgi最大的進程數
FcgidMaxProcesses 5
#最大執行時間
FcgidIOTimeout 120
FcgidIdleTimeout 120
#php-cgi的路徑
FcgidWrapper "D:/WAMP/PHP/php-cgi.exe" .php
AddType application/x-httpd-php .php
</IfMole>
修改DocumentRoot 路徑的配置為:
<Directory "D:/WAMP/WWW">
Options Indexes FollowSymLinks ExecCGI
Order allow,deny
Allow from all
AllowOverride All
</Directory>
注意:上面紅色文字部分。在option中添加一個屬性ExecCGI
4. 修改目錄首頁文件
在配置文件 httpd.conf 中查找 DirectoryIndex index.html 將其修改成:
DirectoryIndex index.html index.htm index.php
DirectoryIndex 指的是當客戶瀏覽器訪問的路徑是一個目錄時,Apache默認執行的文件。
以我們所修改的為例:當客戶瀏覽器訪問一個目錄時,Apache會去找該目錄下的index.html,如果沒有再找index.htm,還沒有再找 index.php。都找不到則默認顯示該目錄下的文件列表。參考文檔:如果防止Apache顯示文件列表
第四步:配置PHP
打開PHP安裝目錄,即D:\WAMP\PHP,我們可以看到目錄下有兩個這樣的文件 php.ini-development 和 php.ini-proction,第一個是開發使用的配置文件,第二個是生產環境的配置,因為我們是在本機做開發,所以選擇前者。將php.ini-development復制一份到同目錄下,並改名為 php.ini。這個php.ini 就是當前使用的配置文件,以下幾步都是在修改這個php.ini文件的內容。要注意的是,修改php.ini文件後需重新啟動Apache服務,新設置才會生效。
1. 指定PHP擴展庫的存放目錄
在Windows下PHP的擴展庫通常以 DLL 形式存放在PHP的ext目錄中。
使用文本工具打開php.ini文件,查找extension_dir = "ext",也就是在 On windows 下面那一行。把它前面的分號「;」去除掉,改為如下:
extension_dir = "D:/WAMP/PHP/ext"
extension_dir 表示PHP擴展庫的具體目錄,以便調用相應的DLL文件。
2. 開啟相應的擴展庫
默認情況下許多PHP的擴展庫都是關閉的,比如默認PHP不支持連接Mysql資料庫,需開啟相應的擴展庫。
這里我們開啟一些常用的擴展庫。
查找 ; Windows Extensions(大概在941行),在它的下面是extension列表。
找到如下擴展:
;extension=php_curl.dll
;extension=php_gd2.dll
;extension=php_mbstring.dll
;extension=php_exif.dll
;extension=php_mysql.dll
;extension=php_mysqli.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_odbc.dll
;extension=php_sockets.dll
;extension=php_xmlrpc.dll
;extension=php_xsl.dll
把以上extension 前面的分號 「;」 去掉。如果你希望載入其它擴展模塊,方法相同,只要去掉前面的分號即可。
提示1:重啟Apache提示 「unable to load dynamic library......php_curl.dll」,載入php_curl.dll錯誤。解決方法是拷貝 PHP 目錄下的 libeay32.dll 和 ssleay32.dll 到 windows 目錄或 windows/system32 目錄下,只要是系統 Path 環境變數里包含的路徑就可以。如果不想拷貝,你也可以直接把 PHP 路徑放到系統 Path 環境變數里。 右擊我的電腦=>屬性=>高級=>環境變數=>系統變數里有個Path,雙擊打開,把你的PHP路徑加個分號「;」再前面( ;D:\WAMP\PHP ),添加進去就OK了。重啟Apache不再提示該錯誤。
提示2:Exif 擴展是用來顯示圖片的 exif 信息的,因為該擴展需要 mbstring.dll 支持,所以必須將 extension=php_exif.dll 這一行寫到extension=php_mbstring.dll 的後面。
提示3:如果PHP自帶的擴展庫不能滿足你的需要,你可以去 pecl.php.net 查找並下載你需要的庫。windows用戶可以去 pecl4win.php.net 或者 http://downloads.php.net/pierre/ 下載已經編譯好的DLL文件,也可以去http://museum.php.net/php5/ 載PECL集合壓縮包。
提示4:很多人在找php_zip.dll,其實從php5.3開始已經集成了zip擴展,你可以用<?php phpinfo() ?> 找到zip擴展的說明。
3. 讓PHP支持短標簽
在 php.ini 配置文件查找 short_open_tag = Off (大概在266行)把它修改成:short_open_tag = On 讓其支持短標簽。
php的代碼一般包含在<?php .... ?>的標簽內,設置 short_open_tag = On 之後,可以寫成更簡潔的形式:<? .... ?>。
4. 配置PHP的Session功能
在使用session功能時,我們必須配置session文件在伺服器上的保存目錄。我們需要為session建立一個可讀寫的目錄,這個目錄最好獨立於網站目錄之外。
這里把目錄上建在了D:\WAMP\sessiontmp,然後在 php.ini 配置文件中找 ;session.save_path = "/tmp" (大概在1467行),去掉前面的分號「;」 ,改為如下:
session.save_path = "D:/WAMP/sessiontmp"
⑵ 護衛神PHP套件出現"FastCGI"等錯誤怎麼解決
錯誤一: 處理程序「FastCGI」在其模塊列表中有一個錯誤模塊「FastCgiMole」。
英文系統提示:Handler 「FastCGI」 has a bad mole 「FastCgiMole」 in its mole list。
原因分析:這個主要是沒有安裝應用程序開發功能。
解決辦法:把應用程序開發功能選擇上就可以了,PHP的CGI版本,CGI的功能是必須選擇的。
錯誤二:模塊IsapiMole通知ExecuteRequestHandler處理程序PHP-Handler錯誤代碼0x800700
或 處理程序「AboMapperCustom-5095705」在其模塊列表中有一個錯誤模塊「IsapiMole」
原因分析:沒有安裝ISAPI擴展。
解決辦法:在IIS安裝ISAPI擴展即可。
錯誤三:The FastCGI Handler was unable to process the request.
原因分析:這種多出現於PHP升級,一般是你升級前的PHP.ini存放在C:\windows\system32\php.ini
解決辦法:刪除C:\windows\system32\php.ini,並重啟IIS。
錯誤四:
解決辦法:這個可能是許可權不足導致的,在網站根目錄的上一級目錄加Users的讀許可權即可。
錯誤五:
錯誤提示:Unable to place a FastCGI process in a JobObject. Try disabling the Application Pool CPU Limit feature
原因分析:IIS開啟了程序池的CPU限制,而FastCGI模式的PHP不支持CPU限制。
解決辦法:取消程序池CPU限制,或使用ISAPI模式的PHP。
錯誤六:
安裝PHP7.0套件出現錯誤「FastCGI進程意外退出」,雙擊「php-cgi.exe」出現提示「無法啟動此程序,因為計算機中丟失 api-ms-win-crt-stdio-l1-1-0.dll。嘗試重新安裝該程序以解決此問題。」,如圖:
原因分析:出現此種情況,是因為伺服器無法安裝VC++ 2015運行庫,導致php運行環境不具備,因此出錯。
解決辦法:據分析,出現此種情況的解決辦法最好就是重裝系統,並且更換操作系統,如果還不行,建議打SP1補丁。
⑶ php5.3.2如何設置fastcgi
第一步:iis6.0環境配置,這里不多介紹
第二步:下載php5.3.2的windows壓縮版本:php-5.3.2-nts-Win32-VC9-x86.zip
1、下載地址:http://windows.php.net/download/,選擇VC9 x86 Non Thread Safe。有關PHP版本說明
2、把php-5.3.2-nts-Win32-VC9-x86.zip解壓縮到D:\PHP
3、修改PHP.ini
extension_dir = 「D:\php\ext」 指向php文件夾下放置「php_*.dll」文件的路徑
magic_quotes_gpc = On 如果是 Off,一定要打開為 On,這是防止sql攻擊的重要的一步!5.0版本已經默認 On 了
register_globals=Off 改為 register_globals=On ,使傳遞全局變數有效;
short_open_tag =Off,把off改成On ,此處一般能解決運行安裝Discuz!論壇時出現空白的問題
然後再查找以下字元串,把代碼前的分號去掉。
extension=php_mbstring.dll 這個不選的話用phpMyAdmin會出現紅色提示
extension=php_dba.dll
extension=php_dbase.dll
extension=php_filepro.dll可選
extension=php_gd2.dll支持GD庫的,一般要滴
extension=php_imap.dll 可選
extension=php_ldap.dll
extension=php_mysql.dll支持MySQL的
接下來修改了一些文件上傳以及內存使用最大限制:
memory_limit = 20M 內存容量
post_max_size = 20M 快閃記憶體容量
upload_max_filesize = 20M 附件容量
第三步:下載安裝 Microsoft FastCGI Extension for IIS 5.1 and 6.0
1、下載地址:
http://www.iis.net/download/fastcgi
http://download.microsoft.com/download/E/0/C/E0C0709A-66E5-4113-9A6C-A5F65BF6717D/fcgisetup_1.5_rtw_x86.msi
2、安裝fcgisetup_1.5_rtw_x86.msi
3、配置fcigext.ini (在%WINDIR%\system32\inetsrv 目錄里)
在fcigext.ini 末尾添加如下內容即可:
[Types]
php=PHP
[PHP]
ExePath=D:\php\php-cgi.exe (PHP目錄)
4、配置FastCGI 擴展與PHP 協同工作
右擊「網站」選擇「屬性」,
單擊「主目錄」選項,點擊「配置」按鈕,
單擊」添加「按鈕,
單擊」瀏覽「 在 %WINDIR%\system32\inetsrv 里尋找fcgiext.dll 。
在擴展名里輸入 .php ,
動作選擇」限制為「,輸入」GET,HEAD,POST「。
確認」腳本引擎「和」檢查文件是否存在「是否選擇,
如沒選中,請選中。
確認無誤後,單擊「確定」。
第四步:寫個簡單的腳步測試PHP FastCGI 是否正常工作了。
在C:\Inetpub\wwwroot 目錄創建test.php 文件,打開Test.php,填寫如下內容:<?php phpinfo(); ?>
保存Test.php,重啟IIS,然後在瀏覽器地址欄里輸入http://localhost/Test.php 看是否正確。
⑷ php以fastCGI的方式運行時文件系統許可權問題及解決方法
在IIS7.0上以FastCGI方式配置好PHP運行環境,測試可以正常運行PHP程序後,將PHP程序部署上去,導入程序原來的數據和配置信息。很快就有問題出來啦下面我們就詳細記錄下。
今天准備將一個php
demo放在IIS下運行,網站在IIS下的配置是這樣的:
應用程序池是集成模式下的.net
framework
2.0(2.0或4.0沒什麼關系,因為php以fastCGI的方式在跑),
應用程序池標識配置為IIS內置的NETWORKSERVICE,
使用的認證方式為匿名身份驗證。
打開本地的網站,訪問php頁面,
出現了500錯誤。
好吧,是許可權問題,最簡單的解決辦法是把C:的許可權設成Everyone,
並允許完全控制:
重新訪問php頁面,成功了:
上面的方法是夠簡單,但也太不安全了,平時本地搭個demo這樣做沒問題,真正上線的時候,這樣做遲早出問題的。
於是重新設置,把該目錄下的只讀許可權賦給NETWRORKSERVICE帳號再試一下
不過問題還是沒有解決,訪問的時候,出現了401錯誤
錯誤信息中包括顯示登錄用戶為匿名,檢查了網站下的身份驗證(再點擊
匿名身份驗證->編輯),原來網站默認情況下,在登錄方法為匿名時,使用的默認登錄用戶為IUSR(就是我們看到的匿名登錄用戶了)
那麼解決辦法就是:
1.
將IUSR設置為C:的讀許可權,類似之前對NETWORKSERVICE的設置。
2.
或選擇使用應用程序池標識即可。
經試驗,方法1與2都成功。
Note:NETWORKSERVICE在IIS7中隸屬於iis_iusers用戶組,之前對NETWORKSERVICE的設置也可以改為對iis_iusers的設置,同樣也可以解決問題,只是許可權被進一步放寬了而已。
以上所述就是本文的全部內容了,希望大家能夠喜歡。