記:痛苦的排錯之” No input file specified.“

zh-mead發表於2019-05-23

背景

今天下午我要和小夥伴一起開發一個 Laravel 的專案,這個專案是我夥伴已經開發了一部分,所有我就克隆了一份到我的電腦上,但是等我配置好,開啟網址的提示 ”No input file specified.“ 404錯誤

排查

  • 首先我懷疑是專案原始碼的問題,然後我直接在入口檔案最前面新增了一句如下;我訪問網址還是報同樣的錯誤。

    <?php
    exit(1);

    說明不是我專案原始碼的問題,排除程式碼的問題;

  • 我開始懷疑是自己環境的問題,於是我就開始折騰了。我把專案刪了,又從新開始建一個專案,但是還是不行。我發現只有這個專案是這樣的問題。於是我確定不是環境的問題。

    說明不是環境的問題,排除環境的問題

  • 我百度了一下,有人說可能是 Homestead.yaml 的問題,但是我仔細對照了一邊,我也沒有發現的那裡出問題了。於是我就 Google 了一下,也沒有找到好的原因。

    排除虛擬機器配置的問題

  • 於是我就再想不是環境的問題,不是程式的問題~~~;最後覺得應該去虛擬機器裡面看看,最後我在 ngnix 的日誌中看到這個錯誤。

    2019/05/23 12:31:44 [error] 5085#5085: *1 FastCGI sent in stderr: "PHP message: PHP Warning:  Unknown: open_basedir restriction in effect. File(/home/vagrant/Code/haopai-git/public/index.php) is not within the allowed path(s): (/www/wwwroot/dev.guooo.top/:/tmp/:/proc/) in Unknown on line 0
    PHP message: PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0
    Unable to open primary script: /home/vagrant/Code/haopai-git/public/index.php (Operation not permitted)" while reading response header from upstream, client: 192.168.10.1, server: hp.hopa.cc, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "hp.hopa.cc"
  • 看到上面的錯誤,我也去網上找,網上主要是說 ngnix 裡面配置 fastcgi_param 的問題,但是我覺得不對吧,因為別的專案都沒有問題,單單就這個專案有問題。不知怎麼了,我就注意到 "/www/wwwroot/" 這個東西,我電腦裡就不應該有這個資料夾啊,於是我就去專案裡查詢這個字串,最後在 .user.ini 這個檔案找到了,當我看到這個檔案的時候我就意識到是他的問題,我把這個檔案裡面的配置刪了。檔案內容如下:

    open_basedir=***********
  • 好了,問題解決了。

    反思

    之後回過頭來想想,其實一開始就應該想到去看看 ngnix 的日誌。之前也接觸過 .user.ini 這個檔案,那時只記得他是防治跨站攻擊用的。

    .user.ini 知識點

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

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

    在 .user.ini 風格的 INI 檔案中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 設定可被識別。

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

相關文章