phpがルートディレクトリにアクセスすることに問題があるのでしょうか?
Jun 23, 2016 pm 01:58 PM 私が使用しているシステムは CentOS で、Web サイトのルート ディレクトリは /var/www/html で、index に require('head.inc.php') を指定すると、head.inc.php がルート ディレクトリに配置されます。 php、すべてが正常です。require('./head.inc.php')の場合は正常ですが、require('/head.inc.php')の場合は、エラーが発生しました。ストリームを開けませんでした。そのようなファイルまたはディレクトリはありません。
先頭のスラッシュはルートディレクトリを表します。設定が間違っていますか? Apache の DocumentRoot と Directory は両方とも /var/www/html に設定されており、www、html、および files は rwxr-xr-x に設定されています。他に設定する必要があるものはありますか?ありがとう!
ディスカッションへの返信 (解決策)
require('/head.inc.php') は /var/www/html/head.inc.php を参照します。これは、php が head.inc.php がphp ファイルではなく、パスの下の html ディレクトリ内のファイルです。
または、次のように書くこともできます: require(dirname(__FILE__).'/head.inc.php')
require は、Web のパスの代わりにファイル システムのパスを使用します
changjay と xuzuning ありがとうですが、 dirname( __FILE__) は現在のファイルのパスを取得しますよね。たとえば、ルート ディレクトリを取得したいとします。たとえば、サブディレクトリ ファイル /var/www/html/report/index.php がある場合、dirname( を使用する場合は、ルート ディレクトリに head.inc.php も必要になります。 __FILE__)、「/var/www/html/report/head.inc.php」になります
モデレーターがファイルシステムのパスについて言及したのが原因だと思います。/ に変更してみます。 var/www/html/head.inc.php
Web サイト ノードのルート ディレクトリが適切に構成されていないためですか?
モデレーター、ファイル システム ディレクトリに変更してみましたが、うまくいきました。
zmzkkk、Apache の DocumentRoot と Directory を /var/www/html に設定しました。他に変更する必要があるものはありますか?
インターネットでは、/ を使用することはルートディレクトリを意味すると言われていますが、この問題については長い間グーグルで調べましたが、これについて言及している人はほとんどいませんでした。解決策は?今夜投稿します
はい / はルート ディレクトリを意味します
Web サイトを構築しているので、2 つのシステムに直面する必要があります。つまり、ルートが 2 つあります
Web サイトのファイルは、オペレーティング システムのファイル システムに保存されます。 /var/www/html、/ はファイル システムのルートです
ブラウザは http://localhost /index.php にアクセスします、/ は Web システムのルートです
Web システムのルートは、ユーザーが指定します
DocumentRoot = /var/www/html などの Web サーバー
実際、php はすでに解決策を提供しています: include_path
モデレーターがファイルシステムのパスについて言及したのが原因だと思います。/ に変更してみます。 var/www/html/head. inc.php
モデレータさん、ありがとうございます。しかし、/etc/php.ini の include_path=".:/var/www/html" を変更しましたが、依然としてエラーが表示されます: Fatal error: require() [function.require]: Failed xxx の '/head.inc.php' (include_path='.:/var/www/html') を開く必要があります
変更後に Linux を再起動し、var、www、html、および html の下にあるすべてのファイルが 755 であることを確認しました。 SeLinux(getenforce=permissive) ですが、まだ間違っています。あなたが言ったように、require('/var/www/html/head.inc.php') に変更するだけです。もう一度確認します
Novolee、グローバル変数についても考えましたが、絶対パスは依然としてリークされますphp コード内で
別の変数 $_SERVER['DOCUMENT_ROOT'] があることがわかりました。この変数を使用して / を置き換えるとうまくいきました
なぜ / を直接使用できないのですか?は別の変数 $_SERVER['DOCUMENT_ROOT' ] です。この変数を使用して / を置き換えると、再び機能します
/ を直接使用できないのはなぜですか?
? などのアプローチを受け入れてください。 / コマンドラインを使用する予定がない限り、これでうまくいきます
なぜ / を直接使用できないのですか?
以前に誰かが答えませんでしたか? / を直接使用して、サイトのルート ディレクトリではなく、オペレーティング システムのファイル システムのルート ディレクトリを表します。
PhpNewnew、私の Web ページにはいくつかのレイヤーがありますが、header.inc.php と CSS スタイル シートはすべてルート ディレクトリに配置されているため、これらをルート ディレクトリから直接ロードする方がはるかに便利です。 ./ は現在のディレクトリのみを読み取ることができます
Novolee はそうですが、php では /var/www/html/head.inc.php として記述する必要があります。そのようなパスが誤って表示されるのではないかと少し心配です。ということで、今でも「DOCUMENT_ROOT」を使っています
皆さん、投稿していただきありがとうございます

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法
