php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

質問されて基本的なphpとtemplate、レスポンスとJavascriptについて描いてみようと思います

サーバサイド言語とjavascriptの基本的なイメージを描いてみようかと思います

今回はcakePHP3.4,apache2.4
シンプルなWEB環境でのお話

先日私の隣の席の子が、

本当はデータがないはずなのにデータが入ってるんです!

なんでですか?
そんなはずはないんです!
どうしてですか??

怒涛の???を投げられて私も困ってしまい。。
困ったのは???を連続で来られて困っただけです。。

本物のコードは会社のものなので記載はできませんが
ざっくりイメージ的にはこんな感じです。
※formタグとか省略多いですが汲み取ってください


何がしたいイメージかというとformのテキストフィールドに入力すると、javascriptのhoge関数が実行されてPHPの変数 $val に $hogeが代入される

というのが隣の席の子のがメージする動作

多分ここまでみてあぁ〜と思う人もいるかもしれませんが話を続けます。

基本的にPHPはプレーンな感じで書いていくと
ファイルはhoge.phpとします
<?php
$hoge = "hoge";
?>
<html>
<body>
<?php echo $hoge; ?>
</body>
</html>

とファイルを作ればブラウザでhoge.phpにアクセスするとhogeと表示されるはずです。

cakePHPを使っているとctpを別で作成していますが、クライアント(ユーザー)
に送信する際はctpを読み込んでphpタグで囲まれた処理を行いHTMLファイルとして送信されます。

つまり先ほどの例でいうとctpでPHPの変数を代入していますが、
サーバサイドの処理の時点で$valには$hogeの値が代入されそれ以下の記載処理に使われます
それをcakePHPはクライアント送信用のHTMLファイルを(ファイルというよりHTML宣言された出力)作成してクライアントに送信します。

クライアントは受け取った出力をブラウザに表示します。

ここでポイントはJavaScriptはクライアントで解釈されて動作するものだということです。

なので質問者は、onChangeが実行されて初めて$valにはじめて値が入ると思っていますが、でにサーバサイドで処理されて代入は終わっているのです。
そもそも質問者がonChangeを使って何をしたいのかわかりませんが、
クライアントに送信される前に処理されることを、クライアントで実行されるものと勘違いしていたことが間違いです。

ちなみにctpのJavaScriptで

<?php $val = $hoge; ?>

の部分、JavaScript
で処理されないようにコメントしようとしても
// <?php $val = $hoge; ?>
PHPでは処理されます。
$val はctpで(phpタグの中では)利用できます

$valに代入たくなければ

<?php //$val = $hoge; ?>
PHPでコメントしなければなりません。
クライアントに送信されるときにコメントされているようでもサーバサイドで実行されるものなのでサーバサイドで実行されないように、PHPのコメントで制御します。

このことからも質問者がしたいこととは違う挙動になっていることがわかります。

このようにどこで実行されて動いているのかを理解しなければ、こうなるはずだと思っていても全く違う動作になるわけです。

今回は、ちょっと質問を受けたことからクライアントとサーバサイドでの実行タイミングを説明したのでこちらにも書くことにしました。

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする