明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

PHP.INI設(shè)置文件漫游(2)

[摘要]文章第一部分已經(jīng)帶領(lǐng)你領(lǐng)略了php.ini文件的結(jié)構(gòu),并且說(shuō)明了如何修改PHP查找路徑、差錯(cuò)處理,以及解析器的相關(guān)選項(xiàng)。第二部分將深入配置文件,內(nèi)容包括如何激活PHP擴(kuò)展選項(xiàng)、針對(duì)PHP腳本設(shè)置資源...
文章第一部分已經(jīng)帶領(lǐng)你領(lǐng)略了php.ini文件的結(jié)構(gòu),并且說(shuō)明了如何修改PHP查找路徑、差錯(cuò)處理,以及解析器的相關(guān)選項(xiàng)。第二部分將深入配置文件,內(nèi)容包括如何激活PHP擴(kuò)展選項(xiàng)、針對(duì)PHP腳本設(shè)置資源限制,以及通過(guò)PHP腳本動(dòng)態(tài)改變配置變量。

激活擴(kuò)展選項(xiàng)


PHP可以使用很多不同的擴(kuò)展選項(xiàng)。在UNIX系統(tǒng)中,擴(kuò)展選項(xiàng)需要在編譯時(shí)創(chuàng)建;而對(duì)于Windows,二進(jìn)制DLL文件將隨PHP發(fā)布而將自己包括進(jìn)去。變量extension_dir包括了PHP應(yīng)當(dāng)查看相關(guān)擴(kuò)展選項(xiàng)的目錄名。

extension_dir = "C:\Program Files\Internet Tools\Apache\bin\php4\extensions"

Windows下的PHP包括了20種不同的擴(kuò)展選項(xiàng),并且全部都列在了php.ini文件中(通過(guò)注釋)。要激活某個(gè)特定的擴(kuò)展選項(xiàng)只需要將相應(yīng)行首的分號(hào)去掉并重啟服務(wù)器就可以了。如果要禁用某個(gè)擴(kuò)展選項(xiàng)(比如在需要提升系統(tǒng)性能的情況下),只需要在行首重新添加分號(hào)。

如果擴(kuò)展選項(xiàng)沒(méi)有列在php.ini文件中,可以使用變量extension,然后將相應(yīng)DLL文件名傳遞給此變量。

extension=php_domxml.dll

extension=php_dbase.dll

設(shè)置extension-specific變量
變量extension-specific被存放在配置文件中一個(gè)單獨(dú)的區(qū)域。比如,所有同MySQL擴(kuò)展功能相關(guān)的變量都應(yīng)當(dāng)存儲(chǔ)在php.ini中的[MySQL]區(qū)域。

如果需要使用PHP的mail()函數(shù),則需要設(shè)置以下三個(gè)變量。當(dāng)通過(guò)PHP mail()函數(shù)發(fā)送電子郵件信息時(shí)需要使用SMTP以及變量sendmail_from(Windows系統(tǒng))或變量sendmail_path(UNIX系統(tǒng))。對(duì)于Windows,這些變量設(shè)置了所用到的SMTP服務(wù)器以及顯示在電子郵件信息中的“From:”地址;而對(duì)于UNIX,變量sendmail_path則對(duì)郵件傳輸設(shè)置了MTA(郵件傳輸代理,mail transfer agent)的路徑。

SMTP = myserver.localnet.com

sendmail_from = me@localhost.com

sendmail_path = /usr/sbin/sendmail

變量java.class.path、java.home、java.library以及java.library.path全部用來(lái)設(shè)置查找Java類(lèi)以及庫(kù)的路徑。這些值將被Java擴(kuò)展所使用,所以如果希望PHP能正確的同Java程序進(jìn)行集成,則必須確保這些變量被正確的設(shè)置。

java.class.path = .\php_java.jar

java.home = c:\jdk

java.library = c:\jdk\jre\bin\hotspot\jvm.dll

java.library.path= .\

