0

PHPファイルで特定の関数を何度も使用していることに気付いたので、それらすべてから関数を取り出して、別のPHPファイルに入れ、必要な場所に含めました。

関数を更新すると、それを使用するすべてのファイルが更新されます。素晴らしい。

ここで問題が1つだけあります。関数自体が相対URLを使用し、PHPをインクルードすると、ファイルは、インクルードされたPHPディレクトリではなく、呼び出し元のPHPに相対的です。迅速で汚い答えは絶対リンクを使用することですが、含まれているPHPを取得して、それを呼び出したPHPではなくITSELFを参照するようにするにはどうすればよいですか。

例:

index.phpには、create_table.php .....というファイルが含まれています。create_table.phpは、CSSとjavascriptをindex.phpにエコーします。CSSとjavascriptはcreate_table.phpと同じディレクトリにありますが、src = "javascript.js"を使用する場合、create_table.phpが配置されている場所ではなく、index.phpが配置されているjavascript.jsを検索する必要があります。

編集:構造がどのように機能するか

/includes/create_table.php
/includes/style.css
/includes/javascript.js
/test/dir/1/2/3/index.php

したがって、/includes/javascript.jsを検索する代わりにsrc = "javascript.js"を使用しようとすると、 / test / dir / 1/2/3/javascript.jsが検索されます。

4

4 に答える 4

2

絶対リンクの使用は「迅速で汚い」ではなく、絶対に必要なことです。
そして、あなたの問題はPHPとほとんど共通点がありません。HTMLの問題です。PHPがCSSファイルを呼び出すのではなく、 HTMLコードからリンクを読み取った後のブラウザです。

絶対パスの唯一の目的は、問題を解決することです。つまり、任意の場所から特定のファイルを見つけることです。
もちろん、URIではなくパスのみである必要があります。すべてのHTMLリンクは、パス部分に短縮できます(短縮する必要があります)。

/includes/javascript.jsを探す代わりに

ビンゴ!
したがって、このアドレス、絶対アドレスを探すように指示するだけです-/includes/javascript.js

于 2010-07-25T19:20:03.027 に答える
0

最終的には絶対パスを使用する必要があると思います。問題は、ハードコーディングせずにこれらの絶対パスを取得する方法です...

マジック定数を使用して__FILE__、現在のスクリプト(つまり、create_table.php)の絶対パスを取得してから、次のようにすることができます。

$filename = realpath(dirname(__FILE__).'/../../css/mystyles.css');

現在のスクリプトからの相対パスであることがわかっているファイルの絶対パスを取得します。(つまり、2つのディレクトリを上に移動してcss /に移動します)

または、別の方法で開始してを使用することもできます$_SERVER['DOCUMENT_ROOT']。あなたがあなたのウェブルートに関連するすべてのパスを知っていると仮定します。これが私の好みの方法です。


編集:私はあなたが上記をほとんど無視できると思います!私は(編集前に)あなたが文字通りCSSとJavaScriptファイルをサーバー側で読んでいて、その内容をindex.phpに追加していると仮定していました-私はそうは思いません!

再回答するには...まさにこの問題のため、クライアント側のCSSとJavaScriptに相対パスURLを使用することは決してありません。常に絶対URLを使用する人もいますが、個人的にはルート相対URLを好みます。このURLをサーバー側で生成する場合、それはそれほど重要ではありません。

ルート相対URL:/includes/style.css

これで何が間違っていると思いますか?私はこれが好まれたと言っただろう。

于 2010-07-25T19:21:47.207 に答える
0

PHP関数内からファイルを動的に要求するよりも、実行しようとしていることを処理するためのより良い方法がある可能性があります。

少なくとも、絶対パスが重要であり、通常は次のようにルートから絶対パスです。require_once( "/ lib / fileOne.php");

ない:require_once( "lib / fileOne.php");

于 2010-07-25T19:33:00.427 に答える
-1

つまり、常に必要となるファイルがあるということです。このファイルには、と比較する関数があり__FILE__ますSCRIPT_FILENAME。したがって、たとえば、includes/create_table.phpルートディレクトリへのパス../はフォルダの違いがあります1。パスがだった場合、includes/foo/create_table.phpルートへのパス../../は違い2などになります。

$dif_to_root=1;

for
(
$i=0,$path='';
$i<($dif_to_root-(count(explode('/',__FILE__))-count(explode('/',getenv('SCRIPT_FILENAME')))));
$i++
)$path.='../';

今、あなたのコードにsrc="$path.includes/style.css"

于 2010-07-25T19:43:15.047 に答える