在/usr/local/php/etc/目錄下面有個 php.ini 文件,是以前編譯安裝php時拷貝進去的。有的時候咱們並不知道 php.ini 所在路徑,這時候就須要經過命令來查一查在哪兒。php
[root@localhost ~]# /usr/local/php/bin/php -i |head phpinfo() PHP Version => 5.6.10 System => Linux localhost 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 Build Date => May 17 2016 22:49:08 Configure Command => './configure' '--prefix=/usr/local/php' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-config-file-path=/usr/local/php/etc' '--with-mysql=/usr/local/mysql' '--with-libxml-dir' '--with-gd' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir' '--with-iconv-dir' '--with-zlib-dir' '--with-bz2' '--with-openssl' '--with-mcrypt' '--enable-soap' '--enable-gd-native-ttf' '--enable-mbstring' '--enable-sockets' '--enable-exif' '--disable-ipv6' Server API => Command Line Interface Virtual Directory Support => disabled Configuration File (php.ini) Path => /usr/local/php/etc Loaded Configuration File => /usr/local/php/etc/php.ini
Loaded Configuration File 一行指示了 php.ini 的位置,若是這裏爲 None ,那麼就說明沒有加載到具體的 php.ini 。找到 php.ini 後,用 vim 打開它,會發現好多行都是以 ; 號開頭的,這個符號在 php.ini 中做爲註釋符號。而 php.ini 中經常使用的配置以下:
mysql
(1)配置 disable_functionlinux
在php中有很是多的函數,在這些函數中有一些是不×××全的,因此有必要把它們禁掉,像 exec,shell_exec 都是在 php 代碼中執行 linux shell 命令,很危險,要禁掉。使用 vim 打開 php.ini ,找到 disable_functions = 這一行,默認是沒有東西的,咱們在後面添加:sql
[root@localhost ~]# vim /usr/local/php/etc/php.ini disable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close
(2)配置 error_log
shell
做爲運維人員,理應學會簡單的 php 錯誤排查技能,其實 php 的錯誤跟 linux 下其餘服務都是同樣的,遇到錯誤後要查看錯誤日誌,根據報錯信息來判斷錯誤的緣由。那如何查看 php 的錯誤信息呢?遇到錯誤時,咱們訪問的網站一般會顯示白頁,什麼都沒有,狀態碼是 500。兩種查看方法,第一種是直接把錯誤信息顯示在瀏覽器中,配置方法是在 php.ini 中找到 display_error=on,重啓 apache 服務後,刷新網頁,發現再也不是空白,而是具體的錯誤。這就能夠根據錯誤來調試 php 代碼了。這種狀況適合臨時調試,不適合長期配置,由於全部的錯誤信息都會顯示在瀏覽器上,那麼用戶就會直接看到這些錯誤,這樣不合適。因此有第二種方法,把錯誤信息輸出到一個日誌文件中,具體配置以下:apache
[root@localhost ~]# vim /usr/local/php/etc/php.ini display_errors = Off log_errors = On error_log=/usr/local/php/logs/error.log // 該文件一開始不存在,爲了不權限問題不能自動生成該文件,能夠先建立該文件,而且修改權限爲 777 error_reporting = E_ALL | E_STRICT
說明:首先要把錯誤不在瀏覽器顯示,第二打開錯誤日誌開關,而後指定錯誤日誌的路徑,最後是定義錯誤日誌的級別。配置完成後記得要重啓 apache 服務,纔會生效。
vim
(3)配置 open_basedir瀏覽器
在 php 中是有這個 open_basedir 概念的,它的意思是,把執行 php 的用戶限定在指定的路徑下,這樣經過權限縮小的方式達到安全目的。做爲一個網站,只須要讓 php 用戶訪問到網站的代碼便可,沒有必要讓它去訪問其餘目錄。安全
[root@localhost ~]# vim /usr/local/php/etc/php.ini open_basedir = /dir1/:/dir2
說明:/dir1 和 /dir2 爲咱們容許 php 能夠訪問的兩個目錄,一樣也能夠是多個,目錄之間用 : 分隔。一旦限定後,若是 php 試圖去訪問 /dir1 和 /dir2 以外的目錄下的文件時,就會報錯了。錯誤相似於,Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(../123.php) is not with in the allowed path(s):
bash
除了在 php.ini 中定義 open_basedir 外,還能夠在apache的配置文件中定義,由於一個 apache下可能有多個站點,咱們要針對不一樣的站點作不一樣的限制,打開主機配置文件或虛擬主機配置文件,添加以下語句:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf php_admin_value open_basedir "/dir1/:/dir2/"