3

メインディレクトリのページにインクルードするサイト全体のインクルードファイルがあります。ただし、サブディレクトリには、共通のテーマを持つ多数のページを配置しました。これらのページは、同じインクルードファイルを参照する必要があります。メインファイルがメインディレクトリにあるかサブディレクトリにあるかに応じて異なるパスを呼び出すため、画像などのインクルードファイル内の相対リンクで問題が発生しています。たとえば、インクルードがメインディレクトリから呼び出された場合、リンクは機能しますが、インクルードがサブディレクトリから呼び出された場合、リンク"images/pic.jpg"は移動しようとします。"sub/images/pic.jpg"

のようにルートに戻るハードリンクを使用して、これを解決しました/images/pic.jpg。ただし、サイトを別のディレクトリに移動すると壊れてしまう可能性があるため、ハードリンクは使用したくありません。

特定のインクルードを呼び出すすべてのページが同じディレクトリにある必要がありますか?または、インクルードがサブディレクトリから呼び出された場合でも、インクルード内の相対リンクを機能させるためのテクニックはありますか?

どうもありがとう。

4

6 に答える 6

3

HTML コンテンツの場合は、次のメタを使用してください:

<head>
    <base href="http://www.domain.ca/base/website/" target="_blank" />
</head>

このメタは各リンクに適用されます。したがって、リンクがimg/blablaサブサブサブフォルダー内にある場合、読み込まれる画像は base_href + src ... になります。

PHP 内では、スクリプトの先頭に変数を設定し、すべてのインクルードの前に置きます。すべての画像のロードなどの前に、この変数を書き込むこともできます。

于 2012-06-26T18:40:18.170 に答える
3

厳格なルールはありません。インクルードは好きなように処理できますが、一貫性を保つように努める必要があります。

私が管理していた最大のサイトには、数百のサブディレクトリに散在する数千のインクルード ファイルがありました。全体を通して絶対パスを使用し、1 つの変数を使用してルート ディレクトリを示し、必要に応じて残りのパスを連結しました。ファイルを移動する必要があるとき、その 1 つの変数を変更する必要があり、サイト全体が移動しました。

相対リンクを使用することもできますが、どのファイルがどこから呼び出されているかを把握しようとすると、より混乱することがわかりました。

于 2012-06-26T18:44:27.633 に答える
2

小規模なプロジェクトでは、単純な定数でこの作業をうまく行うことができます。2つのファイルが/homepage.phpあり/contact/form.php、両方のファイルに3番目のファイルが含まれていると仮定しますlayout.php。メインファイル(ホームページ+フォーム)は、ルートディレクトリを基準にした場所を伝播することになっています。定数を介したWebサーバーの

ホームページ.php

<?php
define('WEB_ROOT', './');  // relative path to /
include('layout.php');

contact / form.php

<?php
define('WEB_ROOT', '../');  // relative path to /
include('layout.php');

layout.php

<img src="<?php echo WEB_ROOT; ?>images/pic.jpg">
于 2012-06-26T22:53:01.607 に答える
1

もし私があなただったら、現在の作業ディレクトリをチェックし、それに応じて適切なパス ディメンションを追加する関数を (ある種の) 作成しようとします。

<?php

// current directory
echo getcwd() . "\n";
于 2012-06-26T18:41:06.343 に答える
1

あなたが実際に探しているのは..ディレクトリコマンドのようです。これは、「1 つ上のディレクトリに移動する」と表示されます。

から /:

include('includes/inc.php');

/sub から:

include('../includes/inc.php');


これはブラウザ側でも機能します。.. は、HTML、CSS、および JavaScript で使用できます。マジでどこでも使えます。特にコマンドラインで。

正直なところ、絶対パスを使用して、サイトへのパスを参照する定数を設定するだけです。そうすれば、必要なパスをその定数の最後に追加して絶対パスにすることができます。

于 2012-06-26T18:54:19.877 に答える
0

(またはPHP 5.3+ で)__FILE__ マジック定数を使用して、インクルードされたファイルへの相対パスを作成できます。dirname__DIR__

$image = dirname(__FILE__) . '/images/pic.jpg';

また

$image = __DIR__ . '/images/pic.jpg';
于 2012-06-26T18:41:35.557 に答える