自分のWordPressで学ぶPHP講座(AIの変更を判定する)
区分1 地図★★★ブラウザ(Chrome や Safari)は、ページを見るための道具で、あなたの手元の端末で動きます。 サーバー(Xserver)は、借りているインターネット上のコンピューターで、サイトのファイルが置いてあります。
ページを開くというのは、ブラウザがサーバーに「このページをください」とお願いし、サーバーが答えを返すことです。 このお願いを、リクエストと呼びます。
この3つは、どれも届いたあとにブラウザの中で処理されます。 事務所にたとえると、HTMLは完成した書類、CSSはその書式、JSは書類に付いた「押すと開く付箋」です。
PHPは、サーバーの中で動くプログラミング言語です。 公式の説明では、ウェブサイト向けの汎用スクリプト言語で、HTMLの中に埋め込んで使えるとされています。
事務所のたとえなら、PHPは「依頼を受けてから書類を作る担当者」です。 できあがった書類(HTML)だけをブラウザに渡し、作り方の手順書は渡しません。
| どこで動くか | 何をするか | |
|---|---|---|
| HTML | ブラウザ | ページの中身を表す |
| CSS | ブラウザ | 見た目を決める |
| JavaScript | ブラウザ | 画面に動きを足す |
| PHP | サーバー(Xserver) | HTMLを作る |
| WordPress | サーバー(Xserver) | PHPで書かれたプログラムの集まり |
ページを開いてから表示されるまでを、順に書くとこうなります。
1. ブラウザ → サーバーへ「このページをください」(リクエスト)
2. サーバー → 該当する .php ファイルを PHP に渡す
3. PHP → ファイルを上から実行して、HTMLを作る
4. サーバー → できたHTMLをブラウザへ返す
5. ブラウザ → HTMLを受け取って、画面に表示する
大事なのは、PHPが動くのは3番、サーバーの中だけだという点です。 ブラウザには、作り終わったHTMLだけが届きます。
ブラウザで「ページのソースを表示」しても、見えるのはHTMLです。 PHPのコードそのものは、サーバーから出ていきません。
だから、パスワードのような秘密の値をPHPのファイルに書いても、通常は画面から読まれません。 ただし、PHPが「出力した」文字は、そのままHTMLに入って全員に見えます。 何を出力しているかは、No.07(後で出ます)で改めて見ます。
HTMLのファイルを置いただけのサイトは、誰が何回開いても同じ内容が返ります。 PHPは、開かれるたびに作り直せるので、時間・ログインの有無・URLの末尾の指定などで、返す中身を変えられます。
WordPressは、投稿をデータベース(情報をためておく倉庫)から取り出し、PHPでHTMLに組み立てて返しています。 投稿を1本書くたびにHTMLのファイルを作っているわけではありません。
○ よくある勘違い:「PHPを直したら、ブラウザの中で動き方が変わる」→ ×。変わるのはサーバーが作るHTMLです
○ キャッシュ:サイトによっては、作り終えたHTMLを保存しておき、次の訪問者にはPHPを動かさず返す仕組み(ページキャッシュ)が入っています。直したのに画面が変わらない時の原因の1つです
○ 関係する単元:No.02(どのファイルが動くのか)
<?phpファイル名の最後が .php なら、サーバーはそのファイルをPHPに渡します。
.html や .css のファイルは、そのまま返されます。
WordPressのファイルは、ほとんどが .php です。
AIが「functions.php を直しました」と言ったなら、PHPが動く時の材料を直した、ということです。
<?php から先が、PHPの区間 必ず覚える.php ファイルの中で、PHPとして動く部分は <?php から始まります。
そこより外にある文字は、PHPが何もせず、そのままHTMLとして出します。
あなたの子テーマの functions.php の先頭は、こうなっています。
<?php
/**
* Lightning Child theme functions
*
* @package lightning
*/
1行目の <?php が、ここからPHPだと宣言しています。
/** から */ までは説明書き(コメント)で、動きには関係ありません。
もう1か所、同じファイルの中に、PHPの外に出る箇所があります。 サイトの情報を検索エンジンに伝える部分(JSON-LD)です。
add_action( 'wp_head', function() {
?>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "DanceStudio",
...(中略)
}
</script>
<!-- /FAQ Schema -->
<?php
}, 20 );
?> でPHPの区間をいったん閉じ、その間に書いた文字を、そのままHTMLとして出しています。
そして <?php で、またPHPに戻っています。
add_action や function の意味は、No.05とNo.03(後で出ます)で扱います。
ここでは「?> と <?php で挟んだ所は、そのままHTMLになる」と読めれば十分です。
?> は、書かないのが普通 さらっとPHPだけのファイルは、最後に ?> を書かないのが公式の勧めです。
閉じたあとに空白や改行が1つ紛れると、それも出力されてしまい、画面が崩れる原因になるからです。
functions.php も、最後の行に ?> はありません。
AIの変更で、ファイルの最後に急に ?> と空行が足されていたら、一度確かめる価値があります。
○ <?php の代わりに <? だけでも動く設定のサーバーがあります(short_open_tag)。AIは常に <?php と書くのが普通です。設定の話は No.09(後で出ます)
○ 関係する単元:No.02(ファイルの置き場所)/No.05(add_action)
PHPが動くのはサーバーの中。ブラウザに届くのは、PHPが作ったHTMLだけ。.php ファイルの中で、<?php から先がPHPの区間。
問1 「PHPを直しました。ブラウザの中でJavaScriptのように動いているので、すぐ反映されます」とAIが言ってきました。この説明の何が違いますか?
問2 ブラウザで「ページのソースを表示」しました。functions.php に書いたPHPの行は見えるでしょうか?
問3 AIの差分で、functions.php の最後に急に「?>」と空行が足されていました。どう考えるのがよいですか?
出典:PHP公式マニュアル「PHP から HTML へのエスケープ」(https://www.php.net/manual/ja/language.basic-syntax.phpmode.php)/「PHP とは何ですか?」(https://www.php.net/manual/ja/intro-whatis.php)/あなたのサーバーの子テーマ内 functions.php。