JavaScript で非同期処理を実現する Promise という機構はご存知でしょうか? 今回は「Promise の考え方を PHP で実装した Guzzle Promise」を使って、大量の API コールを高速化したときの経験についてお話してみたいと思います。 Talked: - …
JavaScript で非同期処理を実現する Promise という機構はご存知でしょうか? 今回は「Promise の考え方を PHP で実装した Guzzle Promise」を使って、大量の API コールを高速化したときの経験についてお話してみたいと思います。 Talked: - …
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS" PHP-FPM って何? Answer PHP: FastCGI Process Manager (FPM) - Manual FPM ( FastCGI Process Manager ) は PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意しています。 そもそも CGI って何? Common Gateway Interface (CGI) - Wikipedia Common Gateway Interface(コモン・ゲートウェイ・インタフェース、CGI)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。 現存する多くのウェブ
導入 PHPにはsimilar_textやlevenshteinといった、2つの文字列の類似度を計算するための関数があります。しかしこれらはマルチバイトを考慮しておらず、とりわけUTF-8バイト列に対しては計算精度が悪化するという特徴があります。そこで今回はUTF-8マルチバイト対応版のlevenshtein_utf8という関数を作ってみることにしました。なおsimilar_textの方は計算量が大きすぎてPHPレベルで実装するに堪えないので、今回はパスということで… 既に@suinさんの「mb_levenshtein 二つの文字列のレーベンシュタイン距離を計算する(マルチバイト対応版)」は拝見しましたが、文字種による制約がかかると実用的ではないので、@itcomさんがコメントされているように素直な実装を行いました。といってもほとんどphp-srcからのパクりですが。 距離の正規化に関して
はじめに 淫夢要素はありません。 Simple HTML DOM Parser や Goutte の使い方は至る所で説明されていますが、PHPネイティブのDOMに関しての記事がかなり少ないので書いてみることにします。 ちなみに… Simple HTML DOM Parserは内部で何回も正規表現を使って全ての要素をパースするので、かなり遅いです。これ使うぐらいなら最初から自分で正規表現一本で書いたほうがマシ。自分で正規表現を使って必要部分だけを抜き出す方法は、全ての方法の中で最も高速なので、正規表現が得意な人だったらこれでもいいと思います。 Goutteは内部でPHPネイティブのDOMを使ってます。PHPネイティブのDOMはDOMとして読ませる方法の中では最も高速なので良い方法をチョイスしていることになるのですが、そもそもGoutteに頼らなくてもそれなりに十分やっていけます。何より依存フ
自分の担当したWebアプリケーションを引き継ぐ際に、予備知識として説明したことのまとめ 注意事項 もともと明確に定義されていない概念や、簡単に説明するため正確さを犠牲にした部分が多い 間違っていることを前提に、疑いながら読むのがベター アプリケーションの層構造 アプリケーションを構成するオブジェクトには非常の多くの種類がある アプリケーションの(より良い)構成をオブジェクト単位で考えるのは難しいので、もっと粒度の大きい単位で考えたい アプリケーションをいくつかの層(オブジェクトの所属するグループ)に分割し、層単位でアプリケーションの構成を考える View層(ビュー層) レスポンスをクライアントにとって都合のいい形(i.e. 画面)に変換する層 View層のオブジェクトは Controller層のオブジェクトから利用される DomainModel層のオブジェクトを利用して、ユーザーに表示した
この記事はPHP Advent Calendar 2017の2日目です。 ここ最近、本業のほうが死ぬほど忙しく、すっかりブログを書いていなかった@Hirakuです。 だいぶ前のことですが、今年のPHPカンファレンス福岡で例外の話をしてきました。 この時の発表では例外に関する概要が主だったので、例外クラスそのものの設計について補足を書いてみることにします。 例外のある世界観 PHP7ではいくつかのエラーが例外と同じ挙動を示すようになり、エラーではなく例外機構を使う言語に様変わりしました。 例外というのは、かなり侵略性の高い概念であり、例外のある世界では以下の前提に立つことが暗黙のうちに強要されます。 どこでも例外が発生する可能性がある 例外によって中断されても、ソフトウェアが不適切な状態にならないように保証するのは各プログラマの責任(例外安全) たとえば、以下の関数で例外が発生する可能性があ
<?php namespace YourSystem\Model; class User { /** @var int */ public $id; /** @var string */ public $name; public function __construct($id, $name) { $this->id = $id; $this->name = $name; } } <?php use YourSystem\Model\User; $user = new User(39, "Miku"); echo $user->id; // => 39 echo $user->name; // => "Miku" このクラスの問題点は、プロパティを外部から読み出したいがために、可視性をpublicにしてしまってること。 しかし、予期しないデータの書き込みは防ぎたい… 解決策 ゲッターメソッ
意外と分からずに、「とりあえず」とか「なんとなく」で使っちゃうパターンが多い系案件な気がして書いてみます。 こんな事ありませんか? DIとDIコンテナの違いを説明出来ない DIとサービスロケータの違いを説明出来ない DIを使ってるつもりが、サービスロケータになっている DI、サービスロケータが、ただの「パターン」の1つであることを理解してない DI(Dependency Injection)を正しく理解する そもそも、Dependeny Injectionを日本語にするとどういう意味になるでしょうか。 多くの人が「依存性の注入」とか応えるのではないでしょうか? 私もそうでした。きっと何かで読んだのでしょう。 (wikipediaに「依存性の注入」と書いてありますね) 補足 なぜ依存性を注入してあげると良いのか、そのメリット等は後述しますが、 DIというのはただのパターンの1つです。 たまに
PHPカンファレンス福岡2017の登壇資料です。
遅延ロードは画像SEOに向かない? 鈴木 謙一さんのブログによると「Lazy Load(遅延ロード)」された画像はGooglebotに認識されない可能性がある、とのこと。 Lazy LoadはSEOに不向き? Lazy Loadで表示する画像をGooglebotは認識できないことがある | 海外SEO情報ブログ 画像の遅延ロードとは よくある遅延ロードは、透過PNGなどのダミー画像やローディング画像などを画像パスに設定します。そしてユーザーが画像のある位置までスクロールして初めて画像が読み込まれます。jQueryのプラグインなどでも多くの種類がありますが、やっていることは概ね変わりません。 <img src="img/dummy.png" data-original="img/01.png" alt="" width="800" height="100" class="lazy"> <sc
5.3 名前空間のサポート 名前空間名の定義 非修飾名 名前空間区切り文字を含まない識別子。例)Foo 修飾名 名前空間区切り文字を含む識別子。例)Foo\Bar 完全修飾名 名前空間区切り文字を含む識別子のうち先頭が名前空間区切り文字で始まるもの。例) \Foo\Barとかnamespace \Foo 名前空間の定義 namespace + 完全修飾名 ただし完全修飾名しか指定できないので最初のバックスラッシュ\は使用しないことが推奨される。 名前空間のインポート use + 完全修飾名 ただし完全修飾名しか指定できないので(略 // エイリアス use My\Full\Classname as Another; // これは use My\Full\NSname as NSname と同じです use My\Full\NSname; // 関数をインポートします (PHP 5.6+)
* NaN でなく PHP_INT_MIN から PHP_INT_MAX までの範囲内の値に限る ** 数値形の文字列のみ。数値形の文字列に他の文字が続く場合も使えるが、 Notice が出る *** __toString メソッドを持つもののみ 弱い型検査モードで行われる暗黙の型変換は、PHP が従来他の構文(算術演算子や条件式、組み込み関数の呼び出しなど)で行ってきたのと同等のものです。 厳密モード 一方、厳密な型検査のモードを使う場合は、関数は宣言されたのと正確に一致する型のみを受け付けるようになります(int → float の拡大変換をのぞく)。 ファイルの先頭に declare(strict_types=1); と書くことで、そのファイル内での関数呼び出しの際に厳密モードでの型検査が行われるようになります*1。 以下のように使います。 <?php declare(strict_
【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 予備知識 PHPはフォームから送信された値などをコード実行開始に自動的に変数として使えるようにしてくれる非常に便利なプログラミング言語です.しかし,それをそのまま用いるとエラーが発生したり,脆弱性になってしまったりするケースがたくさんあります.使う前には適当なチェック処理が必要です. どういった変数が対象になるか 以下に挙げられた変数は,ユーザーが勝手に値や構造を書き換えたり,送信をそもそも行わずにアクセスしたりすることが可能な信用できない変数だと思ってください.例え,ラジオボタンで選択肢を限定していたり,隠し要素として埋め込んでいたりしたとしても,これに該当してしまいます. $_GET アクセスされたURLの ? 以降のクエリースト
目次に戻る ビット演算は、PHPを扱う上に置いてはそれほど重要性は高くないのですが、次の「演算子」の説明で必要性が生じてくるので、ここであらかじめ触れておきます。 ビット演算の概要 導入 2進数演算を考えましょう。 【例】 $3 + 5 = 8$
$php vendor/phpoffice/phpspreadsheet/samples/index.php Requirement check: PHP 5.6.0 ... passed PHP extension XML ... passed PHP extension xmlwriter ... passed PHP extension mbstring ... passed PHP extension ZipArchive ... passed PHP extension GD (optional) ... passed PHP extension dom (optional) ... passed <?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice
会社でHAProxyを試したい時、仕事中自分のMacを開いていると肩身が狭いのでばれないように仕事で使っているWindowsにVirtualBox+VagrantでCentOS環境を構築してHAProxyを試そうと言う意図で書かれたエントリです。 新しい案件もVagrant使うっぽいのでその点でもDockerを使わずに慣れようという点でVagrantを選択しています。 …(今後自分のMacを検証用に開いていもそのような思いをせずにいれる環境になることを願うばかりです。) 初めにVagrantとは何者か 触り始める前の印象はVirutualBoxに環境を立ち上げるための設定ファイルを書いてそれから同じ環境を作ることが出来ると思っています。 -> VirtualBoxのVM構築を楽にしてくれるツール DockerはVirtualBox上にLinuxVMを作ってその上でDockerfileからイ
リリースしたばかりの最新WEBサービスの使用技術ついてご紹介したいと思います(最新ではありますが最先端技術ではありません)。 スカウトミー https://scoutme.biz ITエンジニア専門のスカウト転職サービスです。 求人票の掲載も人材紹介も一切なく、登録エンジニアは採用企業自らが直接送るスカウトメールをひたすら待ちます。 ※今は転職を考えていないという人も登録可能ですので、自分の価値を確かめる為にも是非! 開発チーム構成 エンジニア:1名 デザイナー:1名 ディレクター兼デザインアドバイザー:1名 開発期間 2017年2月にキックオフし、9月現在、スタート時の機能は一通り実装終えました。特に残業をしたり無理をするようなことはありませんでしたので、開発実期間は8ヶ月程度といったところです。 採用技術 典型的なLAMP nginx(画像サーバ兼リバースプロキシ) Apache +
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く