web-dev-qa-db-ja.com

異なるフォルダーにあるphpファイルを含める

私のウェブサイトのほとんどは私のルートディレクトリにあります。そして、そのディレクトリには「css」、「functions」、「images」フォルダがあります。 index.phpまたはその他のルートファイルにphpファイルを含めると、すべて正常に機能します。それは正常に含まれ、正常に実行されます。

ただし、フォルダ「ブログ」を作成すると問題が発生します。したがって、これはまったく新しい、CMSと独自の「ルート」ファイルを含む別個のルートフォルダです。そして、メインルートディレクトリのcssまたはメインルートディレクトリの「functions」フォルダのいくつかのphpファイルを含めようとします。すべてが壊れます。 ../functions/myfile.comとして含める必要があることを知っています。ただし、このファイルには他のファイルが含まれているため、正常に機能せず、他のファイルを適切に含めることができません。

この問題を解決する方法はありますか?

12
FosAvance

$_SERVER['DOCUMENT_ROOT']を使用して、各サイト内から root にアクセスできます。 テストのみのために、パスをエコーアウトして、それが機能していることを確認することができます。正しい方法で行う場合物事のローカルサーバーパスを表示したくない includes および requires。など

サイト1

echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/';

サイト1の下に含まれるもの:

echo $_SERVER['DOCUMENT_ROOT'].'/includes/'; // should be '/main_web_folder/includes/';

サイト2

echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/blog/';

アクセスする実際のコードには、site1site2の中から含まれます:

include($_SERVER['DOCUMENT_ROOT'].'/../includes/file_from_site_1.php');

document rootおよびrootスラッシュを除外してアクセスしようとすると、クエリを実行するファイルの相対的な path のみを使用します。

 //(not as fool-proof or non-platform specific)
 include('../includes/file_from_site_1.php');

インクルードパスは、サイトのフロントエンド(ライブ)のコードにはどこにも存在しないため、セキュリティで保護して、運用環境のみで使用する必要があります。

さらに、サイト自体のURLについては、ドメインに関連するURLにすることができます。ブラウザはどのページを見ているかを知っているので、残りは自動的に埋められます。代わりに:

<a href='http://www.__domain__name__here__.com/contact/'>Contact</a>

以下を使用する必要があります。

<a href='/contact/'>Contact</a>

優れたSEOを実現するには、ブログのURLが他のドメインに存在しないことを確認する必要があります。そうでない場合、重複サイトとしてマークされる可能性があります。そうは言っても、 robots.txt ファイルの行を[〜#〜] only [〜#〜]site1

User-agent: *
Disallow: /blog/

その他の可能性:

IPアドレスを調べる に次のコードスニペットを含めます。

function is_dev(){
  //use the external IP from Google.
  //If you're hosting locally it's 127.0.01 unless you've changed it.
  $ip_address='xxx.xxx.xxx.xxx';

  if ($_SERVER['REMOTE_ADDR']==$ip_address){
     return true;
  } else {
     return false;
  } 
}

if(is_dev()){
    echo $_SERVER['DOCUMENT_ROOT'];       
}

ISPが [〜#〜] ip [〜#〜] を変更した場合、DCHP動的IPを使用している場合と同様に、そのファイルのIPを変更して結果を確認する必要があります。 thatファイルをインクルードに配置し、デバッグのためにページ上でそれを要求します。

ブラウザ コンソールログ の使用などの最新の方法で問題ない場合は、代わりにこれを実行し、ブラウザのデバッグインターフェイスで表示できます。

if(is_dev()){
    echo "<script>".PHP_EOL;
    echo "console.log('".$_SERVER['DOCUMENT_ROOT']."');".PHP_EOL;
    echo "</script>".PHP_EOL;       
}
21
AbsoluteƵERØ

私があなたを正しく理解している場合、あなたは2つのフォルダを持っています。1つは別のフォルダにあるファイルにincludeしたいPHPスクリプトを格納しますか?

この場合、正しい道をたどる必要があります。フォルダーが次のように設定されていると仮定しましょう。

root
    includes
        php_scripts
            script.php
    blog
        content
            index.php

これが提案されたフォルダ構造であり、「Script.php」ファイルを「index.php」フォルダに含めようとしている場合、次のように含める必要があります。

include("../../../includes/php_scripts/script.php");

私のやり方は視覚的です。 index.phpにマウスポインターを置いて(ファイル構造を見て)、フォルダーを上に移動するたびに、別の「../」と入力します。ダウンを開始したいこと。その後は、通常のフォルダー階層になります。

7
ntgCleaner

上記の回答のどれも私にとってこの問題を解決しませんでした。私は次のようにそれをしました(UbuntuサーバーでLaravel):

<?php
     $footerFile = '/var/www/website/main/resources/views/emails/elements/emailfooter.blade.php';
     include($footerFile);
?>
2
MBouwman

相対パスを使用しないようにしてください。 DocumentRootサーバー変数をグローバル変数に割り当て、そこから絶対パスを構築する汎用インクルードを使用します。または、大規模プロジェクトの場合、PSR-0 SPLオートローダーの実装を検討してください。

1