首頁  >  文章  >  後端開發  >  php中.user.ini究竟是個啥神秘東東?

php中.user.ini究竟是個啥神秘東東?

藏色散人
藏色散人轉載
2021-04-13 14:10:493689瀏覽

推薦學習:《PHP影片教學

神祕的.user. ini檔案

.user.ini究竟是個神秘東東?

我們看看官方怎麼說:

https://www.php.net/manual/zh/configuration.file.per-user.php

自PHP 5.3.0起,PHP 支援基於每個目錄的.htaccess 風格的INI 檔案。此類文件僅由 CGI/FastCGI SAPI 處理。此功能使得 PECL 的 htscanner 擴展作廢。如果使用 Apache,則用 .htaccess 檔案有相同效果。

小白表示沒看懂~

眾所周知,php.ini是php的核心設定文件,在PHP 啟動時被讀取,那麼web目錄的其他ini檔案也是可以被php識別,官方還說了

除了主php.ini 之外,PHP 還會在每個目錄下掃描INI 文件,從被執行的PHP 文件所在目錄開始一直上升到web 根目錄($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被執行的 PHP 檔案在 web 根目錄之外,則只掃描該目錄。

這樣說的話,所有的設定都可以被.user.ini重新設定修改? 噢,麥噶的

你想太多了,官方還說了:

在.user.ini 風格的INI 檔案中只有具有PHP_INI_PERDIRPHP_INI_USER 模式的INI 設定可被辨識。

小白,又舉手了,什麼是PHP_INI_*模式呢?

官方是這樣說的:

配置可被指定的範圍(https://www.php.net/manual/zh/configuration.changes.modes.php )

這些模式決定著一個PHP 的指令在何時何地,是否能夠被設定。手冊中的每個指令都有其所屬的模式。例如有些指令可以在 PHP 腳本中用 ini_set() 來設定,而有些則只能在 php.ini 或 httpd.conf 中。

例如 output_buffering 指令是屬於 PHP_INI_PERDIR,因而不能用 ini_set() 來設定。但 display_errors 指令是屬於 PHP_INI_ALL 因而就可以在任何地方被設定,包括 ini_set()。

PHP_INI_*模式的定義

模式    含义
PHP_INI_USER    可在用户脚本(例如 ini_set())或 Windows 注册表(自 PHP 5.3 起)以及 .user.ini 中设定
PHP_INI_PERDIR    可在 php.ini,.htaccess 或 httpd.conf 中设定
PHP_INI_SYSTEM    可在 php.ini 或 httpd.conf 中设定
PHP_INI_ALL    可在任何地方设定

也就是說只有PHP_INI_USER模式,才可以在.user.ini 中設定,那麼哪些配置可以在.user.ini 中設定呢?

php.ini設定選項清單(https://www.php.net/manual/zh/ini.list.php)

有點意思,並不是所有的設定 .user.ini 都能修改,例如disable_functionsupload_max_filesize

千年未解之謎,是不是在這裡找到了答案?

  • 訪問php頁面出現“No input file specified”,嘗試各種辦法無果,你是否開始懷疑自己人品,是否開始懷疑腎虧了,是否覺得自己這麼年輕就不行了?

    絕望中,你是否發現你的網站目錄中有個叫 .user.ini 的文件,一氣之下,決定刪了它,哦,沒錯,是個辦法。
  • 啥? .user.ini 刪不掉,是不是覺得自己真的不行了?

    [root@Tech1024]# rm -rf .user.ini 
    rm: cannot remove ‘.user.ini’: Operation not permitted

    來看一下,該檔案的屬性

    [root@Tech1024]# lsattr .user.ini 
    ----i--------e-- .user.ini

    沒錯,檔案被鎖定了,不能修改,那麼我們移除檔案鎖定屬性

    [root@Tech1024]# chattr -i .user.ini

    是不是可以刪除了,你是不是喜極而泣,啊,自己終於又行了。

  • 哎,小白可能覺得自己又不行了,怎麼還是「No input file specified」啊?

    年輕人,別急,看看官方吧(http://php.net/manual/zh/conf... )。

    user_ini.cache_ttl 控制著重新讀取使用者 INI 檔案的間隔時間。預設是 300 秒(5 分鐘)。

    ……

    5分鐘艱難的過去了,你是否再一次喜極而泣:哎,自己終究還是行了。

.user.ini有什麼用呢?

好奇請猛戳https://lnmp.org/faq/lnmp-vhost-add-howto.html#user.ini

最後

#作為一個IT職業人,不論從事什麼行業,記住兩點技術和態度,技術決定了你的存在,態度決定了你能存在多久。

以上是php中.user.ini究竟是個啥神秘東東?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除