読者です 読者をやめる 読者になる 読者になる

HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

rangeによるrangeの違い

Pythonのコードをちゃんと書いたことはないのだけど、ある理由でPythonのコードを読んでいて、ふと気になって調べたメモ。 結論から言うと、rangeで範囲を指定したときに列挙される値が、プログラム言語や、同じ言語でも書き方によって違うのだな、と。 実行…

文字列連結のパフォーマンス比較

PHP

そういえば計ったことなかったなぁ‥と思い立って、いくつかのパターンで計ってみたメモ。 実行環境は、自宅のXenServer上に載せた以下のVM環境。 CentOS 6.8+PHP 5.3.3 ケース1:文字列連結演算子とダブルクォーテーションと プログラムの全体は以下のような…

PHPの識別子にアスキーコード0x7Fが使えることの検証

PHP

マニュアルにもしっかり書いてあるんだけどPHPの識別子にはアスキーコード0x7Fが使えるが、これは制御文字DELなので変じゃないかという指摘。試したところ確かに使える / “PHP :: Bug #71897 :: ASCII …” https://t.co/9CkFL2aziD— 徳丸 浩 (@ockeghem) 2016…

is_aとis_subclass_ofの違い

PHP

クラス名の文字列を渡して使用しようとしたときに罠にはまったのでメモ。 is_a PHP: is_a - Manual is_subclass_of PHP: is_subclass_of - Manual はまったのは、v5.3.9から追加されたというallow_stringパラメータのデフォルト値に関連するものだが、他にも…

文字とASCII値の変換

PHP

いつも関数名まで忘れて苦労するので、メモついでにおもちゃを作ってみた(謎)。 関係する関数は以下 PHP: ord - Manual PHP: chr - Manual おもちゃコードとして、文字列の独自エンコード/デコードする関数を作ってみた。 エンコード 各文字のASCII値のビッ…

Zend_Dateクラスを効率よく使うチャレンジ

PHP

