php

Laravel - DB::transaction中でDB::rollbackを呼んでいるとRefreshDatabaseを使っているテストでロールバックされない

php

環境 Laravel 5.5 PostgreSQL でも他のDBでも同じはず 現象 use RefreshDatabaseを使ってテスト毎にロールバックしているにも関わらず、データが残ってしまい後続のテストが落ちる。 原因 業務コードの方でDB::transaction()を使い、その中でDB::rollback()…

PHPのテストで本当にdataProviderを使う必要があるのだろうか

php

PHPUnitにはdataProviderという機能がある。 パラメタライズドテスト、またはテーブルドリブン(駆動)テストで書くための仕組み。 僕はずっとこの機能が使いづらくて、普通にforeachで回す方が良いのではと思っている。 今日たまたまdataProviderを推奨してい…

phpcon2018のLTで見たPREG_JIT_STACKLIMIT_ERRORについて調べた

php

先日のPHP Conference 2018でこのようなLTがありました。 RegExp Error caused by PHP upgrade 5.6 to 7.2 スライドはLT用にシンプルなので、同じ発表者さんのQitta記事を見た方が伝わるかもしれません。 PHPを7.2にバージョンアップしたら正規表現でマッチ…

Laravelのセッションに関するテストでSession name cannot be emptyが出て落ちる場合の対応

php

軽い気持ちでcomposer updateしたらテストが落ちて、その調査と暫定対応をしたのでメモ。 エラーログ PHPUnit\Framework\Exception: [2017-12-04 00:44:41] testing.ERROR: Session name cannot be empty, did you forget to call "parent::open()" in "Symf…

PHPのnull[0]はエラーにならないしnoticeも出ない

php

背景 null変数に添字アクセスするところで、落ちると思っていたら落ちなくてびっくりした。 環境 OSX 10.11.5 PHP 7.0.14 (cli) (built: Apr 1 2017 23:41:23) ( NTS ) Copyright © 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright © 1998-2016 Zend…

LaravelでクエリビルダーやEloquentを使ったupdateの戻り値の違い

php

背景 Laravelアプリケーションでレコードをupdateするやり方が色々あり、戻り値の違いについて調べた。 結論 表にまとめた。 書き方 戻り値の型 更新対象がない時の戻り値 \DB::table(‘samples’)->where($where)->update($values) int(件数) 0 \App\Sample::…

phpのini_set("max_execution_time",n)とset_time_limitの違いについて調べた

php

背景 phpでスクリプトのタイムアウト上限を伸ばすには2つの方法がある。 set_time_limitを呼ぶ方法 php.iniもしくはini_setでmax_execution_timeを変更する方法 このうちset_time_limitのドキュメントにこのような記述がある。 デフォルトの制限値は 30 秒で…

Laravelにおける複文のSQLインジェクション対策

php

背景 LaravelアプリケーションでSQLインジェクションのテストを行っていて、わざとSQLインジェクションが起こるようなコードを書いたのに実行されなくて調べた。 (まずはSQLインジェクションが発生することを確認してから、その対応を入れて発生しなくなった…

MySQLでgroup byなしでcountとorder byを同時に使うとエラー

MySQLとLaravelの話です。 MySQLのSQL_MODEにONLY_FULL_GROUP_BYが指定されていると、group by無しでcountとorder byを同時に使うと以下のエラーが発生します。 ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP colum…

PHP - mb_internal_encoding()とini_get()の結果が異なるのでPHPのソースを読んで理解してみた

php

ini_get('mbstring.internal_encoding') と mb_internal_encoding() の値が異なるらしいので調べてみました。 後半ではmbstring.language や mb_regex_encoding との影響についても記述します。 ソースを読んで自分なりに解釈しましたが、間違い等あればご指…

vimでphpファイル保存時に自動で構文チェックを行う

地味だけど意外と重要な構文チェック。「php -l 対象ファイル」で確認するアレです。 ブラウザで確認する段階になってエラーが出たりするとイラっとするので、 未然に防げるのはストレス軽減になります。ちなみに「vim php 構文チェック」とか「vim php 文法…

php-5.2.5以前のfile_put_contentsではLOCK_EXによる排他ロックは動かない(5.2.6でFix)

php

(キーワード:file_put_contents file_get_contents)5.2.6でBugFixされています。 PHP: PHP 5 ChangeLog Fixed bug #43182 (file_put_contents() LOCK_EX does not work properly on file truncation). (Ilia) なので5.2.6以降なら動きますが、5.2.6未満なら…

リポジトリを指定してyum installする

サーバーにライブラリ(php-mysql)を入れようとしたら次のようなエラーが出た Error: Missing Dependency: php-common = 5.1.6-34.el5_8 is needed by package php-mysql-5.1.6-34.el5_8.i386 (updates)結論としては取得元のリポジトリが異なっていたから。 …

PHPでスモークテストのサンプルを書いてみて感じたこととか

ソフトウェアテストの勉強中&実際の案件に活用中。 スモークテストとは ソースコードに修正が入るなどして新しくビルドが必要になった際に、 そのビルドが正常に終了していることを確認するためのテストです。簡単に言えば、「ビルドによってどこか動かなく…

GAのData Export API v2.3は6月頃に終わるので移行した方がいいんじゃない

v2.3は非推奨となり今後は互換性のあるv2.4か新しいv3.0にしましょうってことらしい。 公式はこちら。 Migration Guide: Moving from v2.3 APIs to v2.4 & v3.0 - Google Analytics — Google Developers Management API v2.3 has been shutdown. Queries mad…