タグ

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

  • 【Laravel】 Eloquent の has() や whereHas() が遅い?なら速くしてやるぜ - Qiita

    Laravel】 Eloquent の has() や whereHas() が遅い?なら速くしてやるぜPHPMySQLSQLLaravelEloquent はじめに 2021/10/21 追記: Postgres は MySQL と異なり,相関サブクエリの JOIN 最適化もカバーしています。それゆえ,主にこの記事の内容は MySQL を想定したものとなっております。 (情報提供: @KentarouTakeda) 2022/12/22 追記: MySQL もバージョン 8.0.16 以降では Postgres に似た最適化が入るようになりました。そのため,殆どの場合ではもはや has() whereHas() を素直に使うだけで十分になっています: 【ガチ検証】Eloquent whereHas() はもう遅くないよ! Laravel は「リレーション先が存在するか」という制約条件を

    【Laravel】 Eloquent の has() や whereHas() が遅い?なら速くしてやるぜ - Qiita
    k-holy
    k-holy 2020/07/02
    今のところLaravelを使うつもりはないけど、こういう頼もしい記事を読んだらEloquentは単体で使ってみたくなるな…
  • これで完璧!今さら振り返る CSRF 対策と同一オリジンポリシーの基礎 - Qiita

    ✎ 基礎知識編 CSRF とは何か? CSRF (Cross-Site Request Forgeries) を意訳すると 「サイトを跨ぐ偽造リクエスト送信」 です。 簡単に言うと,罠サイトを踏んだ結果,自分が無関係な別のサイト上で勝手にアクションをさせられる攻撃です。具体的には,ネットサーフィンをしているうちに知らない間に自分のIPアドレスから掲示板に犯罪予告が書かれていた,といった被害を受けます。 この攻撃を防ぐ責任は「無関係な別のサイト(具体例では掲示板)」側にあります。Web サイト作成者には,利用者が意図しない操作を勝手に実行されないように,利用者を守る責任があります。 また上図からも分かる通り,この攻撃の最大の特徴はアカウントがハッキングされたというわけではないということです。ログイン状態の利用者のWebブラウザを利用して攻撃が行われている,というのが重要です。 オリジンとは何

    これで完璧!今さら振り返る CSRF 対策と同一オリジンポリシーの基礎 - Qiita
  • PHPによる簡単なログイン認証いろいろ - Qiita

    GitHubにダウンロードしてすぐ試せるサンプル置きました↓ https://github.com/mpyw-yattemita/php-auth-examples TLS暗号化を使用できる場合 (https:// の場合) この場合は生のパスワードをそのままクライアント側から送信してもらって構いません. なおパスワードをそのまま平文でスクリプト中に書くことはあまり望ましくないので,下準備としてあらかじめ以下のコマンドを実行してパスワードハッシュを作成しておいてください. mpyw@localhost:~$ php -r 'echo password_hash("パスワード", PASSWORD_BCRYPT), PHP_EOL;' $2y$10$TThG3fsMJegLJHzVQbz8IeHhvpgBg7P5j6gjQWEUOrKKCtsA9L87G Basic認証 危ないと言われるBa

    PHPによる簡単なログイン認証いろいろ - Qiita
    k-holy
    k-holy 2018/10/19
    “ダミーのユーザ名で再認証を促すとログアウトさせることが出来ます”なるほど
  • HTTP/1.0, HTTP/1.1, HTTP/2, Server-Sent Events, WebSocket におけるデータの送信単位 - Qiita

    HTTP/1.0, HTTP/1.1, HTTP/2, Server-Sent Events, WebSocket におけるデータの送信単位HTTPWebwebsocketProtocolServer-Sent-Events

    HTTP/1.0, HTTP/1.1, HTTP/2, Server-Sent Events, WebSocket におけるデータの送信単位 - Qiita
    k-holy
    k-holy 2018/09/12
    Server-Sent Events
  • 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
    k-holy
    k-holy 2018/07/23
    詳細な検証やメッセージ表示はクライアント側でやる場合、filter_input()結果の文字列キャストは案外理にかなっているのかも。
  • OFFSETを使わない高速ページネーションを任意のPHPフレームワークで超簡単に実現する - Qiita

    はじめに Qiita芸人とか巷で言われますが Qiita の Advent Calendar は初参加です。お手柔らかにお願いします。 Laravel Advent Calendar 2017 4日目の記事になります。 3日目の記事は, @namaozi さんの Laravel5.5でお手軽にフィルタ&検索付きメモアプリを作るチュートリアル でした。クエリスコープを使ってコントローラをシンプルに保てるのはLaravelのいいところですね!このチュートリアルには登場しませんでしたが,今回の私のエントリはページネーションのお話になります。パフォーマンスチューニングされた複雑なページネーションを書こうとするとコントローラが煩雑になりがちですが,この記事で紹介する手法を使えばとてもシンプルに記述することができます。 ページネーションといえば,Webアプリケーションに頻繁に実装が求められる機能ですね

    OFFSETを使わない高速ページネーションを任意のPHPフレームワークで超簡単に実現する - Qiita
  • CSS影付き吹き出し位置12パターン - Qiita

    影付き吹き出しの作り方を毎回調べている気がするのでメモっておく。 内側にも要素を設ける方法 概要 一番無難な方法です。特に事情が無ければこれを選択してください。 サイズゼロ要素のborderを太くする方法だと影つきのものに対応できないので,transformのrotate()とskew()を活用する方法を使います。 z-indexを使うことで,前後関係を定義しています。 ひし形の内側部分がテキストと被らないように,四角形の疑似要素を上から被せています。テキストはさらにその上に来るようにします。 長所 位置の微調整をしやすい 倍率によらず表示が安定している 基的にアニメーションを併用できる 短所 HTMLがやや冗長 実装 data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+Cgo8bWV0YSBjaGFyc2V0PSJVVEYtO

    CSS影付き吹き出し位置12パターン - Qiita
    k-holy
    k-holy 2017/02/06
    これはありがたい
  • たぶんこれが一番分かりやすいと思います 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
  • お前は PHP 7 における Fatal Error / Catchable Fatal Error / Error / ErrorException / Exception の違いを言えるか? - Qiita

    お前は PHP 7 における Fatal Error / Catchable Fatal Error / Error / ErrorException / Exception の違いを言えるか?PHPポエム例外例外処理 導入 煽りタイトルすいません.PHP 7 のエラーや標準例外について,違いを整理し,使い分けを考察する記事です. 【引用】 PHP 7.0.0α2 の例外の例外の継承関係を可視化してみた by @ngyuki すべてを捕捉対象にする [Throwable] [Throwable] は, PHP 7 の throw 文でスロー可能なあらゆるオブジェクトが実装する基底インターフェイスです. [Error] および [Exception] はこれを実装しています.但し,PHPコードとして書かれるクラスが [Throwable] インターフェイスを直接実装することはできません. と

    お前は PHP 7 における Fatal Error / Catchable Fatal Error / Error / ErrorException / Exception の違いを言えるか? - Qiita
    k-holy
    k-holy 2016/08/09
    うぉぉ…ありがてぇありがてぇ
  • PDOフェッチパターン大全 - Qiita

    忙しい人向け Q. PDO::FETCH_ASSOCでフェッチするとき,キーを整数連番じゃなくてidにする方法は? A. PDO::FETCH_UNIQUEを組み合わせる. $sql = "SELECT id, * FROM people WHERE gender = 'female'"; $rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE); var_dump($rows); /* [ 3 => ['id' => '3', 'name' => 'Lucy', 'gender' => 'female'], 5 => ['id' => '5', 'name' => 'Mary', 'gender' => 'female'], ] */

    PDOフェッチパターン大全 - Qiita
    k-holy
    k-holy 2016/06/22
    FETCH_UNIQUE知らなかったわ
  • PHP6.0移行ガイド - Qiita

    リリースノート 2016年4月1日に,PHP6.0がリリースされました. PHP 6 Changelog http://php.net/ChangeLog-6.php 新機能 PHP5.6からPHP7.0への大規模なアップデートが話題になりましたが,更にPHP7.0からPHP6.0に向けて後方互換性に関わる数多くの変更が行われています. 内部文字コードUTF-16化 PHP6.0から,JavaやC#のように,処理系内部において文字列が全て文字コードUTF-16で保持されるようになります.これにより,そのままでは挙動に変化はありませんが,declare宣言にてencodingを明示したときに違いが表れます.

    PHP6.0移行ガイド - Qiita
    k-holy
    k-holy 2016/04/01
    コメントwww
  • PHPでクロージャのuse地獄を回避する裏ワザ - Qiita

    (function () { $name = 'John'; (function () use ($name) { $greet = 'Hello'; (function () use ($name, $greet) { echo "{$greet}, {$name}\n"; })(); })(); })(); call_user_func(function () { $name = 'John'; call_user_func(function () use ($name) { $greet = 'Hello'; call_user_func(function () use ($name, $greet) { echo "{$greet}, {$name}\n"; }); }); }); After PHP7.0以降は new class{} で無名クラスが使えます.全てのクロージャを無

    PHPでクロージャのuse地獄を回避する裏ワザ - Qiita
  • PSR-7対応 HTTP/2サーバプッシュ用ミドルウェア - Qiita

    概要 HTTP/2には、HTML内に含まれるリソースに対し、クライアントが次にリクエストを送ってくることを見越して、リクエスト無しにサーバ側から能動的に送るサーバプッシュという機能があります。H2Oやnghttp2といったWebサーバはプリロード用のLinkヘッダを付与することでサーバプッシュを行ってくれるとのことなので、PSR-7対応のミドルウェアを書いてみました… AdventCalendarの人たち怖いので普通に野良投稿 こういうのってmod_mrubyでやったほうが良いの? 例 ミドルウェア定義 <?php namespace mpyw\SampleApp\Middleware; use \Psr\Http\Message\ServerRequestInterface; use \Psr\Http\Message\ResponseInterface; class AutoLinke

    PSR-7対応 HTTP/2サーバプッシュ用ミドルウェア - Qiita
  • Composerの依存パッケージをオールインワンのpharにまとめるツール作った - Qiita

    あなた 「パッケージをcomposerで公開しました!よかったら使ってください!」 初心者 「composerって何?requireするだけの方法はないの?」 あなた 「えーそんなこと言われても…」 composerのインストール方法および使い方を教えるのもいいと思いますが、別の手段として単一ファイルをrequireするだけで済む方法も用意しておくと便利な場合もあるんじゃないかと思います。その際のPharパッケージ生成をちょっとだけ楽にするためのツールです。 mpyw/comphar インストール方法も上記に英語で記載してあるのですが、一応こちらにも日語で書いておきます。 インストール 1. Composerのグローバルインストールを実行 Packagistから落としてきます。 example@localhost:~$ composer global require mpyw/comph

    Composerの依存パッケージをオールインワンのpharにまとめるツール作った - Qiita
  • マルチバイト文字を扱う際に気をつけること - Qiita

    基礎知識 コンピュータで扱えるデータの最小単位は1バイト(8ビット:2進数8桁分)であり、これは符号無し10進数表記で0〜255(2進数表記で00000000〜11111111)を表すことが出来ます。 半角英数字や半角記号、改行コードなどの世界共通で多用される文字は1バイト文字として0〜127の範囲に割り当てられており、これらは「ASCII文字」と呼ばれます。 ASCII以外の文字コードでは余った128〜255の範囲を他の文字を表現するために利用しています。但しこれらを1バイト単位で使うだけでは残り128種類の文字しか表せなくなってしまうので、実際には複数桁組み合わせて用いられます。これらは「マルチバイト文字」と呼ばれます。 以下は参考リンクです。初学者の方は、この記事を読む前にひと通り目を通されることをおすすめします。 ASCII文字コード 文字コードについての俺的まとめ 日語文字コー

    マルチバイト文字を扱う際に気をつけること - Qiita
    k-holy
    k-holy 2015/08/18
    良いまとめ
  • 私の正規表現におけるポリシー - Qiita

    echo '[a]\[b]'; # => [a]\[b] echo '[a]\\[b]'; # => [a]\[b] echo '[a]\\\[b]'; # => [a]\\[b] echo '[a]\\\\[b]'; # => [a]\\[b] echo '\\'; # => \ echo '\'; # パースエラー 慣れないうちは省略せずに全てエスケープすることをおすすめします。ちなみにこれはPHPに限っての挙動であり、 C や Java ではこのような挙動にはならず、 必ずエスケープしなければなりません 。 ダブルクオート内で処理されるシーケンス 一部マニュアルに記載がないものもあります。 記述 実際の表示 意味 備考

    私の正規表現におけるポリシー - Qiita
  • QiitaにXSS脆弱性 - Qiita

    Qiitaに発生していた脆弱性について ※ エイプリルフールネタっぽいけど実際に発生していました。 ※ 現在この脆弱性は修正済みです。 問題のあった記事 問題のMarkdown おいしいクッキーをべたい人はここをクリック! **[おいしいクッキーをべたい人はここをクリック!](data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+)** ブラウザ別の挙動 Chrome 33.0 データURIスキームの先で document.cookie を参照することは出来なかった。 Firefox 28.0 データURIスキームの先で document.cookie を参照することが 出来た 。 Internet Explorer とかその他もろもろ 編集リクエストに任せるぜ! 考察 結局これってやばいの?

    QiitaにXSS脆弱性 - Qiita
  • [PHP] リクエストパラメータ・セッションに関するまとめ - Qiita

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

    [PHP] リクエストパラメータ・セッションに関するまとめ - Qiita
    k-holy
    k-holy 2014/03/18
    これは力作
  • PHPでデータベースに接続するときのまとめ - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。PDO に関しては大きく変わっていない部分が多いとは思いますが, PHP 8.x 以降での動作保証はありません。 あらかじめ読んでおきたい記事 Qiita - 【PHP超入門】クラス~例外処理~PDOの基礎 by @7968 初心者がやりがちなミス 以下のどれかに1つでも当てはまるコードは見直す必要があります.付録にリンクを貼っておきましたので,「該当するかも?」という人はクリックして飛んで読んでください.太字にしてあるものは脆弱性に直結する危険度の高いものです. mysql_query などの非推奨関数を利用している SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している そもそもデータベース

    PHPでデータベースに接続するときのまとめ - Qiita
    k-holy
    k-holy 2013/08/28
    "プリペアドステートメントのエミュレーションを行う場合は PDOStatement::bindValue PDOStatement::bindParam メソッドで、指定した型と実際の型が一致しない場合、全て文字列としてバインドされる。"うわ、これやばい…
  • 1