ホームページ  >  記事  >  バックエンド開発  >  php ファイルには、ディレクトリ構成 open_basedir の使用法とパフォーマンスが含まれています

php ファイルには、ディレクトリ構成 open_basedir の使用法とパフォーマンスが含まれています

墨辰丷
墨辰丷オリジナル
2018-05-24 11:12:291603ブラウズ

この記事では、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の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/”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(&#39;../test.txt&#39;);
?>

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(&#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

データベースに接続する 3 つの方法


PHP 参照変数の知識の詳細な説明

PHP のカップリングデザインパターン

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

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