こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

fputsで書き込みを行う際に、includeを使用したいです。

phpの初心者です。

どうぞよろしくお願いします。

ユーザーがクリックしただけでページが生成されていくといったような
サイトを現在作成しています。

以下、構造です。

index.php
regist.php
footer.inc
page(dir)---a(dir)-------index.php
      └b(dir)-------index.php
      └c(dir)-------index.php


動作としては、index.php(TOP階層)でリンクをクリックするとregist.phpにジャンプし、
regist.phpのプログラムの中で、page(dir)の中にa,b,c,d,e…とディレクトリが
自動生成されて、中にindex.phpファイルを生成します。

regist.phpの最後でheader("Location:")を使用し、生成されたページに自動的にジャンプします。

生成されたページのフッターに今までクリックされたリンクという紹介のようなものがあります。

そこの記述が
regist.php内の記述///////////////////
ob_start();
include("footer.inc");
$footer = ob_get_contents();
ob_end_clean();
fputs($fp, "$footer");

footer.inc内の記述///////////////////
<?php
$arr = scandir('./page/', 1);
foreach($arr as $key => $dir){
//リンク名を日本語に変換
$dir = str_replace("http://".$domein."/page", "http://".$domein."/page/", "$dir");
print "<a href=\"http://".$domein."/page/".$dir."/\">$dir_url</a> \n";
}
?>


上記のようなプログラムですと、a,b,c,d…x,y,zと順番にディレクトリとページが生成されていった場合に
aの中のindex.phpではリンクなし。
bの中のindex.phpではaへのリンク。
cの中のindex.phpではaとbへのリンク。
dの中のindex.phpではaとbとcへのリンク。
eの中のindex.phpではaとbとcとdへのリンク。

一つずつリンクが増えていくようになってしまってます。

これを、自動生成されたページでは、常にクリックされたすべてのリンクが出るようなものにしたいというのが希望です。
aの中のindex.phpではaとbとcとdへのリンク。
bの中のindex.phpではaとbとcとdへのリンク。
cの中のindex.phpではaとbとcとdへのリンク。
dの中のindex.phpではaとbとcとdへのリンク。
eの中のindex.phpではaとbとcとdへのリンク。

なのでregist.phpの記述を…
修正後:regist.php内の記述///////////////////
fputs($fp, "<?php include(\"../../footer.inc\"); ?>");

こちらですと、読み込み形式になり常に新しい情報が入るかな?と思い試したのですが思うように動きません。



修正前:regist.php内の記述///////////////////
ob_start();
include("footer.inc");
$footer = ob_get_contents();
ob_end_clean();
fputs($fp, "$footer");

上記ですと、テキストを書き込む形になりますので、常に新しい情報ではありません…。

分かる方、ご回答頂けますと幸いです。

よろしくお願いします。

投稿日時 - 2008-03-29 12:00:11

QNo.3904384

困ってます

質問者が選んだベストアンサー

>上記のようなプログラムですと、a,b,c,d…x,y,zと順番にディレクトリとページが生成されていった場合に
>aの中のindex.phpではリンクなし。
だね。この段階では「まだaしか存在しない」から。

>bの中のindex.phpではaへのリンク。
だね。この段階では「まだaとbしか存在しない」から。

>cの中のindex.phpではaとbへのリンク。
だね。この段階では「まだaとbとcしか存在しない」から。

>dの中のindex.phpではaとbとcへのリンク。
だね。この段階では「まだaとbとcとdしか存在しない」から。

>eの中のindex.phpではaとbとcとdへのリンク。
だね。この段階では「まだaとbとcとdとeしか存在しない」から。

>一つずつリンクが増えていくようになってしまってます。
「ユーザーがクリックするごとに、pageの配下にa,b,c,d,eと増えて行く」んだから、一つずつリンクが増えていくのが当たり前だね。

>これを、自動生成されたページでは、常にクリックされたすべてのリンクが出るようなものにしたいというのが希望です。
>aの中のindex.phpではaとbとcとdへのリンク。
>bの中のindex.phpではaとbとcとdへのリンク。
>cの中のindex.phpではaとbとcとdへのリンク。
>dの中のindex.phpではaとbとcとdへのリンク。
>eの中のindex.phpではaとbとcとdへのリンク。

ちょいと待った。

aの中のindex.phpをユーザーが最初に見た瞬間、まだbもcもdもeも生成されて無かった筈では?

もしかして「eの中のindex.phpを生成後、フッターにあるaへのリンクをクリックしてaに飛んだ時に、aの中のフッターはa,b,c,d,eを表示して欲しい」って話かな?

だとしたら、aの中のindex.phpのフッターは、随時、最新の情報を表示するように書かれてる必要があるけど、そうなってるのかな?

regist.phpの中で、生成するindex.phpのフッターを作って書き込んでるけど、それだと「aの中のindex.phpのフッターは一回生成したらずっと固定」なので、2度と書き換わらないよね?

なので、うまくいかない原因は「regist.phpの中でフッターを生成して書き込んでしまっている所為」な訳。

希望通りに動かすには「regist.phpの中でフッターを生成するのはやめ、aの中のindex.phpのフッター部分に、フッターを生成するプログラムを埋めこむ」と言う変更が必要。

簡単に言うと「フッターを作る場所が間違ってる」と言う事。

投稿日時 - 2008-03-29 13:10:02

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問