PHP

読みがなを正しい50音順(辞書順)にソートする

読みがなを持つデータを、辞書のような順序に並べ替えたいとする。ところが辞書の配列は意外と複雑だ。Wikipedia の索引の配列として次の規則が提示されている。 読みの五十音順とする。 清音・濁音・半濁音は、この順に並べる。 促音「っ」、拗音「ゃ」「ゅ…

Google Analytics API を PHP から使う

PHP

目次 はじめに 1. API を利用可能にする 2. API アカウントを作成し、キーを取得する 3. Analytics へのアクセス権限を API アカウントに付与する 4. Google APIs Client Library for PHP を設定する 5. API を使い Analytics データを取得する 6. 取得でき…

(調査中) Windows 版 PHP の ZipArchive クラスで日本語 (CP932) のファイルを扱えない?

Windows 上で作成した、ファイル名が CP932 の Zip ファイルがどうしても文字化けしてしまう。たとえば “日本語” (93 fa 96 7b 8c ea) というファイルは常に “ô·û{îΩ” (c3 b4 c2 b7 c3 bb 7b c3 ae ce a9) という不可解な化け方をする。 試したこと: set_loc…

PHP 7 を Windows 7 上で動かす

PHP 7.0.1 がリリースされたので、ひとまず開発環境である Windows 7 上で動かしてみた。 インストール PHP のダウンロードページから「Windows downloads」のリンクをたどり、Windows 版のダウンロードページへ。 PHP For Windows: Binaries and sources Re…

mPDF (5.7.4) はタイムゾーン設定を勝手に書き換えるので注意

PHP

HTML で書かれたコードから PDF を出力できる mPDF という PHP ライブラリがある。HTML と CSS を理解していれば思い通りに、とまではいかないまでも、それなりにレイアウトすることができる。あるときこの mPDF を使っていたところ、出力される日時がずれて…

古い PHP を使うときに問題となりそうな箇所

PHP

あるバージョンの PHP を想定して書かれたコードをより古いバージョンの PHP で動作させないといけなくなったときに、問題になりそうな箇所を挙げる。 PHP 7.3 → 7.4 配列のスプレッド構文 $a = [1, 2]; $b = [0, ...$a, 3, 4]; 矢印関数(ショートクロージ…

DateTime オブジェクトのタイムゾーンの設定

PHP

タイムゾーンを特に指定しない場合、 date_default_timezone_get() の値が使われる。 getTimezone(); $tz->getName(); // Asia/Tokyo date_default_timezone_get(); // Asia/Tokyo $date->getTimestamp(); // 1410130800 $date->format('Y/m/d H:i:s'); // 2…

【旧版】Google Analytics API を PHP から使う

PHP

2016年4月1日時点、API が更新されて使い方が変わっています。こちらの新しい記事をご覧ください。 Google Analytics API を PHP から使う - メモ用紙 目標 Google Analytics API を使って、人気のページのランキングを作る。次の記事はバージョンの古い PHP…

デスクトップ/モバイル(スマートフォン)を判断するベストプラクティス

PHP

モバイル環境では通信の帯域が限られているため、内容を絞り込んだコンテンツを提供するのが定石となっている。その判定を行うのに現在最も有効な方法は、HTTP リクエストに含まれる User-Agent ヘッダを参照する方法だ。数多くのアクセス解析ツールでも、ユ…

UTC時刻の文字列からローカル時刻を出力する

PHP

SQLite には日付型はないが、 CURRENT_TIMESTAMP で現在時刻を文字列として取得することができる。また、date などの関数で時刻の演算することもできる。 SELECT CURRENT_TIMESTAMP AS now , datetime('now', 'start of month') AS first_day , datetime('no…

serialize/unserialize vs json_encode/json_decode 速度比較

PHP

テストデータとして 金沢市オープンデータ から取得した JSON 形式で 351 KB になるデータを使用した。PHP 5.4.17 (cli) でそれぞれ 1000 回実行したときの実行時間を以下に示す。 エンコード 実行時間 [s] 比 serialize (array) 2.06 +26% serialize (stdCl…

PHPソースコード難読化・暗号化ツール所感

PHP

2014年7月1日追記:この記事は情報が古い可能性がありますPHP ソースコードの難読化・暗号化ツール php-compressor, ibLind, プラセンス SPHP, ionCube PHP Encoder を試してみた。 php-compressor php-compressor はコード実行に必要のない空白や改行、コメ…

セキュリティ上の理由で preg_replace が制限されている環境での代替関数

PHP

preg_replace 関数は使い方によっては任意のコードを実行できる脆弱性を生むことがあるため、php.ini の disable_functions によって使用を禁止されている場合がある。 preg_replaceによるコード実行 しかしライブラリ中でも preg_replace が使われる機会は…

cURLでアクセスできるサイトとできないサイト

PHP

MacPorts で入れた php5 (5.3.12) と php5-curl でテスト。 接続 ドメイン 接続方式 暗号化方式 ビット数 digest 鍵交換 認証局 OK twitter.com TLS 1.0 RC4_128 128 SHA1 RSA VeriSign Class 3 Extended Validation SSL CA OK account.edit.yahoo.co.jp TLS…

Windows でも非同期で exec()

/dev/null 2>&1 &'); } else { $fp = popen('start "" ' . $command, 'r'); pclose($fp); } } 解説 PHP_OS で Windows か UNIX 系 OS かを判断する(他の処理系については考えていない) UNIX 系 OS の場合、標準出力を /dev/null に捨て、バックグラウンド…