日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » includeについて

includeについて

ページ: 1

投稿者 投稿
会員
登録者: 7 2010
返信数: 5
サイトの共有部分のメーニュー等を <?php include ’xxxxx.php'; ?> を使い表示させたいのですが、各ページの階層が変わっても xxxxx.phpに書いてあるリンクが、階層に合わせて変化しないため、うまく利用できません。これは階層毎のxxxxx.phpを作らなければいけないのでしょうか?

それともうまくできる方法が有りますでしょうか。

素人質問で申し訳ございませんが、ご存じの方いらっしゃいましたら教えて頂けますでしょうか。
会員
登録者: 8 2009
返信数: 103
こんにちは。

ドメインを省いた絶対パスのリンクにしてみては?


追記
ここのテストでのマルチはいいんだけどね。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1244376962
途中で文章が途切れているのが気になる。
« 最終編集者 nulla 日時 2010 年 7 月 29 日(木) 11:48. »
会員
登録者: 7 2010
返信数: 5
<?php include 'http://△△△.○/○xxxxx.php'; ?>
としても問題ないのでしょうか?
会員
登録者: 7 2010
返信数: 5
間違えました。
<?php include 'http://△△△.○○/xxxxx.php'; ?>
会員
登録者: 8 2009
返信数: 103
こんばんは。

> xxxxx.phpに書いてあるリンクが、階層に合わせて変化しないため、うまく利用できません。
とありましたので、htmlのa要素のことかと思っていたのですが違うのでしょうか?

# すでに回答はあちらにあるようですが。
会員
登録者: 7 2010
返信数: 5
スイマセン。テストしていたら、xxxx.php内のリンクは問題ではなく、そもそもxxxx.phpが見つからないという事でした。
会員
登録者: 8 2009
返信数: 103
こんばんは。
階層が異なるため xxxxx.php が見つからないということですか。
解決策は3つ程ありますね。

1.
php.ini の include_path にxxxxx.phpが存在する絶対ディレクトリパスを追加設定し

include("xxxxx.php");

2.
ini_setを使って上記と同様のことをする。

ini_set('include_path', 'xxxxx.phpが存在する絶対ディレクトリパス' . PATH_SEPARATOR . ini_get('include_path'));
include("xxxxx.php");

3.
絶対ディレクトリパスで include する。

include("xxxxx.phpが存在する絶対ディレクトリパス/xxxxx.php");


相対パスを入れると4つかな。

# すでに回答はあちらにあるようですが。
会員
登録者: 9 2010
返信数: 17
本スレと同様の問題を抱えておりますので、スレの乱立を避けるため、済みませんがstaさんのスレに便乗させていただきます。

当方も、上述のリンク先のYahoo知恵袋を検索してみつけてはいたのですが、ひとつ試すのにわからない点がありましてお尋ねします。
以下が内容ですが、

------------------------------------------------------------
絶対パスを使うのが一番楽でしょう
ドメインが変わっても使えるようにトップのアドレスを
$topURL="http//www.○○○.△△";
と、設定して
リンクの部分は
echo "<a href=".$topURL."/****/**.html>****</a>";
とすればよいでしょう
------------------------------------------------------------

これが正のひとつでなおかつ非常にカンタンそうに見えるので採用したいのですが、
プログラミングが無知なためうまくいきませんでした。どのようにすればいけるでしょうか?


【 おこなったこと 】
事前情報
hontai.php・・・・・外部の共通部分の.phpファイルを記述する元のWebページ
header.php・・・・・外部の.phpファイル。ヘッダーのソースが記述されてある


●「$topURL~」を記述するファイルは、hontai.phpの一番最初に記述した

 以下のように記述した。
 <?php $topURL="http//www.mysite.com"; ?>

 一番最初に記述したのは、それまで一番最初に記述していたのが
 いきなりinclude_once記述(last-modifiedを取得するためのソース)だったから、
 ここで$topURLが使われてしまうので、それよりも先に記述しないといけないと
 思った。

●hontai.phpのinclude_onceに以下のように記述した

<?php include_once(".$topURL./cmn/inc/header.php"); ?>

Yahoo知恵袋では、ここがアンカーリンクになっていた。アンカーリンクも
本件のようにディレクトリを気にせず常にドメイン直下(ROOT?)から
記述することができれば良いのだが、「まずは外部ファイルへのパスを」
と思い、このように実験した。

