PHP

PHPのdate関数を実行した場合にタイムゾーンの警告が表示される場合の対策方法

管理しているサイトが最近重くて仕方がないので、サーバーを移転させて表示確認をしていたところ、PHPのdate関数の箇所で以下のような警告エラーが表示されていました。

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /****/****/****/index.php on line 79

続きを読む

WordPressのプラグイン関数など、出力結果を取れない場合でもキャッシュさせる方法

このサイトではないんですが、別に設置したWordPressにRSSImportプラグインを入れてRSSフィードを表示させてみました。

設置しているのがあまり性能の良くないサーバなので、せめてこういったフィードの結果などはキャッシュさせておいて、1時間に1度程度リフレッシュするようにしようかと。多少なりともパフォーマンスが上がるかなと思いまして。

そこで手軽なところでPEAR::Cache_Lite(もちろん他の方法でもかまいませんが)を使って出力をキャッシュしようとしたのです。が、RSSImportには戻り値がなく、直接文字列が出力されてしまうので出力内容を得ることができないという非常事態に。

<?php RSSImport(5, 'RSSフィードのURL'); ?>

テンプレ内でこれを実行した瞬間にもう画面に出力されてしまうので、キャッシュしようがないのでした。これだとRSSImportは毎回実行されてしまいます。例えばWordPressの記事タイトルを得る wp_title の第2引数のように、直接出力するか戻り値のみ得られるようにするか選べればいいんですが、それっぽいオプションもないようですし… これについてはキャッシュするのを諦めるしかないかもです。

一旦、$str = RSSImport(…) みたいな感じで、出力結果を変数に入れることができればいいんだけどなあ… プラグインの中身は触りたくないしなあ… と思っていたらアッサリ見つかりました(笑)

続きを読む

PHPでクォーテーションが勝手にエスケープされてしまう時は

PHPでフォームから送信された文字列中にシングルクォーテーション( ' )やダブルクォーテーション( " )などの文字を含む時、サーバによって、バックスラッシュでエスケープされたりされなかったりします。

例えばフォームに「Let's note」とか入力してサブミットして、次の画面でその内容を表示しようとしたら、「Let\'s note」という感じでバックスラッシュ(または円記号)でエスケープされてしまうのです。

そして、その値がフォームに入ったまま送信してしまうと、「Let\\\'s note」みたいに今度はバックスラッシュ自体もエスケープされ、バックスラッシュが大増殖してしまうのです。

先日またひっかかりました…orz フォーム作るたびにハマってしまって、毎回「どうやるんだっけな」と調べてるような気がするのでメモしときます。

続きを読む

PHPでスマートにスワップ(値の入れ替え)をする方法

PHPに限らずスワップ(値の入れ替え・交換)は頻繁に使いますが、定番の書き方といえばこんな感じですよね。

$hoge = 'hoge';
$fuga = 'fuga';

// swap
$temp = $hoge;
$hoge = $fuga;
$fuga = $temp;

説明するまでもないですが、テンポラリ変数(この場合 $temp)を利用して一時的に$hogeの値を$tempに退避させ、$hogeに$fugaの値をコピー、最後に$fugaに$temp(元々の$hogeの値)を入れることで値が入れ替わるという単純明快な書き方です。これはもう、僕も昔から、それこそBASICでプログラミングの勉強というのを始めた頃から使っていた方法です。

今までこれ以外のスワップの書き方なんて考えたこともなかったんですが、PHPだと1文で済ませることができるんですね。有名なテクニックみたいですが、僕はPHP歴はまだそれほどでもないし、ちょっと「ほほう」とか思ったので(笑)

続きを読む

PHPで日本語ドメインを扱う方法(Punycode変換)

先日、日本語ドメインを扱うお仕事があったんですが、その際 Punycode(ピュニコード)でURLが渡された場合に日本語ドメインに変換して表示したいという要件がありました。

具体的にはこんな風に相互に変換する処理です。ちなみに、このドメインは取得してませんのであしからず(笑)

デザインビッツ.com ⇔ xn--eck9a0bel8e7k.com

これまで僕は日本語ドメインを使ったことがなくて、そのうちまた扱う時にスッカリ忘れてしまってそうなので、メモということで。対象言語はPHPです。

続きを読む