この記事では、PHP ファイルのディレクトリ構成における open_basedir の使用方法とパフォーマンスを主に紹介します。興味のある方は参考にしていただければ幸いです。
1. open_basedir の概要
open_basedir は、php が開くことができるファイルを、ファイル自体を含む指定されたディレクトリ ツリーに制限します。プログラムが fopen() や file_get_contents() などを使用してファイルを開くと、ファイルの場所がチェックされます。ファイルが指定されたディレクトリ ツリーの外にある場合、プログラムはそのファイルを開くことを拒否します。
このコマンドは、セーフモードのオン/オフの影響を受けません。
2. Open_basedirの設定方法
1. php.iniに
2を追加します。 ini_set( 'open_basedir ', 'ディレクトリを指定します');
ただし、この方法は推奨されません3. Apacheのhttpd.confのディレクトリ設定
php_admin_value open_basedir "ディレクトリを指定"
httpd.confのVritualHostphp_admin_value open_basedir "ディレクトリを指定"
4.nginx fastcgi.conffastcgi_param PHP_VALUE "open_basedir=ディレクトリを指定"
open_basedir で指定される制限は、実際にはディレクトリ名ではなくプレフィックスです。 つまり、open_basedir=/home/fdipzone は /home/fdipzone_abc へのアクセスも許可します。ディレクトリへのアクセスを制限したい場合は、パス名の末尾にスラッシュを使用してください。例: open_basedir=”/ home/fdipzone/”If 複数のディレクトリを設定するには、Windows では; を使用してディレクトリを分割し、Linux では: を使用してディレクトリを分割します。
3. open_basedir を使用してディレクトリアクセスを制限します
まず VirtualHost を作成し、
上部の /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 は警告を表示します
警告: file_get_contents(): open_basedir 制限が有効です。ファイル (../test.txt) が許可されたパス内にありません: (/home/fdipzone/sites/in.fdipzone. com/) in /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('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;
}
?>
実行時間
137.237072ミリ秒Open_basedirテスト
実行時間 404.207945 ms
open_basedir をオンにすると、実行時間はオフにした場合の 3
倍になります。
概要:
open_basedir を使用すると、プログラムが操作できるディレクトリとファイルを制限し、システムのセキュリティを向上させることができます。ただし、I/O パフォーマンスに影響し、システムの実行速度が低下するため、特定のニーズに応じてセキュリティとパフォーマンスのバランスを取る必要があります。 以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。
関連する推奨事項:
PHP
データベースに接続する 3 つの方法PHP 参照変数の知識の詳細な説明
PHP のカップリングデザインパターン
以上がphp ファイルには、ディレクトリ構成 open_basedir の使用法とパフォーマンスが含まれていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。