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

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

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

CMS(Content Management System)は複数のユーザーでコンテンツを編集することが可能なWebサイトの管理/構築用のプラットフォームを指します。また、会社単位で運用管理するものはECMと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

6回答

23091閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

CMS

CMS(Content Management System)は複数のユーザーでコンテンツを編集することが可能なWebサイトの管理/構築用のプラットフォームを指します。また、会社単位で運用管理するものはECMと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

8クリップ

投稿2015/08/11 23:13

編集2015/08/12 04:09

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

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

アクセスされたURLに応じてデータベースから取得した情報をテンプレートに埋め込んでるだけです

GetMethodみたいななもんと考えていいのでしょうか?

hpfukugyou👍を押しています

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

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

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

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

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

guest

回答6

0

ベストアンサー

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

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

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

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

php

1 2<?php 3//書き込みオリジナルファイル読み込み 4$files=file_get_contents('org.html'); 5 6//'a'+乱数を生成してファイル名に 7$fileName = "a".rand( 1000000, 9999999); 8 9//書き込みオリジナルファイルから変更点を置き換える 10$files=str_replace("たいとる",$fileName,$files); 11$files=str_replace("書き換え前のオリジナルファイルです","書き換え後の".$fileName."ファイルです",$files); 12 13//文字コードをUTFに変換 14$files = mb_convert_encoding($files, "UTF-8","AUTO"); 15 16//ファイル名に拡張子を付ける 17$fileName = $fileName. ".html"; 18 19//ファイル生成&書き込み 20$handle = fopen( $fileName, 'w'); 21 22fwrite( $handle, $files); 23fclose( $handle ); 24 25// メッセージ表示 26print $fileName. "を生成しました。<br/>\n"; 27 28?>

org.html

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<title>たいとる</title> 5</head> 6<body> 7<pre> 8これは書き換え前のオリジナルファイルです 9</pre> 10</body> 11</html>

投稿2015/08/12 05:48

編集2015/08/12 06:29
gyojin

総合スコア94

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

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

退会済みユーザー

退会済みユーザー

2015/08/12 09:33 編集

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

2015/08/23 13:22

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

0

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

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

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

投稿2015/08/12 04:16

shunshun

総合スコア89

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

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

退会済みユーザー

退会済みユーザー

2015/08/12 09:34

ありがとうございます!
guest

0

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

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

投稿2015/08/12 01:06

shiolier

総合スコア1156

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

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

退会済みユーザー

退会済みユーザー

2015/08/12 09:34

ありがとうございます!
guest

0

まず、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 05:18

Jake

総合スコア289

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

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

退会済みユーザー

退会済みユーザー

2015/08/18 06:52

ありがとうございます!
guest

0

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

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

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

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

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

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

投稿2015/08/12 04:28

KiKiKi_KiKi

総合スコア596

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

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

退会済みユーザー

退会済みユーザー

2015/08/12 09:33

ありがとうございます!
guest

0

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

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

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

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

投稿2015/08/12 00:30

landy77

総合スコア1614

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

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

退会済みユーザー

退会済みユーザー

2015/08/12 09:34

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問