質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

3回答

2646閲覧

ファイルの読み込み・呼び出しによる階層のズレについて

k.t.est

総合スコア49

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

1クリップ

投稿2019/01/29 06:32

MAMPの設定が悪いのか、下記のようなディレクトリ構造で、ファイルの読み込みをすると、1階層ズレてしまいます。
何が原因なのでしょうか?

ディレクトリ構造
root/path/index.php
root/path/js/hoge.js
root/path/other/fuga.html

index.php

html

1<!DOCTYPE html> 2<html> 3<head> 4<?php include_once (dirname(__FILE__).'/other/fuga.html');?>

fuga.html(読み込めないパターン)

html

1<script src="../js/hoge.js"></script>

fuga.htmlでhoge.jsの読み込みの階層を1階層浅くすると、問題なく読み込めます。

fuga.html(読み込めるパターン)

html

1<script src="./js/hoge.js"></script>

上記読み込めないパターンの書き方の方がしっくりくるのでこの書き方としたいのですが、どのようにすればいいのでしょうか?ご教示頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

index.phpでincludeしている以上はindex.phpからのパスになるので仕方がないかと思います。
ドキュメントルートからの絶対パスにすればそこの問題はおきないのではないでしょうか。
root/path/がドキュメントルートなら
<script src="/js/hoge.js"></script>
root/がドキュメントルートなら
<script src="/path/js/hoge.js"></script>

投稿2019/01/29 06:54

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.t.est

2019/01/29 07:31

ご回答有難う御座いました!無事解決致しました!
guest

0

ベストアンサー

相対パスは、ブラウザから見たURLでの判断となります。中身をいくらincludeしていようが、ブラウザから見れば/index.phpにアクセスしているので、/からの相対で考える必要があります。


上記読み込めないパターンの書き方の方がしっくりくるのでこの書き方としたいのですが、どのようにすればいいのでしょうか?

そもそも論として、PHPで動的ページを作るような環境において相対パスを使うことは、「どこをアドレスの基準にするか」が煩雑化するだけで、ほぼメリットがありません。/js/hoge.jsと絶対パスで書くことをおすすめします。

投稿2019/01/29 06:53

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.t.est

2019/01/29 07:32

ご回答有難う御座いました!無事解決致しました!
guest

0

index.phpfuga.htmlincludeしているので、
../js/hoge.jsで探しに行くのは/pathの直下ではなく、/rootの直下になります。
/root直下に/jsは存在しないので読み込めないのは道理かと。

HTML,CSS,JAVASCRIPTのパス指定

PHP でファイルをインクルードするときは絶対パスを使おう

3番目がポイントです。/include/inc.php の記述を見ると、自分自身と同階層にある module.php をインクルードするように見えます。しかし、include 文のパスは実行したファイルからの相対パスとして解釈されるため、/index.php と同階層の module.php がインクルードされるのです。

投稿2019/01/29 06:53

madoka9393

総合スコア992

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.t.est

2019/01/29 07:32

ご回答有難う御座いました!無事解決致しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問