php
其實php的編譯很簡單:
-
獲取并解壓 PHP 源代碼
tar zxf php-x.x.x
-
配置并構(gòu)建PHP
cd ../php-x.x.x ./configure --enable-fpm --with-mysql make sudo make install
需要配置安裝更多php擴(kuò)展,可以通過configure --help 查看
-
創(chuàng)建配置文件,并將其復(fù)制到正確的位置
cp php.ini-development /usr/local/php/php.ini cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf cp sapi/fpm/php-fpm /usr/local/bin
配置文件根據(jù)實際情況,有所出入,大概意思明白即可。
nginx
PHP: Unix 系統(tǒng)下的 Nginx 1.4.x - Manual
需要著重提醒的是,如果文件不存在,則阻止 Nginx 將請求發(fā)送到后端的 PHP-FPM 模塊, 以避免遭受惡意腳本注入的攻擊。
將 php.ini 文件中的配置項 cgi.fix_pathinfo 設(shè)置為 0 。php7.1中默認(rèn)值是1。
windows
Windows 下使用 Apache 安裝 PHP 應(yīng)用程序:XAMPP、WampServer 和 BitNami。
FPM
PHP: FastCGI 進(jìn)程管理器(FPM) - Manual
官方php-fpm配置中文版:PHP-FPM配置 - Manual
FPM(FastCGI進(jìn)程管理器)提供的函數(shù)fastcgi_finish_request()具有特殊功能:用于在請求完成和刷新數(shù)據(jù)后,繼續(xù)在后臺執(zhí)行耗時的工作(錄入視頻轉(zhuǎn)換、統(tǒng)計處理等);后續(xù)函數(shù)章節(jié)細(xì)講。
PECL擴(kuò)展庫安裝
要使用共享擴(kuò)展庫,必須經(jīng)過編譯,安裝,然后加載。
-
下載pecl擴(kuò)展庫
- pecl install extname 命令會自動下載擴(kuò)展代碼,所以在這種情況下不需要再次下載。
- https://pecl.php.net/ PECL 網(wǎng)站包括有 PHP 開發(fā)組提供的不同擴(kuò)展庫的信息。這里的信息包括:更新記錄,版本說明,需求,以及其它信息。
-
pear編譯pecl擴(kuò)展庫
$ pecl install extname
這將下載 extname 的源代碼,編譯之,并將 extname.so 安裝到 extension_dir 中。然后 extname.so 就可以通過 php.ini 加載了。
extension_dir可以通過php-config命令查看(下面會提到),比如:
--extension-dir [/usr/lib/php/20160303]
-
phpize 編譯pecl擴(kuò)展庫
phpize 命令是用來準(zhǔn)備 PHP 擴(kuò)展庫的編譯環(huán)境的。下面例子中,擴(kuò)展庫的源程序位于 extname 目錄中:
$ cd extname $ phpize $ ./configure $ make # make install
成功的安裝將創(chuàng)建 extname.so 并放置于 PHP 的擴(kuò)展庫目錄中。需要調(diào)整 php.ini,加入 extension=extname.so 這一行之后才能使用此擴(kuò)展庫。
php-config
php-config 是一個簡單的命令行腳本用于獲取所安裝的 PHP 配置的信息。
jm@ubuntu:~$ php-config -h
Usage: /usr/bin/php-config [OPTION]
Options:
--prefix [/usr]
...
--extension-dir [/usr/lib/php/20160303]
--include-dir [/usr/include/php/20160303]
--man-dir [/usr/share/man]
--php-binary [/usr/bin/php7.1]
--php-sapis [apache2handler cgi cli fpm ]
--phpapi [20160303]
...
運行時配置php.ini
配置文件(php.ini)在 PHP 啟動時被讀取。對于服務(wù)器模塊版本的 PHP,僅在 web 服務(wù)器啟動時讀取一次。對于 CGI 和 CLI 版本,每次調(diào)用都會讀取。
.user.ini
自 PHP 5.3.0 起,PHP 支持基于每個目錄的 INI 文件配置。此類文件 僅被 CGI/FastCGI SAPI 處理。如果你的 PHP 以模塊化運行在 Apache 里,則用 .htaccess 文件有同樣效果。
除了主 php.ini 之外,PHP 還會在每個目錄下掃描 INI 文件,從被執(zhí)行的 PHP 文件所在目錄開始一直上升到 web 根目錄($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被執(zhí)行的 PHP 文件在 web 根目錄之外,則只掃描該目錄。
在php.ini中配置.user.ini文件:
user_ini.filename 設(shè)定了 PHP 會在每個目錄下搜尋的文件名;如果設(shè)定為空字符串則 PHP 不會搜尋。默認(rèn)值是 .user.ini。
user_ini.cache_ttl 控制著重新讀取用戶 INI 文件的間隔時間。默認(rèn)是 300 秒(5 分鐘)。
配置生效范圍
模式 | 含義 | |
---|---|---|
PHP_INI_USER | 可在用戶腳本(例如 ini_set())或 Windows 注冊表 | (自 PHP 5.3 起)以及 .user.ini 中設(shè)定 |
PHP_INI_PERDIR | 可在 php.ini,.htaccess 或 httpd.conf 中設(shè)定 | |
PHP_INI_SYSTEM | 可在 php.ini 或 httpd.conf 中設(shè)定 | |
PHP_INI_ALL | 可在任何地方設(shè)定 | |
例如 output_buffering 指令是屬于 PHP_INI_PERDIR,因而就不能用 ini_set() 來設(shè)定。但是 display_errors 指令是屬于 PHP_INI_ALL 因而就可以在任何地方被設(shè)定,包括 ini_set()。
注:ini_set()就是可以在用戶腳本中修改配置。
修改配置
修改配置的方式:
- httpd.conf
- .htaccess
- windows修改注冊表
- ini_set函數(shù)
注:ini_set并不能修改所有配置
哪些指令配置可以在當(dāng)前模式下修改詳見:PHP: php.ini 配置選項列表 - Manual
比如upload_max_filesize只能在PHP_INI_PERDIR模式下修改,也就是只有php.ini、httpd.conf、.htaccess配置文件中才能修改生效。