カテゴリー: php

gitlab-ciでphp-cs-fixerを自動コミットする

※2018-08-16 変数の保護について修正しました push時にphp-cs-fixerをかけて、修正箇所があれば自動コミットする方法です。 大まかな処理内容 feature/*ブランチまたはfix/*ブランチに対して処理する。masterに対しては行わない。 pushされたらphp-cs-fixerをかけ、変更点があればそれをcommit/pushして、後続処理は行わない(※pushした内容で新たにパイプラインが実行される)...

続きを読む

guzzleのClientを複数作るとasyncでも直列処理になる

guzzleのasyncによる非同期リクエストは並列処理になって処理順がバラバラになります。なってほしいです。 しかしどうも書いていると直列っぽく動作しているので、サンプルで確認。並列になっています。 <?php require ‘vendor/autoload.php’; $client = new \GuzzleHttp\Client; $promises = []; for ($i = 0; $i < 5;...

続きを読む

phpunitで標準出力(STDOUT)をテストする

この記事は当初Qiitaに掲載していたものです。移設しました。 phpunit では標準出力のテスト方法として expectOutputString() が用意されていますが、これは echo など出力バッファ経由で出力されるものをテストするもので、ob_start() ob_get_contents() のセットで出力を取得できるものしか取り扱えません。 一方、CLIツールを作成する場合はリアルタイム表示するためにバッファリングを回避する方法として...

続きを読む

「strposやstrstrに高速っぽい実装が入ったけど実は遅いのでは疑惑」へのPHP7が速くなるパターン調査

この記事は当初Qiitaに掲載していたものです。blogに移設しました。 「PHP7調査(39) strposやstrstrに高速っぽい実装が入ったけど実は遅いのでは疑惑」で、strpos()の実装がPHP7で変わったことにより遅くなったのでは、という話があげられています。 PHP5はC言語のmemchr()とmemcmp()によるナイーブ実装(ソースコード)PHP7は検索対象1024Byte以上または検索文字3Byte以上でSunday...

続きを読む

mb_ereg系正規表現関数にエスケープ関数はないけどpreg_quote()で十分

mb_ereg()に渡す値が外部からの入力値だったのでエスケープしなきゃ、と思って探してみたらmb_ereg系関数にそんなものはありませんでした。preg_quote()で代用、で良いようです。 いちおうonigurumaのマニュアルを見て、preg_quote()でクオートする文字「. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -」で全部カバーできていることを確認しました。...

続きを読む

浮動小数点数(float, double)はたいていの場合で使えない

PHPにかぎらず、float型とdouble型はたいていの場合で使えません。値が不正確だからです。 論より証拠 ググればfloatがダメな理由はいっぱい出てくるのですが、論より証拠です。 <?php $int = 0; $float = 0.0; for ($i = 0; $i < 10000000; $i++) { $rand = mt_rand(1, 1000); $int += $rand; $float += $rand / 10;...

続きを読む

PHP7をCentOS7にインストールする手順

PHP7.0.0が正式リリースされましたーパチパチパチ。 というわけでCentOS7にインストールする手順を記します。 前提条件 サーバはConoHa OSはConoHaのCentOS7.1イメージ phpenvとphp-buildを使う php-fpm利用、unix-socketでlisten systemdで自動起動...

続きを読む

第六回闇PHP勉強会に参加しました

11/22に開催された第六回闇PHP勉強会に参加してきました。「光の当たらないところ」という意味で闇であるとか。約1年半ぶりの開催ということですが、私ははじめての参加です。初めてなのにスピーカー参加です。以下、感想など。 各発表内容の感想 @hnwさん「OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた」 OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた from Yoshio Hanawa...

続きを読む

SQLite3::escapeString()はバイナリセーフではないが代替関数はない

SQLite3::escapeString()はバイナリセーフではないためnull文字を含む文字列を渡すと壊れますが、代わりの関数はなく、プリペアドステートメントを使う以外の方法が実質的にありません。 バグ報告はされている SQLite3::escapeString()がバイナリセーフではないことは数年前にバグ報告されていました。 https://bugs.php.net/bug.php?id=63419...

続きを読む
読み込み中