GitHub」カテゴリーアーカイブ

【PHP】URLを渡すとヘッダー情報を見てステータスを返すクラスを書いた

投稿日:

ちょっと前に、【PHP】URLを渡すとヘッダー情報を見てステータスを返すやつ書いた | Shimabox Blogを書いたのですがせっかくなのでクラスにしてみました。

ソースはこちら

インストール

$ composer require shimabox/url-status

使い方

<?php
require_once 'vendor/autoload.php';

$ret = \SMB\UrlStatus::get('https://google.com/webhp?gl=us&hl=en&gws_rd=cr');

$ret->targetUrl();      // => 'https://google.com/webhp?gl=us&hl=en&gws_rd=cr'
$ret->reachedUrl();     // => 'https://www.google.com/webhp?gl=us&hl=en&gws_rd=cr'
$ret->isValidUrl();     // => true
$ret->redirectedUrls(); // => ['https://www.google.com/webhp?gl=us&hl=en&gws_rd=cr']
$ret->redirectedCode(); // => [301]
$ret->code();           // => 200
$ret->is200();          // => true

// for the POST method
$data = http_build_query(['foo' => 'bar', 'hoge' => 'piyo']);
$header = [
    'Content-Type: application/x-www-form-urlencoded',
    'Content-Length: ' . strlen($data)
];
$options = [
    'http' => [
        'method'  => 'POST',
        'header'  => implode("\r\n", $header),
        'content' => $data
    ]
];

$ret = \SMB\UrlStatus::get('http://localhost/post.php', $options);

関数版との違い

  • インターフェイス( 第一引数にURL, 第二引数にstream_context作成用の値 )は変わっていません
  • stdClassを返していたのを自身\SMB\UrlStatusを返すように変更
    • 返されたプロパティを変更出来ないように
  • isxxx()をマジックメソッドで用意
    • is{数値3桁}()
    • /\Ais(\d{3})\z/
    • is200()とか、is503()とか

こんな感じです。雨が続いて憂鬱です。

【PHP】配列を渡したらcsv,tsv,ltsv,xml,jsonに変換するライブラリ書いた

投稿日:

というわけで書きました。

これは何か

配列を渡すと、csv, tsv, ltsv, xml, json いずれかの形式に変換して、

  • ダウンロード機能
  • 出力機能(echo)
  • 保存機能

を提供します。

何で作ったか

csvとかtsvとかを作成する機会ってそんなに無いけど、たまに出くわすといつもググっているので書きました。
最初は保存機能だけを書いていたんだけど、ついでに出力機能(echoするやつ)とダウンロード機能もつけました。
あと併せて、ltsvとかxmlとかjsonも対応しました。

使い方

Google翻訳に100%頼って書いた

を日本語訳します。
続きを読んでみようかな…

【PHP】Cookieの検証 (保存出来る最大サイズを調べたり、圧縮した文字列をセットしてみたり)をしてみた – 2016年5月

投稿日:

クッキーはソフトなものよりハードな方が好きです。
というわけで、ちょっとだけCookieの検証をしてみたので書いてみます。
PHPです。

何の検証をしたのか

  • cookieにセットする値の長さが4096byte以上(値 >= 4096)だとcookieにセットされない(無視される)
    • もともとセットされていたcookieは上書きされない
  • cookieにセットする値の長さが4096byte以上(値 >= 4096)でも圧縮した結果、4096byteより小さい(値 < 4096)場合、cookieにセットされている
  • cookieのサイズ制限にはcookie名の長さも含まれる(セットする値の長さ + cookie名の長さが対象になる)

を検証しました。
※ 1クッキーの最大サイズ(byte)で一番小さい値が4096byteだったので4096byteを基準にしています (下記、検証にあたって参考にしたサイト参考)
※ cookieにセットする値の長さは、URLエンコード後の長さ(byte数)です

検証にあたって参考にしたサイト

検証してどうだったのか

こんなんでました。 ※OperaとAndroidは(ry

OS ブラウザ 1クッキーの最大サイズ(byte)
MAC OS X El Captain Chrome 50.0.2661.102 (64-bit) 4096
Firefox 46.0.1 4097
Safari 9.1 4097
Windows7 Professional 32bit Chrome 50.0.2661.94 m 4096
Firefox 46.0.1 4097
IE Edge (既定) 5117
IE 10 (エミュレーション) 5117
IE 9 (エミュレーション) 5117
iOS 9.3.1 Safari 4097
Chrome 50.0.2661.95 4097 ※PCと違う!!

検証結果は(ほぼ((PCのchromeと、iOSのchromeで最大サイズに違いがあるのはビックリ!!)))期待する結果となりました。

4096byte以上の値をセットする時も、値を圧縮して4096byteより小さくなればセットされる事も確認出来ました。※chromeだけじゃなくて、他のブラウザもそれぞれの閾値で確認しました

どうやって検証したのか

こういうのを作って、ちまちまとやりました。

https://shimabox.net/sample/php_verify_cookie/

  • 任意のcookieをセット出来る
    • 文字列だけだけど
  • デフォルトで4095, 4096, 4097, 5117, 5118byteの文字列を用意
  • cookieにセットされている値とセットしたい値(postした値)に差分があれば、差分ありと表示される
  • cookie削除の機能は無いので試した後は適当に消してください
    • 試しているとBad Request Your browser sent a request ...が出たりします

ソースはやっつけで作ったので汚いですが一応
https://github.com/shimabox/sample_php_verify_cookie

続きを読んでみようかな…

簡易寄せ書きツール(Yosegakky)を作った

投稿日:

というわけで、簡易寄せ書きツールを作成/公開しました。

shimabox/yosegakky

これは何?

  • 簡易寄せ書き作成ツールです
  • download したら簡単に寄せ書きっぽいものを作れる様にしたつもりです
  • そのため昨今のビルドツールは使っていません 僕が使えません
  • ローカルで動くので寄せ書きのメッセージなどを設定したら、みんなで見たりとか、zipなんかにしてプレゼントしたりとかそんな感じです

デモ

demo1 こんな感じです。

どうやって使うの?

Yosegakky – 簡易寄せ書き作成ツール に色々書いています。

続きを読んでみようかな…

PHPで簡易ベンチマーク計測用ライブラリを書いた

投稿日:

5歳になる息子が毎日ち○こと言わないと気が済まないようで困っています。
そうなると下の子(妹)も真似するわけで、家では毎日ち○こ祭りです。

というわけで、掲題にある通りPHPで簡易ベンチマーク計測用ライブラリを書きました。
ソースはこちらです。

shimabox/SMBBenchmark

なんで今更感半端ないものを書いたかというと、ベンチマークを取りたいときに、いつもググっては、microtime()とかtime()を書くのが面倒臭いなと思ったからであります。
※PEARのベンチマークライブラリがメジャーっぽいけど、PEARが使えるのかとか気にするのもあれだし

ぶっちゃけネットで得られる情報の寄せ集めなので大したことは無いんですが、せっかく書いたので公開します。
README.mdを見てもらえれば使い方は大体わかると思うのですが、こちらにも使い方を書いておきます。

使い方

上記の shimabox/SMBBenchmark からソースを落としてください。
※Packagistへはそのうち、、、 composerの対応しました。

続きを読んでみようかな…