ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

php

phpのPDOで、 postgresqlのjsonb演算子(?)を使いたい場合

概要 php(PDO) + postgresql の生SQLを実行時に Invalid parameter number: mixed named and positional parameters が発生。 原因、postgresqlのjsonbの演算子などではよく「?」を使うことがあるが、これと、phpのPDOのプリペアドステートメントの「?」(疑…

Laravel collectionのkeyBy()メソッドで、pluck()と似たようなことができる

概要 Laravelで、DBテーブルの取得結果を、特定のカラムをキーとして取得したい場合、調べるとpluck()がよくでてくる。 ただ、KeyBy()でもできる。 QueryBuilderなどではget()などでいったん取得してきておいて、後から加工するほうがいいケースもありそうな…

Laravelのunittest(overload使う場合、mockだとonce()がテストされなかった。spyを使えばOKだった)

状況 Laravelのunittestで強い依存のあるメソッドをテストしたい。 また、強い依存のあるメソッド内で、あるメソッドが一度も呼ばれないこと をテストしたい。 class Foo { public function bar($isCallSituation) { //... 中略... if ( $isCallSituation ) …

phpのcsvダウンロード【utf-8からshiftjisに変換して出力】

php

概要 php純正のフィルター【convert.iconv.ほげほげ】を使うと簡単。ただし、注意点もある。 例 header('Content-type: application/csv'); header('Content-disposition: attachment; filename=sample.csv'); $dataArray = ['ひとつめ', 'ふたつめ', 'みっ…

phpで無名関数のuseを使い合わす場合は、参照渡しが必要

php

題名通りです。 無名関数のuseに渡す値を参照渡しにしないと、毎回値がリセットされてしまうようです。 例として、まわりくどいですが、配列の重複を削除する方法。 array_unique使えばええやんというツッコミはなしで $target_array = [1, 2, 3, 4, 5, 2, 4…

VSCodeで開発 ubuntu20.04 に php のxdebugをインストール(php8.1の場合)

DockerFileで以下内容を記述 ...なんやかんや RUN apt install -y php8.1-xdebug ...なんやかんや (DockerFileのお作法的には、他のapt installしているものと一緒にまとめるべきですが、そういうのは動いてから調整すればいいと思うので) コンテナのphp.i…

ubuntu20.04 apache2 でphp8.0 から php8.1 にアップデートする方法

前提 既にubuntu20.04+php8.0+apache2の環境であること 作業手順 apt update apt upgrade -y apt install php8.1 apt install php8.1-gd php8.1-xml php8.1-soap php8.1-mbstring php8.1-mysql apt install libapache2-mod-php8.1 a2dismod php8.0 a2enmod …

php の file_get_contents()に失敗した場合のエラー内容取得したければ$http_response_headerを使う

php

覚書。 file_get_contents()を使用しているローカルスコープに、 $http_response_header が作成されるので、その中身を見る。 $result = file_get_contents('https://hogehoge...'); if (empty($result)) { var_dump($http_response_header); // 参考コード…

老兵の愚痴

php

1. メソッド名の動的生成はダメ絶対 例) $methodName = 'aiueo'; if ($parameter == 1) { $methodName .= 'Ver1'; } else { $methodName .= 'Ver2'; } $methodName(); 理由) 影響範囲調査するときなどでgrepでひっかからずに漏れる。そして致命的エラーに…