このteratailや知恵袋のように質問をしたら各々の質問のファイルが作成されると思うのですが、この各々のファイルをどうやって自動で作成しているのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
多くのこの手のサービスはファイル作ってません。
リクエストに対してDBに問い合わせを行いページを出力しているだけです。
「どの質問を参照するか」はURLに含まれています。
本質問の場合は
https://teratail.com/questions/vkgs3y2q3nn8he
ですが
teratail.com=ドメイン
questions=質問画面を生成するキー
vkgs3y2q3nn8he=質問ID
のような構成になっているようです(あくまで推測ですが、構成的に間違いないでしょう)
PHPにてリクエストURIの1つ目を機能とし
それ以降をその機能で呼び出すキーとすることで
画面を生成しています。
こうなっているのと同じです(キーは仮です)
index.php?method=questions&id=vkgs3y2q3nn8he
.htaccessを利用することで、「全てのリクエストを最上位のindex.phpに集める」ことができます。
そして$_SERVERのあるキーを参照することでリクエストURIが分かるので、解析してどの機能の何を呼び出すかが決まり、機能によってDBに検索を行い、ページの出力を行う。
リクエストパラメータの構成はともかく、
動的なページ生成は大抵このようになっています。
投稿2022/07/27 10:02
総合スコア80850
0
ベストアンサー
teratailのように質問したらphpでファイルを自動作成するようにしたいです。
バカ正直にファイルを作っているわけではありません。
例えばPHPはApacheやNginx等のWebサーバアプリと連携してWebサーバとして稼働させる事になります。
その時にApacheの.htaccessファイルでこういったURLのパス指定で入ってきたら、
全て特定のPHPファイルにアクセスを受け流すように指定します。
参考記事: https://gist.github.com/ttoz/2034885
PHPでは$_SERVER["REQUEST_URI"]
でどういった文字列でアクセスしてきたのかを取り出すことが可能です。
参考記事: https://uxmilk.jp/14769
例えばteratailの本質問のURLで解説しましょう。
https://teratail.com/questions/vkgs3y2q3nn8he
.htaccessの指定で何処にアクセスしてもindex.php
が実行されるように作って置きます。
$_SERVER["REQUEST_URI"]
を確認して"/questions/vkgs3y2q3nn8he"
という文字列を抽出します。
PHPの文字列操作の関数等を使って/questioons/
の部分を取り除いてvkgs3y2q3nn8he
を取り出します。
予め質問を行うみたいな行動を行ったらデータベース(MySQL等)にid: vkgs3y2q3nn8he
という番号を割り当てて保存しておき、
アクセスしてきたらid: vkgs3y2q3nn8he
で検索してきてヒットした情報を使って
それっぽい質問ページのHTMLを即興で生成してWebアクセスしてきたクライアントに返します。
なのでURLの度に個別のPHPファイルを生成する必要はありません。
今回の例では素のApacheとPHPで何とかする方法を紹介しましたが、
この辺はLaravel等のWebフレームワークならば「やって当然の機能」です。
なのでPHPの勉強がある程度進んだらWebフレームワークを勉強して使ってみてください。
投稿2022/07/27 10:10
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/27 16:40
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/27 11:03
2022/07/27 11:18 編集
2022/07/27 11:26
2022/07/27 11:30
2022/07/27 11:31
2022/07/27 11:34
2022/07/27 13:05
2022/07/27 20:15