7

構造の例を次に示します。

/main
 /css
  style.css
 /include
  article1.php
  article2.php
 header.php
 index.php

私の header.php には、css の次のコードがあります。

<link rel="stylesheet" type="text/css" href="css/style.css" />

たとえば、私の index.php には、最初の行として次の行があります。

<?php include 'header.php'; ?>

これで、すべてがそのまま正常に動作します。次に、article1.php ファイルに次のコードを挿入します。

<?php include '../header.php'; ?>

コンテンツ (メニューやその他の html) は正しく表示されますが、CSS はまったく表示/認識されません。基本的に何が起こっているかというと、ヘッダー ファイルはインクルードされていますが、サーバーはディレクトリのペアレンティングを尊重していません。CSS を正しく表示するにはlink rel、CSS をに変更する../css/style.css必要がありますが、そうすると、メイン ディレクトリにあるファイルでは機能しません。

問題が明確になったことを願っています。私は何を間違っていますか?別のディレクトリからファイルを含めて、それらの内部のリンクを保持するにはどうすればよいですか?

4

8 に答える 8

20

サイトの<head>セクションに、属性を持つ<base>要素を挿入しhrefます。href属性を Web サイトのベース URL に設定すると、すべての相対リクエストがそのベース URL を介して送信されます。

<base href="http://my-website-url.com/" />
<link rel="stylesheet" type="text/css" href="css/style.css" />

タグが正しく設定されbaseていると、ユーザーのブラウザは URL からスタイルシートを読み込もうとしますhttp://my-website-url.com/css/style.css

注: これはスタイルシートだけでなく、ドキュメント内のすべての相対リンクにも影響します。

于 2013-03-28T14:39:06.803 に答える
15

これは、インクルードでパスがどのように機能するかに関係しています。可能な限り、ドキュメント ルートからパスを指定することをお勧めします。

<?php include( $_SERVER['DOCUMENT_ROOT'] . '/header.php' ); ?>

これは、どのファイルでも機能します。

于 2013-03-28T13:46:46.293 に答える
5

相対パスを使用する代わりに:

href="css/style.css"

webroot からの絶対パスを使用します。

href="/css/style.css"
于 2013-03-28T13:48:16.170 に答える
3

まず、問題は CSS ファイルへのリンクが間違っていることです。最善の方法は、ページからの HTML (ソースを表示) の出力を確認することです。それでは、それを分解してみましょう (index.php から):

Index.phpにありますdomain.tld/index.php。css ファイルは にありますdomain.tld/css/*。インデックス ファイルを表示すると、ヘッダーは

<link rel="stylesheet" type="text/css" href="css/style.css" />

あなたがディレクトリ(またはルート)の一番上にいて、リンクがこのディレクトリに対して相対的に作成されているため、これは機能します。に進むとdomain.tld/include/article1.php、もはやルートではありません。アクセスしようとしています:

domain.tld/include/css/style.css

これは、完全なリンクを作成するか、相対を変更する必要があることを意味します。CSS がルートにあるため、簡単な方法は、次のように使用することです。

<link rel="stylesheet" type="text/css" href="/css/style.css" />
                                             ^

これは、css ディレクトリとしてドメインのルートを参照することを意味しますdomain.tld/css/styles.css。トップディレクトリが の場合は/main/main/css/styles.css

于 2013-03-28T13:51:13.580 に答える
3

css ファイルをルートからインクルードする必要があります。したがって、/css/style.css のように、常にルートから開始し、そこから下に移動します。すべてのケースで問題が解決するはずです。

于 2013-03-28T13:46:54.490 に答える
2

既に include として呼び出されているフィールドからの相対 include を使用することは常に問題です。相対位置を指定するたびに、

../some_directory/some_file.php

dirname(dirname(__FILE__)) . '/some_directory/some_file.php'

dirname(__FILE__)現在のディレクトリです。

于 2013-03-28T13:51:35.473 に答える
2

あなたの問題とその解決方法を説明してもよろしいですか。

php のインクルードは C のように機能します。ページのコンテンツをコピーして最初のページに貼り付けるページをインクルードする場合。

したがって、次の 2 つのファイルがあります。

include.php

<?php
$var = 'PHP';
?>

main.php

<?php
include 'include.php';
echo $var; // affiche 'PHP'
?>

「main.php」ページをリクエストすると、次のようになります。

<?php
$var = 'PHP';
echo $var; // affiche 'PHP'
?>

したがって、ページに要素を含める必要がある場合。次の 2 つの選択肢があります。

1.絶対パス(より良い方法)

相対パスを使用する代わりに、絶対パスを使用します。この方法により、現在のパスを使用せずに、どこからでもファイルを含めることができます。

2.変数

リポジトリ/Web サイトのルート ディレクトリへの相対パスを含む変数を使用できます。したがって、ページを含めるか作成する必要があるたびに、次のように変数を定義する必要があります。

include.php

<?php
$var = 'PHP';
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$currentPath."css/style.css\" />";
?>

main.php

<?php
# path to the root of the website
$currentPath = "../";

include 'include.php';
echo $var; // affiche 'PHP'
?>

インクルードの詳細については、このページを参照してください

于 2013-03-28T13:58:31.047 に答える
1

2 つのオプションがあります

  1. インクルードされたファイルへの相対パスを渡します

すなわち。

<link rel="stylesheet" type="text/css" href="<?=$path ?>css/style.css" />

$path = "../";
include "header.php";

または 2. ファイルへの絶対パスを使用する

<link rel="stylesheet" type="text/css" href="/css/style.css" />
于 2013-03-28T13:51:23.470 に答える