タグ

PHPに関するkadoyauのブックマーク (29)

  • グーペのPHPバージョンを5.2から7.1にアップグレードしました - Pepabo Tech Portal

    こんにちは、グーペグループエンジニア @hypermkt と技術部インフラグループ・シニアエンジニア @hfm です。半年に及ぶグーペのPHPアップグレード作業が2017年5月中旬に全て完了し、PHPバージョンは5.2から7.1になりました。今回の記事ではアップグレードの過程と効果について、ご紹介させていただきます。 はじめに 8年目のホームページ作成サービス「グーペ」 なぜ8年目のタイミングでアップグレードをしたのか アップグレード基方針 PHP5.2との後方互換性を維持する deprecatedの対応は優先度低め 事前準備 新旧両バージョンで継続的テスト より広範囲をカバーできるE2Eテストを重視 リアルタイムエラー検知 下位互換性のない変更点の修正 php7ccによる互換性の自動検知 MySQL関数の削除 preg_replaceへの置き換え PHP7.1用php.iniの作成 リ

    グーペのPHPバージョンを5.2から7.1にアップグレードしました - Pepabo Tech Portal
    kadoyau
    kadoyau 2017/06/22
    まず "新旧両バージョンで継続的テスト"
  • 【PHP】 PHPでの静的解析 SonarQubeを使ってみた - 旅するえんじにあ - Engineers to Travel -

    最近ネタもなく、日々テストとLibraryの作成を行っていました。 という言い訳で更新しないのは悪だと思っているので、ちょっと心いれかえて。 今回はPHPの静的解析についてです。 前々から静的解析ツールについては良い物が見当たらず、もちろんあるっちゃあるのですが コレジャナイ感が強かったのですが、勧められたツールがあったのでそれを今回は導入していきたいと思います。 静的解析って? まずは静的解析とは何か。 静的解析とはプログラムを実行せずに、コードの問題点を見つける。 特定のコーディングパターンに違反している箇所を指摘する。 というのもになります。 少人数で開発していたとしてもレガシーなコードは増えていきます。 コピーして同じロジックが出来上がっていたり、コーディング規約に沿った書き方でない部分 動くけど、これっていいのかな?って思う部分を指摘してくれるわけです。 静的解析ツール ・Scr

    【PHP】 PHPでの静的解析 SonarQubeを使ってみた - 旅するえんじにあ - Engineers to Travel -
    kadoyau
    kadoyau 2016/05/25
  • phpDocでarrayの中身を明示する[PHP][PHPDoc] - あざらし備忘録。

    軽いTips共有を。 皆さんPHPDoc、書いてますでしょうか? IDEとかだと特にジャンプ力や補完等もより効くようになるしそもそも親切なコードになると思うので割と積極的に書くようにしています。 今回はそのPHPDocがらみで知った小ネタのご紹介です。 また、今回はPHPDocではなくphpDocumentor前提な話で行こうと思います。あしからず。 phpDocumentor - PHPDocに代わるAPIドキュメント自動生成ツール - Do You PHP? このあたりが参考になるかと思います。 まぁしばしば配列を引数に取ったり変数に格納したりしたい場合がありますよね。 そういう時、今までは <?php /** @var array $hoge */ $hoge = [1,2,3,4,5]; //とか /** * @param array $hoge * @return array *

    phpDocでarrayの中身を明示する[PHP][PHPDoc] - あざらし備忘録。
    kadoyau
    kadoyau 2016/04/01
  • PHPで例外チェーン - はむはむエンジニアぶろぐ

    オブジェクト指向プログラミングで、例外処理をする際は 例外チェーン を意識せねばなりません。 例えばこのように、catchの中でさらに例外を投げ直していて(throw)例外チェーンをしていないとどうなるか? <?php class ExceptionChain { public function execute() { try { $this->method1(); $this->method2(); $this->method3(); } catch(Exception $e) { throw new Exception('execute error.', $e->getCode()); } } 以下、stack traceで ExceptionChainTest.php が実行コードです。 Time: 115 ms, Memory: 13.25Mb There was 1 error:

    PHPで例外チェーン - はむはむエンジニアぶろぐ
    kadoyau
    kadoyau 2016/03/31
  • PHPのmt_rand()にプルリクを送った - kusano_k’s blog

    この話。 PHP の mt_rand() は一貫して壊れている(consistently broken)らしい - 唯物是真 @Scaled_Wurm PHPのmt_rand()が実装にミスがあることを知ったので、「PHPのコミットログに名前を載せるぞ╭( ・ㅂ・)و」と思ってプルリクを送ったら、一旦マージされたけど、リバートされた。 詳細 https://github.com/php/php-src/pull/1681/files ついでにテストコードも付けたけど、直すべきは1文字だけ。 twistというマクロの定義が1文字間違えている。 loBit(u)ではなくloBit(v)が正しい。 #define twist(m,u,v) (m ^ (mixBits(u,v)>>1) ^ ((uint32_t)(-(int32_t)(loBit(u))) & 0x9908b0dfU)) このマク

    PHPのmt_rand()にプルリクを送った - kusano_k’s blog
    kadoyau
    kadoyau 2016/02/23
  • Composerのバージョン指定方法でのチルダ(~)とキャレット(^)の違い — A Day in Serenity (Reloaded) — PHP, CodeIgniter, FuelPHP, Linux or something

    要するにキャレットはセマンティックバージョニングに従って互換性が維持されるような範囲を指定するということですね。 ^1.1や^1.1.5の場合は、メジャーバージョンが変わらず互換性が維持される間、バージョンがあがります。 バージョン1.0未満のバージョンではマイナーバージョンの変更でも互換性が維持されない可能性があるので、そこはあがりません。 まあ、使ってるパッケージがセマンティックバージョニングにきちんと従っているかどうかはパッケージの作者によりますし、セマンティックバージョニングに従っているというパッケージでもバグで後方互換性が破られる可能性もあるわけですので、あまり信用しすぎないことをお薦めしますが。 ちなみに、その他のバージョン指定方法については、次の記事がわかりやすいです。 composerのバージョン指定方法 | QUARTETCOM TECH BLOG 参考 https://

    kadoyau
    kadoyau 2016/02/08
  • 数十台規模のPHP 5.3プロジェクトをダウンタイムゼロでPHP 5.6化した時のまとめ | GMOメディア エンジニアブログ

    新年明けましておめでとうございます。GMOメディアの流しエンジニア、山田コーダーです。さて、ようやく弊社でもPHP 5.3、5.4系のプロジェクトの5.6化が一段落してまいりました。 PHP 5.6のリリースが2014年ですので今更感がありますが、「レガシーなPHPプロジェクトのバージョンアップに困っている」「使いたいライブラリーが5.3に対応してないからバックポートした」などという悲痛な声を目にしたこともあり、これからPHPのバージョンアップをされる方たちへのささやかな参考資料になればと思い、書かせていただきました。 さて、まずは題に入る前に結果からお見せしようと思います。以下はNew Relic(アプリケーションのパフォーマンス監視サービス)のレスポンスタイムのグラフです。なおこのプロジェクトでは、ブラウザー表示用HTMLを出力するサーバー(Web 約10台)と、スマートフォンアプリ

  • PHPの生みの親、ラスマス・ラードフ氏インタビュー | gihyo.jp

    PHPの生みの親⁠⁠、ラスマス⁠⁠・ラードフ氏インタビュー 2015年12月に無事公開されたPHP7。その公開に先立ってPHPの生みの親であるラスマス・ラードフ氏に話を伺う機会がありました。英語で行われた一時間のインタビューは長大ですがラスマス氏の思想がよく分かる話題が多く、可能な限りそのままの形でお伝えすべく、その模様すべてをお届けします。 なお、インタビューは10月に開催されたPHPカンファレンス2015の講演終了後に行われ、リリースに関する話題などはその時点でのものです。 現在の仕事と生い立ち ―――― まずは、PHPを作ってくださってありがとうございます。今日の基調講演もすばらしかったです。 ラスマス:ありがとうございます。 ―――― いきなりですが、個人的な質問から始めてもいいでしょうか。 ラスマス:どうぞ。 ―――― Etsyではどのようなお仕事をなさっているんですか? ラスマ

    PHPの生みの親、ラスマス・ラードフ氏インタビュー | gihyo.jp
  • フォーム要素の属性名の『ドット( . )』は『アンダーバー( _ )』に変わります - [PHP + PHP] ぺんたん info

    フォーム要素の属性名に『ドット( . )』が使われていると、送り先のPHP内では『アンダーバー( _ )』になって処理されます。 例 フォームの送信先のPHPでは、フォームの要素は$_POSTや$_GETで処理します。 <form method="post" action="do.php"> <input type="text" name="test.test" value="" /> <input type="submit" value="送信" /> </form> このようなフォームの場合、送り先のPHP側では test.test ではなく test_test となります。

    kadoyau
    kadoyau 2015/10/14
    “フォーム要素の属性名に『ドット( . )』が使われていると、送り先のPHP内では『アンダーバー( _ )』になって処理されます”
  • PHPの名前空間の効果的な使い方を考える

    PHPは5.3から名前空間が導入され、名前の衝突を避けるため長いクラス名をつけることから解放されました。しかしながら、名前空間を使ったコードは、名前空間を使っていないものに比べて当に読みやすくなっているのでしょうか? ここで例を挙げます。PHPの良質なソースコードと言えば、私はZend Framework(ZF)やSymfonyを思い浮かべるのですが、ZFのとあるクラスの冒頭を見てみましょう。 https://github.com/zendframework/zf2/blob/master/library/Zend/Mvc/View/Console/RouteNotFoundStrategy.php <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframewo

    PHPの名前空間の効果的な使い方を考える
    kadoyau
    kadoyau 2015/10/05
  • 90分間濃縮 PHPエラーの教室

    15. エラーの種類 種類 内容 E_ERROR / Fatal 実行不可能:処理は停止、白画面 E_WARNING / Warning 警告:実行時に問題発生、処理は継続 E_PARSE / Parse 解析不能:処理は始まらない、白画面 E_NOTICE / Notice 通知:問題になりうる状況、処理は継続 E_STRICT / バージョン間の互換性に関するエラー E_DEPRECATED 重大度に応じてレベルが存在 Shimokita.php / Yusuke Ando (@yando)

    90分間濃縮 PHPエラーの教室
    kadoyau
    kadoyau 2015/09/25
  • 新標準PSRに学ぶきれいなPHP

    16. 豪華なメンバー陣 Nate Abele: Lithium Robert Lemke: FLOW3 Nils Adermann: phpBB Larry Masters: CakePHP, CakePHP 2 Brett Bieber: PEAR, PEAR2 Ryan Parman: Amazon Web Services Guilherme Blanco: Doctrine, Doctrine2, SDK et al. Evert Pot: SabreDAV Jordi Boggiano: Composer, Packagist Fabien Potencier: Symfony, Symfony2 Karma Dordrak: Zikula Andre Romcke: eZ Publish Paul Dragoonis: PPI, PPI2 Paul Scott: Chisim

    新標準PSRに学ぶきれいなPHP
  • [PHP]pecl,phpize,extensionという単語を見て頭痛がするあなたへの処方箋 · DQNEO日記

    はじめに PHP Extension, pecl, phpize, php-config, *.so これらの単語を見て頭が頭痛になったことはありませんか? pecl installがコケてm9(^Д^)プギャーってなったことはありませんか? 私はあります。 しかしPHPの環境構築をしようと思ったら、PHP Extensionは避けては通れないテーマです。 ひとつひとつの仕組みの裏側を理解すれば怖いことはありませんので、いちど根っこから掘り下げて勉強しておきましょう。 2つに分断されたPHPの世界 PHPの世界では、ライブラリ配布方式が2つの世界に分断されてしまっています。 ライブラリの種類 配布サイト インストーラ 後者の「C言語で書かれたライブラリ」のことを「エクステンション」といいます。実体は拡張子.soファイルです。 php.iniの末尾に"extension=memcache

    [PHP]pecl,phpize,extensionという単語を見て頭痛がするあなたへの処方箋 · DQNEO日記
  • PHP: スコープ定義演算子 (::) - Manual

    スコープ定義演算子 (::) スコープ定義演算子 (またの名を Paamayim Nekudotayim)、 平たく言うと「ダブルコロン」は、トークンのひとつです。 定数 static プロパティ、 クラスの static メソッド、 や親クラスのそれにアクセスできます。 さらに、static メソッドやプロパティは 遅延静的束縛 (Late Static Bindings) 経由でオーバーライドできます。 これらの要素をクラス定義の外から参照する際には、 クラスの名前を使用してください。 変数を用いてクラスを参照することも可能です。 変数の値に (self や parent、 static といった) キーワードを指定することはできません。 なぜダブルコロンに Paamayim Nekudotayim という名前をつけたのか、 ちょっと奇妙に感じられるかもしれません。 しかし、Zend

    PHP: スコープ定義演算子 (::) - Manual
    kadoyau
    kadoyau 2015/09/16
  • gitのpre-commit hookを使って、綺麗なPHPファイルしかコミットできないようにする - MANA-DOT

    PHPのようなゆるふわな言語を安全に書くためには、コードの綺麗さや作法などを担保する手段が大切になります。 IDEを使う、JenkinsなどのCIサーバーを立ててチェックさせるなどの方法が考えられますが、今回はgitの pre-commit hook を利用して、一定の条件を満たしていないコードはそもそもリポジトリにコミットができないようにしてみました。 できるようになったこと 今回以下の様な事ができるようになりました。 git commit時に、 コミットされるファイルにシンタックスエラーがあるPHPファイルがる場合、コミットが失敗する。 コミットされるファイルに作法の悪いコードが有る場合、(使用してない変数があるなど)コミットが失敗する。 PSRに則ってないファイルが有る場合(改行コードやインデントの統一など)、整形してからコミットする。 これにより、レポジトリ上にコミットされるファイ

    gitのpre-commit hookを使って、綺麗なPHPファイルしかコミットできないようにする - MANA-DOT
  • Reference: What is variable scope, which variables are accessible from where and what are "undefined variable" errors?

    What is "variable scope"? Variables have a limited "scope", or "places from which they are accessible". Just because you wrote $foo = 'bar'; once somewhere in your application doesn't mean you can refer to $foo from everywhere else inside the application. The variable $foo has a certain scope within which it is valid and only code in the same scope has access to the variable. How is a scope define

    Reference: What is variable scope, which variables are accessible from where and what are "undefined variable" errors?
    kadoyau
    kadoyau 2015/09/08
    “PHP has function scope. That's the only kind of scope separator that exists in PHP.”
  • 「Mockery」を使ってサクッとPHPのテストを書いてみる

    ごあいさつ はじめまして。アライドアーキテクツの石川と申します。 2月に入社してから早くも3ヶ月がたとうとしています。 私は前の職場ではほとんどjavaで開発していたのですが、 アライドに入社してからは主にPHPで開発をしています。 私の回では、その時その時に関心のある技術情報を発信していければ、と思っています。 皆様どうぞよろしくお願いいたします。 今の自分の課題はとにかくUnitテストを書くことなので、 今回はPHPのモッキングフレームワークである「Mockery」について書きたいと思います。 Mockeryって? padraic / mockery こちらで御座います。 static methodのモック化が出来たり、テスト対象のメソッド内部で生成されるインスタンスをモック化したり、 PHPUnitでやろうとすると一手間かかることをサクっと出来てしまいます。 Let’s インストール

  • PHP PHP_SELFとSCRIPT_NAMEを比較してみた

    このドキュメントの内容は、以下の通りです。 はじめに SCRIPT_NAMEとは PHP_SELF とSCRIPT_NAMEの値を確認する さいごに PHP関連記事 PHPに関する書籍を探す はじめに PHPの定義済の変数に サーバ変数 $_SERVER があります。これで、スクリプト名を取得したり、クエリストリングを取得したり、リファラ、ユーザエージェントといったものが色々取得できます。 PHPのスクリプト名を取得するのに、$_SERVERのPHP_SELFやSCRIPT_NAMEを使ったりするわけですが、なんで同じものがあるのでしょう? ** PHP_SELF:とは PHP_SELFに関するPHPのドキュメントからの抜粋です。 現在実行しているスクリプトのファイル名です。ドキュメントルートから取 得されます。例えば、http://example.com/test.php/foo.bar

    kadoyau
    kadoyau 2015/07/30
  • preg_match - 正規表現によるマッチングを行う

    int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) パラメータ pattern 検索するパターンを表す文字列。 subject 入力文字列。 matches matches を指定した場合、検索結果が代入されます。 $matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] には 1 番目のキャプチャ用サブパターンにマッチした 文字列が代入され、といったようになります。 flags flags には以下のフラグを指定できます。 PREG_OFFSET_CAPTURE このフラグを設定した場合、各マッチに対応する文字列のオフセットも返されます。 これは、matches の値を配列に変

  • Guzzle, PHP HTTP client — Guzzle Documentation

    Guzzle Documentation¶ Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services. Simple interface for building query strings, POST requests, streaming large uploads, streaming large downloads, using HTTP cookies, uploading JSON data, etc... Can send both synchronous and asynchronous requests using the same interface. Uses PSR-7 interfaces for r

    kadoyau
    kadoyau 2015/07/30