コードは、サーバー側とクライアント側の 2 つの完全に別個の部分に分割されます。
|
---------->
HTTP request
|
+--------------+ | +--------------+
| | | | |
| browser | | | web server |
| (JavaScript) | | | (PHP etc.) |
| | | | |
+--------------+ | +--------------+
|
client side | server side
|
<----------
HTML, CSS, JavaScript
|
両者は、HTTP 要求と応答を介して通信します。PHP はサーバー上で実行され、HTML が解釈されて JavaScript が実行されるクライアントへの応答として送信される HTML とおそらく JavaScript コードを出力します。PHP が応答の出力を終了すると、スクリプトは終了し、新しい HTTP 要求が来るまでサーバーでは何も起こりません。
サンプル コードは次のように実行されます。
<script type="text/javascript">
var foo = 'bar';
<?php
file_put_contents('foo.txt', ' + foo + ');
?>
var baz = <?php echo 42; ?>;
alert(baz);
</script>
ステップ 1、PHP は<?php ?>
タグ間のすべてのコードを実行します。結果は次のとおりです。
<script type="text/javascript">
var foo = 'bar';
var baz = 42;
alert(baz);
</script>
呼び出しのfile_put_contents
結果は何もありませんでした。" + foo + " をファイルに書き込んだだけです。呼び出しの<?php echo 42; ?>
結果、出力は "42" になり、現在はそのコードがあった場所にあります。
この結果の HTML/JavaScript コードはクライアントに送信され、そこで評価されます。alert
呼び出しは機能しますが、変数foo
はどこにも使用されていません。
すべての PHP コードは、クライアントが JavaScript の実行を開始する前にサーバー上で実行されます。JavaScript がやり取りできる PHP コードが応答に残っていません。
一部の PHP コードを呼び出すには、クライアントは新しい HTTP リクエストをサーバーに送信する必要があります。これは、次の 3 つの方法のいずれかを使用して発生する可能性があります。
- ブラウザに新しいページをロードさせるリンク。
- データをサーバーに送信し、新しいページをロードするフォーム送信。
- AJAXリクエスト。これは、サーバーに対して通常の HTTP リクエスト (1. や 2. のように) を作成する Javascript 手法ですが、現在のページを離れることはありません。
これらの方法をより詳細に概説する質問があります
JavaScript を使用してwindow.location
、可能性 1. と 2. をエミュレートして、フォームを使用してブラウザーに新しいページを開いたり、フォームを送信したりすることもできます。