web-dev-qa-db-ja.com

PHP絶対パスを含める

私のサイトには$ basePathという変数があり、次のように設定されています。

$basePath = '/Systems/dgw/';

私はすべてのcss、js、imagesタグでそれを使用しています(見やすくするために短縮されています):

<link href="<?php echo $basePath; ?>include/assets/css/bootstrap.min.css">

私はそれらのインクルードに問題はなく、どこにいても私がどんなフォルダにいてもうまく動作します。

次の行がある特定の組み込みページがあります。

<img src="<?php echo $basePath; ?>images/new_logo.png" alt="logo"/>

そして、画像はうまく表示されます。次の行:

<?php include($basePath.'include/assets/common/topMessages.php');?>

ただし、インクルードは発生しません。私はこれを試してみると:

<?php include('../../include/assets/common/topMessages.php');?>

できます。

誰が何が間違っているのか考えていますか?

16
digicom

Phpファイルをそのようにwebrootに相対的に含めることはできません。そのため、スラッシュを最初の文字として使用すると、参照はドキュメントルートだけよりも深くなります。したがって、ベースパスを使用する代わりに、次のようなことができます:

<?php 
   $path = $_SERVER['DOCUMENT_ROOT'];
   $path .= "/yourpath/yourfile.php";
   include_once($path);
?>
47
Laurent S.

サーバーが「document_root」を設定しない場合、これが必要になる場合があります



    require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/path/to/file.php");

このコード行を使用します。サイトツリーの「トップ」に戻り、目的のファイルに移動します。
たとえば、このファイルツリーがあるとします。
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php

コピーペーストするだけで、どこからでもfunctions.phpファイルを含めることができます。

require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/_resources/functions.php");



このコードを何度も使用する必要がある場合、「str_repeat( '../'、(substr_count(getenv( 'SCRIPT_URL')、 '/')-1))」を返す関数を作成できます。 「一部。次に、インクルードする最初のファイルにこの関数を挿入します。各phpページの一番上にインクルードし、この関数を含む「initialize.php」ファイルがあります。次回ファイルをインクルードする必要がある場合、実際には関数(「path_back」という名前)を使用するだけです。

require(path_back()."/_resources/another_php_file.php");
2
user4783311

include_path = ".:/home/myuser/mysite.com/"php.iniに追加するか、includeまたはrequireの前にスクリプトのようなものを追加できます。

set_include_path(get_include_path() . ":/home/myuser/mysite.com/");

最初のスクリプトは、Webサイトで実行されているすべてのスクリプトに対して機能します。

2番目のオプションは、コードにsetincludepathが含まれるスクリプトでのみ機能します。アプリケーションの残りの部分では、setincludepathを追加するすべてのスクリプトで呼び出すオブジェクトがない限り機能しません。

0
raphvon