頁面報錯 No input file specified

JokerWang發表於2021-08-31

如往常一樣我熟練的操作LNMP 部署完系統後.

在開啟頁面一看OJbK,關機,下鍾。第二天早上收到了銷售的訊息,說是頁面偶爾打不開,一看截圖是No input file specified.

瞬間感覺不敢相信,到了公司頁面開啟一看,的確有這樣的問題。王醫生熟練的開啟度娘,沒想到search我的問題,沒想到的是,遇到這個問題的小夥伴還真不少。

看完之後,貌似是php的一個檔案搞的鬼 — .user.ini

我們看看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_PERDIR 和 PHP_INI_USER 模式的 INI 設定可被識別。

這個時候角落的張三突然站起來說到:什麼是PHPINI*模式呢?

官方是這樣說的:

配置可被指定的範圍(php.net/manual/zh/configuration.cha...

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

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

PHPINI*模式的定義

/**模式  含義
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配置選項列表(php.net/manual/zh/ini.list.php

有點意思,並不是所有的配置 .user.ini 都能修改,比如 disable_functionsupload_max_filesize

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

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

    絕望中,你是否發現你的網站目錄中有個叫 .user.ini 的檔案,一氣之下,決定刪了它,哦,沒錯,是個辦法。

  • 啥? .user.ini 刪不掉,是不是覺得自己真的不行了?

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

來看一下,該檔案的屬性

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

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

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

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

  • 哎,旁邊的李四可能覺得自己又不行了,怎麼還是“No input file specified”啊?
    年輕人,彆著急,看看官方吧(php.net/manual/zh/configuration.fil... )。
    user_ini.cache_ttl 控制著重新讀取使用者 INI 檔案的間隔時間。預設是 300 秒(5 分鐘)。
    …..
    5分鐘艱難的過去了,你是否再一次喜極而泣:哎,自己終究還是行了。

.user.ini有什麼用呢?

好奇請猛戳 lnmp.org/faq/lnmp-vhost-add-howto....

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章