HHeLiBeXの日記 正道編

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

PHP

fopenに存在しないファイル名を指定したときの挙動

PHP

PHP 5.4.16からPHP 8.1.7にバージョンアップをしようとしたときのこと。

型宣言~float~

PHP

型宣言のfloat編。どこまで許容されるのか検証。 Main.php getMessage() . PHP_EOL; print $e->getTraceAsString() . PHP_EOL; return -1; } } class Hoge { private int $val; p…

型宣言~bool~

PHP

型宣言のbool編。どこまで許容されるのか検証。 Main.php getMessage() . PHP_EOL; print $e->getTraceAsString() . PHP_EOL; return false; } } class Hoge { private int $val; p…

型宣言~string~

PHP

型宣言のstring編。どこまで許容されるのか検証。 Main.php getMessage() . PHP_EOL; print $e->getTraceAsString() . PHP_EOL; return ''; } } class Hoge { private int $val…

型宣言~int~

PHP

型宣言のint編。どこまで許容されるのか検証。 Main.php getMessage() . PHP_EOL; print $e->getTraceAsString() . PHP_EOL; return -1; } } class Hoge { private int $val; public …

type hintingの改善(Type declarations/型宣言)

PHP

だいぶ昔に以下の記事を書いた。 hhelibex.hatenablog.jp それからだいぶ時が経ったものの、PHP 5.xの世界でずっと生きてきたので気付かなかった。 (英語) Type declarations (日本語) 型宣言 これによると、 英語 Type declarations can be added to functi…

オブジェクトの存在しないプロパティを参照したときの挙動

PHP

もしかしてオブジェクトの場合もか?ということで試したメモ。 Main.php a); var_dump($a->b); 実行結果。 $ for php in php56 php70 php71 php72 php73 php74 php80 php81 php82 ; do echo "===${php}===" ; ${php} Main.…

配列の存在しないキーを参照したときの挙動

PHP

PHP 5.4.16で動いているシステムをPHP 8.1.6に移行しようとしてハマったのだが、Smarty 2.xでは、error_reportingの値を書き換えてE_NOTICEを勝手に抑制していたことが発覚した今日この頃。 PHP 8.1.6にしてみるとどうにもWarningが止まらない。Smartyの未定…

オブジェクトに対するarray_key_exists関数呼び出しの代替策について

PHP

array_key_exists関数の第二パラメータにオブジェクトを渡すとエラーになるようになってから久しいが、PHP 5.4.16で動くシステムを最低でもPHP 7.3以降に上げなければならなくなったためにぶつかった壁の調査。 以下のようなコードをPHP 5.6.40/7.4.29/8.1.6…

CSVファイルの扱いに関する挙動の比較(2)

