PHPに関するtsubasa123のブックマーク (27)

  • Guzzle Promiseを使った
非同期処理によるAPIコールの高速化

    JavaScript で非同期処理を実現する Promise という機構はご存知でしょうか? 今回は「Promise の考え方を PHP で実装した Guzzle Promise」を使って、大量の API コールを高速化したときの経験についてお話してみたいと思います。 Talked: - …

    Guzzle Promiseを使った
非同期処理によるAPIコールの高速化
  • PHPで学ぶソケットプログラミング入門

    宇都宮 諒(うつのみや りょう) ソフトウェアエンジニア(アシアル株式会社 所属) @ryo511 (Twitter, Facebook, Qiita等) https://github.com/ryo-utsunomiya 執筆 JavaScript入門 ~Webで見たあの機能を自分で作る~(日経BP、2016/10/31) Webアプリの作り方(日経ソフトウエア2016年11月号) PHP7の新機能(日経ソフトウエア2016年8月号)

    PHPで学ぶソケットプログラミング入門
  • nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する

    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)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。 現存する多くのウェブ

    nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する
  • [マルチバイト対応] レーベンシュタイン距離を求める - Qiita

    導入 PHPにはsimilar_textやlevenshteinといった、2つの文字列の類似度を計算するための関数があります。しかしこれらはマルチバイトを考慮しておらず、とりわけUTF-8バイト列に対しては計算精度が悪化するという特徴があります。そこで今回はUTF-8マルチバイト対応版のlevenshtein_utf8という関数を作ってみることにしました。なおsimilar_textの方は計算量が大きすぎてPHPレベルで実装するに堪えないので、今回はパスということで… 既に@suinさんの「mb_levenshtein 二つの文字列のレーベンシュタイン距離を計算する(マルチバイト対応版)」は拝見しましたが、文字種による制約がかかると実用的ではないので、@itcomさんがコメントされているように素直な実装を行いました。といってもほとんどphp-srcからのパクりですが。 距離の正規化に関して

    [マルチバイト対応] レーベンシュタイン距離を求める - Qiita
  • PHPネイティブのDOMによるスクレイピング入門 - Qiita

    はじめに 淫夢要素はありません。 Simple HTML DOM Parser や Goutte の使い方は至る所で説明されていますが、PHPネイティブのDOMに関しての記事がかなり少ないので書いてみることにします。 ちなみに… Simple HTML DOM Parserは内部で何回も正規表現を使って全ての要素をパースするので、かなり遅いです。これ使うぐらいなら最初から自分で正規表現一で書いたほうがマシ。自分で正規表現を使って必要部分だけを抜き出す方法は、全ての方法の中で最も高速なので、正規表現が得意な人だったらこれでもいいと思います。 Goutteは内部でPHPネイティブのDOMを使ってます。PHPネイティブのDOMはDOMとして読ませる方法の中では最も高速なので良い方法をチョイスしていることになるのですが、そもそもGoutteに頼らなくてもそれなりに十分やっていけます。何より依存フ

    PHPネイティブのDOMによるスクレイピング入門 - Qiita
  • Webアプリケーションの構成に関する予備知識 - Qiita

    自分の担当したWebアプリケーションを引き継ぐ際に、予備知識として説明したことのまとめ 注意事項 もともと明確に定義されていない概念や、簡単に説明するため正確さを犠牲にした部分が多い 間違っていることを前提に、疑いながら読むのがベター アプリケーションの層構造 アプリケーションを構成するオブジェクトには非常の多くの種類がある アプリケーションの(より良い)構成をオブジェクト単位で考えるのは難しいので、もっと粒度の大きい単位で考えたい アプリケーションをいくつかの層(オブジェクトの所属するグループ)に分割し、層単位でアプリケーションの構成を考える View層(ビュー層) レスポンスをクライアントにとって都合のいい形(i.e. 画面)に変換する層 View層のオブジェクトは Controller層のオブジェクトから利用される DomainModel層のオブジェクトを利用して、ユーザーに表示した

    Webアプリケーションの構成に関する予備知識 - Qiita
  • PHPにおける例外クラスの設計考察

    この記事はPHP Advent Calendar 2017の2日目です。 ここ最近、業のほうが死ぬほど忙しく、すっかりブログを書いていなかった@Hirakuです。 だいぶ前のことですが、今年のPHPカンファレンス福岡で例外の話をしてきました。 この時の発表では例外に関する概要が主だったので、例外クラスそのものの設計について補足を書いてみることにします。 例外のある世界観 PHP7ではいくつかのエラーが例外と同じ挙動を示すようになり、エラーではなく例外機構を使う言語に様変わりしました。 例外というのは、かなり侵略性の高い概念であり、例外のある世界では以下の前提に立つことが暗黙のうちに強要されます。 どこでも例外が発生する可能性がある 例外によって中断されても、ソフトウェアが不適切な状態にならないように保証するのは各プログラマの責任(例外安全) たとえば、以下の関数で例外が発生する可能性があ

    PHPにおける例外クラスの設計考察
  • private/protectedなプロパティを外部から読み込み可能にする - Qiita

    <?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にしてしまってること。 しかし、予期しないデータの書き込みは防ぎたい… 解決策 ゲッターメソッ

    private/protectedなプロパティを外部から読み込み可能にする - Qiita
  • DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita

    意外と分からずに、「とりあえず」とか「なんとなく」で使っちゃうパターンが多い系案件な気がして書いてみます。 こんな事ありませんか? DIとDIコンテナの違いを説明出来ない DIとサービスロケータの違いを説明出来ない DIを使ってるつもりが、サービスロケータになっている DI、サービスロケータが、ただの「パターン」の1つであることを理解してない DI(Dependency Injection)を正しく理解する そもそも、Dependeny Injectionを日語にするとどういう意味になるでしょうか。 多くの人が「依存性の注入」とか応えるのではないでしょうか? 私もそうでした。きっと何かで読んだのでしょう。 (wikipediaに「依存性の注入」と書いてありますね) 補足 なぜ依存性を注入してあげると良いのか、そのメリット等は後述しますが、 DIというのはただのパターンの1つです。 たまに

    DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita
  • PHPオブジェクト指向入門(前半) - Qiita

    コンセプト オブジェクト指向プログラミング未経験者~理解を深めたい人、ノンケ~ホモまで幅広くカバーするつもり。多分。 クラスとオブジェクト(初級) 唐突ですが、量産型のロボットの設計・製造について考えてみましょう。 ロボ太郎 ロボ次郎 イラストで初心者を釣る クラス まず、ロボットの設計図を クラス として定義します。設計図をもとにロボットを製造するには、 new 演算子を使います。製造された物体のことを オブジェクト や インスタンス と呼びます。ここではこれらの用語を区別せずに用いることにします。 Yahoo!知恵袋 - オブジェクトとインスタンスの違い

    PHPオブジェクト指向入門(前半) - Qiita
  • PHP7 で堅牢なコードを書く - 例外処理、表明プログラミング、契約による設計 / PHP Conference 2016

    2016/11/03 @ PHPカンファレンス2016 2016/12/15 @ PHPカンファレンス2016再演イベントにて改訂 2017/06/10 @ PHPカンファレンス福岡2017にて改訂 2017/06/10 @ PHPカンファレンス福岡2017講演録画 https://www.…

    PHP7 で堅牢なコードを書く - 例外処理、表明プログラミング、契約による設計 / PHP Conference 2016
  • PHPのエラーと例外再入門 / php-error-and-exception

    PHPカンファレンス福岡2017の登壇資料です。

    PHPのエラーと例外再入門 / php-error-and-exception
  • 遅延ロードした画像をGoogleにインデックスさせる方法 - Qiita

    遅延ロードは画像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

    遅延ロードした画像をGoogleにインデックスさせる方法 - Qiita
  • 【バージョン別】phpの新機能5.3から7.1まで一挙まとめ【広くあさーく】 - Qiita

    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+)

    【バージョン別】phpの新機能5.3から7.1まで一挙まとめ【広くあさーく】 - Qiita
  • 【導入決定!】PHP7で実装されるスカラー型宣言とは? | 東北ギーク

    * NaN でなく PHP_INT_MIN から PHP_INT_MAX までの範囲内の値に限る ** 数値形の文字列のみ。数値形の文字列に他の文字が続く場合も使えるが、 Notice が出る *** __toString メソッドを持つもののみ 弱い型検査モードで行われる暗黙の型変換は、PHP が従来他の構文(算術演算子や条件式、組み込み関数の呼び出しなど)で行ってきたのと同等のものです。 厳密モード 一方、厳密な型検査のモードを使う場合は、関数は宣言されたのと正確に一致する型のみを受け付けるようになります(int → float の拡大変換をのぞく)。 ファイルの先頭に declare(strict_types=1); と書くことで、そのファイル内での関数呼び出しの際に厳密モードでの型検査が行われるようになります*1。 以下のように使います。 <?php declare(strict_

    【導入決定!】PHP7で実装されるスカラー型宣言とは? | 東北ギーク
  • $_GET, $_POSTなどを受け取る際の処理 - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 予備知識 PHPはフォームから送信された値などをコード実行開始に自動的に変数として使えるようにしてくれる非常に便利なプログラミング言語です.しかし,それをそのまま用いるとエラーが発生したり,脆弱性になってしまったりするケースがたくさんあります.使う前には適当なチェック処理が必要です. どういった変数が対象になるか 以下に挙げられた変数は,ユーザーが勝手に値や構造を書き換えたり,送信をそもそも行わずにアクセスしたりすることが可能な信用できない変数だと思ってください.例え,ラジオボタンで選択肢を限定していたり,隠し要素として埋め込んでいたりしたとしても,これに該当してしまいます. $_GET アクセスされたURLの ? 以降のクエリースト

    $_GET, $_POSTなどを受け取る際の処理 - Qiita
  • 【PHP入門講座】 ビット演算 - Qiita

    目次に戻る ビット演算は、PHPを扱う上に置いてはそれほど重要性は高くないのですが、次の「演算子」の説明で必要性が生じてくるので、ここであらかじめ触れておきます。 ビット演算の概要 導入 2進数演算を考えましょう。 【例】 $3 + 5 = 8$

    【PHP入門講座】 ビット演算 - Qiita
  • PHPExcelが非推奨になったので後継のPhpSpreadsheetを使ってみる - Qiita

    $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

    PHPExcelが非推奨になったので後継のPhpSpreadsheetを使ってみる - Qiita
  • Windows上にVirtualBox+VagrantでCentOS環境構築 - Qiita

    会社でHAProxyを試したい時、仕事中自分のMacを開いていると肩身が狭いのでばれないように仕事で使っているWindowsにVirtualBox+VagrantでCentOS環境を構築してHAProxyを試そうと言う意図で書かれたエントリです。 新しい案件もVagrant使うっぽいのでその点でもDockerを使わずに慣れようという点でVagrantを選択しています。 …(今後自分のMacを検証用に開いていもそのような思いをせずにいれる環境になることを願うばかりです。) 初めにVagrantとは何者か 触り始める前の印象はVirutualBoxに環境を立ち上げるための設定ファイルを書いてそれから同じ環境を作ることが出来ると思っています。 -> VirtualBoxのVM構築を楽にしてくれるツール DockerはVirtualBox上にLinuxVMを作ってその上でDockerfileからイ

    Windows上にVirtualBox+VagrantでCentOS環境構築 - Qiita
  • PHPで開発する最新スタートアップWEBサービスの裏側を公開します

    リリースしたばかりの最新WEBサービスの使用技術ついてご紹介したいと思います(最新ではありますが最先端技術ではありません)。 スカウトミー https://scoutme.biz ITエンジニア専門のスカウト転職サービスです。 求人票の掲載も人材紹介も一切なく、登録エンジニアは採用企業自らが直接送るスカウトメールをひたすら待ちます。 ※今は転職を考えていないという人も登録可能ですので、自分の価値を確かめる為にも是非! 開発チーム構成 エンジニア:1名 デザイナー:1名 ディレクター兼デザインアドバイザー:1名 開発期間 2017年2月にキックオフし、9月現在、スタート時の機能は一通り実装終えました。特に残業をしたり無理をするようなことはありませんでしたので、開発実期間は8ヶ月程度といったところです。 採用技術 典型的なLAMP nginx(画像サーバ兼リバースプロキシ) Apache +

    PHPで開発する最新スタートアップWEBサービスの裏側を公開します