PHPExcelはExcelファイルの入出力ができる便利なライブラリですが、少し前のものだと、PHP7でエラーが出てしまうことがあるようです。
swichやwhile文で使うべきbreakがif文などにあるとこのエラーが出ます。PHP5系まではそのまま通ってしまいます。 続きを読む PHPExcelで Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ context と表示される
PHPExcelはExcelファイルの入出力ができる便利なライブラリですが、少し前のものだと、PHP7でエラーが出てしまうことがあるようです。
swichやwhile文で使うべきbreakがif文などにあるとこのエラーが出ます。PHP5系まではそのまま通ってしまいます。 続きを読む PHPExcelで Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ context と表示される
勉強用インストールして放置していたWordpressにバージョンアップのお知らせが来たので、アップデートしようとしたところ、ログイン画面(wp-login.php)が500 Internal Server Errorでログインできない現象があったので、メモです。 続きを読む WordPressのログイン画面が500 Internal Server Errorでログインできない
PHPでディレクトリを再帰的に作成するときのメモです。
‘dir1/dir2/dir3’のような深いディレクトリを一度で作成する場合はmkdirに第3引数にtrueをつけて使用します。
$dirName = 'dir1/dir2/dir3';
$defaultUmaskNum = umask();
umask(0);
mkdir($dirName,0755,true);
umask($defaultUmaskNum);
mkdirの第2引数はパーミッションの設定です。数値で指定します。’0755’などのように文字列で指定するとエラーは出なくとも、おかしなパーミッションになることがあります。
また、umaskはデフォルトのパーミッションの設定です。mkdirに第2引数からumaskの値を引いた値が設定されるので今回は便宜的に0にして、処理後に戻しています。
PHP公式ではパーミッションの設定はumaskを変更するのではなく、chmodが推奨されていますが、作成される全てのディレクトリのパーミッションを同時指定することはできません。
デバッグ用途などに使います。
表示したいディレクトリに「.user.ini」を設置します。
display_errors = On error_reporting = E_ALL & ~E_NOTICE
error_reportingの値は適宜変更して下さい。設置したディレクトリとその下層ディレクトリで有効です。
coreserverのPHPはここ数年で変更がありましたので、過去の対応とは異なることがあります。これからも変化があるかもしれませんので、できれば公式の情報をあたることをオススメします。
多次元配列の比較のための関数のメモです。
比較は緩やかな比較(==)をしています。
左辺のキーと値で比較しています。左辺にあるものが右辺にあれば一致するとみなし、右辺にのみあるキーと値は無視します。
左辺にのみ存在する値は差分として表示します。
過不足無く配列の一致を確認する場合は、面倒ですが、左右入れ替えて実行します。 続きを読む (PHP) 多次元配列の比較
目的別にPHPのエラーを別の場所に保存したい場合などに使います。
php.iniを編集せずに一時的に変更できます。ただし、syntax errorなどはini_set実行前に評価されるため、通常の場所に保存されます。
//画面にエラーを表示させない
ini_set(‘display_errors’, 0);
// ログに記録する
ini_set(‘log_errors’, ‘on’);
// ログの保存先
ini_set(‘error_log’, ‘/log/php_error.log’);
通常とは違う場所(ファイル)に分けて保存できます。書き込みができるよう、ディレクトリのパーミッションは適宜変更してください
文字列から改行を削除します。
ご存じの通り、改行コードはUnix系がLF(\n)のみ、DOS系(Windows系)がCR+LF(\r\n)、Mac系がCR(\r)のみとなっています。
PHPでこれらを置換しよう思った場合、改行コードがいずれか一つであることが明確なら良いのですが、なかなかそうはいきません。
置換に使う関数はいくつかありますが、str_replaceとmb_ereg_replaceを比較しました。str_replaceは文字列の単純な置換を、mb_ereg_replaceはマルチバイト対応、正規表現で一致する文字列の置換を行います。
改行の消去と置換では微妙にコードに違いが出ますが、今回は半角スペースに置換しました。
比較したコードは以下の通りです。
//元の文字列:$original
//#1 mb_ereg_replace 一つずつ置換
$str1 = mb_ereg_replace("\r\n","\n",$original); //CR+LFをLFに
$str1 = mb_ereg_replace("\r","\n",$str1); // CRをLFに
$str1 = mb_ereg_replace("\n"," ",$str1);//LFを半角スペースに
//#2 mb_ereg_replace 3通りを置換
$str2 = mb_ereg_replace("\r\n|\n|\r"," ",$original);
//#3 str_replace 一つずつ置換
$str3 = str_replace("\r\n","\n",$original); //CR+LFをLFに
$str3 = str_replace("\r","\n",$str3); // CRをLFに
$str3 = str_replace("\n"," ",$str3);//LFを半角スペースに
//#4 str_replace 3通りを置換
$str4 = str_replace(array("\r\n","\n","\r")," ",$original);
同じ文章(約40KB)を1000回ほど置き換え、時間を計測しました。文字列の置換結果はいずれも同じですが、かかった時間はかなり違いました。
#1 : 0.92秒
#2 : 0.30秒
#3 : 0.11秒
#4 : 0.09秒
やはりstr_replaceは高速です。正規表現は汎用性も高く便利な機能ですが、時間はどうしてもかかってしまいます。mb_str_replaceのような関数が標準であると便利だと思います。
CMSのJoomla!を使う機会があったので紹介です。
WordPressなどでは、、投稿や記事の中でPHPを実行するプラグインや拡張機能では通常evalコマンドでPHPが実行されます。 続きを読む JoomlaはPHPをevalでなく直接実行できる
PHPでPDFを動的に生成するライブラリ「TCPDF」のメモです。
標準で用意されているフォント以外を使う方法はWebで検索すると多数紹介されていますが、TCPDFの最新版(今回は6.2.3)でエラーが出てしまったので修正点を紹介します。 続きを読む (PHP) TCPDFで外部フォントの指定(addTTFfontの修正)
PHPで全角半角混じった文字のバイト数(≒幅)の処理のための関数のメモです。
shift-jisなら全角は2バイトと決め打ちしても良さそうですが、主流のUTF-8では全角は3バイト(一部2バイト)で、見た目とバイト数は一致しません。 続きを読む (PHP)mb_strwidthとmb_strimwidth