[CakePHP]ダウンロード後にページをリロードしたい

データをダウンロード処理したときにフラグを立てるなど色々処理をしている。
ダウンロード後にリダイレクトかリロードをしたいと思った。

ダウンロードの処理でheaderを使っているのでリダイレクトのLocationが使えない。

そこでJSで別ウインドを開いて、そこにダウンロード処理を渡す。
その処理の後にページをリロードする処理をしてあげるとOK。

リダイレクトしたい場合はreloadのところをhrefにするとOK

郵便番号入力で住所を抽出してくれるJS

AjaxZip3の処理を変更した話
大変便利なライブラリ
https://github.com/ajaxzip3/ajaxzip3.github.io

下記のようにinputのonKeyUpを使った場合
意図しない動きをすることがあった。

郵便番号を前半、後半の二つに分けている。
前半3桁。後半4桁です。

前半3桁、後半4桁入力すると住所欄に住所が入力される。
というのは正常な動き。

これを下記の条件にすると動きが変わる

「全角入力モードにした状態で前半3桁に7桁の郵便番号を入力するとonkeyupが作動し住所が入力される。」

入力確定前にonkeyupが動作しています。
inputはmaxlengthで3にしているので3桁しか入力されない。

onKeyUpはやめてjQueryで制御することにする。

これで確定後の値で動作になるので意図した動きになりました。

【未解決】CakePHP4のログアウト時のセッション削除

CakePHP4でログイン機能Authのログアウト時にセッションが削除できない問題

未解決ですが情報記載します。

ログアウト処理時にセッションのdestroyを行うとログイン情報が削除できないのです。


$this->Auth->logout();
$this->session->destroy();

Auth->logoutのみ
 同列のセッション情報が生きている
session->destroyを追加
 Authのログイン情報が生きている

Auth->logoutはAuth配下のセッション情報は削除できるが、Authと同列のものは削除できていない。
そこで直接Session->destroyを行うと、同列のものは削除できたがAuthの情報は削除できずに残っていた。

調べてみても情報なし。
しょうがないのでdeleteで個別に削除


$this->Auth->logout();
$this->session->delete("Data");
$this->session->delete("HogeHoge");

ちなみにPHP関数でsession_destroyだとエラーでした。

CakePHP4のFormヘルパーでDivタグの削除

CakePHP4のフォームヘルパーでDIVが削除できなくて困った。
DIVのオプションがなくなったようです。

CakePHP3からなくなったのかな?
CakePHP3のやりかただと削除できなかったので、CakePHP4のマニュアルに載っているやり方で削除します。

フォームヘルパーのテンプレートで対応

マニュアル
https://book.cakephp.org/4/ja/views/helpers/form.html#formhelper

個別にできないのは結構不便。
他にやり方があるのだろうか・・・

プラグインJetpackのエラー

WordPressのプラグイン更新などしているとJetpackのエラーがでることが度々あった。

動作には問題なさそうだけど気になるので調べて見ました。

エラー内容は↓


Fatal error: Uncaught Error: Class 'Automattic\Jetpack\Connection\Tokens' not found in ****/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-client.php:75
Stack trace:
#0 ****/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-client.php(26): Automattic\Jetpack\Connection\Client::build_signed_request(Array, 'query('jetpack.syncAct...', Array)
#3 ****/wp-includes/class-wp-hook.php(287): Automattic\Jetpack\Sync\Actions::send_data(Array, 'deflate-json-ar...', 1614820658.9668, 'sync', 0.0076038837432861, 0.013982057571411, 5, '60403532e7074')
#4 **** in ****/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-client.php on line 75

更新していくとゴミコード?などがそのままになっていてエラーになるらしいです。
Jetpackを一旦削除して新規インストールを行うと上記エラーが解消されます。

contact form 7の警告を修正

メールフォームプラグインのcontact form 7 で送信ボタンを押すと下記の警告が発生

