<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## **防跨目錄設置** 將lnmp的nginx配置文件中root設置為` /home/wwwroot/public/`后訪問thinkphp提示`Warning: require(): open_basedir restriction in effect`這是因為lnmp默認開啟了open_basedir的原因,如fopen()或file\_get\_contents()只能打開一個public文件夾類的文件,開始在nginx.conf沒有找到open_basedir選項,然后在fastcgi.conf中找到了內容如下:`fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";` 由此可知$document_root就是我們在nginx.conf設置的root目錄我們只能打開public里的文件,我們用#注釋就可以了,由于在這臺服務器上只部署了一個項目,且open_basedir會影響i/o,所以我們直接注釋掉這段就好了 如果配置多個項目時 ` LNMP 1.1及之前的版本使用php.ini里面,[open\_basedir設置](http://www.vpser.net/security/lnmp-cross-site-corss-dir-security.html) LNMP 1.2及更高版本防跨目錄功能使用.user.ini,該文件在網站根目錄下,可以修改.user.ini 里面的open\_basedir的值來設置限制訪問的目錄或刪除來移除防跨目錄的設置。 .user.ini文件無法直接修改,如要修或刪除需要先執行:chattr -i /網站目錄/.user.ini 可以使用[winscp文件管理](https://www.vpser.net/manage/winscp.html)、[vim編輯器](http://www.vpser.net/manage/vi.html)或[nano編輯器](http://www.vpser.net/manage/nano.html)進行修改。 刪除的話rm -f /網站目錄/.user.ini 就可以。 修改完成后再執行:chattr +i /網站目錄/.user.ini .user.ini不需要重啟一般5分鐘左右生效,也可以重啟一下php-fpm立即生效。 **如果要更改網站目錄必須要按上述方法修改防跨目錄的設置,否則肯定報錯!!** LNMP 1.4或更高版本如果不想用防跨目錄除需要刪除.user.ini的防跨目錄的目錄還需要將 /usr/local/nginx/conf/fastcgi.conf 里面的fastcgi\_param PHP\_ADMIN\_VALUE "open\_basedir=$document\_root/:/tmp/:/proc/"; 在該行行前添加 # 或刪除改行,需要重啟nginx。 LNMP 1.4或更高版本也可以直接使用lnmp安裝包 tools/ 目錄下的 ./remove\_open\_basedir\_restriction.sh 進行移除。 **在Thinkphp、codeigniter、Laravel等框架下,網站目錄一般是在public下,但是public下的程序要跨目錄調用public上級目錄下的文件,因為LNMP默認是不允許跨目錄訪問的,所以都是必須要將防跨目錄訪問的設置去掉,有時候這些框架類的程序提示500錯誤也可能是這個問題引起的。** LNMPA或LAMP 模式1.2版本或更高版本的防跨目錄的設置使用的對應apache虛擬主機配置文件(lnmp管理工具添加的話文件是 /usr/local/apache/conf/vhost/域名.conf )里的php\_admin\_value open\_basedir參數進行設置。如果不需要防跨目錄設置可以在 php\_admin\_value open\_basedir 該行前面加 # 進行注釋,或自行修改參數后面的目錄。 重啟apache生效。 # 說明 ## **1.open\_basedir介紹** 前言:前些日我用lnmp一鍵安裝包出現了open\_basedir的問題,因為我把項目目錄變了,所以要在的**fastcgi.conf**下面加上open\_basedir的目錄 open\_basedir?將[PHP](http://lib.csdn.net/base/php "PHP知識庫")所能打開的文件限制在指定的目錄樹中,包括文件本身。當程序要使用例如fopen()或file\_get\_contents()打開一個文件時,這個文件的位置將會被檢查。當文件在指定的目錄樹之外,程序將拒絕打開。 本指令不受安全模式打開或關閉的影響。? ## **2.open\_basedir設置方法** **1.在[php](http://lib.csdn.net/base/php "PHP知識庫").ini 加入** ~~~ open_basedir="指定目錄" ~~~ **2.在程序中使用** ~~~ ini_set('open_basedir', '指定目錄'); ~~~ **3.在apache的httpd.conf中的Directory配置** ~~~ php_admin_value open_basedir "指定目錄" ~~~ **httpd.conf中的VritualHost** ~~~ php_admin_value open_basedir "指定目錄" ~~~ **4.nginx fastcgi.conf** ~~~ fastcgi_param PHP_VALUE "open_basedir=指定目錄" ~~~ 用open\_basedir指定的限制實際上是前綴,不是目錄名。? 也就是說 open\_basedir=/home/fdipzone 也會允許訪問/home/fdipzone\_abc,如果要將訪問限制為目錄,請使用斜線結束路徑名,例如:open\_basedir=”/home/fdipzone/” 如果要設置多個目錄,window使用;分隔目錄,[Linux](http://lib.csdn.net/base/linux "Linux知識庫")使用:分隔目錄。 ## **3.使用open\_basedir限制目錄訪問** 首先創建一個VirtualHost,? 設置open\_basedir 為/home/fdipzone/sites/in.fdipzone.com/ ~~~ <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /home/fdipzone/sites/in.fdipzone.com ServerName in.fdipzone.com php_admin_value open_basedir "/home/fdipzone/sites/in.fdipzone.com/" <Directory "/home/fdipzone/sites/in.fdipzone.com"> allow from all Options + Indexes </Directory> </VirtualHost> ~~~ 在上一層目錄 /home/fdipzone/sites/ 中創建一個test.txt文件,在in.fdipzone.com中創建php執行以下代碼 ~~~ <?php echo file_get_contents('../test.txt'); ?> ~~~ 因為test.txt不在限定的目錄范圍內,因此php提示警告? Warning: file\_get\_contents(): open\_basedir restriction in effect. File(../test.txt) is not within the allowed path(s): (/home/fdipzone/sites/in.fdipzone.com/) in /home/fdipzone/sites/in.fdipzone.com/index.php on line 3 ## **4.設置open\_basedir的性能分析** open\_basedir開啟后會影響I/O,因為每個調用的文件都需要判斷是否在限制目錄內。 [測試](http://lib.csdn.net/base/softwaretest "軟件測試知識庫")程序,讀取限制目錄內同一文件10000次 ~~~ <?php // 記錄開始時間 $starttime = getMicrotime(); // 讀取10000次文件 for($i=0; $i<10000; $i++){ file_get_contents('test.txt'); } // 記錄結束時間 $endtime = getMicrotime(); printf("run time %f ms\r\n", ((float)($endtime)-(float)($starttime))*1000); function getMicrotime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; } ?> ~~~ **關閉open\_basedir測試**? run time?137.237072 ms **打開open\_basedir測試**? run time?404.207945 ms **開啟open\_basedir后,執行時間是關閉的3倍。** **總結:** 使用open\_basedir可以限制程序可操作的目錄和文件,提高系統安全性。但會影響I/O性能導致系統執行變慢,因此需要根據具體需求,在安全與性能上做平衡。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看