ホームページ  >  記事  >  バックエンド開発  >  phpがルートディレクトリにアクセスすることに問題があるのでしょうか?

phpがルートディレクトリにアクセスすることに問題があるのでしょうか?

WBOY
WBOYオリジナル
2016-06-23 13:58:381252ブラウズ

私が使用しているシステムは 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

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 サイトのルート ディレクトリを構成ファイル内の変数に割り当ててから、必要に応じてそれを使用できます。

モデレータさん、ありがとうございます。しかし、/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' ] です。この変数を使用して / を置き換えると、再び機能します

/ を直接使用できないのはなぜですか?

? などのアプローチを受け入れてください。 / コマンドラインを使用する予定がない限り、これでうまくいきます

別の変数 $_SERVER['DOCUMENT_ROOT'] があることがわかりました。この変数を使用して / を置き換えると、再び動作します

なぜ / を直接使用できないのですか?

以前に誰かが答えませんでしたか? / を直接使用して、サイトのルート ディレクトリではなく、オペレーティング システムのファイル システムのルート ディレクトリを表します。

PhpNewnew、私の Web ページにはいくつかのレイヤーがありますが、header.inc.php と CSS スタイル シートはすべてルート ディレクトリに配置されているため、これらをルート ディレクトリから直接ロードする方がはるかに便利です。 ./ は現在のディレクトリのみを読み取ることができます

Novolee はそうですが、php では /var/www/html/head.inc.php として記述する必要があります。そのようなパスが誤って表示されるのではないかと少し心配です。ということで、今でも「DOCUMENT_ROOT」を使っています
皆さん、投稿していただきありがとうございます

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