タグ

ブックマーク / qiita.com/mpyw (21)

  • docker-compose を CI で実行するとき, MySQL の起動完了まで確実に待つ - Qiita

    背景 jwilder/dockerize: Utility to simplify running applications in docker containers ufoscout/docker-compose-wait: A simple script to wait for other docker images to be started while using docker-compose この辺は全部試したが, PHP から接続しようとすると Connection Refused が多発する。TCP で接続可能になってから実際に利用可能になるまで若干のラグがあるため,もっと確実な方法を探していた。 対処法 sh -c 'docker-compose logs -f <MySQLコンテナ名> | { sed "/\[Entrypoint\]: MySQL init proces

    docker-compose を CI で実行するとき, MySQL の起動完了まで確実に待つ - Qiita
    tuki0918
    tuki0918 2020/01/21
  • PHPの配列要素の型を縛る - Qiita

    前書き @Hiraku さんの SplFixedArrayで"純粋な配列"を作る に感化されて衝動的に作ってしまった。 個人的により強く縛りたいと感じるのは、配列のサイズというよりは格納される 要素の型 なので。それならPHPなんか使うなって言われそうだけどまぁうんそうだねはい(適当) Collection ArrayObject を継承して作ってみました。使い方はほとんど ArrayObject と同じです。 クラス定義 class Collection extends ArrayObject { const TYPE_BOOL = 1; const TYPE_INT = 2; const TYPE_FLOAT = 4; const TYPE_STRING = 8; const TYPE_ARRAY = 16; const TYPE_OBJECT = 32; const TYPE_NUL

    PHPの配列要素の型を縛る - Qiita
    tuki0918
    tuki0918 2018/03/11
  • moducks で Redux-Saga の冗長さと戦う - Qiita

    読者対象 React や Redux でバリバリ書ける Redux-Saga を使うことの長所や短所を知っている 関連リンク redux-sagaで非同期処理と戦う - Qiita たぶんこれが一番分かりやすいと思います React + Redux のフロー図解 - Qiita Redux-Saga のつらいところ 以下のような,誰かのユーザ情報をランダムに取ってくる擬似APIを考えます。一定時間遅延し,一定確率で失敗します。 import { delay } from 'redux-saga' export const fetchRandomUser = async () => { await delay((0.3 + Math.random()) * 1000) if (Math.random() < 0.2) { const faces = ['xD', ':D', ':('] th

    moducks で Redux-Saga の冗長さと戦う - Qiita
    tuki0918
    tuki0918 2018/01/03
  • たぶんこれが一番分かりやすいと思います React + Redux のフロー図解 - Qiita

    【追記】 もうこれ古いから参考にしないでください https://t.co/mXtcc73Orf — もし Laravel が流行しなくなってこられてきてたとしたら、絶対に捨てられてこられてたと思うか (@mpyw) January 26, 2021 Redux にはその昔 connect()() とかいうクソ API と, Redux-Saga とかいう宗教がありました という考古学です — もし Laravel が流行しなくなってこられてきてたとしたら、絶対に捨てられてこられてたと思うか (@mpyw) January 26, 2021 読者対象 Tutorial: Intro To React - React Example: Todo List · Redux 「チュートリアルそれぞれ一周した!Reactは何とか理解できたが,Reduxがさっぱりわかんねぇ!」 ぐらいの人向け。自分

    たぶんこれが一番分かりやすいと思います React + Redux のフロー図解 - Qiita
    tuki0918
    tuki0918 2017/01/06
  • 俺は!!!PHPのビルトインサーバをマルチプロセスにしたいしHTTPSで使いたいぞ!!! - Qiita

    動機 Guzzleの行き過ぎた抽象化があまり好みではないので,cURLとジェネレータでシンプルに気持ちよく非同期HTTPリクエストが書ける mpyw/co を書いた ↓ それをベースに FriendsOfPHP/Goutte そっくりのインタフェースを備えた,非同期スクレイピングクライアント mpyw/coutte を書いてみた ↓ Coutteのテスト書きたいけど,SymfonyのBrowserKitのソースコード読んでも@param arrayとか雑な型説明しか無くて,どんな構造があり得るのかわかりにくかった ↓ 実際にサーバ立ててテストしたいけど,普通のビルトインサーバだと同時リクエストさばけないしHTTPSの場合のテストができない ↓ これだけのためにApacheとかNginxに依存したくない,composer.jsonに書いておけばそれだけで解決する世界を手に入れたい ↓ php

    俺は!!!PHPのビルトインサーバをマルチプロセスにしたいしHTTPSで使いたいぞ!!! - Qiita
    tuki0918
    tuki0918 2016/08/07
  • json_encode における JSON_UNESCAPED_UNICODE に PHP5.3 で対応する - Qiita

    はじめに 日語をunicode変換しないでjson_encodeする方法 こちらの記事で題目について議論していたのですが,コメントが長く続いてしまって読みにくいので要点だけまとめておきます. @sounisi5011 さんご指摘ありがとうございました. 実装 個人的に一番スッキリしていると感じるものを載せておきます. function raw_json_encode($input, $flags = 0) { $fails = implode('|', array_filter(array( '\\\\', $flags & JSON_HEX_TAG ? 'u003[CE]' : '', $flags & JSON_HEX_AMP ? 'u0026' : '', $flags & JSON_HEX_APOS ? 'u0027' : '', $flags & JSON_HEX_QUOT ?

    json_encode における JSON_UNESCAPED_UNICODE に PHP5.3 で対応する - Qiita
    tuki0918
    tuki0918 2016/02/16
    なるほど、わからん...
  • PHP7で流行って欲しいリクエストパラメータの受け取り方 - Qiita

    みたいなコードの是非を巡ってPHPと闘ってきましたが… $_GET, $_POSTなどを受け取る際の処理 filter_input_simple filter_input_array_recursive いずれにも以下のような欠点がありました。 filter_input で一発処理出来るのは外部から受け取る値かつ文字列のみ 上記に該当しないものには isset と is_string / filter_var の処理がどこかで必要になってくる PHP7からは…? PHP7にはNULL合体演算子??が導入されており、任意の変数に対して 未定義でもNULLでもなければ左オペランドの値を採用 未定義またはNULLのとき右オペランドの値を採用 (内部でisset相当のチェックを行っているのでエラーが発生しない) という処理を記述することが出来ます。 文字列型のみ処理したい場合

    PHP7で流行って欲しいリクエストパラメータの受け取り方 - Qiita
    tuki0918
    tuki0918 2015/12/04
  • PHPで一時的なファイルポインタを扱う方法 - Qiita

    選択肢 $fp = fopen('php://memory', 'r+b'); メモリ上に領域を確保する。メモリリークに注意。 $fp = fopen('php://temp', 'r+b'); メモリ上に領域を確保し、 2MB を超えたら自動削除される一時ファイルを作る。 $fp = fopen("php://temp/maxmemory:{$n}", 'r+b'); メモリ上に領域を確保し、$n バイトを超えたら自動削除される一時ファイルを作る。 $file = new SplTempFileObject($n); 上記の SplFileObject 版 (継承クラス) 。 引数は省略可能でデフォルトはもちろん 2MB (2 * 1024 * 1024 ) 。 0 にすることも可能。 OOP好きな人はこれでどうぞ。 $fp = tmpfile(); 自動削除される一時ファイルを作る。

    PHPで一時的なファイルポインタを扱う方法 - Qiita
    tuki0918
    tuki0918 2015/07/06
  • 何番煎じか知らないけどソート比較 - Qiita

    #include <stdio.h> #include <stdlib.h> #include <time.h> void swap(long *a, long *b) { long tmp = *a; *a = *b; *b = tmp; } void print_r(const long x[], const long n) { long i; for (i = 0; i < 10 && i < n; i++) { printf("%ld\n", x[i]); } if (n <= 10) { return; } else if (n < 20) { i = 10; } else { i = n - 10; } printf("...\n"); for (; i < n; i++) { printf("%ld\n", x[i]); } } void set_array(long arr

    何番煎じか知らないけどソート比較 - Qiita
    tuki0918
    tuki0918 2014/12/15
  • PHPネイティブのDOMによるスクレイピング入門 - Qiita

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

    PHPネイティブのDOMによるスクレイピング入門 - Qiita
    tuki0918
    tuki0918 2014/11/09
  • [PHP] リクエストパラメータ・セッションに関するまとめ - Qiita

    予備知識 スーパーグローバル変数とは? 「スーパーグローバル変数って何?」って感じの駆け出しPHPプログラマのために念のためマニュアルへのリンクを記載しておきます.全然知らない人は軽く読んでおいてください. PHP Manual - 変数のスコープ PHP Manual - スーパーグローバル HTTPとは? リクエストヘッダー・レスポンスヘッダー と聞いてピンと来ない人はまず下記サイトにて予習をお願いします.細かいことは覚える必要は無いので,大雑把に「ヘッダーとはどんなものか」ということを理解してください. Qiita - 【PHP超入門】HTTP(GET・POST)について Qiita - 【PHP超入門】Cookieとセッションについて @7968さんによるQiitaの記事です.右も左もわからない人はまずこれで. とほほのWWW入門 - HTTP入門 最初の記事をもう少し体系的にまと

    [PHP] リクエストパラメータ・セッションに関するまとめ - Qiita
    tuki0918
    tuki0918 2014/10/21
  • マルチバイト未対応の関数をいろいろ対応させてみた - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 出来るだけもとの関数の挙動に近づけています。 basename() について PHP4.4.9まではNULLバイトを正しく処理できませんでしたが、 PHP5.0.0以降はバイナリセーフになりました。 (徳丸さんよりご指摘を頂きました) 但し、 setlocale() でロケールを正しく設定していることが前提になります。 エンコーディングが壊れていてもそのまま処理します。 マルチバイト対応 explode() function mb_explode($delimiter, $string, $limit = -1, $encoding = null) { $tmp = mb_regex_encoding(); mb_regex_enco

    マルチバイト未対応の関数をいろいろ対応させてみた - Qiita
    tuki0918
    tuki0918 2014/08/20
  • PHPで各種バリデーション - Qiita

    $a = filter_input(INPUT_GET, 'a'); // "foo" $b = filter_input(INPUT_GET, 'b'); // false $c = filter_input(INPUT_GET, 'c'); // null $a = (string)filter_input(INPUT_GET, 'a'); // "foo" $b = (string)filter_input(INPUT_GET, 'b'); // "" $c = (string)filter_input(INPUT_GET, 'c'); // "" /* 1. 未定義や想定外の型の検出 */ $email = (string)filter_input(INPUT_POST, 'email'); /* 2. 値の形式に関するバリデーション */ if (false !== filter

    PHPで各種バリデーション - Qiita
    tuki0918
    tuki0918 2014/07/25
    “filter_input”
  • PHPで作るメールフォーム - Qiita

    メールフォーム作成 以下のサイト様からソースコードを一部拝借しています。 webに生きる人+α - PHPのmb_send_mail()を使った時にgmailだけメールが届かない Allied ArchitectsEngineer BlogRSS - PHPでJIS以外の文字を文字化けせずに日語メールを送る方法 VeryPosi - PHP応用 コンタクトフォームの作成 入力チェックの追加 3番目のエントリのPHPロジック部分は全然ダメなのですが、サッと作れるデザインとしてはなかなか気に入ったので…w ソースコード sendmailに渡す -f (Return-Path) は適切に指定してください。 <?php /** * HTML特殊文字をエスケープする関数 */ function h($str) { return htmlspecialchars($str, ENT_QUOTES,

    PHPで作るメールフォーム - Qiita
    tuki0918
    tuki0918 2014/07/13
  • とっても簡単なCSRF対策 - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 CSRFおよびその対策の仕組みに関してはこちら↓ これで完璧!今さら振り返る CSRF 対策と同一オリジンポリシーの基礎 - Qiita この記事は,PHPにおけるワンタイムトークンを用いた実装例を示すものです。執筆日が少々古いものになるのでご了承ください。 コメント欄の議論に関するまとめ 以下,XSS脆弱性が存在しない前提.この脆弱性があるとあらゆるCSRF対策がほとんど意味をなさなくなるので,まずここから潰しておくこと. セッション固定攻撃に対する対策 ログイン後にsession_regenerate_idを必ず実行する. ログアウト後にsession_destroyを必ず実行する. CSRF攻撃に対する対策 セッションIDを抜か

    とっても簡単なCSRF対策 - Qiita
    tuki0918
    tuki0918 2014/07/13
  • PHPオブジェクト指向入門(前半) - Qiita

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

    PHPオブジェクト指向入門(前半) - Qiita
    tuki0918
    tuki0918 2014/05/29
  • URLのクリック数を集計する - Qiita

    URLの最大長は Internet Explorer の実装に合わせて 2083 バイト、IPアドレスの最大長はIPv6の実装に合わせて 39 バイトとします。但し、プライマリキー最大長制限に対応するための 手順 を踏まなければならないようです。 集計用のクッションページを作る INSERT ... ON DUPLICATE KEY UPDATE 構文が大活躍します。 <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } try { switch (true) { case !isset($_GET['url']): throw new RuntimeException('Missing url parameter'); case !filter_var($_GET['url'], FI

    URLのクリック数を集計する - Qiita
    tuki0918
    tuki0918 2014/05/13
  • 【PHP入門講座】 NULLと未定義の違い - Qiita

    TRUE FALSE NULL をまとめて 三値 と呼ぶことがありますが、これらを漢字一文字で表すと TRUE … 真 FALSE … 偽 NULL … 無 として解釈されます。命題「今日は学校に行く日か?」で例えると、 TRUE …今日は学校に行く日である FALSE … 今日は休みの日である NULL … そもそも中退してた のようなイメージです。 未定義(Undefined) NULL は 無 と言いながらも…

    【PHP入門講座】 NULLと未定義の違い - Qiita
    tuki0918
    tuki0918 2013/12/01
  • $_GET, $_POSTなどを受け取る際の処理 - Qiita

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

    $_GET, $_POSTなどを受け取る際の処理 - Qiita
    tuki0918
    tuki0918 2013/11/19
  • ファイルアップロードの例外処理はこれぐらいしないと気が済まない - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 脆弱性について 参考リンク PHPにおけるファイルアップロードの脆弱性CVE-2011-2202 PHP 5.4.1リリースのポイント 上記に対する補足説明 PHP 5.4.1以降 PHP 5.3.11以降 どちらかを満たしているならば,脆弱性は(今のところ)無い.どちらも満たしていないと, $_FILES 変数の構造を崩す攻撃 ../ をファイル名に含めて送信する攻撃 (ディレクトリトラバーサル) の何れか,もしくは両方の脆弱性を所持していることになるので要注意. 脆弱性対策と注意事項 $_FILES Corruption 対策 改竄されたフォームからの複数ファイル配列送信対策 脆弱性が修正された環境でも 改竄フォーム対策 も兼ねて

    ファイルアップロードの例外処理はこれぐらいしないと気が済まない - Qiita
    tuki0918
    tuki0918 2013/10/27