溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php配置——php.ini配置文件詳解

發布時間:2020-04-15 05:34:53 來源:網絡 閱讀:835 作者:warm51cto 欄目:web開發

查找PHP配置文件

① 命令行(不推薦,服務器有多個php,httpd不一定加載的此模塊)

[root@wy ~]# /usr/local/php/bin/php -i | grep 'Loaded Configuration'

Loaded Configuration File => /usr/local/php/etc/php.ini

② 調用php函數(推薦使用,精確)

[root@wy ~]# vim /data/www/phpinfo.php

<?php

    phpinfo();

?>

php配置——php.ini配置文件詳解

禁掉一些危險的函數

## 編輯配置文件,查找到disable_functions

[root@wy ~]# 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

解釋說明:

配置disable_functions;

exec,shell_exec這兩個函數是調用linux命令非常危險必須禁用;

有時候也會禁止phpinfo函數;

#重啟apache,再刷新網頁可看到禁掉的函數

[root@wy ~]# /usr/local/apache2/bin/apachectl restart

php配置——php.ini配置文件詳解

配置PHP錯誤日志

## 關閉此選項,如果PHP代碼有錯,將不會提示錯誤信息直接顯示白頁

[root@wy ~]# vim /usr/local/php/etc/php.ini

display_errors = Off/On       ## 默認Off

解釋說明:

雖然開啟便于程序調試,但***獲取到這些錯誤可能會發起***,不安全;

## 確認開啟

log_errors = On

## 配置錯誤日志

error_log = /usr/local/php/logs/php_errors.log

解釋說明:

配置的錯誤日志目錄必須存在(mkdir /usr/local/php/logs)且必須寫絕對路徑

chown -R daemon.daemon /usr/local/php/logs/  或者chmod 777 /usr/local/php/logs(因為生成錯誤日志的用戶是apache,所以要有寫權限)

## 日志級別

error_reporting = E_ALL & ~E_NOTICE

解釋說明:

設置日志級別就是在過濾錯誤日志記錄呢些內容;

E_ALL 包含所有的錯誤和警告(且包含了PHP5.4版本中的E_STRICT);

E_NOTICE 把所有的錯誤都顯示,除了通知和代碼的標準警告;

& 并且;

| 或者;

~ 取反;

是指 E_ALL 為真,或者 非E_NOTICE 為真;

## 為了測試,故意php文件寫錯

[root@wy ~]# cat /data/www/phpinfo.php

<?php

phpinfo();

e cho "ni hao php";   ## 此行故意寫錯

?>

## 檢查并重新加載

[root@wy ~]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@wy ~]# /usr/local/apache2/bin/apachectl graceful

## 解析并查看生成的錯誤日志

[root@wy ~]# /usr/local/php/bin/php /data/www/phpinfo.php

[root@wy ~]# tail /usr/local/php/logs/php_errors.log

[06-Nov-2016 04:53:30 Asia/Chongqing] PHP Parse error:  syntax error, unexpected T_STRING in /data/www/phpinfo.php on line 3

配置open_basedir

也是一個安全選項,它有什么意義呢,舉個例子,咱們這個php,apache它要去訪問一個網站,它要找到

一個路徑,我們有給它定義一個路徑,比如說/data/www,那這個時候如果,假設這個你的環境,你的網站

有一些漏洞,讓不法分子獲得了一些權限,他可以上傳一個他自己的***,那他這個***呢可以獲得你服務

器上的一些信息,比如可以獲得一些目錄、一些文件,可以查看,那這個時候呢,我們應該想到一個策略,

為了以防萬一,我們應該把它限制死在某一個目錄下,因為我們網站在/data/www下,那我們就應該給它

限定死,你只能訪問/data/www這個目錄,其他的目錄(比如根目錄、etc目錄),你是不可以查看的,如何

去做呢

## 編輯配置文件

[root@wy ~]# vim /usr/local/php/etc/php.ini

open_basedir = /data/www/:/tmp/

解釋說明:

/tmp/  一般都會用到,就寫上

## 不過為了測試,故意寫錯受限制路徑(就出現了500錯誤)

open_basedir = /data/www1/:/tmp/

## apache重新加載

[root@wy ~]# /usr/local/apache2/bin/apachectl graceful

## 訪問網頁測試

php配置——php.ini配置文件詳解

## 命令行測試

[root@wy ~]# curl -xlocalhost:80 www.test.com/phpinfo.php -I          

HTTP/1.0 500 Internal Server Error

Date: Sat, 05 Nov 2016 21:23:53 GMT

Server: Apache/2.2.16 (Unix) DAV/2 PHP/5.3.28

X-Powered-By: PHP/5.3.28

Cache-Control: max-age=0

Expires: Sat, 05 Nov 2016 21:23:53 GMT

Connection: close

Content-Type: text/html

X-Pad: avoid browser bug

## 查看日志

[root@wy ~]# /usr/local/php/bin/php /data/www/forum.php    ## 解析

[root@wy ~]# tail /usr/local/php/logs/php_errors.log

[06-Nov-2016 05:30:41 Asia/Chongqing] PHP Warning:  require(): open_basedir restriction in effect. File(./source/class/class_core.php) is not within the allowed path(s): (/data/www1/:/tmp/) in /data/www/forum.php on line 15

[06-Nov-2016 05:30:41 Asia/Chongqing] PHP Warning:  require(./source/class/class_core.php): failed to open stream: Operation not permitted in /data/www/forum.php on line 15

[06-Nov-2016 05:30:41 Asia/Chongqing] PHP Fatal error:  require(): Failed opening required './source/class/class_core.php' (include_path='.:/usr/local/php/lib/php') in /data/www/forum.php on line 15

備注:訪問網頁后,錯誤日志沒有生成,我又自己解析的,這才出來錯誤日志。

其實在apache里同樣可以定義,假如說我們現在有多個虛擬主機,多個網站,多個網站你就應該去做多個

open_basedir的限制,如果用php.ini去做,只能配置一句;你要是限定多個目錄的話,不同的站點你是

沒有辦法區分開的,所以我們可以針對apache的虛擬主機去做一些限制,每一個虛擬主機(VirtualHost)使用一個open_basedir(好處在于我們可以區分不同的虛擬主機),如何去配置?那先把php.ini的open_basedir先注釋掉(注:php里;來作為注釋),然后做下面的實驗。

## 配置apache虛擬主機的open_basedir

[root@wy ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>

   DocumentRoot "/data/tmp"

   ServerName tmp.com

  php_admin_value open_basedir "/tmp/tmp/"

</VirtualHost>

<VirtualHost *:80>

   DocumentRoot "/data/www"

   ServerName www.test.com

   ServerAlias www.aaa.com

   ServerAlias www.bbb.com

   php_admin_value open_basedir "/data/www/:/tmp/"

</VirtualHost>

解釋說明:

在open_basedir時,一定要將目錄/dir/(后面的/一定要加上)否則會包含www、www1、www2......

## 檢查并重新加載

[root@wy ~]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@wy ~]# /usr/local/apache2/bin/apachectl graceful


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女