自分のWordPressで学ぶPHP講座(AIの変更を判定する)

区分1 地図★★★

No.01 PHPはいつ・どこで動くか

PHPが「いつ・どこで」動くのかを押さえる単元です。後の全部の土台になるので、コードはまだ読まず、順番だけをしっかり覚えます。
目次
  1. 第0章 前提知識
  2. 第1章 ページが出るまでの順番
  3. 第2章 .phpファイルと <?php
  4. 確認問題

第0章 前提知識

① ブラウザとサーバー :見る側と、出す側

ブラウザ(Chrome や Safari)は、ページを見るための道具で、あなたの手元の端末で動きます。 サーバー(Xserver)は、借りているインターネット上のコンピューターで、サイトのファイルが置いてあります。

ページを開くというのは、ブラウザがサーバーに「このページをください」とお願いし、サーバーが答えを返すことです。 このお願いを、リクエストと呼びます。

② HTML・CSS・JavaScript :ブラウザで動く3つ

この3つは、どれも届いたあとにブラウザの中で処理されます。 事務所にたとえると、HTMLは完成した書類、CSSはその書式、JSは書類に付いた「押すと開く付箋」です。

③ PHP :サーバーの中で書類を作る言葉

PHPは、サーバーの中で動くプログラミング言語です。 公式の説明では、ウェブサイト向けの汎用スクリプト言語で、HTMLの中に埋め込んで使えるとされています。

事務所のたとえなら、PHPは「依頼を受けてから書類を作る担当者」です。 できあがった書類(HTML)だけをブラウザに渡し、作り方の手順書は渡しません。

④ 似た言葉との違い

どこで動くか 何をするか
HTML ブラウザ ページの中身を表す
CSS ブラウザ 見た目を決める
JavaScript ブラウザ 画面に動きを足す
PHP サーバー(Xserver) HTMLを作る
WordPress サーバー(Xserver) PHPで書かれたプログラムの集まり

第1章 ページが出るまでの順番

① 4つの段階 必ず覚える

ページを開いてから表示されるまでを、順に書くとこうなります。

1. ブラウザ → サーバーへ「このページをください」(リクエスト)
2. サーバー → 該当する .php ファイルを PHP に渡す
3. PHP    → ファイルを上から実行して、HTMLを作る
4. サーバー → できたHTMLをブラウザへ返す
5. ブラウザ → HTMLを受け取って、画面に表示する

大事なのは、PHPが動くのは3番、サーバーの中だけだという点です。 ブラウザには、作り終わったHTMLだけが届きます。

② PHPのコードは、ブラウザからは見えない 必ず覚える

ブラウザで「ページのソースを表示」しても、見えるのはHTMLです。 PHPのコードそのものは、サーバーから出ていきません。

だから、パスワードのような秘密の値をPHPのファイルに書いても、通常は画面から読まれません。 ただし、PHPが「出力した」文字は、そのままHTMLに入って全員に見えます。 何を出力しているかは、No.07(後で出ます)で改めて見ます。

③ 同じURLでも、中身を変えられる 必ず覚える

HTMLのファイルを置いただけのサイトは、誰が何回開いても同じ内容が返ります。 PHPは、開かれるたびに作り直せるので、時間・ログインの有無・URLの末尾の指定などで、返す中身を変えられます。

WordPressは、投稿をデータベース(情報をためておく倉庫)から取り出し、PHPでHTMLに組み立てて返しています。 投稿を1本書くたびにHTMLのファイルを作っているわけではありません。

○ よくある勘違い:「PHPを直したら、ブラウザの中で動き方が変わる」→ ×。変わるのはサーバーが作るHTMLです
○ キャッシュ:サイトによっては、作り終えたHTMLを保存しておき、次の訪問者にはPHPを動かさず返す仕組み(ページキャッシュ)が入っています。直したのに画面が変わらない時の原因の1つです
○ 関係する単元:No.02(どのファイルが動くのか)

第2章 .phpファイルと <?php

① 拡張子が .php のファイルが、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。