サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
中東情勢
qiita.com/mpyw
優先順位 環境変数 .env 変数 vlucas/phpdotenv のデフォルトの挙動にそのまま従う感じのアレ。アレをBashやZshで書きたくなった。 実装2パターン どちらもBashとZshで差異なく動作します。プロセス置換機能さえあればOK。 環境変数に無い.env変数をシェル変数としてインポートする 現在のプロセスでしか参照しない場合はシェル変数で十分。
【Laravel】Route Model Binding と Policy だけで認可処理を完結させるための Resourceful ルーティングの工夫PHPAPILaravelRESTful 【2021/10/15 追記】現在の自分の思想としてはこのアーキテクチャを推奨しておりません! Laravel Advent Calendar 2017 5日目の記事になります。 昨日の @mpyw さんの記事に引き続き,本日は @mpyw が担当させていただきます。 前提知識 Gate および Policy という認可のための仕組みがある 認可 5.5 Laravel Laravel5.1.11で追加されたGateを試してみる(その1) - Qiita Route Model Binding という URL から判断して暗黙的に Eloquent モデルのインスタンスをコントローラおよびポリシーの
はじめに Qiita芸人とか巷で言われますが Qiita の Advent Calendar は初参加です。お手柔らかにお願いします。 Laravel Advent Calendar 2017 4日目の記事になります。 3日目の記事は, @namaozi さんの Laravel5.5でお手軽にフィルタ&検索付きメモアプリを作るチュートリアル でした。クエリスコープを使ってコントローラをシンプルに保てるのはLaravelのいいところですね!このチュートリアルには登場しませんでしたが,今回の私のエントリはページネーションのお話になります。パフォーマンスチューニングされた複雑なページネーションを書こうとするとコントローラが煩雑になりがちですが,この記事で紹介する手法を使えばとてもシンプルに記述することができます。 ページネーションといえば,Webアプリケーションに頻繁に実装が求められる機能ですね
Schema::create('users', function (BluePrint $table) { $table->bigIncrements(); $table->string('screen_name')->index(); // ←論理削除があるので ->unique() にはできない $table->softDeletes(); }); After MySQL5.7から使える生成カラムと,ユニーク制約がNULLには適用されないことを利用します。アプリケーション側のコードには,一切手を加える必要がありません。 Schema::create('users', function (BluePrint $table) { $table->bigIncrements(); $table->string('screen_name'); $table->softDeletes(); //
テンプレ コンパイルに時間がかかるので実用性はほとんどありませんが,実はブラウザ上でコンパイルもできます! <script defer src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.21.0/babel.min.js"></script> <script defer src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.9.1/polyfill.min.js"></script> <script type="text/babel"> /* ここにコードを書く */ </script> <script defer src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.1/react.min.
目的 /var/www/html からアプリケーションのソースを読み取る /var/app/current -> /var/www/html にシンボリックリンクを貼って現在のバージョンを動かしている /var/app/ondeck で次のバージョンのビルドを行う 最終的に /var/app/ondeck で /var/app/current を上書きしたい Elastic Beanstalk において,なんとか1つの環境だけで Blue-Green デプロイができないかな,と試行錯誤した記録です。 手順 前提 /var/app/ondeck で既にビルドが終わっている。 cpおよびmvがGNU版である。 コマンド ln -sf /var/app/ondeck /var/www/new_html && mv -Tf /var/www/new_html /var/www/html sleep
読者対象 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
まえがき 、。 と ,. を一発で切り替えられるAppleScript。全国の理系大学生Macerに需要あるんじゃないかな?と思って書いてみました。ただAppleScriptは今まで全く書いたことが無い者なので、改良点などありましたら是非ご報告ください。 本編 Yosemite標準のJapaneseIM用です。 ソースコード tell application "System Preferences" set current pane to pane "com.apple.preference.keyboard" reveal anchor "InputSources" of pane "com.apple.preference.keyboard" end tell tell application "System Events" if not UI elements enabled the
影付き吹き出しの作り方を毎回調べている気がするのでメモっておく。 内側にも要素を設ける方法 概要 一番無難な方法です。特に事情が無ければこれを選択してください。 サイズゼロ要素のborderを太くする方法だと影つきのものに対応できないので,transformのrotate()とskew()を活用する方法を使います。 z-indexを使うことで,前後関係を定義しています。 ひし形の内側部分がテキストと被らないように,四角形の疑似要素を上から被せています。テキストはさらにその上に来るようにします。 長所 位置の微調整をしやすい 倍率によらず表示が安定している 基本的にアニメーションを併用できる 短所 HTMLがやや冗長 実装 data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+Cgo8bWV0YSBjaGFyc2V0PSJVVEYtO
HTTP/1.0, HTTP/1.1, HTTP/2, Server-Sent Events, WebSocket におけるデータの送信単位HTTPWebwebsocketProtocolServer-Sent-Events
【追記】 もうこれ古いから参考にしないでください 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がさっぱりわかんねぇ!」 ぐらいの人向け。自分
導入 PHPで配列を結合するための方法は幾らかありますが、それぞれ微妙に挙動が異なるので、ここでは違いが分かりやすいようにまとめてみます。
動機 Guzzleの行き過ぎた抽象化があまり好みではないので,cURLとジェネレータでシンプルに気持ちよく非同期HTTPリクエストが書ける mpyw/co を書いた ↓ それをベースに FriendsOfPHP/Goutte そっくりのインタフェースを備えた,非同期スクレイピングクライアント mpyw/coutte を書いてみた ↓ Coutteのテスト書きたいけど,SymfonyのBrowserKitのソースコード読んでも@param arrayとか雑な型説明しか無くて,どんな構造があり得るのかわかりにくかった ↓ 実際にサーバ立ててテストしたいけど,普通のビルトインサーバだと同時リクエストさばけないしHTTPSの場合のテストができない ↓ これだけのためにApacheとかNginxに依存したくない,composer.jsonに書いておけばそれだけで解決する世界を手に入れたい ↓ php
お前は 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] インターフェイスを直接実装することはできません. と
コンセプト 実際に動かせる,日本語を使ったコードを例示する スガキヤのラーメンはうまい Promiseって何? ラーメンができたときに鳴るスガキヤの呼び出しベルです. ラーメンのお会計をする 呼び出しベルを受け取る この呼び出しベルは 客に出来上がったラーメンを渡す約束 (Promise) そのものを表す この約束があってはじめて客はその後で (then) ラーメンを受け取るという予定を立てることができる 約束の後に予定を生やすというイメージ この後,ラーメンが準備できしだい,以下のイベントが実行される 店は客に出来上がったラーメンを渡す 客はラーメンを受け取る いろいろなスガキヤと客 上でも書いたとおり Promise は「呼び出しベル」または「客に出来上がったラーメンを渡す約束」 then は「約束した内容であるラーメンが準備できたその後で」 という日本語に読み替えられます.これを踏ま
忙しい人向け 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'], ] */
これは何? リクエストパラメータ・セッションに関するまとめ とっても簡単なCSRF対策 PHPによる簡単なログイン認証いろいろ セキュアな掲示板を最小構成から作る いろいろセッションが絡む記事を書いてきましたが,この記事で紹介するものが以下のすべてを行える完成形です. 不正なセッションIDは無視してsession_startによるエラー発生を防ぐ セッションの失効までの期限延長を行う (任意) セッションの失効より短いスパンでセッションIDの再生成を行う (任意) CSRFトークンの検証を行う (ここから更に改善するとすればオブジェクト指向で書くぐらいですが,シンプルにしたかったので敢えて避けました) 関数定義 <?php // CSRFトークン生成に使うハッシュアルゴリズム const CSRF_TOKEN_HASHALGO = 'sha256'; // セッションIDの更新時刻に使う
この記事を読む前に この記事に悪意はありません.単に「公式のサンプルコードとしてこれは如何なものか…」と感じたので,初心者が困惑しないように適当に手直ししてみたまでです. もちろん自分も汚いコードを存分に書いてきましたし,そもそもコードの美しさは個人の主観に左右されるところはあります.…が,それでもちょっとこれは…,という感じだったので,お許し下さい. コード比較 ぐるナビのサンプル 問題のコードはこちらに掲載されています.こちらはターミナルへの出力を想定しています. ぐるなび Web Service - レストラン検索API <?php /***************************************************************************************** ぐるなびWebサービスのレストラン検索APIで緯度経度検索を実行しパース
はじめに PHPによる簡単なログイン認証いろいろで紹介したセッション認証において,「あるオリジン上でログインしたら別のオリジン上でもログインしたことにする方法」,つまりクロスオリジンでセッションを共有する方法(変数$_SESSIONを共有する方法)を解説します. teratailで回答していただいた方々,ありがとうございました teratail - シングルサインオン認証はCSRFセーフなの?(31529) 共通のドメイン上にサブドメインで分岐している場合 セッション用Cookieのdomain属性を変更する
リリースノート 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を明示したときに違いが表れます.
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
ポイント mpyw-yattemita/excel-csv-compatibility-check 上記リポジトリで互換性を確認した結果,一般的には,以下の2つのいずれかの選択肢をとるべきであることが分かりました。 Shift_JISでCSV形式にして拡張子csvで保存 UTF-16(LE)でTSV形式にして拡張子csvで保存 この記事では,UTF-16(LE)を取り扱うことを前提とします。 注意点 Unicodeを用いる場合,文字セットに応じたBOMが必要である。 UTF-8なら 0xEF 0xBB 0xBF UTF-16(LE) なら 0xFE 0xFF UTF-16(BE) なら 0xFF 0xFE 「UTF-16(LE)」と「UTF-16LE」は別物なので注意。「UTF-16LE」にはBOMが付かない。 Shift_JISのほうが文字の守備範囲が狭く,絵文字やラテン文字・ハングル文
<?php namespace mpyw\StupidExample; class Example { private static function hello() { return 'Hello'; } } <?php require_once 'Example.php'; use mpyw\StupidExample\Example; $Example = new Çlass { // ハイライトが未対応なので全角文字で小細工 private $rc; public static function __callStatic(string $name, array $args) { $rm = new \ReflectionMethod(Example::class, $method); $rm->setAccessible(true); return $rm->invokeArgs(
※「許可」は実質、ほとんどのブラウザでGETに変更される模様です。 具体例 掲示板への投稿が終わって遷移させるときは… 303 See Other を使いましょう。過去には 302 Moved Temporarily (302 Found の以前の名称) が使われていましたが、現在では迷わずこれ1択です。 メンテナンス中にお知らせページに飛ばしたいときは… 302 Found または 307 Temporary Redirect を使いましょう。「POSTのままお知らせページに飛ばす」ようにしても特に意味が無さそうなので、302 Found のほうがナチュラルと言えるかもしれません。 【追記】 もしURLを変更せずにそのページで即503 Service Unavailableで返せるような設計になっていれば、そうしたほうが良いでしょう。 サイトを移転したときは… 301 Moved Per
時代変遷 JavaScript では JavaScriptで非同期処理の時代変遷と言えば,こんな感じでやってきたと思います. (例) 1秒後に+1した値をコールバック引数に渡す関数を使って,以下の2つの流れを同時に処理し,両方終わった段階で「All done !!」と表示することにします. 1→2→3 4→5→6 callback (旧石器時代) function plusOneLater(a, callback) { setTimeout(function () { callback(a + 1); }, 1000); } var active = 2; plusOneLater(0, function (x) { console.log(x); plusOneLater(x, function (y) { console.log(y); plusOneLater(y, function
(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{} で無名クラスが使えます.全てのクロージャを無
Level 0: HTMLのみを記述したコード <html> <head> <body> を省略する,HTML5の最小構成で書きます. <!DOCTYPE html> <meta charset="UTF-8"> <title>掲示板</title> <h1>掲示板</h1> <section> <h2>新規投稿</h2> <form action="" method="post"> 名前: <input type="text" name="name" value=""><br> 本文: <input type="text" name="text" value=""><br> <button type="submit">投稿</button> </form> </section> <section> <h2>投稿一覧</h2> <p>投稿はまだありません</p> </section>
はじめに PHPからシェルコマンドを利用する際、&をつけるだけでは並列実行にならない場合があるのでメモしておきます。 exec shell_exec systemは同じ特徴を持つものとして考えて、execのみを用いて検証します。 popen proc_openは同じ特徴を持つものとして考えて、popenのみを用いて検証します。 >&2 >/dev/nullは同じ特徴を持つものとして考えて、>&2のみを用いて検証します。 今回はOSX環境を用います。Linux環境でもおそらく同様ですが、Windows環境では大きく結果が変わることが予想されるので、環境を用意出来る方は検証していただけると助かります。 実験 以下に組み合わせ条件を示します。for文の中で3,4回程度繰り返し実行し、かかった合計時間で並列実行されたかを判定します。 execを使うか?popenを使うか? &をつけるか?つけないか
<?php try { /* SQLite3のテンポラリデータベースに接続およびモード設定 */ $pdo = new \PDO('sqlite::memory:'); $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC); $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true); /* スキーマとレコードの生成 idは絞り込み等で番号が飛んでいることを想定 */ $pdo->exec('CREATE TABLE samples( id INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NU
次のページ
このページを最初にブックマークしてみませんか?
『@mpywのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く