變量session.save_path指定了保存會(huì)話信息所需的臨時(shí)目錄。通常而言,此目錄默認(rèn)為/tmp,但由于在Windows系統(tǒng)中此默認(rèn)目錄并不存在,所以你必須將其重新設(shè)置為正確的Windows臨時(shí)目錄,否則會(huì)話處理程序?qū)?huì)在調(diào)用session_start()函數(shù)時(shí)彈出討厭的出錯(cuò)信息。同時(shí)可以通過(guò)變量session.cookie_lifetime來(lái)控制會(huì)話cookie的有效期。

session.save_path = c:\windows\temp

session.cookie_lifetime = 1800
安全設(shè)置
在php.ini中,有很多同PHP安裝的安全問(wèn)題相關(guān)的變量。其中最有趣的是safe_mode變量,建議針對(duì)ISP以及共享主機(jī)服務(wù)(shared-hosting services)對(duì)其進(jìn)行設(shè)置,此變量將對(duì)用戶對(duì)PHP的使用范圍進(jìn)行限制。



safe_mode = Off

當(dāng)safe mode打開(kāi)的時(shí)候,可以通過(guò)變量safe_mode_include_dir指定在何目錄中查找相關(guān)文件。通過(guò)將二進(jìn)制程序放在特定目錄并使用safe_mode_include_dir變量將目錄告之PHP,PHP將對(duì)可使用exec()命令運(yùn)行PHP腳本的程序種類(lèi)進(jìn)行限制。在此目錄中僅二進(jìn)制文件可以通過(guò)exec()命令進(jìn)行訪問(wèn)。

safe_mode_include_dir = /usr/local/lib/php/safe-include

safe_mode_exec_dir = /usr/local/lib/php/safe-bin

還可以通過(guò)變量open_basedir來(lái)限制文件操作。此變量將設(shè)置作為文件操作根(root)的目錄名。此變量設(shè)置后,對(duì)于PHP來(lái)說(shuō),存放在此目錄樹(shù)以外的文件將無(wú)法訪問(wèn)。這對(duì)于在共享系統(tǒng)中將用戶限制在各自的home或者Web目錄是一種很好的方法。

open_basedir = /home/web/

變量max_execution_time設(shè)置了在強(qiáng)制終止腳本前PHP等待腳本執(zhí)行完畢的時(shí)間,此時(shí)間以秒計(jì)算。當(dāng)腳本進(jìn)入了一個(gè)無(wú)限循環(huán)狀態(tài)時(shí)此變量非常有用。然而,當(dāng)存在一個(gè)需要很長(zhǎng)時(shí)間完成的合法活動(dòng)時(shí)(例如上傳大型文件),這項(xiàng)功能也會(huì)導(dǎo)致操作失敗。在這樣的情況下必須考慮將此變量值增加,以避免PHP在腳本正在執(zhí)行某些重要過(guò)程的時(shí)候?qū)⒛_本關(guān)閉。

max_execution_time = 90

剛提到了上傳,現(xiàn)在來(lái)看看如何配置uploads變量以及form變量。
配置文件上載以及表單變量
如果我們?cè)谖恼虑懊嫠懻摪踩渲盟峁┑陌踩珡?qiáng)度還不能滿足你的要求,可以通過(guò)關(guān)閉文件上傳或設(shè)置每次上傳最大文件尺寸限制來(lái)進(jìn)一步提高安全強(qiáng)度。以上兩種功能將分別通過(guò)變量file_uploads和upload_max_filesize來(lái)實(shí)現(xiàn)。通常來(lái)說(shuō),除非系統(tǒng)中有為接收文件而設(shè)計(jì)的應(yīng)用程序(例如基于Web FTP服務(wù)的圖片冊(cè)),你應(yīng)當(dāng)設(shè)置一個(gè)相對(duì)較小的文件尺寸限制值。



file_uploads = On

upload_max_filesize = 2M

如果你對(duì)于上傳文件并不關(guān)心,但在PHP應(yīng)用程序中使用了大量的表單,這里有兩個(gè)變量將會(huì)讓你產(chǎn)生很大的興趣。首先是變量register_globals,它解決了PHP開(kāi)發(fā)人員長(zhǎng)期以來(lái)的心頭之痛。在PHP 3.x中,此變量默認(rèn)為On。由此當(dāng)提交表單時(shí)表單變量將自動(dòng)的轉(zhuǎn)換成PHP變量。

