サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 17
qiita.com/mpyw
概要 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
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
(function (root) { 'use strict'; function Retmise(options) { if (this == null || this.constructor !== Retmise) { return new Retmise(options); } options = options || {}; options.retries = options.retries != null ? options.retries : 5; options.delay = options.delay != null ? options.delay : 500; options.timeout = options.timeout != null ? options.timeout : 0; options.onRetry = typeof options.onRetry
基礎知識 コンピュータで扱えるデータの最小単位は1バイト(8ビット:2進数8桁分)であり、これは符号無し10進数表記で**0〜255**(2進数表記で00000000〜11111111)を表すことが出来ます。 半角英数字や半角記号、改行コードなどの世界共通で多用される文字は1バイト文字として**0〜127**の範囲に割り当てられており、これらは「ASCII文字」と呼ばれます。 ASCII以外の文字コードでは余った128〜255の範囲を他の文字を表現するために利用しています。但しこれらを1バイト単位で使うだけでは残り128種類の文字しか表せなくなってしまうので、実際には複数桁組み合わせて用いられます。これらは「マルチバイト文字」と呼ばれます。 以下は参考リンクです。初学者の方は、この記事を読む前にひと通り目を通されることをおすすめします。 ASCII文字コード 文字コードについての俺的まとめ
みたいなコードの是非を巡ってPHPと闘ってきましたが… $_GET, $_POSTなどを受け取る際の処理 filter_input_simple filter_input_array_recursive いずれにも以下のような欠点がありました。 filter_input で一発処理出来るのは外部から受け取る値かつ文字列のみ 上記に該当しないものには isset と is_string / filter_var の処理がどこかで必要になってくる PHP7からは…? PHP7には**NULL合体演算子??**が導入されており、任意の変数に対して 未定義でもNULLでもなければ左オペランドの値を採用 未定義またはNULLのとき右オペランドの値を採用 (内部でisset相当のチェックを行っているのでエラーが発生しない) という処理を記述することが出来ます。 文字列型のみ処理したい場合
はじめに 「英数記号あり(大文字小文字の区別なし)で、かつ8文字以上」の正規表現 の内容と重複しますが、言語ごとに最適化したものもまとめておきます。但しあまり知らない言語もあるので、誤りなどありましたら指摘お願いします。 留意した点 行 JavaScriptでは、マルチラインモードを指定しない限り ^ $ がそれぞれ先頭と末尾を表す。\A \z はそもそも存在しない。 Rubyでは、デフォルトでマルチラインモードなので、^ $ はそれぞれ行頭と行末にマッチしてしまう。これでは正規表現が意味を為さないので、先頭と末尾にマッチする \A \z を使用する。 PHPではRubyほど深刻ではないが、$ が末尾または改行からの末尾にマッチしてしまうので、改行を含まない \z を使用する。 RubyやPHPの \z は、Pythonにおいては \Z に相当する。 パターン修飾子 JavaScriptや
<?php /* HTML特殊文字をエスケープする関数 */ function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } # $_GET['q'] を文字列として受け取る (未定義の場合は空文字列になる) $q = (string)filter_input(INPUT_GET, 'q'); # $_GET['q'] が空文字列でなかった場合にのみ検索を行う if ($q !== '') { // コンテンツを取得 $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => 'http://www.amazon.co.jp/s/field-keywords=' . urlencode($q), CURLOPT_RETURNTRANSFER => tr
を、何故か PHP で作ってしまいました。何でC#でWPFとか使ってグラフィカルにしようとせずWeb目的で作られたPHPをコマンドラインとして使うんかね。これもうわかんねぇな。 GitHub php-type-trainer https://github.com/mpyw/php-type-trainer 大学の課題用に作りました。このREADMEの駄文を教授に送り付けるゴミっぷり。あと1日で叩き上げで作ったのでコメントとか全く入れてないですごめんなさい。 スクリーンショット 起動~例文収集 Wikipediaからいい感じの例文を勝手に探してきてくれます。たまに変なところでぶった切られて意味不明な文が紛れ込むのはご愛嬌。 トレーニング開始 DPマッチング法を使ってミス検出するので理不尽な減点をされることが無くなります。どうせなら Backspace 使用不可 Enter を押さずとも即時に
導入 PHPにはsimilar_textやlevenshteinといった、2つの文字列の類似度を計算するための関数があります。しかしこれらはマルチバイトを考慮しておらず、とりわけUTF-8バイト列に対しては計算精度が悪化するという特徴があります。そこで今回はUTF-8マルチバイト対応版のlevenshtein_utf8という関数を作ってみることにしました。なおsimilar_textの方は計算量が大きすぎてPHPレベルで実装するに堪えないので、今回はパスということで… 既に@suinさんの**「mb_levenshtein 二つの文字列のレーベンシュタイン距離を計算する(マルチバイト対応版)」**は拝見しましたが、文字種による制約がかかると実用的ではないので、@itcomさんがコメントされているように素直な実装を行いました。といってもほとんどphp-srcからのパクりですが。 距離の正規化
導入 PHP Manual - array_search 配列から探したい値に対応するキーを取ってくる関数です。見つからなかった場合には FALSE が返されます。この記事の内容には直接関係ないですが、この関数にはいろいろ落とし穴があるので注意してください。 結果の比較には === !== を使わなければならない 第3引数 $strict は TRUE にすることが推奨される さて、これを例として問題を提起します。 /* 問題 */ echo "ランダムに選出したアルファベットはH~Nの中に含まれているか?\n"; echo "またそのアルファベットは(Hから数えて)何番目のアルファベットか?\n"; echo "\n"; /* 変数の準備 */ $range = range('H', 'N'); // 限定する範囲 $all = range('A', 'Z'); // 全範囲 $rand
結論 Content-Type: text/plain な入力を Content-Type: text/html な環境の中に正しく出力させるため。 もう議論され尽くした内容だが、このような言い回しの人は見たことがなかったので敢えて記事にしてみる。 解説 ユーザがテキストボックスを通じて入力するのは text/plain、つまりただのテキスト。ただのテキストであるから装飾する機能は無い。 プログラマがユーザ入力を元にPHPで出力するのは text/html、つまりHTML。HTMLには見出しを示したり、太字にしたり、下線を引いたり、CSSやJavaScriptを呼び出す機能もある。 htmlspecialchars は text/plain を text/html に変換する。< >を< >に変換するというのはあくまで一例に過ぎない、と考えるべきである。 通常、ユーザ入力は t
実装 それぞれの言語で、以下の関数・メソッドを書いてみることにします。用語はRuby側に統一します。 ハッシュの各要素の 値 に対してブロックを適用し、それらの返り値を集めた新しいハッシュを返す ハッシュの各要素の キー に対してブロックを適用し、それらの返り値を集めた新しいハッシュを返す ハッシュの各要素の 値とキー に対してブロックを適用し、それらの返り値を集めた新しいハッシュを返す なお、Rubyは初心者です。 PHP <?php function array_kmap(callable $func, array $arr) { return array_combine(array_map($func, array_keys($arr)), $arr); } function array_kvmap(callable $func, array $arr) { $new = array
<?php function swapAndEditValVal(array $left, array $right) { $tmp = $left; $left = $right; $right = $tmp; $tmp['value'] *= 100; } function swapAndEditRefVal(stdClass $left, stdClass $right) { $tmp = $left; $left = $right; $right = $tmp; $tmp->value *= 100; } function swapAndEditValRef(array &$left, array &$right) { $tmp = $left; $left = $right; $right = $tmp; $tmp['value'] *= 100; } function swap
前書き @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
ところがAPIが提供されていないWebサービスではどうなるでしょうか?多くの場合は、Webブラウザで閲覧することを目的として作成されたHTMLをスクリプトで取得し、解析するしか手段は残されていないはずです。この、HTMLを解析して必要な部分だけ 切り取る(scrape) 手法を総称して、 スクレイピング(scraping) というのです。 基本的な流れ (導入編) [http://qiita.com/mpyw] (http://qiita.com/mpyw) の最新記事を最大5件スクレイピングする例を示していきます。具体的な実装は後ほど示しますので、ここではスクレイピングするコードを書くときの考え方をまとめます。 目的とする結果 最初に、目的とする結果を var_dump 関数を用いて示します。 array(5) { [0]=> array(6) { ["title"]=> string(
注意 この記事はBasic認証フローの仕組みを解説することに重点を置いており,セキュリティに関してはあまり考慮しておりません.セキュリティを考慮した実用的な実装に関しては以下をあたってください. PHPによる簡単なログイン認証いろいろ password_verifyは本当にタイミングセーフなのか? 導入 「今どきBasic認証みたいな危険なもの使うなんて…」 なんて心配はさておき、何故以下のような記述でダイアログを交えた認証フローが成り立つのか疑問に思っていました。結論からすれば大したことないんですけど、それがイメージしにくかったのでここにメモしておきます。 <?php switch (true) { case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']): case $_SERVER['PHP_AUTH_USER']
// DOMを全て読み込んだあとに実行される $(function () { // 「#execute」をクリックしたとき $('#execute').click(function () { // Ajax通信を開始する $.ajax({ url: 'api.php', type: 'post', // getかpostを指定(デフォルトは前者) dataType: 'json', // 「json」を指定するとresponseがJSONとしてパースされたオブジェクトになる data: { // 送信データを指定(getの場合は自動的にurlの後ろにクエリとして付加される) age: $('#age').val(), job: $('#job').val(), }, }) // ・ステータスコードは正常で、dataTypeで定義したようにパース出来たとき .done(function (r
interface RecursiveArrayInterface { /* 各ソート関数再帰対応版。オプション無し。 */ public static function sort(array &$arr); public static function rsort(array &$arr); public static function asort(array &$arr); public static function arsort(array &$arr); public static function ksort(array &$arr); public static function krsort(array &$arr); public static function natsort(array &$arr); public static function natcasesor
次のページ
このページを最初にブックマークしてみませんか?
『@mpywのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く