PHP

超長い文字列や配列でも実体が同じなら中身の大きさには依存しない

PHP

手元にあった PHP 7.1.10 で試してます。 PHP の配列で、連想配列なのかいわゆる添字が順序通りのただの配列なのかを調べるには、下記の方法が一番手っ取り早いと思います。 array_values($arr) === $arr; がしかし、配列の === は配列の要素の値の比較も行…

DIコンテナ使ってみて思った雑文:その2

アプリケーションにテーブルゲートウェイがあったとして、もちろんDB接続に依存している。 class UserTable { private $connection; public function __construct(Connection $connection) { $this->connection = $connection; } // select/insert/update/de…

DIコンテナ使ってみて思った雑文

アプリケーションの流れとして、 コンテナを構築 アプリを実行するなにか(パイプラインとかディスパッチャとか)をコンテナから取り出す リクエストオブジェクトを作成してアプリを実行 みたいな流れかなと思う。順番的にDIコンテナが先に作られるのでリク…

PHPUnit の Functions.php を自動でロードするやつ

下記↓の記事のコメントの通り、 PHPUnitの$this->assertXXXX() の別記法 - Qiita PHPUnit には Functions.php というファイルが含まれていて、これを require するとアサーションなどがグローバル関数に登録されるので、次のようにテストを書くことができま…

KeepAlive On な Apache+mod_php で HTTP/1.0 クライアントに HTTP/1.1 を返すとタイムアウトを待ってしまう

PHP 7.1.7 Apache 2.4.10 ApacheBench 2.3 zend-expressive 2.0.3 zend-expressive-skeleton 2.0.3 zend-diactoros 1.4.0 zend-stratigility 2.0.1 Docker で Apache+mod_php を実行して、 docker run --rm -p 8888:80 -v "$PWD:/var/www/html" php:apache h…

いろいろなフレームワークのリクエスト/レスポンスクラスの実装

PHP

今日日の PHP のフレームワークでリクエスト/レスポンスクラスがどのように実装されているか調べたメモ。 zend-expressive zend-diactoros https://github.com/zendframework/zend-expressive/blob/2.0.3/src/Application.php zendframework zend-http (not …

PhpStorm の Run/Debug で docker-compose run でテストを実行

docker-compose で複数のコンテナで構成されている環境に対して、PhpStorm の Run/Debug で docker-compose run でテストなどを実行できるようにしたときのメモ。 PhpStorm 2016.1 ぐらいから Remote interpreter に Docker が追加されており、PhpStorm の R…

Windows と Linux (*nix) のコマンドライン引数の違い

元は下記で回答したものですけど。。。 https://teratail.com/questions/33915 Linux でプログラムを実行するとき、最終的に次の関数が実行されます。 execve(2) int execve(const char *filename, char *const argv[], char *const envp[]); つまり、次のも…

正規表現再入門

PHP

最近ピザとかも出るようになった社内勉強会(仮)で発表した資料がでてきたので置いておきます。 正規表現再入門 先日、とあるサイトで再帰的パターンというものを知りまして、改めて PHP の PCRE のページを見てみると、知らない構文とか、知ってはいたけど…

PhpStorm の PHPSTORM_META でサービスロケーターとかを入力補完

先日 Twitter を眺めていたら、PhpStorm Advanced Metadata というものを知ったので使ってみました。 下記はいわゆる社内勉強会的ななにかで話したときのスライドです。 https://rawgit.com/ngyuki/31dd23f946ae1520dade/raw/index.html スライドの通りです…

Eclipse PDT + MakeGood でも SSH 経由で PHPUnit を実行する

PhpStorm 8 が正式にリリースされましたね。 PHP Remote Interpreters というものが実装されたので PHPUnit を SSH 経由で実行するのがとても簡単になりました。 が、少し触ってみたところちょっと微妙なことろもありました。下記の記事にも記載されています…

cmd.exe のコマンドラインの解釈と Windows と Linux のプロセス作成の違い

PHP の escapeshellarg の実装が Windows だと謎すぎたので調べていたら下記の記事にたどり着きました。 cmd.exe のコマンドラインの仕様を解析してみた - 永遠に未完成 わりと長いこと Windows を使っているつもりなのですが知らなかったこともあり、とても…

PhpStorm 7 で SSH 経由で PHPUnit を実行する

下記の記事によると PhpStorm 8 では SSH 経由で PHPUnit が実行できるようです。 Vagrantユーザに朗報!PhpStorm8ではPHPUnitをSSH経由で実行できる ホストが Windows で開発環境の VM が Linux(CentOS) なわたしは PhpStorm から PHPUnit が実行できるよう…

ストリームラッパーを使って素の PHP で自動エスケープ

PHP

素の PHP をテンプレートとして使うフレームワークは今でも結構あるようです。 素の PHP をテンプレートに使う、というのがどういうことかというと、簡単な例ですが次のようなものです。 index.php <html> <head> <meta charset="utf-8"> <title></title> </head> <body> Hello </body></html>

Zend Framework 2 で Smarty を使うためのモジュール

そういえばだいぶ前に Zend Framework 2 で Smarty を使うためのモジュールを作りました。 ngyuki/zf2-smarty なお、ZfcTwig を大いに参考にしました。 最初に作ったのは1年ぐらい前だったと思います。その当時に GitHub とかで同じようなものを探してみた…

PHP のクラス定数のちょっと奇妙な話

PHP

このコードは Notice なく実行できる。よく考えると奇妙じゃない?

uopz 拡張で DI っぽいことしてみる

PHP

opcache のオプションを確認するために PHP のマニュアルを見ていたら uopz という面白そうな拡張を見つけたので試してみました。 PHP: uopz - Manual PECL :: Package :: uopz krakjoe/uopz インストール Linux な人は pecl でインストールできます。 $ pec…

mysql_use_result と Server Sent Events でデータをストリーム的にブラウザに返す

まず下記のような手順で 1000 万件のレコードを持つテーブルを作ります。 MySQL に大量のデータを手っ取り早く挿入する - Qiita $ mysql test -e " create table t ( id int not null primary key, str text not null ) " $ seq 10000000 | mysql test -e " …

PHP の FTP 関数のクソい動作

PHP

2年ぐらい前に書いてたネタを発掘したのでポスト、2年たってもクソいものはクソいです。 ある環境の PHP(5.3.2) の FTP 関数で、パッシブモードを指定しているはずなのに FTP サーバのログに PORT コマンドが残っていることがありました。 PHP の FTP 関数…

phpenv 環境で composer global でパッケージをバージョン別にインストールするプラグイン

PHP

Composer とても便利ですよね。 composer global require を使えばユーザーグローバルにもインストールできるので、phpunit などのインストールに pear の代わりに使えます。 PHP - composer global - Qiita がしかし、phpenv で複数の php を切り替えられる…

OpenShift Online に CandyCane をデプロイする

前回 OpenShift Online で PHP を使ってみましたが、無料枠で MySQL も使えるので試しに CandyCane をデプロイしてみました。 なお、CakePHP も CandyCane もまともに触ったこと無いので色々おかしいかもしれませんがご了承ください。 手順 前回と同じ手順で…

RedHat OpenShift で PHP を使う

はじめに RedHat の PaaS である OpenShift Online を触ってみました。 OpenShift へのサインアップはだいぶ前にやっていたので、サインアップの方法やドメインの登録、公開鍵の登録、などの手順はもう忘れました。 多分下記ページの右上の「SIGN UP」から見…

Google App Engine で PHP を使う

昨年の 10 月ごろに Google App Engine for PHP がオープンになったらしいので触ってみました。 SDK のインストール まずはローカルでアプリを実行したり Google App Engine へデプロイするために必要な SDK をインストールします。 Python 2.7 普段使ってい…

PHPUnit Selenium2 で phpunit.xml にリスナー指定でスクリーンショットを取得

PHP

下記の記事を見て PHPUnit_Extensions_Selenium2TestCase_ScreenshotListener はリスナーなので phpunit.xml で指定した方が良いかと思って試しました。 PHPUnit Selenium2で失敗時にスクリーンショットを取得する方法 — A Day in Serenity (Reloaded) — PHP…

Composer が PSR-4 に対応していた

PHP

Composer が PSR-4 に対応していたので試してみました。 PSR-4 - Composer PSR-0 と PSR-4 PSR-4 はオートローダーに関する規約で PSR-0 を置き換えるものです。 PSR-0 PSR-4 ざっくり PSR-0 と比べると次のような違いがあります。 クラス名に含まれるアンダ…

PHP の E_RECOVERABLE_ERROR エラーレベル

PHP

PHP Advent Calendar 2013 in Adventar の24日目です。 PHP は set_error_handler で↓のようにエラーをハンドリングできます。

Visual Studio Express 2013 で PHP をステップ実行する

PHP

PHP Advent Calendar 2013 in Adventar の20日目です。 今日は IDE を使って PHP をステップ実行してみたいと思います。 Eclipse PDT? PHPStorm? いいえ、そういうのは使いません。 使うのは↓コレです。PHP のスクリプトではなく PHP そのものをステップ実…

PHP の Windows 版でのみ発生する is_dir の奇妙な現象

PHP

PHP Advent Calendar 2013 in Adventar の16日目です。 下記のコード、Windows で実行するとどうなると思いますか?

PHP の参照のあれ

PHP

PHP の参照のあれ PHPが糞言語なのはどう考えても参照をポインタだと思っているお前らが悪い - なんたらノート第三期ベータ もっと単純にすると次の結果を比べると判りやすい。

PHP と Grunt で ブラウザのアドオンを使わずに LiveReload する

PHP Advent Calendar 2013 in Adventar の13日目です。 前日は @Mankin_jp さんの PHP 〜5.5の入り口として〜 便利なパスワードハッシュ関数を使おう! でした。 ちなみにまだ 5.4 な人は password-compat を使うといいと思います。私はまだメインが 5.4 な…