在PHP 4.x中,出于安全考慮,此變量默認(rèn)設(shè)置為Off。由此,表單變量將只能通過(guò)特定的$_GET以及$_POST進(jìn)行訪問(wèn)。這也造成了很多用PHP 3.x編寫(xiě)的腳本在運(yùn)行時(shí)出現(xiàn)問(wèn)題,要求開(kāi)發(fā)人員重寫(xiě)腳本并對(duì)其重新測(cè)試。比如,輸入到表單域<input type="text" name="email">中的值對(duì)于PHP 3.x腳本來(lái)說(shuō)將可以理解為$email;而在PHP 4.x腳本中卻被作為$_POST['email']或者$_GET['email']。

通常情況下可以將此變量設(shè)置為Off,這樣可以對(duì)通過(guò)表單進(jìn)行的腳本攻擊提供更為安全的防范措施。如果需要考慮到對(duì)早期PHP 3.x腳本的兼容問(wèn)題,則應(yīng)當(dāng)置于On。

register_globals = Off

同表單提交相關(guān)的一個(gè)變量是post_max_size,它將控制在采用POST方法進(jìn)行一次表單提交中PHP所能夠接收的最大數(shù)據(jù)量。似乎不大可能需要將默認(rèn)的8 MB改得更大。相反,應(yīng)當(dāng)適當(dāng)將其降到更為實(shí)際的數(shù)值。但如果希望使用PHP文件上傳功能,則需要將此值改為比upload_max_filesize還要大。

post_max_size = 8M

在PHP 5中增加了max_input_time變量。此變量可以以秒為單位對(duì)通過(guò)POST、GET以及PUT方式接收數(shù)據(jù)時(shí)間進(jìn)行限制。如果應(yīng)用程序所運(yùn)行環(huán)境處在低速鏈路上,則需要增加此值以適應(yīng)接收數(shù)據(jù)所需的更多時(shí)間。

max_input_time = 90
性能調(diào)整
你還可以通過(guò)調(diào)整一些變量值來(lái)提升PHP解析器的性能。為了避免正在運(yùn)行的腳本大量使用系統(tǒng)可用內(nèi)存,PHP允許定義內(nèi)存使用限額。通過(guò)memory_limit變量來(lái)指定單個(gè)腳本程序可以使用的最大內(nèi)存容量:



memory_limit = 8M

變量memory_limit的值應(yīng)當(dāng)適當(dāng)大于post_max_size的值。

另一項(xiàng)可以用于提高性能的方法是禁用變量$argc以及$argv,這兩個(gè)值被用于存放在命令行中傳遞給應(yīng)用程序的參數(shù)數(shù)量以及實(shí)際參數(shù)值。

register_argc_argv = false

類(lèi)似,還可以禁用$HTTP_GET_VARS以及$HTTP_POST_VARS,因?yàn)樵谑褂?#36;_GET以及$_POST的今天你不大可能用到前兩種方式。禁用此功能可以帶來(lái)性能上的提升,但這只能通過(guò)PHP 5中的變量register_long_arrays實(shí)現(xiàn)。

register_long_arrays = false

函數(shù)ini_set()

最后,需要注意ini_set()函數(shù)。當(dāng)PHP讀取php.ini配置文件中的所有設(shè)置信息的同時(shí),它還提供了采用ini_set()函數(shù)根據(jù)per-script原則更改這些設(shè)置的功能。此函數(shù)接收兩個(gè)參數(shù):需要調(diào)整的配置變量名,以及變量的新值。例如,在某腳本出現(xiàn)時(shí)增加最大執(zhí)行時(shí)間(maximum execution time):

<?php

ini_set('max_execution_time', 600)

// more code

?>

這樣的設(shè)置將僅僅影響被設(shè)置的腳本。一旦腳本執(zhí)行完畢,該變量將自動(dòng)恢復(fù)到原始值。

如果PHP應(yīng)用程序運(yùn)行在一個(gè)共享服務(wù)器上,你不大可能可以訪問(wèn)到主php.ini配置文件。這時(shí),函數(shù)ini_set()就可以允許根據(jù)特殊要求對(duì)PHP配置做動(dòng)態(tài)修改,這將會(huì)給你帶來(lái)很大的方便。