サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
do-aki.hatenablog.jp
概要 各種 PHP の実行環境 と PHP 内部の動きについて、 PHPerKaigi2018 前夜祭 で話してきました。 PHP と SAPI と ZendEngine3 と from do_aki 経緯とか PHPerKaigi2018 の存在を知ったのが 1/9 https://twitter.com/do_aki/status/950678439429775360 締め切りギリギリでCfPを送り、 https://twitter.com/do_aki/status/952703045342674944 モンハン買うべきか迷いつつ (結局買ったし狩った) https://twitter.com/do_aki/status/955751331804823554 資料作りに苦しみながらも https://twitter.com/do_aki/status/9669796822005309
はじめに 本記事は PHP Advent Calendar 2017 18日目 です。 先に断っておきます。 この記事の内容は、 php スクリプトを書く上で全く必要のない知識です。 知ってすぐ何かに役立つような情報を求めていたらごめんなさい。 https://qiita.com/advent-calendar/2017/php にはもっとたくさんの素晴く役立つ記事がありますのでどーぞ。 なお、検証に利用した php は 7.2.0 です。 PHP の文字列 PHP の文字列は、どれも同じ "文字列" ではあるのですが、中身がちょっと違うとことがあるのをご存知でしょうか。 例えば、 <?php $str1 = 'A'; $str2 = sprintf('%s', 'A'); `$str1` と `$str2` はどちらも同じ `'A'` という文字列になりますが、違いがあります。 (変数名
はじめに php で列挙型と言えば、 @hiraku さんの http://qiita.com/Hiraku/items/71e385b56dcaa37629fe みたいな実装がほとんどかと思います。 自分もだいたいこんな感じでいいかなと思っているのですが、2点ほどどうしても実現したいことがありました。 1. IDE で補完したい 2. 同じ定数値であっても異なる列挙型ならば別物としたい これについて、第117回 PHP勉強会@東京 でLT したスライドがこちらです。 再考:列挙型 from do_aki 下記は、話した内容をもう少し詳しく書き起こしたものになります。 1. IDE で補完したい そのままの話で、 __callStatic を利用した場合、補完できません。 補完できないということは、IDE のコード支援機能(例えばリファクタリング)が利用できないということです。 これについ
時間が開いてしまいましたが、先週 第七回闇PHP勉強化に参加し、トークしてきました。 タイトルは「PHP AST 徹底解説(補遺)」および、「signal の話 或いは Zend Signals とは何か」です。 前者は、過日 PHPカンファレンス2016 で発表した「PHP AST 徹底解説」の補足集で、PHPカンファレンス2016 では時間の都合上省略したり、発表後に指摘された内容について調べたものになります。 後者は PHP における signal 処理についての概要と、7.1 における変化を解説しました。 PHP AST 徹底解説(補遺) from do_aki signal の話 或いは Zend Signals とは何か from do_aki PHP AST 徹底解説(補遺) の、ASTに関する部分については 「PHP AST 徹底解説」にマージしてありますので、興味があれば
概要 PHP7 で導入された AST(Abstract Syntax Tree) について、その概要と、導入によるPHPの変化を解説しました。 おまけでASTの利用法についても少し。 AST の可視化は https://dooakitestapp.herokuapp.com/phpast/webapp/ にて試せます(動いてなかったらごめんなさい)。 PHP AST 徹底解説 from do_aki 動機 以前、まだphp7 がリリースされる前に闇PHP勉強会でASTについて発表したことがありました。 ASTの導入は、それ単体でのインパクトは小さく、php7の他の新機能に隠れがちではありますが、可能性という点においては他の機能に勝るとも劣らない仕組みです。 しかし、発表以来気になりつつもあまり追っていなかったのでした。 久しぶりにAST周りについて何か新しいことは起きてないかとググってみま
この記事は 闇PHP Advent Calendar 2015 9日目 です 先日の 闇PHP勉強会で、 ext_skel スクリプトで生成される雛形って、ほとんど更新されてないのでは 的な話をしたので、気になって調べてみました。 上は php-5.6.16 と php-7.0.0 の skelton.c の diff です。 大きく分けて3種類の変更が入っています。 1. PHP_FUNCTION(confirm_extname_compiled) の処理 2. TLS キャッシュ の処理 3. コメント行の行末空白の除去 3は見ればわかるので、 1 と 2 について少し詳しく見ていきましょう。 PHP_FUNCTION(confirm_extname_compiled) まず、ZTS 絡みではありますが zend_parse_parameters の引数から TSRMLS_CC が消え
去る 2014/10/11。大田区産業プラザPiOにて PHPカンファレンス2014が開催されました。 その中で、「mysqlnd 徹底解説」というタイトルでトークさせていただきました。 20141011 mastering mysqlnd from do_aki 雑感 思い返せば PHP カンファレンスで初LT をしたのが 2011年。 いつかLTではなく本編で話そうと思いつつ、気づけば3年経っていました。 相変わらず行動力に欠けるようで。 応募したのは完全にノリ。 けど、採択されてからが大変だった。 採択されたのが9月25日、2週間ちょいしかない。資料どころか、mysqlnd についてまだ全然分かってない。という状況。 応募したときはちょうど仕事で mysqlnd の挙動について軽く追っていた頃だったので「これきっかけに詳細にコード追ってみよう」という軽い気持ちだったのですが、追えば追
去る 2014年07月11日、MySQL Casual Talks vol.6 が開催され、例のごとく LT してきました。 ちとごたごたして書いてなかったので、今更だけど書き綴る。 N:1 Replication meets MHA from do_aki MySQL Casual Talks vol.6 の自分以外のトークについては @namikawa さんがまとめられているので、そちらを参考に → 「MySQL Casual Talks vol.6」に参加してきた&資料まとめ #mysqlcasual - 元RX-7乗りの適当な日々 マスタN対スレーブ1 レプリケーションの課題 毎度飽きずに、異なるデータセットを持つ複数台のマスタDB から 1台のスレーブDB をつくる手法、通称 "N:1 レプリケーション" のトークをしています。 3年前に N:1 レプリケーションを実装してから今
概要 ある程度のディスク容量がある場合、なーんも考えずにそのままインストールすると、 /home に多くの容量が割り当てられます。 これはこれで使いやすいケースもあるのだけど、/home を / に統合して一つの空間として使いたかったのでまとめた時のメモ。 追記: /home の中身は残してないので注意 インストール直後 # df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_kvm-lv_root 50G 1.1G 46G 3% / tmpfs 3.8G 0 3.8G 0% /dev/shm /dev/sda1 485M 55M 405M 12% /boot /dev/mapper/vg_kvm-lv_home 860G 200M 816G 1% /home # <- これいらない 統合後 # df -h Fil
@yoya さん主催のPHP勉強会@相模原 に参加し、トークしてきました。 当初は SAPI 周りのことを入念に調べて、SAPI が何をするモノで、どのように動くのかを発表するつもりだったのですが、SAPI って実装ごとにかなり性格が違う。 結局、SAPI については処理の流れを解説することのみにとどめ、もっと表面的な部分、php 言語処理系全体の概要を中心に解説しました。 恐らく、php というと <?php で始まる php script が広く認知されているのではないかと思います。 しかし、その php script が動くための動作原理や、$_GET や $_POST のようなあらかじめ用意された変数はどこから生まれてくるのかなどを、きちんと説明できる人は少ないのではないでしょうか。 とはいえ、自分の周りでは説明できる人が比較的多いようなので、今回のトークも釈迦に説法になるのではな
はじめに 本記事は、PHP Advent Calendar 2013 18日目です。 前日は @oasynnoum さんの http://oasynnoum.blogspot.jp/2013/12/raspberry-pi-php.html でした。 ラズパイ x php ってあまり見ない組み合わせだったので、なかなかに新鮮でした。 さて、まず初めに大事な前提を。 この記事に書かれている内容は php-5.5.7 のコードをベースにしています。それ以前のバージョンでもだいたい同様に動くと思いますが、今後のバージョンで同じように動作するかどうかは分かりません。 世にも奇妙な php 早速ですが問題です。 code.1 は、何が出力されるでしょうか? code.1 <?php echo "${" . " . " . "}"; ぱっと見では "${ . }" が出力されそうに見えるこのコード、正
かじゅある! この記事は、MySQL Casual Advent Calendar 2013 4日目です。 3日目を数秒差で @kamipo さんに取られてしまい*1、ネタかぶったらどうしようとドキドキしていましたが、そのようなことはなくこれでようやく安眠できそうです。 MySQL では、UNSIGNED が使える UNSIGNED は、標準SQL にはないデータ型属性です。*2 通常の INT が -2147483648 から 2147483647 の範囲を表すのに対し、 INT UNSIGNED で定義したカラムは 0 から 4294967295 の範囲となります。 今回は、この UNSIGNED に関する奇妙な挙動のお話。 なお、検証に利用したバージョンは 5.1.69 です。 すでに 5.6 が GA となっている現在からするとやや古いバージョンではありますが、REHL 6.5 で
前半はいつものネタ。 "相変わらず安定稼働してる" というだけの話なのだけど、実は裏でちょこちょこ改良していて、ちゃんとものができていればそれを話す予定でした。 んで、次に マルチソースレプリケーションの話。 こちらは実際に試してみたので、その挙動について話そうと思ったのだけど、Lab リリースなので今後どう変わるか分からないということもあり、また、調べているうちに 先人達のマルチソースレプリケーションへの取り組みをいくつか見つけたので、これを紹介することにしました。 殿堂入りのアレ〜Multi-Source Replication を添えて〜 from do_aki MyISAM Active-Active Clustering ってのは、かなりのキワモノで、MyISAM External Lock (=POSIX 準拠のファイルロック)を利用することで、複数の MySQL サーバが 共
選択言語は PHP。スコアは、FAIL でまくって 0。 完全に InnoDB Memcached の罠にはまってました。 PHP 使ったチームだと、 @dekokun が素敵なエントリを書いているので、それを読むのが良いと思う。 → ISUCON予選にPHP実装で参加して3位になりましたーやったことなどまとめ 以下、メモ的にやったことを。 環境構築 webapp 以下を全て git に screen 入れた zsh 入れた このへんは当たり前すぎて書き忘れてた。 php 5.5.4 に入れ替え OpCache 使ってみたかった。 反省はしてない。 php-build でコンパイルして、 phpenv で管理。 curl https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash mkdir $HOME/.ph
マスタn対スレーブ1レプリケーション については、 vol.2、 vol.3 で話したことに加えて、 pt-online-schema-change と相性悪いという話をしました。 同じ内容だけど、少しずつ加えてるのですよ。 ただ、これだけだとあまりに内容が薄いので、もう一本続けて話したのが mysql_config_editor についてです。 こちらは、暗号化じゃなくて難読化なのでファイルの扱いには注意しようね。という話をしました。 その日既に @matsukena さんのスライドで mysql_config_editor の話でてたのに、普通に解説してましたねorz (諸事情により @matsukena さんの話を半分ほど聞けなかったのです) マスタN対スレーブ1レプリケーションの作り方 〜あれから〜 from do_aki セキュアそうでセキュアじゃない少しセキュアな気分になれるm
Immortal from do_aki 気軽に die するプログラムがあってテストしづらい、という話を以前聞いたことがあり、「たしか、拡張で opcode フックできたよなー」と思ったので、 die したときに単純に死ぬのではなく、何かをすることができる拡張をつくってみようかなと思って書き始めてみたよという話。 発表時はまだほとんどコードを書いてない状態で、しかも資料も即興で書いたのでgdgd でしたごめんなさい。 なので資料は発表時から少しに手を加えてあります。 また、コードも hnw さんに提案されたとおりに die されたら 例外吐くようにしてみました。 <?php # zend_extension=immorttal.so; ini_set('immortal.throw_exception_at_exit', 1); function I_will_be_back() { d
※ ただし IE を除く ブラウザで表示しているデータをCSV ファイルにしてダウンロードしたかったので調べてみると File API の Blob + createObjectURL でさくっとできるっぽい。 *1 だけど、日本語が utf8 になってしまう。 そのまま Excel で開くと文字化けてしまうので、どうしたもんかと悩んでいたら、 BOM をつければ 中身が utf8 でも開けるという情報を得たのでBOM 付きでダウンロードできるようにしてみました。というお話。 実際のHTMLは https://dl.dropbox.com/u/12062013/excel_csv/download.html で試せます。 (1) BOM の用意 数値のArray ([0xEF, 0xBB, 0xBF]) をそのまま Blob に渡すと数字文字列に変換 ("239,187,191")されて出
だいぶ経ってしまったのだけど、 東京Ruby会議10 事後懇親会: Q で即興で LTしてきたもの。 Excel 方眼紙って、目を細かくしたらドット絵になるよなぁと思って、画像から Excel ファイルを作るスクリプトを組みました。という話です。 こんな画像(png) が、こういう Excel ファイル(xlsx) になる Excel ファイルの出力には PHPExcel というライブラリを利用したのですが、 Style が増えれば増えるほど遅くなっていくという問題にぶつかったので、それを解消するために手を入れています。 発表した時点では直接 PHPExcel を弄っていたのですが、継承して手を入れてやれば解消できることに気づいたので FastStylePHPExcel クラスを作ってそこで吸収しました。 Style のマスタデータ探索が線形探索だったので、HashTable (つーか単な
2013/01/13,14 と開催された 東京Ruby会議10 に参加し、またもやPHP関連ネタを発表してきました。最近、図らずも PHP 芸人としての腕が上がっている気がします……。 A bridge between php and ruby from do_aki 自分の発表について たった15分の発表なのだけど、なんだか妙に不安で資料作り終えても上手く発表できる気がしていませんでした。 舞台袖での待機中も落ち着かなくてそわそわそわそわ。 話は変わるけど、舞台が広くて奥行きがあり、ここでの公演良さそうだなぁとか思ってました。装置の方はちと分からなかったけど。(一応演劇経験者なのです) んで、発表自体はなんとか時間内に終えましたが、今から思えば後半はばっさり切っても良かった気がする。そうすれば LTのノリで話さずに済んだし、もう少し間を上手くとることができたかなと。 スライドは結構頑張っ
やー、緊張した。 Perl の父の前で 「そろそろ Perl にも飽きてきたでしょ」とか言ってしまったわけで。 「Perl? それPHPでできるよ」とか言ってしまったわけで。 本当はもう少しゆっくり話すつもりだったんですが、緊張すると早口になるのはどうも癖らしく、一向に治りません orz Sore php from do_aki ちなみに最後のスライドについてですが、1日目で発表された[twitter:@mayumine] さんのLT 「Perlと人生」(https://github.com/mayumine/perlandlfe) をオマージュさせていただきました。 もうちょい詳しく pecl-perl (http://pecl.php.net/package/perl) が php5.4 で動かなくなっていたので、動くように修正したよという話でした。 php5.3 の場合は、 SVNの
以前(11月の末頃)書いてて中途半端になってた記事を手直しして放出。 Jenkins での PHP コードカバレッジ推移グラフの表示について。 Jenkins by Kanon jenkins でテストの自動化をしています。 [twitter:@yamashiro] さんの記事 (PHPでTDD&CIワークショップ、Jenkins + PHP の各種プラグインパート資料 - Yamashiro0217の日記) を参考にしましたが、インストールは Kanon (http://kanon.ultimania.org/trac/kanon) を利用しました。(本当は trac も効果的に使いたいと思っているのですが。。。) pmd 警告や、コード重複警告はたくさんでているのですが、当初はテストがほとんどない状態でしたので、まずはカバレッジ6割程度を目標にテストを増やしています。 もちろん、カバレ
概要 Scientific Linux6.2 に GrowthForecast を導入したメモ - do_akiの徒然想記 の続き。 当初は daemontools で監視するつもりだったのだけど、 RHEL6 系だと動かすのが面倒だという話を聞いたので(未検証です) monit を利用することに。 1分毎にプロセスをチェックして、死んでたら起動するようにした。 monit 導入 $ sudo yum install yum-conf-epel $ sudo yum install monit monit は epel リポジトリに含まれるので、 epel の yum 設定を追加してから install する。 ベースの設定はこんな感じ /etc/monit.conf # 60秒ごとにチェック / 起動後 2分経ってから監視開始 set daemon 60 with start delay
概要 タイトル通り、sl6 に GrowthForecast を導入したときのメモ。 perl や cpan モジュールを、OS のパッケージに依存しない形で入れたかったので、 RPM にはせず。 growthforecast ユーザを作り、その中で perlbrew と cpanm で実行環境を構築した。 導入 コンパイルに必要なパッケージの導入 $ sudo yum groupinstall "Development Tools" $ sudo yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel RRDTool が pkgconfig glib2 gettext libxml2 pango cairo に依存する + コンパイルには devel パッケージが必要になる。 実行ユー
Lua 面白そう! ってだけでこのネタ選びました。 スライドはこちら。 Mod lua View more PowerPoint from do_aki おまけとして書いた fluent-logger-lua のコードについては gist にも置いときました。 https://gist.github.com/2246245 他の方の発表も濃くて面白かったです。 冒頭から SSL Handshake のやりとりについての解説始まるしw Session Ticket は知らなかったのでRFC 読も。 mod_sed は、ネタっぽいモジュールの割に実は実用的? Varnish は使ったことないので、どっかで試してみたい。 みんな大好きfluentd リンク Webサーバ勉強会 #5 : ATND Webサーバ勉強会#5に参加してきましたよ - What I’ve found has never
とある事情により、 MySQL (バージョンは 5.5.13)の エラーログが溜まってしまったのでパージしようとした時のこと。 さすがに、そのままエラーログを削除するのは拙いよなーと思い、探してみた。 5.1 (日本語版) のマニュアルではだめ リファレンスを参照すると ref.1 を見つけたので、 FLUSH LOGS を打ってみたところ、エラーログファイルのリネームされず。。。 元のファイル名のまま、エラーが吐き続けられる。 ref.1 FLUSH LOGS (5.1) の解説 もしサーバが --log-error オプションでスタートされたら、それは FLUSH LOGS によって -old のサフィックスを利用して現在のエラー ログ ファイルをリネームし、新しく空のログ ファイルを作成します。もし --log-error オプションがなければリネームは行われません。 (http:/
infrapp2012 何をやるのかが具体的に分からないままに、主宰者陣が知り合いだったというのもあり、「きっと面白いんだろう」という期待だけでとりあえず参加してみました。 1日目 集合して、懇親会会場に向かい、酒飲んで、ホテル戻って、酒飲んで、爆睡。 と書くと、飲む以外なんもしてない感じだけど、実際にはとても濃い時間でした。 懇親会中にお題が発表されて、それを基にやりたいことを話し合ってチーム分け。 お題は、スタッフ側で用意した 重い WordPress や Redmine をどうにかするというものだったのだけど、結局どのチームもお題をそのままは利用せずに、「こういうものがあったらいいよね」というものを作ることに。 自分は、チーム ますだっく (注:[twitter:@masudaK] さんはチームメンバーではない)となり、"Java のプロダクトを運用する際には、プロファイラなんかのツ
Subversion リポジトリの場所が変わった場合、 svn switch --relocate 旧リポジトリ 新リポジトリ というコマンドで、リポジトリの再配置ができるのだけど、 Subversion リポジトリを git svn を使って管理している場合はどうすればいいのか分からなかったので調べてみた。 コマンドは存在しない google 先生にお伺いを立ててみたところ、 [git][svn]git-svn使用時におけるsvnリポジトリの移行 ( http://d.hatena.ne.jp/walf443/20090811/1250005053 ) git svn での switch のやりかた ( http://d.hatena.ne.jp/naga_sawa/20110306/1299422744 ) というのは見つけた。どうやら、 svn switch --relocate に
この記事は、 PHP5.4 Advent Calendar 2011 (http://atnd.org/events/22473) 22日目です。 そして同時に do_aki Advent Calendar 2011 (http://atnd.org/events/22834) の 22日目でもあります ;-p PHP5.4 Advent Calendar 2011 の 21日目は [twitter:@kokkekun] さんの http://k-holy.sakura.ne.jp/wordpress/2011/12/21/callable_typehint/ でした。 23日目は [twitter:@Hiraku] さんの http://blog.tojiru.net/article/242054875.html です。 ぺちぺち *1 を作るに当たって、PHP の Parser や L
今回は、PHP コンパイラの実行を中止する方法 について。 「それって、 exit とか die でしょ?」 と言われそうですが、ハズレ。 exit や die は、スクリプトを終了させるものです。 何が違うのか、実際に例を見てみましょう。 exit Code.1 exit の例 <?php echo "ok\n"; exit(); hogeeeee これ、動きません。 syntax error で怒られます。 hogeeeee なんて構文、 PHP はありませんから。 でも、 exit の代わりにあるものを使えば動くようになります。 それが、 __halt_compiler です。 __halt_compiler Code.2 __halt_compiler の例 <?php echo "ok\n"; __halt_compiler(); hogeeeee これなら問題なく動く。 PHP
次のページ
このページを最初にブックマークしてみませんか?
『do_aki's log』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く