「Deprecated: get_option がバージョン 5.5.0 から非推奨になった引数付きで呼び出されました。オプションキー「blacklist_keys」は「disallowed_keys」に名前が変更されました。 in ****\wp-includes\functions.php on line 5061」

警告なので無視はできるけど、表示されたら気になってしまう!

ってことで修正。

「blacklist_keys」を使っちゃいけないよという警告だと思うので「blacklist_keys」を探してみる。

下記ファイルに発見!
\wp-content\plugins\contact-form-7\modules\disallowed-list.php

52行目

修正前
$mod_keys = trim( get_option( ‘blacklist_keys’ ) );

修正後
$mod_keys = trim( get_option( ‘disallowed_keys’ ) );

これで警告が消えました。
やったね!

PostgreSQLのエスケープ事情

備忘録的にアップします。

かなり昔に作られたシステムのメンテで学んだこと
pg_queryを使用してSQLを処理していましたが、自前のエスケープが効いてなくてエラーが発生していました。

addslashesで処理をしていましたが・・・

Googleティーチャーに聞いてみると記事を発見

standard_conforming_strings がOnの場合はエスケープが文字として認識される。
\nと改行コードがバックスラッシュとnの2文字と認識されるようです。

PostgreSQL9.1以降はこの値のデフォルトがOnということ
それで自前でエスケープしてもエラーになったと。

standard_conforming_stringsの説明

pg_queryを使っていたのをpg_query_paramsに変更することで関数でエスケープしてくれるので、これで回避!

pg_query_params

エスケープがバックスラッシュではなくなったってことですね。

参考:徳丸浩の日記

PHPのエラーを表示する

PHPでエラーが表示されずに困っていてその調整で初めて知ったこと。

PHPのエラー表示には「display_errors」を使います。
これがOffになっているとエラーが表示されません。

今回これがOnになっているのにエラーが表示されないのです。
PHPのバージョンは5.6.x

htaccessを見てみると下記の通り

お判りいただけただろうか…

正解は下記です。

なんと!htaccessで記述する場合はE_ALLのような定数を使ってはいけないのです。
数値で記述するとちゃんと認識されます!

各定数の数値はこちらで調べてください。

あー 知らなかった~
勉強なりました。

GoogleChromeでキオスクモード

サイネージ関連のお仕事で調べてみた。

GoogleChromeにサイネージ用にキオスクモードというのがあるらしい

設定は簡単だった。

ショートカットを右クリック→プロパティ

ショートカットタブのリンク先を下記のように変更する

後はショートカットをダブルクリックで起動すると指定のURLでキオスクモードで使える
画面を閉じる場合はAlt+F4などで閉じるとOK

CakePHP2でセッションが途中で切れる問題

CakePHPでセッションが途中で切れるという現象に遭遇しました。

テストサーバーでは問題ないけど、本番サーバーに移すと症状が発生。

有効期限を30日にしているが、1時間ほどでセッション切れを起こす。

開発ツールを使って、セッションを見てみると、
なぜかセッションが2個発行されている。
1個はCakePHPで発行したもの。
もうひとつが謎のセッション

セッションの説明に下記の注意書きがありました。

https://www.php.net/manual/ja/session.configuration.php#ini.session.gc-maxlifetime


----------
注意: 異なる値を session.gc_maxlifetime に指定している 別々のスクリプトがセッションデータの保存場所を共有している場合、 一番小さい設定値に達した時点でデータが消去されます。
このような場合には、 お互いに session.save_path を使用します。
----------

なぞのセッションが1時間になっていて、それに巻き込まれてセッション切れを起こしているようでした。
サーバーはGMOクラウドサーバー

謎のセッションをどうすることもできない。
htaccessでの変更もエラーが出てできません。

save_pathを変える方法で対応します。

CakePHPのcore.phpを変更

‘defaults’ => ‘php’

↓↓↓変更↓↓↓

‘defaults’ => ‘cake’

これでセッションが/tmp/sessionsに生成されます。

セッションの巻き込み事故回避完了!