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

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

ただいまの
回答率

88.06%

PHPでページを自動生成するには?

解決済

回答 6

投稿 編集

  • 評価
  • クリップ 8
  • VIEW 16K+
退会済みユーザー

退会済みユーザー

簡単に言えばteratailのように質問すると新しいページができる、会員登録するとマイページができる。みたいな感じです。
まぁブログですね。
どうしたらいいですか?また、どのように調べたらいいですか?

回答ありがとうございます。
質問の書き方が悪かったです。ブログを作りたいのではなくユーザー登録するとマイページができる。とか掲示板に書き込むと新しいページができるみたいなのを作りたいのです。
CMSやフレームワークを使えば楽でしょうが自分で作るからこそ意味があるのでは?

アクセスされたURLに応じてデータベースから取得した情報をテンプレートに埋め込んでるだけです
GetMethodみたいななもんと考えていいのでしょうか?
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

checkベストアンサー

+2

yahoo掲示板なんかを見ると各掲示板やスレッドごとに番号が振られたurlになってるんですよね
私も以前それを見てPHPでスレッドを作成と同時に対応するファイルを生成する驚愕の掲示板を作っては悦に浸っていました・・・。
でも実際には他の方が言われるようにurlを書き換えてるようですね

リンク内容
RewriteRuleのあたりから読み進めばいいかと
wordpressも恐らくはこの辺を複雑にやってるだけのような気が・・・

検索するときは「url書き換え」「.htaccess」「mod_rewrite」などで


追記
全く役には立ちませんが、実際にファイルを読み込んでそれをもとに書き換えて別ファイルを吐き出すPHPのサンプルです
ファイルの出力とか意味不明なところもありますが昔に作ったものなのでその辺りは大目に見てください
kakikae.php
<?php
//書き込みオリジナルファイル読み込み
$files=file_get_contents('org.html');

//'a'+乱数を生成してファイル名に
$fileName = "a".rand( 1000000, 9999999);

//書き込みオリジナルファイルから変更点を置き換える
$files=str_replace("たいとる",$fileName,$files);
$files=str_replace("書き換え前のオリジナルファイルです","書き換え後の".$fileName."ファイルです",$files);

//文字コードをUTFに変換
$files = mb_convert_encoding($files, "UTF-8","AUTO");

//ファイル名に拡張子を付ける
$fileName = $fileName. ".html";

//ファイル生成&書き込み
$handle = fopen( $fileName, 'w');

fwrite( $handle, $files);
fclose( $handle );

// メッセージ表示
print $fileName. "を生成しました。<br/>\n";

?>

org.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>たいとる</title>
</head>
<body>
<pre>
これは書き換え前のオリジナルファイルです
</pre>
</body>
</html>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/12 18:33 編集

    参考リンク、サンプルまでありがとうございます!

    キャンセル

  • 2015/08/23 22:22

    今更ですが、オライリーの「詳解wordpress」のp.96からほぼ答えが載ってました。
    .htaccessと$_SERVER['REQUEST__URI']と正規表現の合わせ技だそうです

    キャンセル

+2

仕組みとしては新しいページを作るというより、アクセスされたURLに応じてデータベースから取得した情報をテンプレートに埋め込んでるだけです。
そのような場合、大抵どのURLにアクセスしても /path/to/DocumentRoot/index.php で処理されるようになっています。そうすることにより、index.phpでURLに応じてレスポンスの内容を変えているのです。

世に出回る多くのWebアプリケーションフレームワークやCMSに備わっている機能ですので、フレームワークやCMSを使うのがいいかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/12 18:34

    ありがとうございます!

    キャンセル

+2

アクセスされたURLやポストされたデータに応じて、
DBからひっぱってくる内容を変更させるだけです。

よって、いろんなページが動的に生成されるということはなく、同じViewに別の情報を表示させているだけとなります。

teratailのように、ひとつひとつ質問によってアドレスが異なるというのは
コントローラの解釈の方法がそうなっているからです。
おそらくですが、questions/14413 というアドレスが呼ばれたら
questionsというコントローラファイルが動作して14413のIDを持つ質問情報をDBから取得してきます。
その情報をViewファイルに渡して表示しているだけだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/12 18:34

    ありがとうございます!

    キャンセル

+1

cakePHPなどのフレームワークを使うのが手っ取り早いでしょう。

CMSやフレームワークを使えば楽でしょうが自分で作るからこそ意味があるのでは? 

勉強のために自分で考えて作ってみるのは意味はあると思います。
しかしながら、サービスとして公開するのであれば、セキュリティホールのデパートになる可能性が高いのでオススメはできかねます。
なぜ、多く使われているフレームワークがあるのか。簡単にできるからというのもありますが、多くの人が開発し続けバグなどを取り除いているという信頼感があるからでしょう。
勉強のためにであってもまずは、これらのフレームワークのコードを読み理解していく または、一度フレームワークでサンプルサイトを作成してみて、どのような処理のステップがあるのかを理解していくところから始めるのが良いと思います。

作り方を自力で考えるのであれば、まずは思いつくステップに分けてどうすればゴールにたどり着けるかを考え、ステップから処理と細かくしていけば自ずと作り方のようなものが見えてくるのではないでしょうか? 一度フレームワークでサンプルサイトを作成してみればステップが思いつき易くなると思います。
例えば

  1.  表示するページのテンプレートを作る
  2.  DBからコンテンツを取ってきてテンプレートに当てはめて表示する
  3.  DBにコンテンツデータを登録するフォームを作る
  4.  どういうURLのルールでアクセスすれば個々の生成されるページにアクセスできるようにするか考える
  5.  アクセスにルールに基づいたデータを持たせて、ページを振り分ける機能を作る
  6.  登録されてないとDBに登録するフォームにアクセス出来ないようにする
  7.  初回登録のフォーム画面を作る
  8.  ログイン画面を作る
  9.  ログイン状態を維持する方法を実装する

などなど、これだけでは不十分ですから必要だと思われるステップを追加して、更に個々のステップを処理レベルまで細かくして、各実装していけば自分の考え方に基づいた、自動生成でページの出来るサイトが作れると思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/12 18:33

    ありがとうございます!

    キャンセル

+1

まず、MVCという概念はご存知ですか?

CMSを使わずに自前で実装されたい、という事ですので、基本的にはモデル、ビュー、コントローラという3要素を使って:
・蓄積されたデータを表示する
・新しく入力されたデータを蓄積する
・データを利用する
ということをやっていきます。

データ蓄積は何でもよいわけです。昔ならばバイナリーテキストだったでしょうし、今ならデータベースが一般的です。mySQLなどを使うのであれば、CMSなどを使わずとも、PHPで普通にデータの取得、書き込みができますよね?

後は、取得したデータをどのように利用するかの問題です。(データの活用)
例えば、ここの質問はDBには:
・id
・タイトル
・本文
・解決フラグ
などがデータとして存在すると思われます。

この質問は teratail.com/questions/14413となっていますから、
URLを見る限り、questionsコントローラに14413というidを投げると、idに対応したデータを拾ってきてくれる構造になっているのです。

ユーザーにしても同じです。
きっとuserテーブルがあり、user_idやusernameなどのフィールドがあり、そのデータを使っているのです。

通常のURLを使って作りたいなら、ベストアンサーのmod_rewriteなどを使うのが常套手段でしょう。
他にはJSONなどを使うリクエスト方式ですね。

いろいろ研究されるといいと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/18 15:52

    ありがとうございます!

    キャンセル

0

質問者さんのレベルが全然わかりませんが、どうしたら良いですかって聞かれても・・(笑

とりあえずWordpressとかDrupalで出来る事を調べてみて、それでは足りないとかどうしてもカスタムしきれないようならPHPで1から組むような流れで良いかもしれませんね。

どちらでも投稿すれば新しいページが出来ますし、一応ユーザーのページ(投稿管理とか)も作られます。

まぁ最近は安めのどのレンタルサーバでもWordpressは対応してたりするので、Wordpressを調べてみるのが情報も多いのでおすすめかも。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/12 18:34

    ありがとうございます!

    キャンセル

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

  • ただいまの回答率 88.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る