序 Zend Frameworkに含まれているZend_Dateクラスは、インスタンス生成コストがとにかく高い。 どれくらい高いかというと、以下の2つのプログラムで比較してみるとなんとなく分かる。 test0-1.php: Zend_Dateをn回インスタンス生成 = 2) { $n = (int)$argv[1…

PHPのrequire_onceが遅い話

PHP

もはや専門家の間では有名な話なのだろうが、今頃意識し始めて、ちょっと計ってみるかという気になったので計ってみる。 なんせ、Zend Frameworkのページでもパフォーマンスガイドとして書いてあるくらいだし。 Class Loading - Zend Framework Performance …

配列の統合時の先勝ち後勝ちの話

PHP

起 2つの配列$aと$bをマージした結果として$expectedのようなものが欲しくて‥ '22', 'k4' => '44', 'k6' => '66', 'k8' => '88', ); $b = array( '111', 'k2' => '222', 'k3' => '333', 'k5' => '555', 'k7' => '777', ); $expected = array ( '111', 'k2' …

DateTimeクラスの罠

PHP

PHPにDateTimeクラスとDateIntervalクラスなる便利なものがあると知って、喜び勇んで‥ PHP: DateTime - Manual PHP: DateInterval - Manual こんな感じで、日時の加算や減算のテストプログラムを作ってみた。 DateTimeTest.php new DateInterval('P1Y'), '…

日付文字列のフォーマットのメモ

RFC 2822に従った日付文字列の生成 一発で出力できる指定子があることに気付かず、試行錯誤したのだが、せっかくなのでメモしておく。 RFC 2822に従った日付文字列は以下のような形式。 Thu, 18 Jun 2015 16:43:47 +0900 メールのヘッダなんかに使われること…

「プロセスが使用中のファイルを調べる」で遊んでみた

ふと、何か(何)を見ていて、その関連で以下の記事をざっと読んで、ちょっと遊んでみたメモ(謎)。 lsofの使い方 - プロセスが使用中のファイルを調べる - うまいぼうblog なんで「PHP」というタグまで付いているかは読めば分かる(ぇ‥ 事前準備 遊ぶためのCent…

issetの罠(emptyの罠でもある)

PHP

PHPで(知らずに)以下のようなコードを書いていてはまったのでメモ。 実にくだらない話なんだが‥ 'HOGEHOGE', 'uga' => array( 'text' => 'UGAUGA', 'shortText' => 'UGA', ), ); var_dump(PHP_VERSION); $textList = array(); foreach (array('hoge', 'uga'…

crontabで実行時刻を適当に割り振るときの一案

どちらかというと、単なるネタ記事(何)。cronで実行する処理で、以下の要件を満たすような場合に自分が使っている実行時刻の決め方の一つ。 1日1回実行されればよい 似たような処理が複数あるが、随時増えていく (同じコマンドのパラメータ違いを別々にcront…

switch文の罠

PHP

PHPで(知らずに)以下のようなコードを書いていてはまった。

関数やメソッドの引数のタイプヒント指定の罠

PHP

久しぶりにネタとしてメモしておきたい事象にぶつかったのでメモ。「罠」とは言っても、熟練のPHPerにとっては当たり前のことなんだろうけど‥PHP(PHP 5環境)で以下のようなコードを書いていた。

bytea型でバイナリデータを扱う際のワナ

やはり自称DB屋(何)としては、DBMSのことを書かないと始まらないだろうということで(謎) PHPプログラムからPostgreSQLにいわゆるバイナリデータを放り込んでいろいろやる必要が生じたので、ちょっと調べてみると、主に以下の2通りがあるらしい。 bytea型の列…

メモリ喰らいの仕様

PHP

最近、気になる情報を目にしたらしい。 PHPの /** から始まるコメントが、require_once実行時に無駄にメモリを食う問題 - Narusaseの日記 -ハニポってどうよ?(仮)- よく読んでみると、「ReflectionClass::getDocComment()」に関係する仕様らしい。怖いので…

空白文字の判定

PHP

正規表現を使って空白文字を判定する処理に関して、認識と違っていた部分があったのでメモ。 preg_match関数に指定する正規表現で使用可能なエスケープシーケンスとして「\s」というのは知っているのだが、他にも以下のものがあるらしい。 \h 水平方向の空白…

PHPの恐怖仕様

冒頭で宣言しますが、今回のネタはあくまでPHPの仕様に対する実験であり、実際に使っちゃうと脆弱性を盛り込んでしまうネタなので、充分ご注意ください。と同じことを宣言しておく。 さて、まずは「EUC-JP(またはUTF-8)で保存された」以下の2つのコードを見…

POSTデータを送ったときのレスポンスを読む

PHP

PHPでPOSTデータを送る方法はいくつかあるらしい。 とても簡単にPHPからPOSTリクエストを送信する方法【PHP】 - Programming Magic が、制限が厳しい環境だと、どうしてもfsockopenでがんばるしかない。 PHP TIPS Vol.3 で、末尾に「実験用」と書いてあるの…

文字列連結の処理

PHP

仕事でPHPでの開発をしていると、以下のような記述を飽きるほど見かける。いや、ジョークとかじゃなくマジで‥orz

ファイルにASCII文字以外が含まれているかを判定するスクリプト

PHP

唐突に、(例外はあるが、EUC-JP、Shift_JIS、ISO-2022-JP、UTF-8あたりを対象としたときに)文字エンコーディングを気にしなくてよいファイルかどうかを判定したくなって、ちょっとしたユーティリティを作ってみたらしい。 ?_[\]\/\\\\]/', "/['\r\…

HTTPリクエストに対するレスポンスにごみデータ?

HTTPリクエスト/レスポンスを処理する、とあるライブラリを使っていたところ、妙なデータが返ってくることに気づいた。 おおよそ以下のような感じ。 201f <root> <row>abcdefghijklmnopqrstuvwxyz<row> <row>abcdefghijklmnopqrstuvwxyz<row> <row>abcdefghijklmnopqrstuvwxyz<row> <row>abcdefghijkl</row></row></row></row></row></row></row></root>…

MySQLで4バイトのUTF-8文字を扱ってみる

JIS X 0213:2004で追加された「叱」の異体字は、Unicodeにおいては「UTF-8で符号化すると4バイトになる」コードが割り当てられている。また、中国語をまともに扱おうと思ったら「UTF-8で4バイト」の文字を扱う必要が出てくる。 そんな文字どもをMySQLデータ…

定義値の型はちゃんと意識しましょう

デバッグモードなんだかそうでないんだか‥ define('DEBUG', 'false'); まぁこれだけならいいんだけど‥ if (DEBUG) { error_log("これはデバッグメッセージよ♪\n", 3, "Debug.log"); } 「if (DEBUG == 'true')」とか書いてあるならまだしも、定数DEBUGは文字…

PHPでHTTPS接続をする

PHPから何かしらのAPIをたたいたりするときに必要じゃないか、ということで、環境作成と接続テストをしてみる。 環境構築 環境は以前に作ったものをベースにする。(Apache httpd 2.2/PHP 5.3) PHP実行環境構築メモ - HHeLiBeXの日記 正道編 自己署名証明書で…

GDモジュールの導入

以前、Windows環境でGDモジュールを導入。 PHPで画像合成をしてみる - HHeLiBeXの日記 正道編 しかし、いろいろ怖い(謎)ので、Ubuntu環境でGDモジュールを導入しようということで。 探してみると、かなり多くのサイトで sudo apt-get install php5-gdとすれ…

CodeIgniterを試してみる

PHP

CodeIgniterというPHPのフレームワークがあるらしい、ということで、ざっと試してみるテスト。 前提 今回は、以下の環境での構築とする。 Ubuntu Server 10.04 LTS インストール時に LAMP Server を追加インストール Apache httpd 2.2.14 PHP 5.3.2 導入 ま…

PHPで画像合成をしてみる

PHP

ふと、画像合成をしてみようとか思ったらしい(謎)。 PHP: GD - Manual 環境構築 とは言っても、とりあえずWindows環境で試すので、php.iniの設定を変えるだけらしい。 やることは単純で、php.iniの以下の行のコメントをはずせばよい。 ;extension=php_gd2.dl…

短縮URLの展開処理を各言語で書いてみた

別にぜんぜんなんてことはないのだけど、なんとなく(謎)。 展開処理とは言っても、リクエストを出してLocationヘッダの内容を取っているだけだけど。 Java java.net.HttpURLConnectionクラスを使用して、こんな感じで。 import java.io.IOException; import …

ログの出力

PHP

デバッグやその他の目的で、様々な情報をログファイルに書き出したりすることがあるが、使用する方法によっていろいろと違いがあるようなので、ちょっと整理してみるテスト(謎)。 単純な値を出力する 例えばこんなの。

nusoapを使ってみる

SOAP自体、今更感が満載だが、使われているもの(何)に遭遇してしまったので、さらっと試してみようかということで。 まずは環境。 Windows Vista + PHP 5.3.3 + Apache httpd 2.2.16 nusoap 0.9.5 (NuSOAP - SOAP Toolkit for PHP download | SourceForge.ne…

自己署名証明書でテスト環境構築その他諸々(何)

構築する、放置する、分からなくなる、構築する、放置する、分からなくなる(以下略)を繰り返していた(謎)ので、今度こそメモに残すらしい。 自己署名証明書の作成 これは単にコマンドを叩くだけ。 openssl req -new -days 365 -x509 -nodes -keyout key.pem …

数値演算には要注意

PHP

ちゃんと分かってて使えば問題はないのだろうが、中途半端にかじるとやけどをしやすい数値演算。文字列オブジェクトだと思っていたものが数値として扱われてしまうこともある恐怖の言語だが、まぁ今回はそれには触れないとして(謎)。 以下のプログラムを3つ…

唐突にSQLのGROUP BYの処理をPHPで実装してみた

SQLのGROUP BYは、とても強力な機能であるにもかかわらず、記述はとてもシンプル。 SELECT num , MAX(score) AS c_max , MIN(score) AS c_min , AVG(score) AS c_avg , SUM(score) AS c_sum FROM hoge GROUP BY num ORDER BY num なぜか唐突に、これと同じ処…

json_encode/json_decodeに潜む罠

PHP

あるところ(何)で、json_decodeした結果がオブジェクトになるときと配列になるときがあるという問題が発生したらしい(ちなみに、json_decodeの第二引数にtrueを指定しないからという話ではない)。 例えば次のような感じ。 'hogehoge', 'list' => array('a',…

SET AUTOCOMMIT=0後の動作を誤解していたらしいの巻

PHP+MySQL環境でmysql_pconnect関数を使っていて、謎な挙動に悩まされていたらしいが、その原因が「SET AUTOCOMMIT=0」にあるらしいということで。実は、問題が浮上して調査するまでは「SET AUTOCOMMIT=0」が問題だとは微塵も思っていなかった。なので、「SE…

トランザクションを強制的に終了させる

前置き MySQL 5.1で、InnoDBなデータベースを使って何かを開発している最中には、トランザクションがコミット(またはロールバック)される前にプログラム側の処理が(Fatal errorなどで)異常終了したりして、トランザクションがロックを取得したまま放置状態に…

ユーザー操作制御機能(何)を作ってみる

前置き 最近、自分でコーディングする機会がめっきり減ってしまったので、ちょっとしたリハビリにちょっとしたものを作ってみる。 いい名前が思いつかなかったので、こんなタイトル(何)になってしまったが、要するに、 Windows(Vista以降(?))で言うところの…

バイト値を得るためのユーティリティ

何に使うのかは知らないが(待て)、例えばC言語で #include <stdio.h> int main(int argc, char* argv[]) { int byteValue = 'a'; printf("%d\n", byteValue); } として得られる「97」という数値を、PHPでは得られないのだよなぁ、と思って作ってみた。 </stdio.h>

WindowsにPHP+Memcached環境を導入する

ブクマ(何)とかを見ると1ヶ月ほど前の話になるのだが、Windows Vista上にPHP+Memcached環境を導入したらしい。 ただ、変なところでひどく苦労したので、導入時点での情報をまとめてみる。 Memcachedの導入 まずはサーバーの導入。 基本的な手順としては、以…

イテレーションの最中に要素を削除する

Javaで次のようなプログラム: Map<String, String> map = new HashMap<String, String>(); map.put("a", "A"); map.put("b", "B"); map.put("c", "C"); for (String key : map.keySet()) { if (key.equals("b")) { map.remove(key); } } を書くと、java.util.ConcurrentModificationException</string,></string,>…

クラスが定義されるタイミング

PHP

あるとき(何時)、聞かれたことに即答できなくて悔しかったのでちゃんと調べて書いてみる。 聞かれたことというのは、「1つのPHPファイルの中で、クラス定義とそれへの参照(new)の記述の前後によって動作が変わるか否か」。 冷静に考えれば、後ろのほうに書い…

SQLite接続設定 - PHP実行環境改変メモ(6)

ちょっと間が開いたが、自宅のPCのPHP環境の改変。 PHP実行環境構築メモ - HHeLiBeXの日記 正道編 PHP実行環境改変メモ - HHeLiBeXの日記 正道編 MySQL接続設定 - PHP実行環境改変メモ(2) - HHeLiBeXの日記 正道編 DB2接続設定 - PHP実行環境改変メモ(3) - H…

SQL Server接続設定 - PHP実行環境改変メモ(5)

引き続き、自宅のPCのPHP環境の改変。 PHP実行環境構築メモ - HHeLiBeXの日記 正道編 PHP実行環境改変メモ - HHeLiBeXの日記 正道編 MySQL接続設定 - PHP実行環境改変メモ(2) - HHeLiBeXの日記 正道編 DB2接続設定 - PHP実行環境改変メモ(3) - HHeLiBeXの日…

Oracle 10g接続設定 - PHP実行環境改変メモ(4)

引き続き、自宅のPCのPHP環境の改変。 PHP実行環境構築メモ - HHeLiBeXの日記 正道編 PHP実行環境改変メモ - HHeLiBeXの日記 正道編 MySQL接続設定 - PHP実行環境改変メモ(2) - HHeLiBeXの日記 正道編 DB2接続設定 - PHP実行環境改変メモ(3) - HHeLiBeXの日…

DB2接続設定 - PHP実行環境改変メモ(3)

引き続き、自宅のPCのPHP環境の改変。 PHP実行環境構築メモ - HHeLiBeXの日記 正道編 PHP実行環境改変メモ - HHeLiBeXの日記 正道編 MySQL接続設定 - PHP実行環境改変メモ(2) - HHeLiBeXの日記 正道編 ためしにDB2に接続してみる 以前に、PHPのWindows版バイ…

xx_fetch_array()関数の恐怖

いや、まぁ恐怖ってほどのことでもないのだけど。 こんなクエリ(何)書かないだろうし。 select table_schema as "1", table_name as "2", column_name as "3" from information_schema.columns where table_schema = 'information_schema' and table_name = …

MySQL接続設定 - PHP実行環境改変メモ(2)

引き続き、自宅のPCのPHP環境の改変。 PHP実行環境構築メモ - HHeLiBeXの日記 正道編 PHP実行環境改変メモ - HHeLiBeXの日記 正道編 ためしにMySQLに接続してみる これまでと同様に、"php.ini"の次の行のコメントをはずす(963行目辺り)。 ;extension=php_mys…

PHP実行環境改変メモ

だいぶ前に自宅のPCにPHP実行環境を構築してから、そのままの環境でいろいろと試してきたのだが、そろそろちゃんと整備する必要が出てきたので、設定回りをきちんとしていくことにしたらしい。 ということで、以前構築した環境をベースに、ちょっと改変を加…