がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

PHP

複数ドメインでのセッション管理のポイント

PHP

ワードとしては「複数ドメイン間でのセッションの共有」とか「サブドメイン間でセッションの共有」とか「別ドメインでログイン(認可)情報を共有」とかそんな感じになりますかね。 ケースとしては比較的レアかと思うのですが。今回の場合 ・「複数のゲーム」…

「そうだパスワードの持ち方、変えよう」

色々あっていろいろあったのに触発されました(笑 いや昔実際に実務で実装したこともあったんで、その辺を踏まえて。 大前提として ・ログインロジックに介入できる ・ユーザの「最終ログイン時間」が捕捉できる(ケースによる) が必要になりますんでご注意を…

phinxを使ってみた(マイグレーション変)

とりあえずinstall composer require robmorgan/phinxinitで初期化をするらしい。 vendor/bin/phinx initphinx.php が生えた。 [ 'migrations' => '%%PHINX_CONFIG_DIR%%/db/migrations', 'seeds' => '%%PHINX_CONFIG_DIR%%/db/seeds' ], 'environments' =>…

「オリエンタル霊異譚 幽冥鬼使」の確率計算

数学苦手なんで(……とも言ってられないんだが)、馬力で計算してみたw厳密には「3以上の時は技能値(等)が足される」ので、その辺で少し加減されるんだけど。 いったん「ダイス目だけ」で、陰徳値無考慮で純粋に「ダイスの確率」で確認。 プログラムでざっくり…

「validationをValue Objectで行う」を考えてみた

なんか「ふと思いついた」程度のお話ではあるのですが。まず前提として「Value Objectとは、一意性がなく交換可能なもの」としておきます。おいちゃんの好み的に「イミュータブル」であって欲しいと思ってますが、その辺はまぁ余談。 あと、ちょろっと出てく…

queue:work の --memory 引数が……ちょっと……

php artisan queue:work には、色々な引数があるようです。 バージョンにもよるんだろうなぁ、と思うのですが、とりあえず手元の 8.83.27 のバージョンでお話を進めます。とりあえず引数の一覧は、vendor/laravel/framework/src/Illuminate/Queue/Console/Wo…

名前付き引数とcall_user_func_array

PHP

別件で調査をしていて、ふと「あれ? call_user_func_array() にhash配列渡したら、名前付き引数的にいい感じに処理してくれるんぢゃね?」って思ったので、早速実験。名前付き引数(PHP8.0から) https://www.php.net/manual/ja/functions.arguments.php#functi…

「コードの書き方」の一例

元ネタ。 https://twitter.com/komi_edtr_1230/status/1562230567101693953 自称シニアのフリーランスさん(笑)からのPRで if (foo == “bar”) { return true } else { return false } というひどいコードがあって朝からゲンナリしてる.... 駆け出しエンジニア…

array_* と foreachの処理時間検証

PHP

なにかでちょろっと気になったのでざっくり検証したので、軽くlog残し。 基本的に「foreachに有利な処理*1」なので、まぁ参考程度に見ていただければ。 ただ言い方を変えると「だから処理によっては(「配列を2回ぶん回す」事になるから)array_*使うと処理的…

LaravelのMessage Queueを把握してみる:前提としてのMessage Queueそのもの

PHP

ちょいと「LaravelのMessage Queue」について調べる用事があったので。 調べ物の備忘録用に書いているので、間違いとかあるかもしれないので ・使う時は気をつけてください ・間違いに気付いたらコメントなどで突っ込んでいただければ、と思います。 という…

"マジックメソッドはメソッドだから呼ばれれば動く"件について

PHP

元ネタは、 https://speakerdeck.com/twada/growing-reliable-code-phperkaigi-2022?slide=84 を見て「コンストラクタが2回動くの!?」って質問があったので。 端的には「PHPにおいてコンストラクタはマジックメソッドで、マジックメソッドはメソッドだから…

「文字コードを変換しつつCSVファイルを出力する」時の書き方

PHP

gallu.hatenadiary.jp で読み込みを書いていたのですが、書き出しをそういや書いてなかったなぁ、と思って。先にちょろっと考察したいのが、Content-Type。 本来は text/csv が正解。 ただ、割とちょいちょい application/octet-stream を見かけて*1、まぁそ…

共通化についての雑感

いわゆる「コードをひとまとめに、関数とかクラスとかそーゆー感じの箇所にまとめるか否か」ってあたりについて。 おいちゃん的には(一端、現状では)結論が出ていて・「意味が同じ」ものは絶対に共通化しろ ・「機能が同じ」ものは、どっちでもいいけど共通…

phpでざっくりアドバイザリロック

PHP

いわゆる排他制御系。 いやまぁおいちゃん的には「セマフォ使えばいいじゃない終了」で終わるお話なんですが。 PHPのセマフォ、一応「コンパイルで指定が必要(coreじゃない)」ので、稀に、極稀に「入ってない環境」とかあるので……いやまぁ「入れろ」って話な…

PHPで「型宣言された引数の型の名前」を知る方法 続編

PHP

PHPで「型宣言された引数の型の名前」を知る方法 - がるの健忘録 の続編。いやPHP8になって「union typesとか増えたしなぁ」とか思って検証コード書いてみたので、勿体ないんで、忘れる前に(絶対忘れるだろうしw)、記録しておく。

「useを使ってクラスが使えるようになる」までの道程

PHP

ちょいとお仕事で、要約すると ・useすればクラス名の解決が可能になるのではないか? → 参照したいクラスがあるファイルのnamespace\クラス名をuseで指定すれば使用はできるはず という趣旨の質問をいただきまして。これはとても興味深い内容だなぁ、と思っ…

0部 まずは初めてみよう

0部 まずは初めてみよう 本書では、最終的にはPHPを「概ねある程度のレベルまでを一通り」文法を中心に学習していけるように作成する予定です。 ここで諸々の蘊蓄をたれてもよいのですが、きっとこういったものを読むからにはなにがしか「プログラムを組む学…

PHP初心者本、書いてみます!!

今年の目標「アウトプットを増やす」の一環として、PHP初心者本を書いていこうかなぁ、と思っています。GItHubで github.com で書いていきますが、同時にここにも内容を記載していこうかなぁ、と……修正までは反映しないと思うので、修正版まで見たいようであ…

2a問題が解決した!!!!

PHP

素晴らしき自動的な世界~或いは「型のない」世界~ https://gallu.hatenadiary.jp/entry/20061108/p1 で書いた、こんなお話、記憶にございますでしょうか? PHP驚愕の事実if ('2a' == 2) { ここ通る } ここから幾星霜、涙が大河となるくらいまであちこちで…

Slim4で「404のログ」だけ消したい(&任意のエラー画面出したい)

Slim4です。 エラー周りの基本処理で。 * @param bool $displayErrorDetails -> Should be set to false in production * @param bool $logErrors -> Parameter is passed to the default ErrorHandler * @param bool $logErrorDetails -> Display error det…

あえての「WAF(FW)使わない」PHPサイトの開発(副題: でなきゃ定期的にバージョン上げろ)

微妙暴言のお時間でございます*1。 いやまぁ昨今、サイト作るのにWAF/FW(Web Application Framework で Framework の略な)を使わない、って選択肢も稀かなぁと思っております。 ……いやまぁ「うちのFWはSmartyです」とか言われた頃が(うっすらした殺意と共に)…

お仕事コードの書き方(の一部)

おいちゃん、経験的に、割合とPHPが長くなってきております。 んで、PHPでコード書くとき、割と色々と「丁寧に」書く癖があって。 特に昔は割と嫌がられたりしてたもんだけど、おかげでバージョンアップしても「平気の平左で」受け入れられるんだよなぁ、と…

駄目なUUIDv4実装

PHP

「実装によってはUUID4が重複しうる」って話を聞いて「じゃぁ駄目な実装を書いてみよう」と思いました(笑 珍しく「徹頭徹尾、非実用」です(笑

ちょっとした小技……の背景

PHP

典型的には「(第一種)ホワイトリスト*1」の実装でありがちなのですが。 declare(strict_types=1); $white_list = [ 'hoge', 'foo', 'bar', 'baz', 'qux', ]; // $input = 'bar'; // if (true === in_array($input, $white_list, true)) { echo "{$input} is …

「文字コードを変換しつつCSVファイルを読み込む」時の書き方

PHP

なんか、毎回 ・「書ける」のは覚えてる ・書式を忘れる のループに陥ってるので、備忘録(苦笑 // CSVの読み込み $file_name = ファイル名; $file_name = 'php://filter/read=convert.iconv.SJIS-win%2FUTF-8/resource=' . $file_name; $file_obj = new SplF…

PHP7.4系のコンパイル

PHP

いやまぁ sh ./configure -hでチェックしろ、って話しではあるのですが。PHP7.3系とPHP7.4系で、configure のオプションがちょいと変わっております。……ちょろっとべっくらこいたよおいちゃん。 おいちゃん、PHPは自力コンパイルする事が多くて、もうちょっ…

Slim4-Skeleton解析のためのSlim4解析のためのPHP-DIの解析

タイトルが長い(笑いやまぁ色々と調べていてそれはそれで後で記事にするのですが。 Slim4で使われているContainerについてちょいと調べたので、備忘録かてがて。Slim3では "pimple/pimple" が使われていたのですが、Slim4では "php-di/php-di" が使われてい…

PHPで「型宣言された引数の型の名前」を知る方法

元々は、Laravelで興味深い機能*1を見かけたのが初手で。 その後、(近々公開しますが)Slim4のContainerでも似たような事をやっていたので、ちぃと思い切って調査をしてみました。端的には ・関数(メソッド)宣言で引数に型宣言をしている時に、「なんのクラス…

いにしえ(かもしれない)技法:bit演算変

PHP

bit演算を使ったプログラミング、割と「知られてないのでは?」という感じがあったので。 ここでは少し抽象的な部分が混ざってしまうのだけど、まぁなんかの一助になるかなぁ、くらいの感じで、めも。大まかには ・処理が「A」「B」「A+B」みたいな感じの時…

0000-00-00 と PHP

MySQLの、(少なくとも一部では)悪名高き 0000-00-00 について、は、そこそこブログがあるのですが。 「それを、PHP(plain)とか(PHPの)フレームワークとかでどうやってるんだろ?」というのが、ざっくりググった限りだと案外と無かったので。 調査かてがて、…