在Windows Server 2003的IIS6下配置ISAPI方式的PHP,配置方法是,在IIS的“WEB服務擴充”中,添加一個新的WEB服務擴充,程式尾碼為PHP,ISAPI程式為php5isapi.dll,然後再我的電腦->屬性->進階->“環境變數”-“系統變數”中增加變數名PHPRC,數值為php.ini的路徑,在Internet資訊服務管理器中,選擇網站或應用程式的根目錄,開啟目錄屬性頁面(右鍵選擇“屬性”),再選擇“主目錄”。點擊“配置”按鈕,選擇“映射”Tab頁。點擊“添加...”,在“可執行檔”設為: c:\php\php5isapi.dll,副檔名設為.php,選擇“確認檔案是否存在”,然後“確定”儲存設定。重啟伺服器即可完成PHP的配置。
以上紅色部分不用做,因為用ISAPI配PHP,不讀系統變數(CGI方式才讀),相關使用權限設定如下:
<網頁所在檔案夾配置“IUSR_***”的讀許可權,如果要寫的就給修改許可權
PHP檔案所在檔案夾配置“NETWORK SERVICE”和“IUSR_***”的讀許可權。
php.ini檔案給“NETWORK SERVICE”讀許可權
考到SYSTEM32目錄的DLL檔案要給“IUSR_**”的讀取和運行許可權
解壓縮 PHP 二進位壓縮包到 D:\php 目錄下
然後開啟“我的電腦”->“屬性”->“進階”->“環境變數”->“系統變數”->“path”,編輯其值,在前面增加下面的路徑地
址:
;D:\php;D:\php\ext(注意前面的分號)
在用IIS整合php時,有兩種方式:ISAPI與CGI模式,這兩種方式,我們都可以看到phpinfo頁面,但是使用ISAPI模式,無法讀取環境變數,所以通過環境變數PHPRC設定的php.ini路徑無法找到。使用CGI就可以,這樣就不必把好多檔案拷到系統檔案下。
設定檔(PHP 3中是php3.ini,自PHP 4起是php.ini)在PHP啟動時被讀取。對於伺服器模組版本的PHP,僅在
web伺服器啟動時讀取一次。對於CGI和CLI版本,每次調用都會讀取。
php.ini的搜尋路徑如下(按順序):
* SAPI模組所指定的位置(Apache2中的PHPIniDir指令,CGI和CLI中的-c命令列選項,NSAPI
中的php_ini參數,THTTPD中的PHP_INI_PATH環境變數)
*HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath(Windows註冊表位置)
*PHPRC環境變數
*當前工作目錄(對於CLI)
*web伺服器目錄(對於SAPI模組)或PHP所在目錄(Windows下其它情況)
*Windows目錄(C:\windows或C:\winnt),或--with-config-file-path編譯時間選項指定的位置
我在Server2003+php4的環境下遇見了這個問題,解決的方法是在前面寫PATH環境變數的時候,添加一個PHPRC,指向x:\php4\php.ini,重新啟動即可,如果實在還是不行的,最後還有一招就是安裝zend,php加速器,因為安裝zend的時候,會指定php.ini的路徑,也會指定所使用的伺服器是IIS還是Apache,起本質是對註冊表做了修改,但是我不知道修改了哪個位置,所以我在上面的操作還是無效的情況下,最後安裝Zend,終於成功解決問題了。
將 php.ini-dist 或 php.ini-recommended 複製到 C:\Windows 目錄下,並改名為 php.ini
一般正式發布網站的伺服器用php.ini-recommended 安全性高
而作為調試用的伺服器用php.ini-dist 更好
當然一般情況下,這個 php.ini 還是需要根據實際情況來修改的。
下面來介紹一下幾個必要的修改選項:
複製libmysql.dll到System32目錄
extension_dir = "D:\php\ext"
這個是 PHP 擴充所放置的目錄,請確保跟你實際安裝的目錄相同。
設定正確的時區:
找到“date.timezone”設定成:date.timezone = PRC
以下操作選擇性的開啟或關閉PHP擴充
extension=php_mssql.dll
extension=php_mysql.dll
上面這些,開頭沒有加分號的是開啟的擴充,加了分號的是沒有開啟的擴充。
session.save_path = c:\sessions
這個是 session 檔案預設儲存的目錄,這個目錄必須是一個存在的目錄,不然預設的 session 功能會無效。我這裡設定的是一個 ramdisk 上的一個目錄。將 session.save_path 設定在 ramdisk 上可以加快 session 處理的速度。如果你沒有安裝 ramdisk,你可以把它指定到其他盤的任何一個目錄下,如 C:\sessions 目錄、C:\Windows\Temp 目錄等。
OK,基本工作作完了,現在該配置 IIS 了。
開啟“ Internet 資訊服務(IIS)管理器”,在“ Web 服務擴充”裡,選擇“添加一個新的 Web 服務擴充”,副檔名可填寫
“PHP ISAPI 擴充”,要求的檔案選擇:D:\php\php5isapi.dll(如果安裝的是 PHP4,則此處是 C:\php\sapi\php4isapi.dll
,下同),並設定擴充狀態為允許。
開啟“網站”->“屬性”->“ISAPI 篩選器”->“添加”,篩選器名稱可填寫“PHP”,可執行檔仍然選擇
D:\php\php5isapi.dll。
開啟“網站”->“屬性”->“主目錄”->“應用程式設定”->“配置”->“應用程式擴充”->“添加”,可執行檔還是選擇
開啟“網站”->“屬性”->“文檔”->“啟用預設內容文檔”->“添加”,可以將 index.php 添加為預設內容文檔。
然後選擇“伺服器機器名”->“所有任務”->“重新啟動 IIS”來重啟 IIS。
測試
在預設網站發布目錄下,建立一個測試頁面:
下載:phptest.php
phpinfo();
?>
如果開啟這個頁面能夠看到 php 安裝配置資訊,就算是安裝成功了。
如果想要更最佳化的執行 php 程式,可以安裝 ZendOptimizer-2.6.0-Windows-i386.exe ,這個東西安裝非常簡單,這裡就不介
紹了。
升級
現在升級就非常簡單了。只需要將新版本的 PHP 二進位壓縮包下載下來,將原來的 D:\php 目錄刪除,將新版本解壓縮到
IIS php篩選器php5isapi.dll載入失敗
原因:伺服器做了安全設定,把d:\php的everyone許可權去掉了,IIS自然沒法載入php5isapi.dll。
解決辦法:d:\php目錄加上everyone使用者 設定許可權為:唯讀就可以了
我所碰到兩個最難的地方就是:php5isapi.dll未載入和無法正常啟動MySQL,現在分享我的解決方案。
【php5isapi.dll未載入】:
IIS上設定之後,也開啟了WEB服務擴充中的“所有未知的ISAPI擴充”和“Active server pages”兩項,但回到ISAPI篩選器中寫入的php5isapi.dll要麼就是“狀態:未知”(無表徵圖),要麼就是“狀態:未啟動”(紅色向下箭頭表徵圖)。
解決辦法:
1.首先確定許可權的限制是由兩部分造成的:系統檔案許可權以及伺服器延伸權限,首先來到這個ISAPI連結庫檔案所在的地方,之後給予這個檔案EveryOne的完全控制許可權(你也可以選擇讀取+寫入+執行的許可權組合)。
2.解決伺服器延伸權限:來到IIS6.0的“伺服器擴充”設定頁面,如果你想圖省事,可以直接點擊“允許所有的未知ISAPI”的按鈕,但我並不推薦這樣做,這樣太不安全了!我們在此應當添加一個新的伺服器擴充,副檔名你可以隨便填,檔案就選擇到那個ISAPI連結庫檔案上,然後勾選“將狀態設定為允許”後,儲存。
3.為了使設定生效,請重啟系統,重啟後你的ISAPI擴充就可以正常載入了!
【無法正常啟動MySQL】
一般的原因都是以前安裝過,現在升級或者是在控制台裡卸載後重新安裝。升級的話就不提了,一般都是my.ini造成的。對新人來說最麻煩的原來沒有卸載乾淨,現在重裝mysql後造成在windows服務裡無法正常啟動項目,錯誤提示:1067。
要完全清除mysql有五個步驟:(我的系統是2003 server,請注意!)
1. 先不要急著到控制台裡卸載。cmd裡進入mysql下的bin目錄,執行mysqld-nt -remove,提示完成後關閉視窗。
2. 控制台卸載。
3. 我的作業系統是2003 server,所以windows目錄下沒有my.ini檔案,不需要手動清除,只需要把原來安裝過的路徑檔案夾刪除,記得是徹底刪除,不是移入資源回收筒。
4. cmd下執行regedit,進入註冊表,尋找關鍵字mysql,將系統硬碟記錄的部分全部刪除,當然可能有一兩個是非系統硬碟寫入項目,無所謂。按F3鍵可尋找下一個,直到全部尋找完成。(新人記得備份註冊表先!)
5. 重啟。
基本上上面五個步驟可完全清除,重新安裝完成後,在基本的MySQL Server Instance Config Wizard設定裡就能啟動服務和儲存安全設定。
這是我一個新人碰到1067錯誤後所總結出來的5點操作,可能看起來很簡單,但也許對一些同樣是新人的朋友有所協助。歡迎老鳥指教。
在2003的系統配置中,有些許可權的設定不到位會折騰很久,這裡分享一些經驗出來,方便大家參考同時也供以後自己查閱。
1、檢查目錄中的PHP.INI檔案許可權,並賦予EVERYONE讀取許可權;
2、檢查目錄中PHP5ISAPI.DLL檔案許可權,並賦予EVERYONE讀取許可權;
3、如果上邊兩步還不能解決問題,請在添加刪除程式中系統組件配置裡取消IIS的安裝,並重新安裝一次IIS,再進行PHP的ISAPI模組設定。
一。運行phpmyadmin程式提示“無法載入 mysql 擴充,請檢查 PHP 配置”的解決方案如下:
答:
沒有正確安裝Mysql資料庫,在系統服務中Mysql相關的服務沒有啟動 (請認真閱讀安裝Mysql和php的教程)
二。安裝Discuz!論壇時提示“不支援Mysql資料庫,無法安裝論壇”的解決方案如下:
答:
1,在系統的 system32(C:\windows\system32)目錄下缺少libmysql.dll檔案,解決方案是找到php目錄下的libmysql.dll,並將libmysql.dll複製到C:\windows\system32目錄中
2,在C:\windows目錄下的php.ini檔案中,沒有將“;extension=php_mysql.dll”中的前面一個“;”去掉,所以不能使用相應功能,解決方案是開啟php.ini檔案找到
;extension=php_mysql.dll
改成
extension=php_mysql.dll //去掉前面的;使之生效
3,Mysql安裝目錄正確的許可權如下:
system 完全控制
Mysql安裝目錄只需要上面兩個許可權就可以了,其他的使用者權限全部刪除
重要,還要檢查php.ini檔案的許可權,檢查複製到system32裡面的php檔案的許可權,檢查php安裝目錄檔案夾的許可權,至少要有users預設許可權;
C盤WINDOWS目錄的TEMP檔案夾至少要有USERS組修改層級許可權。
強烈建議在新裝的標準版2003系統裡面配置!先配置環境安裝程式,安裝程式成功後再做系統安全設定等!
(最後一定要重啟伺服器)
如果上述均無效,那麼:http://www.jb51.net/softs/26224.html
星外PHP5.2.11自動安裝包(非星外系統也可以安裝) ,比較快速,對於沒有對iis配置過php環境的朋友使用,這個版本是安裝在c盤的,其實自己安裝也是不錯的,一般安裝在d盤等非系統安裝盤。最新的win2003支援較好的是php5.2.12版本,雖然不是最新的也是不錯的。
phpmyadmin報錯:
Fatal error: session_start() [<a href='function.session-start'>function.session-start</a>]: Failed to initialize storage module: files (path: ) in D:\f4jgwy\jgwynet\web\pmbba\libraries\session.inc.php on line 75
解決方案有兩種如下:
1。在報錯的檔案裡的session start();之前加入如下代碼:ini_set(‘session.save_handler', ‘files'); 。這種方法適合租用空間的使用者使用。
2。在php.ini檔案裡,顯式指定session的save_path(比如 c:/tmp)然後重啟web服務。如果伺服器的系統管理權限屬於你,那還是這樣改比較方便。
即取消;session.save_path = "/tmp" 的注釋
原因分析:php5一個安全模式的bug,預設session的save_path是系統的臨時目錄,這樣會要校正許可權。
phpMyAdmin - 錯誤
無法在發生錯誤時建立會話,請檢查 PHP 或網站伺服器日誌,並正確配置 PHP 安裝。
解決方案:
1、嘗試重啟mysql服務即可解決,--無效
2、找到php5.ini檔案,查到
session.save_path = "D:\xampp\tmp"
知道session的儲存目錄,然後到d:\xampp\tmp目錄下,把所有檔案清空,
再次進入phpmyadmin,一切正常。----無效
3、開啟我的電腦——系統安裝盤(不錯的話一般都是C盤)——開啟WINDOWS檔案夾——找到Temp目錄;
右擊開啟屬性,點到安全選項,如果沒有你可以在視窗的上邊點開 工具——檔案夾選項——查看——將“使用單檔案分享權限設定(推薦)”前的勾去掉就有了---無效
4、使用phpinfo函數查看您的php安裝情況,並檢查Loaded Configuration 該項配置是否正確,如果該項顯示為none,
重啟伺服器或重啟IIS後,全部網站都處於停止狀態,無法自動啟動,需要手工啟動。
解決辦法一:
我的電腦——右鍵——管理——服務和應用程式——服務。找到:
IIS Admin Service
World Wide Web Publishing Service
修改為“自動”。
解決辦法二:
伺服器是win 2003的作業系統,IIS重啟或者伺服器重啟以後IIS裡面的網站服務居然全部停止了,讓人鬱悶了老半天,把網站一個個手動啟動了,苦苦思索不得原因,是不是與裝了SERV-U有關係呢?
若是因為按裝了SERV-U7.1.0.2得原因,如何讓網站在重啟機器後自動運行呢?經查詢得知, SERV-U7.1.0.2佔用80連接埠了,進入SERV-U7.1.0.2設定裡,關閉自動運行就可以了!
另外,在本地IIS調試網站時也經常遇到重啟IIS後預設網站都停止的情況,可以用命令netstat -anb查看,是不是80連接埠被佔用了,找到佔用80連接埠的進程,把它關閉就可以啟動預設網站了。迅雷就是預設的佔用80連接埠的。
php5isapi.dll 載入失敗。資料是錯誤的。64位windows2003與PHP5不相容?
在64位windows的IIS啟動對32位IIS的支援:
最後是1則表示啟用對32位的支援,0則表示禁用對32位的支援,當然,這個時候應該是啟動,選1。
然後重啟IIS
net start iisadmin
net start w3svc
mysql_connect() 不支援 請檢查 mysql 模組是否正確載入
查看/usr/lib/php/modules/裡面根本沒有mysql.so
找到Redhat安裝盤,找到Server目錄下的
php-mysql-5.1.6-20.el5.i386.rpm
php-pdo-5.1.6-20.el5.i386.rpm
上傳,安裝:
rpm -ivh php-pdo-5.1.6-20.el5.i386.rpm
rpm -ivh php-mysql-5.1.6-20.el5.i386.rpm
再查看so檔案:ls /usr/lib/php/modules/
dbase.so ldap.so mysqli.so mysql.so pdo_mysql.so pdo.so pdo_sqlite.so phpcups.so
附錄:
1、檢查apache,mysql,php及其各組件是否正確安裝,服務是否已啟動。
2、查看 /usr/lib/php/modules/ 下 dbase.so ldap.so mysqli.so mysql.so pdo_mysql.so
pdo.so pdo_sqlite.so phpcups.so mysql.so是否存在。
如果不存在:找到Redhat安裝盤,找到Server目錄下的
安裝:
3、在/etc/php.ini中添加
extension=mysql.so
4、重啟httpd和mysqld
phpMyAdmin安裝後訪問出現Warning: require_once(./libraries/common.inc.php)錯誤的解決辦法
安裝好PHPmyAdmin後,在IE裡訪問時會出現下面的這種錯誤:
Fatal error: require_once() [function.require]: Failed opening required './libraries/common.lib.php' (include_path='.;C:\php5\pear') in D:\php\phpMyAdmin\index.php on line 36
經過一陣調試終於發現解決方案:
原來phpMyAdmin的安裝目錄的上級目錄許可權不夠,這時給上級目錄加上IIS匿名User的“讀取和運行”許可權,再開啟phpmyadmin頁面,成功!
[注意事項]:
1、不要把phpmyadmin解壓安裝在根目錄,因為這樣匿名使用者就會擁有根目錄的許可權。