PHP.INI配置文件漫游(2)
Jun 21, 2016 am 09:14 AM文章第一部分已經(jīng)帶領(lǐng)你領(lǐng)略了php.ini文件的結(jié)構(gòu),并且說明了如何修改PHP查找路徑、差錯(cuò)處理,以及解析器的相關(guān)選項(xiàng)。第二部分將深入配置文件,內(nèi)容包括如何激活PHP擴(kuò)展選項(xiàng)、針對(duì)PHP腳本設(shè)置資源限制,以及通過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文件中(通過注釋)。要激活某個(gè)特定的擴(kuò)展選項(xiàng)只需要將相應(yīng)行首的分號(hào)去掉并重啟服務(wù)器就可以了。如果要禁用某個(gè)擴(kuò)展選項(xiàng)(比如在需要提升系統(tǒng)性能的情況下),只需要在行首重新添加分號(hào)。
如果擴(kuò)展選項(xiàng)沒有列在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)通過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類以及庫(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í)可以通過變量session.cookie_lifetime來(lái)控制會(huì)話cookie的有效期。
session.save_path = c:\windows\temp
session.cookie_lifetime = 1800
安全設(shè)置
在php.ini中,有很多同PHP安裝的安全問題相關(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打開的時(shí)候,可以通過變量safe_mode_include_dir指定在何目錄中查找相關(guān)文件。通過將二進(jìn)制程序放在特定目錄并使用safe_mode_include_dir變量將目錄告之PHP,PHP將對(duì)可使用exec()命令運(yùn)行PHP腳本的程序種類進(jìn)行限制。在此目錄中僅二進(jìn)制文件可以通過exec()命令進(jìn)行訪問。
safe_mode_include_dir = /usr/local/lib/php/safe-include
safe_mode_exec_dir = /usr/local/lib/php/safe-bin
還可以通過變量open_basedir來(lái)限制文件操作。此變量將設(shè)置作為文件操作根(root)的目錄名。此變量設(shè)置后,對(duì)于PHP來(lái)說,存放在此目錄樹以外的文件將無(wú)法訪問。這對(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í)行某些重要過程的時(shí)候?qū)⒛_本關(guān)閉。
max_execution_time = 90
剛提到了上傳,現(xiàn)在來(lái)看看如何配置uploads變量以及form變量。
配置文件上載以及表單變量
如果我們?cè)谖恼虑懊嫠懻摪踩渲盟峁┑陌踩珡?qiáng)度還不能滿足你的要求,可以通過關(guān)閉文件上傳或設(shè)置每次上傳最大文件尺寸限制來(lái)進(jìn)一步提高安全強(qiáng)度。以上兩種功能將分別通過變量file_uploads和upload_max_filesize來(lái)實(shí)現(xiàn)。通常來(lái)說,除非系統(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開發(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。由此,表單變量將只能通過特定的$_GET以及$_POST進(jìn)行訪問。這也造成了很多用PHP 3.x編寫的腳本在運(yùn)行時(shí)出現(xiàn)問題,要求開發(fā)人員重寫腳本并對(duì)其重新測(cè)試。比如,輸入到表單域中的值對(duì)于PHP 3.x腳本來(lái)說將可以理解為$email;而在PHP 4.x腳本中卻被作為$_POST['email']或者$_GET['email']。
通常情況下可以將此變量設(shè)置為Off,這樣可以對(duì)通過表單進(jìn)行的腳本攻擊提供更為安全的防范措施。如果需要考慮到對(duì)早期PHP 3.x腳本的兼容問題,則應(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ì)通過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)整
你還可以通過調(diào)整一些變量值來(lái)提升PHP解析器的性能。為了避免正在運(yùn)行的腳本大量使用系統(tǒng)可用內(nèi)存,PHP允許定義內(nèi)存使用限額。通過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
類似,還可以禁用$HTTP_GET_VARS以及$HTTP_POST_VARS,因?yàn)樵谑褂?_GET以及$_POST的今天你不大可能用到前兩種方式。禁用此功能可以帶來(lái)性能上的提升,但這只能通過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):
ini_set('max_execution_time', 600)
// more code
?>
這樣的設(shè)置將僅僅影響被設(shè)置的腳本。一旦腳本執(zhí)行完畢,該變量將自動(dòng)恢復(fù)到原始值。
如果PHP應(yīng)用程序運(yùn)行在一個(gè)共享服務(wù)器上,你不大可能可以訪問到主php.ini配置文件。這時(shí),函數(shù)ini_set()就可以允許根據(jù)特殊要求對(duì)PHP配置做動(dòng)態(tài)修改,這將會(huì)給你帶來(lái)很大的方便。

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

The settings.json file is located in the user-level or workspace-level path and is used to customize VSCode settings. 1. User-level path: Windows is C:\Users\\AppData\Roaming\Code\User\settings.json, macOS is /Users//Library/ApplicationSupport/Code/User/settings.json, Linux is /home//.config/Code/User/settings.json; 2. Workspace-level path: .vscode/settings in the project root directory

ToresolvenetworkconnectivityissuesinWindows,resettheTCP/IPstackbyfirstopeningCommandPromptasAdministrator,thenrunningthecommandnetshintipreset,andfinallyrestartingyourcomputertoapplychanges;ifissuespersist,optionallyrunnetshwinsockresetandrebootagain

Choose"Custom:InstallWindowsonly(advanced)"forfullcontrol,asitallowsacleaninstallthatremovesoldissuesandoptimizesperformance.2.Duringsetup,managepartitionsbydeletingoldones(afterbackingupdata),creatingnewpartitions,formatting(usingNTFS),ors

EnableAppLockerviaGroupPolicybyopeninggpedit.msc,navigatingtoApplicationControlPolicies,creatingdefaultrules,andconfiguringruletypes;2.Createcustomrulesusingpublisher,path,orhashconditions,preferringpublisherrulesforsecurityandflexibility;3.Testrules

DownloadtheWindowsISOfromMicrosoft’sofficialsite.2.CreateabootableUSBusingMediaCreationToolorRufuswithaUSBdriveofatleast8GB.3.BootfromtheUSBbyaccessingthebootmenuoradjustingBIOS/UEFIsettings.4.InstallWindowsbyselectingcustominstallation,choosingtheco

UseGuzzleforrobustHTTPrequestswithheadersandtimeouts.2.ParseHTMLefficientlywithSymfonyDomCrawlerusingCSSselectors.3.HandleJavaScript-heavysitesbyintegratingPuppeteerviaPHPexec()torenderpages.4.Respectrobots.txt,adddelays,rotateuseragents,anduseproxie

First,checkandcorrectthebootorderinBIOS/UEFItoensuretheWindowsdriveistheprimarybootdevice.2.VerifytheWindowsdriveisdetectedinBIOSunderstorageordrives.3.Ifnotdetected,troubleshoothardwareconnectionsbyreseatingSATAandpowercablesfordesktopsorreseatingth

VerifytheWindowsISOisfromMicrosoftandrecreatethebootableUSBusingtheMediaCreationToolorRufuswithcorrectsettings;2.Ensurehardwaremeetsrequirements,testRAMandstoragehealth,anddisconnectunnecessaryperipherals;3.ConfirmBIOS/UEFIsettingsmatchtheinstallatio
