構造の例を次に示します。
/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を正しく表示するには、CSSのlink rel
を../css/style.css
に変更する必要がありますが、そうすると、メインディレクトリにあるファイルでは機能しません。
問題を明確にしたいと思います。私は何が間違っているのですか?異なるディレクトリのファイルを含めて、その中のリンクを保持するにはどうすればよいですか?
サイトの<head>
セクションに、 <base>
要素 とhref
属性を挿入します。 href
属性をWebサイトのベースURLに設定すると、すべてのrelativeリクエストがそのベース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
からスタイルシートを読み込もうとします。
注:これはスタイルシートだけでなく、ドキュメント内のすべての相対リンクにも影響します。
これは、インクルードでパスがどのように機能するかと関係があります。可能な限り、ドキュメントルートからパスすることをお勧めします。
<?php include( $_SERVER['DOCUMENT_ROOT'] . '/header.php' ); ?>
これはどのファイルでも機能します。
相対パスを使用する代わりに:
href="css/style.css"
webrootからの絶対パスを使用します。
href="/css/style.css"
まず、問題は、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
を使用します
ルートからcssファイルを含める必要があります。したがって、/ css/style.cssは、常にルートから開始し、そこから下に移動するようにします。私はそれがすべての場合にあなたの問題を解決するはずだと信じています。
あなたの問題とその解決方法を説明してもいいですか。
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。変数
リポジトリ/ウェブサイトのルートディレクトリへの相対パスを含む変数を使用できます。したがって、ページを含めるか作成する必要があるたびに、次のように変数を定義する必要があります。
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'
?>
インクルードの詳細については、 このページを参照
2つのオプションがあります
すなわち。
<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" />
インクルードとしてすでに呼び出されているファイルからの相対インクルードを使用することは常に問題です。相対的な場所を指定するたびに、
_../some_directory/some_file.php
_
と
_dirname(dirname(__FILE__)) . '/some_directory/some_file.php'
_
dirname(__FILE__)
は現在のディレクトリです。