ホームページ >バックエンド開発 >PHPチュートリアル >PHPファイルのディレクトリ構成におけるopen_basedirの使用とパフォーマンス解析について

PHPファイルのディレクトリ構成におけるopen_basedirの使用とパフォーマンス解析について

jacklove
jackloveオリジナル
2018-06-08 18:03:472264ブラウズ

#1. open_basedir の概要

##open_basedir

PHP が開くことができるファイルを指定されたディレクトリ ツリーに制限する、ファイル自体も含みます。プログラムが、たとえば fopen() または file_get_contents() を使用してファイルを開く場合、ファイルの場所がチェックされます。ファイルが指定されたディレクトリ ツリーの外にある場合、プログラムはそのファイルを開くことを拒否します。 このコマンドは、セーフ モードのオンまたはオフの影響を受けません。


2.open_basedir 設定方法

1.php.ini に

open_basedir="指定目录"

2 を追加プログラム内で

ini_set('open_basedir', '指定目录');
を使用しますが、この方法は推奨されません

3. Apache の httpd.conf

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/”

複数のディレクトリを設定する場合、Windows では; を使用してディレクトリを分割し、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を作成して次のコードを実行します

<?phpecho file_get_contents(&#39;../test.txt&#39;);?>

Because test .txt は制限されたディレクトリ範囲内にないため、php は警告を表示します

警告: file_get_contents(): open_basedir 制限が有効です ファイル(../test.txt) は許可されたパス内にありません。 : ( /home/fdipzone/sites/in.fdipzone.com/) /home/fdipzone/sites/in.fdipzone.com/index.php の 3 行目


4 .open_basedir 設定のパフォーマンス分析

open_basedir をオンにすると、呼び出されたファイルが制限されたディレクトリにあるかどうかを判断する必要があるため、I/O に影響します。 #テスト プログラム。制限付きディレクトリ内の同じファイルを 10,000 回読み取ります。
<?php// 记录开始时间$starttime = getMicrotime();// 读取10000次文件for($i=0; $i<10000; $i++){
    file_get_contents(&#39;test.txt&#39;);
}// 记录结束时间$endtime = getMicrotime();

printf("run time %f ms\r\n", ((float)($endtime)-(float)($starttime))*1000);function getMicrotime(){
    list($usec, $sec) = explode(&#39; &#39;, microtime());    return (float)$usec + (float)$sec;
}?>

open_basedir テストを閉じます

実行時間

137.237072 ミリ秒


open_basedir テストを開く 実行時間

404.207945 ms


open_basedir を開いた後、実行時間はクローズされます3 回。

概要: open_basedir を使用すると、プログラムが操作できるディレクトリとファイルを制限し、システムのセキュリティを向上させることができます。ただし、I/O パフォーマンスに影響し、システムの実行速度が低下するため、特定のニーズに応じてセキュリティとパフォーマンスのバランスを取る必要があります。

この記事では、ディレクトリ構成を含む php ファイルである open_basedir の使用法とパフォーマンス分析について説明します。関連コンテンツの詳細については、php 中国語 Web サイトを参照してください。

関連する推奨事項:

Ajax クロスドメイン アクセスにおける Cookie 損失の解決策の説明

mysql の key_len について計算方法の説明

curl を使用して php 経由でアクセスする IP とソースをシミュレートする方法

以上がPHPファイルのディレクトリ構成におけるopen_basedirの使用とパフォーマンス解析についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。