前回、以下の記事を書いた。 hhelibex.hatenablog.jp その中で、「自身が書き出したCSVファイルを読み込むとエラーになる」可能性が出たので、実際に検証してみた。 なお、今回は、PHPについては7.4.0以降を対象とする。 事前準備 fgetcsv/fputcsv (PHP (7.4…

CSVファイルの扱いに関する挙動の比較

CSVファイルの読み書きに関する挙動をまとめたメモ。 はじめに 検証に使うCSVファイル fgetcsv/fputcsv (PHP) Super CSV (Java) Super CSV Annotation (Java) OrangeSignal CSV (Java) opencsv (Java) まとめ 参考 おまけ(Excelで開く) はじめに まず、復…

RFC4180に従わないfgetcsv/str_getcsvの独自仕様

PHP

「バックスラッシュを削除するとうまくいく」。そんな問い合わせを受けて調べてみたら、驚愕の事実が発覚。その調査メモ。 CSVファイル さすがにオリジナルを載せるわけにはいかないので、簡略化したCSVファイルを示す。文字エンコーディングはWindows-31J。…

PHPでPOSTする

PHP

大昔に書いた記事にウソがあったので、それを訂正しつつ、PHPでPOSTするためのコードを何通りか書いてみるテスト。 hhelibex.hatenablog.jp 下準備 以下のようなAPIを用意しておく。HTMLコードを吐き出す仕様になっているのは気にしない。 post-api.php <dl> $v</dl>…

カーソルの使用方法

もうZend Framework 1(ZF1)の話はいいやって感じだけど一応メモ。 ZF1を使ってDBへのアクセスを実現するには、通常はZend_Db_Table_Abstractクラスを継承したモデルクラスを作って実現すると思うじゃないですか。 select(); …

Zend Framework 1+PostgreSQL

ある時、Zend Framework 1系+PostgreSQLで組まれたシステムのPostgreSQLバージョンアップを行う機会があったのだけど、PostgreSQL 12以降には上げられないことが判明して、PostgreSQL 11で妥協したことがあった。 CentOS 6のサポート期限も近づいているし、…

yumでCentOSに標準以外のPHP実行環境を構築する

CentOSの標準リポジトリのみに依存していると、PHPのバージョンがどんどんEOLになっていって悲しいので、yumで任意のバージョンをインストールして使用するための手順のメモ。 ちなみに、標準リポジトリを使用する場合はCentOS 6ではPHP 5.3.3、CentOS 7では…

Eclipse(PDT)でPHPのコードを書く時の不便さを解消する

そもそも、静的型付けでない言語は好きではないのですが、好き嫌いを言っていると仕事が無くなってしまうので・・ そんなわけで、Eclipse(PDT)でPHPのコードを書くわけですが、時にあるクラスのインスタンスの配列を関数/メソッドに渡す形にしたい時があり…

json_encode関数のJSON_UNESCAPED_UNICODEオプションの指定方法

json_encode関数はデフォルトではUnicode文字列がエスケープされるのだが、PHP 5.4より以前ではエスケープを避ける手段がないので、以下のようなコードを書くと、出力を人がパッと見ても読めない。 index.php

mb_encode_mimeheader/mb_decode_mimeheaderする際には内部文字エンコーディングに注意

PHP

マニュアルをちゃんと読むと書いてあるのだが。 PHP: mb_encode_mimeheader - Manual PHP: mb_decode_mimeheader - Manual 前者のmb_encode_mimeheader()は、以下のように書いてある。 パラメータ str エンコードする文字列。 mb_internal_encoding() と同じ…

各言語で正規表現「^」「$」「\A」「\z」を試してみる

徳丸浩の日記: 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう https://t.co/Lc20UYnwMT— HHeLiBeX (@hhelibex) 2017年12月11日 ということで、あちこちから突っ込みが来ないことを祈りつつ(謎)、手元にある各言語でテストプログラム…

各言語で部分文字列を取得してみる

各言語で入力された文字列の部分文字列を取得するプログラムを書いてみたメモ。 要件は以下の通り。 標準入力から、1行の文字列が与えられる 文字エンコーディングはUTF-8 サロゲートペアも含まれることがある 文字数は3文字以上であることが保証される 入力…

各言語で指定したディレクトリ内のファイル一覧を取得してみる

各言語で指定したディレクトリ直下のファイル一覧を取得するプログラムを書いてみたメモ。 要件は以下の通り。 コマンドライン引数には、ディレクトリ名が1つ指定される 指定されたディレクトリから直下にあるファイルのファイル名一覧を読む ファイルの個数…

各言語での整数型の最大値と最小値

唐突に、各言語での整数型の最大値と最小値をまとめてみようと思ったメモ。 環境 手元にあるものということで、環境は以下のものに限定する。なお、32ビット環境は、このために急きょ作った。 CentOS 6 (32ビット) Java (openjdk version "1.8.0_151") C (gc…

各言語でUTF-8バイト列を文字列置換および文字列分割してみる

各言語でUTF-8のバイト列を読み込み、文字列置換と文字列分割をしてみたメモ。 要件は以下の通り。 標準入力から、文字列が1行だけ入力される。 文字エンコーディングはUTF-8 入力文字数は高々10文字とする 標準出力に、以下の2つを改行区切りで出力する。 …

各言語でUTF-8バイト列からバイト数と文字数を取ってみる

各言語でUTF-8のバイト列を読み込み、バイト数とUnicodeでの文字数を取得してみたメモ。 要件は以下の通り。 標準入力から、文字列が1行だけ入力される。 文字エンコーディングはUTF-8 入力文字数は高々10文字とする 標準出力に、以下の3つを改行区切りで出…

各言語でファイル入出力+文字エンコーディング変換

各言語でファイル入出力と文字エンコーディング変換を書いてみたメモ。 やってる途中で、別々のエントリに分けた方が良かったかもと思ったりもしたが、例えばJavaなんかは内部的には「文字」はUTF-8だったりして入出力と文字エンコーディング変換が深くかか…

各言語の標準エラー出力

そういえば今まで意識しなかったな、ということで、各言語の標準エラー出力を使ってみたメモ。 環境 手元にあるものということで、環境は以下のものに限定する。 CentOS 7 Java (openjdk version "1.8.0_151") C (gcc (GCC) 4.8.5) -std=gnu11でコンパイル C…

DateTimeクラスのdiffメソッドの罠

PHP

突然ですが、以下のコードの出力結果はどうなると思いますか?ちなみに「invert」というのは、結果が負の場合に「1」それ以外の場合に「0」になるプロパティ。 diff($dt2); $diff2 = date_diff($dt1, $dt2); var_dump($diff1->invert, $diff2->invert); $dt…

各言語でコマンドライン引数を扱う

そういえばやってなかったなということで、各言語でコマンドライン引数を扱うプログラムを書いてみたメモ。 要件は以下の通り。 コマンドライン引数として、3個以上の文字列を与える 標準出力に、以下を順に出力 引数として与えられた文字列を改行区切りで出…

各言語でメッセージダイジェスト

手元にある各言語で、メッセージダイジェストを出力してみたメモ。 要件は以下の通り。 標準入力から、0バイト以上の任意のバイト列が入力される 標準出力に、入力に対する以下のハッシュ文字列を改行区切りで出力する MD5 SHA-1 SHA-224 SHA-256 SHA-384 SH…