●エラー内容
Warning: include_once(.http//www.mysite.com./cmn/inc/header.php) [function.include-once]: failed to open stream: No such file or directory in /serverpass/mysite.com/item/hontai.php on line 19

Warning: include_once() [function.include]: Failed opening '.http//www.mysite.com./cmn/inc/header.php' for inclusion (include_path='.:') in /serverpass/mysite.com/item/hontai.php on line 19


この失敗を受けて、"でくくるのがいけないのか?と思い、"をなしにして以下のようにやってみましたがダメでした。

hontai.php
<?php include_once("$topURL/cmn/inc/header.php"); ?>

この場合のエラー内容
Warning: Cannot modify header information - headers already sent by (output started at /serverpass/mysite.com/item/hontai.php:3) in /serverpass/mysite.com/cmn/inc/last-mod.php on line 4

Warning: include_once() [function.include-once]: URL file-access is disabled in the server configuration in /serverpass/mysite.com/item/hontai.php on line 19

Warning: include_once(http://www.mysite.com/cmn/inc/header.php) [function.include-once]: failed to open stream: no suitable wrapper could be found in /serverpass/mysite.com/item/hontai.php on line 19

Warning: include_once() [function.include]: Failed opening 'http://www.mysite.com/cmn/inc/header.php' for inclusion (include_path='.:') in /serverpass/mysite.com/item/hontai.php on line 19


どなたか解決策おわかりの方いらっしゃいましたら何卒宜しくお願いいたします。
« 最終編集者 whatsthestory 日時 2010 年 9 月 7 日(火) 11:55. »
会員
登録者: 8 2009
返信数: 103
こんにちは。
すでに終わっている(と思われる)トピックなので新規でよいと思いますよ。


> <?php include_once(".$topURL./cmn/inc/header.php"); ?>
これは
<?php include_once(".http//www.mysite.com./cmn/inc/header.php"); ?>
となるのですが、元記事の『 . (ドット)』の意味はご存知ですよね?

仮に.(ドット)をなくしても
<?php include_once("http//www.mysite.com/cmn/inc/header.php"); ?>
header.phpをphpのソースとして取り込むことはできませんよ。
phpで処理した結果が取り込まれます。

> どのようにすればいけるでしょうか?
/(root)からの絶対パスを指定する。
もしくはディレクトリ毎に相対パス指定ですね。


おっと、ここまで書いてたら編集された。けれど本質は同じなのでこのまま投稿します。
サーバサイドとクライアントサイドの区別ができないと、はまりますよ。
会員
登録者: 9 2010
返信数: 17
nullaさま、毎度ありがとうございますm(_ _)m

> すでに終わっている(と思われる)トピックなので新規でよいと思いますよ。

そうでしたか、新規で良かったでしたか。


> となるのですが、元記事の『 . (ドット)』の意味はご存知ですよね?

HTMLとしてのリンクの記述方法は理解しているのですが、その場合、ドットなんて
普通使いませんよね。そういうHTMLでの意味ならばわかるのですが
その理解でいいのかまではわかっておりません。
HTMLとしてならば当然ドットなんて入るのはおかしいと感じたんですが、
PHPのソース内だと違う意味を持つのかなぁと思いまして汗;
でなければ知恵袋の投稿者もわざわざドットでくくるなんてするはずないだろうと
いう認識でGOしました(苦笑


> 仮に.(ドット)をなくしても
> <?php include_once("http//www.mysite.com/cmn/inc/header.php"); ?>
> header.phpをphpのソースとして取り込むことはできませんよ。
> phpで処理した結果が取り込まれます。

なるほど、ドットをリンクURL内に入れるのは間違っていただけなんですね。
しかも、HTML的に正しくリンクURLを書いたとしてもPHPでは動かないんですねぇ。。。
ふぅ~ぬ。。。


>> どのようにすればいけるでしょうか?
> /(root)からの絶対パスを指定する。
> もしくはディレクトリ毎に相対パス指定ですね。

はい! 実はたった今、何とかできたようなんです!
スレ投稿後、自分でもネットで探し回ってあれテストしてダメ、これテストしてダメ、
とやり続けて、サーバ業者にダメもとで電話したりして、
自分としては奇跡的に解決いたしました・・・

ROOT権限ないサーバですが、ドメイン直下のディレクトリにphp.iniなるものを
つくり、includeのパスの呪文を記述することによって、できましたぁ。。。
ここのスレに自己解決レスつけようかとしてリロードしましたところ
nullaさまからご回答が! ご面倒おかけいたしました。本当にありがとうございます!

includeパスの汎用パス化ができたので、あとはlinkパスの汎用パス化と、画像リンクのそれの調査を頑張ります!
« 最終編集者 whatsthestory 日時 2010 年 9 月 7 日(火) 15:36. »
会員
登録者: 8 2009
返信数: 103
気になるので1点。

二重引用符外の.(ドット)は文字列の連結を意味します。
(プログラムだからドットではなくてピリオドかも)

$topURL="http//www.○○○.△△";
echo "<a href=".$topURL."/****/**.html>****</a>";
これはクライアントサイド(またはUA、同じだけど)に
<a href=http//www.○○○.△△/****/**.html>****</a>
と出力します。
会員
登録者: 9 2010
返信数: 17
すみません、ほんとにありがとうございますm(_ _)m
おかげさまで、/(root)からの絶対パスを指定する、php.iniにたどり着いた気がいたします。

> 二重引用符外の.(ドット)は文字列の連結を意味します。
> (プログラムだからドットではなくてピリオドかも)

なるほど、ピリオドかぁ。つなぐのですね。JavaScriptの「,」みたいなものなんですね。
勉強になります。


>> $topURL="http//www.○○○.△△";
>> echo "<a href=".$topURL."/****/**.html>****</a>";
> これはクライアントサイド(またはUA、同じだけど)に
> <a href=http//www.○○○.△△/****/**.html>****</a>
> と出力します。

私も今日「echo」とは何者だ?というのを調べていたのですが、echo内に記述したソースを
ブラウザに出力することなんですね。勉強になります。
PHPのコードを書くためにechoを使う場合が必要になってくるのだと想像しております。

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » includeについて

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています