Apache設定に外部パスを追加する必要があります。 (httpd)
そのため、httpdルートフォルダにこのパスへのシンボリックリンクを作成しました。パスは/var/log/httpd/です(私のプロジェクトにログを直接表示したい)。
次のように入力して、ブラウザを介してすべてのパスにアクセスできます。http://127.0.0.1/httpd/
ただし、PHPファイルからそのファイルにアクセスしようとすると、PHPでエラーが発生します。
パスワード:
function logInfo() {
$log_path = $_SERVER['DOCUMENT_ROOT'] . "/httpd/local.cmp-error_log";
$php_log = file_get_contents($log_path);
print_r ($php_log);
}
間違い:
[Sun Jul 17 23:45:19.960292 2016] [:error] [pid 19451] [client 127.0.0.1:34718] PHP Warning: file_get_contents(/home/txx/http/www/httpd/local.cmp-error_log): failed to open stream: Operation not permitted in /home/txx/http/www/base_home/config/sys.php on line 8
ここでエラーはどこにありますか?
答え1
基本的なアイデアは、ドキュメントのルート外のファイルにアクセスできないことです。これがドキュメントルートのポイントです。 Apacheがルートディレクトリの外側のシンボリックリンクを追跡するのを防ぐために、いくつかの保護装置があります。あなたはする必要があります〜できるようにするFollowSymlinks
リンクを含むディレクトリにあるがファイルを参照できる場合は、これは完了です。
また、PHPがドキュメントルートに制限されていないことを確認する必要があります。バラよりこのスタックオーバーフローの質問:小切手にはphp.ini
この設定は含まれていませんopen_basedir
。もう一つの潜在的な制限はSELinuxです。システムが強化されると、PHPは事前定義された特定のディレクトリに制限される可能性があります。特に、ホームディレクトリへのアクセスが禁止されることがあります。また、見ることができますドキュメントルート外のファイルにアクセスする。
Webルート以外のコンテンツにアクセスできない場合や、システムのセキュリティをあまり弱くしたくない場合は、ApacheとPHPに別の場所を見つけることなく、Webルートにファイルを配置できます。 ㅏバインドマウントマウントされたディレクトリのビューを/var/log/httpd
作成します。/var/www/dangerous/logs
このビューを読み取り専用にすることができ、おそらくそうする必要があります。/var/log/httpd
/var/www/dangerous/logs