1. 程式人生 > >PHP學習筆記【配置】open_basedir

PHP學習筆記【配置】open_basedir

最近開始學習YII2.0。剛開始的時候遇到了各種問題

Warning: require(): open_basedir restriction in effect. File(F:\newpro\Yii2basic\basic\vendor\autoload.php) is not within the allowed path(s):

像是這樣。

然後各種百度。。。說一下自己配置。 nginx+php5.4 在windows平臺下的。

最終知道是怎麼回事,給大家分享一下。php.ini裡面有這樣的一個配置open_basedir

.ini裡面的英文解釋是這樣的。

; if set, limits all file operations to the defined directory 
; and below. ;
 This directive makes most sense if used in a per-directory 
; or per-virtualhost web server configuration file.  ;This directive is  *NOT* affected by whether Safe Mode is turned On or Off. 
http://php.net/open-basedir 金山詞霸一下是這樣子滴: 1.如果設定,限制所有的檔案操作定義的目錄下。 2.本指令在每個目錄或虛擬主機Web伺服器的配置檔案是有作用。 3.本指令不受是否安全模式開啟或者關閉。(不受安全模式影響)
人話
就是: 1.限制了PHP專案的操作(執行)目錄。 2.如果設定了,則所有虛擬主機均要設定到open_basedir設定的目錄下。而且所有的虛擬主機都會收到他的影響。 3.這條指令的設定不受PHP的安全模式影響。是完全獨立的一條指令。
例如: 我的YII2.0 放到了  F:\newpro\Yiibase 裡面
nginx 伺服器虛擬主機設定的 root 路徑為 f:/newpro/Yii2basic/basic/web;(apache是一樣的)。 web目錄下的inde.php 檔案裡面有這樣一句話。 require(__DIR__ . '/../vendor/autoload.php');
此時open_basedir是註釋掉的。對應設定的 ServerName :  yiibase.com 此時,訪問 yiibase.com的時候會報錯, 就像開頭的那樣 沒有許可權訪問。open_basedir 限制效應。 說明預設PHP是不認可這種 require(__DIR__ . '/../vendor/autoload.php');
  訪問當前虛擬主機根目錄下的上級目錄的。
(請仔細理解這句話) 下面開啟,我這邊設定到 f:\newpro。 我自己的這個資料夾下。 開啟後,我所有的PHP專案虛擬主機目錄都要設定到這個目錄下了。此時訪問yiibase.com 也是OK的了。 但,我所有PHP專案都要設定到 newpro這個資料夾下了。 好吧,上面就是我在剛開始學習YII2.0的時候遇到的一個問題。可折騰死我了。後來發現其實是可以把入口檔案拿出來的,然後改一下訪問路徑即可。 網上也有人說不要開啟這個 open_basedir。是一些網路安全什麼的。具體我也不是很清楚。希望有大神能解答一下。