PHPの初心者がfputsでincludeを使いながらリンクを自動生成する方法は?

このQ&Aのポイント
  • 初心者がPHPのfputsを使ってincludeを行いながら、リンクを自動生成する方法を知りたいです。
  • 生成されたページのフッターには、クリックされたリンクが常に表示されるようにしたいです。
  • regist.phpの記述を修正することで、常に新しい情報が表示されるようにしたいですが、うまくいきません。
回答を見る
  • ベストアンサー

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"); 上記ですと、テキストを書き込む形になりますので、常に新しい情報ではありません…。 分かる方、ご回答頂けますと幸いです。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

>上記のようなプログラムですと、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のフッター部分に、フッターを生成するプログラムを埋めこむ」と言う変更が必要。 簡単に言うと「フッターを作る場所が間違ってる」と言う事。

関連するQ&A

  • includeすると?が入る

    win2000、PHP5.3.0にて、includeをすると?が入ってしまいます。 具体的には -- a.php -- <?PHP print "A"; include 'b.php'; print "B"; ?> -- b.php -- C <?PHP print "D"; ?> E -- 結果 -- A?C DE B ブラウザ上ではこの?が見えないのですが、ソース上ではあります。 この?を何とかしたいのですが、これは何かの設定ですか?仕様ですか?不具合ですか?

    • ベストアンサー
    • PHP
  • html側のアンカーから値をphpに渡してincludeで表示したいの

    html側のアンカーから値をphpに渡してincludeで表示したいのですがうまくいきません。 どなたか教えてください。 index.html -------------------------------------------- <html> <body> <a href="main.php?mode=kaisya">会社概要</a> </body> </html> ------------------------------------------- main.php ------------------------------------------ <? $mode = $_GET('mode'); include "header.html"; include "$mode.html"; onclude "footer.html"; ?> ----------------------------------------- ↑でうまく行きません main.phpの$mode = $_GET('mode');の記述を 消すとヘッダーとフッターは表示されるんですが記入すると何にも表示されません --------------------------------------- index.html(main.phpへのリンクがあるファイル) main.php(ヘッダー、フッター、ボディーをincludeで表示) header.html(ヘッダー部分) footer.html(フッター部分) kaisya.html(body部分) ---------------------------------------- テストなので上記ファイルは全て同ディレクトリにいれてます 原因を調べていますが、分からず、、、、、 どなたか教えて下さい

    • ベストアンサー
    • PHP
  • インクルード元を知りたい

    PHP5.2.4を使用しています。 [a.php] <?php include("b.php"); include("c.php"); $c = new classC(); [b.php] <?php class classB { } [c.php] <?php class classC { public function __construct() { $c = new classB();//←b.phpファイルがどこでインクルードされたか知りたい } } という3つのファイルがあり、a.phpにアクセスするとします。 c.phpファイルのコンストラクタでb.phpファイルにあるclassBを生成していますが、 これはa.phpファイルにおいて先にinclude("b.php");があるので c.phpファイル内でもclassBを認識できると思います。 そこでc.phpファイル内でb.phpファイルがどこでインクルードされたか(この例ではa.phpファイル) 調べる方法なり関数というのはあるのでしょうか?

    • ベストアンサー
    • PHP
  • include時の頭の良いパス指定について

    include時の頭の良いパス指定について 長い上に少々わかりにくい話ですが、includeする場合のパスについてです。 現在の構成は次のとおりです。 / ├inc/ │ ├file_a.class.php │ ├file_b.class.php │ ├file_c.class.php │ │ │ └require/ │   └require.php ├dir/ │└index.php │ └index.php 【/index.phpの中身】 <?php  require_once "./inc/require/require.php";  //その後いろいろ処理 ?> 【/inc/require/require.phpの中身】 <?php  require_once "./inc/file_a.class.php";  require_once "./inc/file_b.class.php";  require_once "./inc/file_c.class.php"; ?> 今回後付で、「/dir/index.php」を設置しました。 「/index.php」とほぼ処理は共通なので、「/dir/index.php」を次のように書いています。 【/index.phpの中身】 <?php  require_once "../index.php"; ?> しかし、この場合「/dir」以下からは、incまでの階層が異なるため、includeしても、 各クラスのファイルを読み込むことができず、 No such file or directory in require.php on line 2 のエラーが表示されてしまいます。 こういう場合、どういうパス指定をするのがいいのでしょうか。

    • ベストアンサー
    • PHP
  • include_pathについて。

    PHP 5.2以上のバージョンの話として質問をさせて頂きます。 (ローカルではWindows版XAMPPを使用。リモートはLinuxサーバー。) ----- <ファイルの位置関係> imgディレクトリ --- C.jpg (画像ファイル) mainディレクトリ --- A.php sub ディレクトリ --- funcディレクトリ --- B.php (img、main、subディレクトリは3つとも同階層) //------- (A.phpの記述) require_once '../sub/func/B.php'; //------- (B.phpの記述) echo '<img src="C.jpgのパス">'; // ←■画像Cを表示したい■ //★どう表示されるかテスト★ echo dirname(__FILE__) ;   //----- このような状況で、 A.phpにアクセスすると、★テスト★の所は、 ~/sub/func   //←のように表示される。 // つまりこれは、__FILE__ は、 // A.phpではなく、B.phpを指している。(?) と、このような時、B.phpの中で、 C画像の相対パスは、どう書いたらよろしいのでしょうか? A.phpから見た、C画像の相対パスで書いたらいい? それとも、B.phpから見たソレでしょうか? phpinfo()でinclude_pathの項目を調べると、 .:/usr/local/lib/php/~ のように書かれています。(デフォルトのままです。)

    • ベストアンサー
    • PHP
  • .htaccessで動的URLを静的化

    動的URLを静的化したいと考えています。 ネットで調べるとよくあるサンプルは RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ /dir/index.php?a=$1&b=$2 という風に「静的なURLにアクセスして、内部ではパラメータ付きのURLでの処理をさせる」 というパターンが多いのですが、私がやりたいのは逆で「動的URLにアクセスがあれば静的URLにリダイレクトをさせる」というものです。 理由は、 ・すでにサイトがある程度できあがっていて、既存のURLもある程度Googleにインデックスされている ・パラメータの組み合わせパターンが色々あるため上記のようなルールで対応できない などです。 そこで http://xxx.com/dir/index.php?a=01&b=02 や http://xxx.com/dir/index.php?b=02&c=03&x=999 といった動的URLを http://xxx.com/dir/a-01/b-02/ http://xxx.com/dir/b-02/c-03/x-999/ RewriteRuleを使ってこのような形で一旦301リダイレクトさせ、これをPHPの内部処理でパラメータ付きURLに戻すことによって既存のロジックを生かしたままURLを静的化できないかと考えています。 RewriteRuleの記述を色々書き換えて試してみたのですが、どうしてもやりたいようなURLの変換ができません。 どのように記述すればよいか、ご教授下さい。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • includeされたphpの中でincludeを使用No.2

    http://oshiete1.goo.ne.jp/qa1156379.html こちらの方が質問しているものと同じ様なことなのですが、 簡単に構造を説明します。 a.php ->データを入力 b.phpを呼び出す b.php ->与えられたデータの入力チェック c.phpを呼び出す c.php ->データをDBに登録後、a.phpを表示 このとき、a.phpで登録ボタンを押すと、白紙が帰ってきてしまいます。 b.phpは呼び出しているようなのですが、b.php内のinclude_once("c.php"); で止まってしまっているように見えます。 アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • php インクルードincludeした時のパス

    phpにてincludeした時のパスで躓いています。 現在のツリーは以下の様になっています。 index.html common  ├header.html  ├footer.html  ├right.html  ├img   ├navi-home.jpg   ├navi-1.jpg  ├css   ├base.css salon  ├hair    ├kari     ├index.html     ├access     ├ ├index.html     ├menu     ├ ├index.html この中の../hair/kari/index.htmlの中に ../common/header.html及びfooter.htmlを <?php include_once(dirname(__FILE__).'/../../../common/header.html'); ?> にてインルードしています。(書き方あってます?dirname(__FILE__).いります?) つぎに../hair/kari/access/index.htmlの中にもインクルードします。 <?php include_once(dirname(__FILE__).'/../../../../common/header.html'); ?> という風に一つ下の階層なので../を付け足しました。 このようにページ毎にheaderまでの相対パスが違うので、そのページ毎にパスを書き換えていかなければいけないものなのでしょうか? また../始まりではなく/始まりでないと表示されません。 /始まりは絶対パスでしたっけ? この書き方は間違っているのでしょうか? そして最後に、 ../common/header.htmlの中の画像ファイルやリンクは <img src="/common/img/navi-home.jpg"> の様に書かないと、インクルードしたファイル側で表示されません。 これも同じように/始まりのこの書き方でいいのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 「include()」関数の使い方について

     以下のURL(http://www.seanewsonline.com/misc/050702.htm)の<TEXTAREA>を『<?php echo '()'; ?>』の()部分に挟み込み以下のようなmisc.phpと言うファイルを作りました。 <?php echo'<TEXTAREA> echo'<align="left" class="txt1">&nbsp;<TEXTAREA id=textarea1 name=textarea1 style="HEIGHT: 180px; WIDTH: 300px; font-size: 9pt" rows="13" cols="70" wrap="soft" readonly> (略:英/中/日テキスト)</TEXTAREA>'; ?>  その後で以下のURL(http://www.seanewsonline.com/dir1995/page22.htm)のページの『シンガポール情報文化省認証』の行の下に、以下のようにmisc.phpを挿入、拡張子をphpに変えANSI方式で保存しました。  略 HREF="http://seanewsonline.com/GuestBook/index.php">GuestBook</A></B></FONT></TD></TR><?php include'misc.php';?> <TR><TD ALIGN="CENTER" VALIGN="TOP" COLSPAN="2" WIDTH="553"  略  そこでUnicode形式で保存したmisc.phpをアップロードしたところ以下のURLのように表示されました。 http://www.seanewsonline.com/dir1996/page22.php  またUTF-8形式で保存したmisc.phpをアップロードすると、以下のURLのように表示されました。 http://www.seanewsonline.com/dir1995/page22.php  挿入文/被挿入文共にunicode方式で保存した後アップロードしたところ以下のURLのようにエラーメッセージも、挿入文も表示されませんでした。 http://www.seanewsonline.com/dir1997/page22.php  質問1:被挿入文をANSI方式で、挿入文をunicode方式で保存した場合のみ挿入文が表示されますが、文字化けしてしまいます。文字化けさせない工夫はあるでしょうか。  質問2:ページの中ほどに挿入したにも関わらず、web上ではページの上部に表示されるのは何故でしょうか。中間に挿入するにはどうしたらよいでしょうか。

    • ベストアンサー
    • PHP
  • ボタンを押すことでincludeの値を変更するには?

    ボタンを押すことでincludeの値を変更するには? HTMLとPHPを利用してウェブサイトを制作していているのですが、リンクに関してわからないことが出てきました。 現在index.htmlに以下の記述をしています。 <div id="menu"><?php include("menu.php"); ?></div> <div id="main"><?php include("main.php"); ?></div> menu.phpにリンクを記述して、それを押すことで<div id="main">に変化を与えたいのですが、そういうことは可能でしょうか? 具体的には<div id="main">内の<?php include("main.php"); ?>を<?php include("page2.php"); ?>などとできればうれしいのですが... ActionScriptでは出来たのですが、phpではどうすればいいのでしょうか...? 目的はindex.htmlなどを一度書き上げるだけで、あとの要素は全て簡潔にすませロードさせるだけにして管理を簡単にすることです。 メニュー->サブメニュー展開->内容表示 と三行程を行うのに、普通だとそれぞれ メニューのあるページ、左記に加えサブメニューの展開されたページ、左記二つを含んだ内容のページと、三つも必要になり大変です。 なのでボタンを押すと指定した要素に別のものをロードできたら...と思って質問させていただきました。 よろしくお願いいたします。

    • 締切済み
    • PHP