コードロード

エラー討伐

php

【PHP】cronで1億件のデータを移行

1億件のIoT計測データのデータ移行を行った話。 cronでやることになった背景 cronでデータ移行することになった背景はこんな感じ。 カラム名は仮です。 年ごとの計測テーブルBに保存されている、ある期間の数種類の製品の計測データを、四半期ごとの計測テー…

【Laravel】リポジトリパターンでデータ周りの要求変更に負けない設計パターンを取り入れる

こちらの本で勉強中なので、学習記録として。 PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応作者:竹澤 有貴,栗生 和明,新原 雅司,大村 創太郎ソシムAmazon リポジトリパターンとは リポジトリパターンとは、ビジネスロジックからデ…

【Laravel】レイヤードアーキテクチャで仕様変更に強くする

この本でLaravel勉強中なので、自分用にアウトプットしておく。 PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応作者:竹澤 有貴,栗生 和明,新原 雅司,大村 創太郎ソシムAmazon レイヤードアーキテクチャ ビジネスロジックを表現するサ…

【PHP】ある特定のAPIへリクエストすると勝手にリダイレクトされる

php

結論 リダイレクト時のステータスコードは 301 ではなく 302 を使う! ※もしくは明示的に指定しなければデフォルトで302になる 前提 一般ユーザーAでログインしているときに /user へリクエストすると、制限された情報を返すAPIがある。 一方、Adminユーザー…

【PHP】BCMath関数を使わないで正確に小数点同士を計算する

php

結論 X倍して整数にしてから、結果をXで割る。 事象 PHPで小数点以下を含む値の引き算だと、二進数表現の精度が落ちる影響で、期待した値にならないことがある。

【PHP】セッション名にドットを含めて指定するとセッションが取得できなくなる

php

課題 セッション名を指定して session_start() すると、セッションが取得できなかったのでメモ。 結論 セッション名を指定するときに、「.」ドットは使わない! 例 セッション名を「.」ドットで繋いで session_start() すると、セッションを取得できない。 …

【PHP】CSV出力したいのにheader()関数が効かない

php

環境 MAMP PHP 7.4.16 やりたかったこと PHPでCSVを出力する機能を作っていて、レスポンスヘッダーを下記のように設定したかった。 Content-Disposition: attachment; filename=ファイル名.csv Content-Type: text/csv 課題 下記のメソッドを使ってレスポン…

【Laravel】特定のcookieの値の暗号化を解除(Laravel外からもcookieを使用したい)

課題 CookieファサードとPHPのfilter_inputで取得できるcookieの値が異なる。 Laravel外からcookieを使用したいが、暗号化されているため使用できない。

【Laravel×Apache】413 (payload too large) が出たらphp.iniを変更する

環境 PHP 8.0.16 CentOS Apache 2.4 課題 本番環境にて画像をアップロードしようとしたら、 413 Content Too Large のエラーが返ってくる。 解決方法 php.ini で、 upload_max_filesize と post_max_size を確認する。 まず、そもそもどこの php.ini を読み…

【Laravel】定数をクラスファイルで管理する

定数をクラスファイルで管理する app/Consts/CommonConst.php を作成した。 [ // 省略 'CommonConst' => \App\Consts\CommonConst::class, ] ] app/Http/Controllers/Api/…

【Laravel Sanctum】ログインは通ってセッション生成されたのにSanctumミドルウェアのルートにアクセスするとunauthenticatedになる

メモ程度 課題 表題の通り 対策 キー名RefererとOrigin、値はURLでリクエストヘッダーに設定してあげる。 参考 refererヘッダーまたはoriginヘッダーのチェック SPAからこのヘッダーが送られないと認証エラーになる Postmanで動作確認するときに注意する qii…

【PHP】多次元配列を並び替えて、指定番目から指定件数のみ切り取った配列を取得

php

やりたいこと PHPで、多次元配列があって、指定したキーの値で、昇順・降順の並び替えができるようにしたかった。 並び替えの後、指定した番目から指定した件数分の要素だけを取得したかった。 つまり、ページネーションのイメージ。 SQLでやればこんな感じ…

【Windows-WSL2】composer install と composer updateでエラー

php

普段使っているPCとは別のPCで git clone したあとに、PHPUnitを composer install しようとしたときのエラー 環境 Windows11 WSL2 php 7.4.3 エラー文 it is missing from your system. Install or enable PHP's dom extension. it is missing from your sy…

【PHP】SERVER_NAMEじゃなくてphp_unameで開発環境と本番環境を振り分ける

php

困ったこと filter_input(INPUT_SERVER, 'SERVER_NAME') これでサーバーの名前をとって、 localhost かどうかで振り分けていたが、PHPUnitを使った時に、 null で返ってきたので代替法。 解決策 php_uname('n') これでPC名がでる。 PHP が稼動しているオペレ…

【PHP】MAMPでcURLを使えるようにするために

php

結論 cacert.pem(CA証明書をダウンロードする) php.iniを書き換える そもそもcURLが使える状況かどうか php -m で確認 phpinfo() で確認 PHPでcurlを使えない場合の対処法 - Qiita grepで確認 % php -i | grep cURL cURL support => enabled cURL Informat…

【PHP・mysqli】INSERTしたレコードの主キーを取得

php

やりたかったこと mysqliで直前にINSERT処理で追加したレコードの主キー(id)を取得したかったのでメモ。 実装方法 mysqli::$insert_id を使う。 直前のクエリで更新された AUTO_INCREMENT フィールドの値を返します。接続での直前のクエリがない場合や ク…

【PHP】Content-Typeがapplication/jsonのPOSTから値を取得する

php

課題 PHPで $name = (string)filter_input(INPUT_POST, 'name') でPOSTの値を取得できない。 原因 $_POST() または (キャスト)filter_input(INPUT_POST, 'key') では、そもそも application/json を取得できない。 公式リファレンスでは下記のように書いてあ…

【SQL】サブクエリに「AS」でエイリアスをつけないとEvery derived table must have its own alias

やろうとしたSQL ページネーションを作ろうと思って書いたSQL SELECT * FROM (SELECT * FROM samples WHERE id < 30 ORDER BY id DESC LIMIT 1) UNION ALL SELECT * FROM (SELECT * FROM samples WHERE id >= 30 ORDER BY id ASC LIMIT 6) エラー Every deri…

【PHP】小数点以下の桁数を指定して切り捨てる方法(floor、number_format、sprintf)

php

やりたいこと 課題 結論 number_formatとsprintfの挙動 number_format sprintf やりたいこと ある桁数以下は切り捨てて、それより上の桁数で値を返したかった。 例えば、小数点第三位以下は切り捨てて、小数点第二位までを返したい。 課題 ググると、 floor …