PHPのissetにひそむ罠?
PHPを使っている人ならしっているであろう、issetという関数。
読んで字のごとく、変数がセットされているかどうかを確認する関数です。
・・・と、つい最近まで信じていました。
たとえば、以下のような時
$data = aray( 'a' => 'hoge', 'b' => NULL ); print (isset($data['a'])) ? "a:TRUE" : "a:FALSE"; print (isset($data['b'])) ? "b:TRUE" : "b:FALSE"; print (isset($data['c'])) ? "c:TRUE" : "c:FALSE";
「a:TRUE」「b:TRUE」「c:FALSE」
となると思っていたのですが、実際は
「a:TRUE」「b:FALSE」「c:FALSE」
となります。
そんな馬鹿なと思って公式を確認してみると、
「変数がセットされており、それが NULL でないことを調べます。 」
と、しっかり書いてあります。
気づいた瞬間、「マジですか。。。」と、ちょっと口がポカーンとなりました。
多分そこを勘違いしている人はかなり多いと思うので、もし知らなかったという人は注意が必要です。
この記事の続き?を書きました。
PHPのissetとarray_key_exists
簡単にローカルでSMTPサーバを動かす
私は今、XAMPPでローカルサーバを立ててWebアプリケーションの開発をしているのですが、その時にメール送信のロジックを組むことも多々あります。
代表的なのだと、メールフォームだとか。
ですが、XAMPP単体だとメール送信は当然できないので、別でSMTPサーバがいるのです。
自分の使っているメールのSMTPサーバでもいいのですが、SMTP-AUTHとかが必要になるとややこしく。
そんな時に役立つmelonというツールがあります。
使い方は超簡単で、
1.ダウンロードして解凍したファイルのmelon.exeを起動させる
2.php.iniなどのSMTPサーバを「127.0.0.1」に、ポートを「25」に設定
するだけです。
難しい設定も何もなくメールの送信が可能なうえ、他にも機能が豊富ですので試してみるのもいいかもしれません。
Webアプリケーションを作る時、セキュリティ対策してますか?
Webアプリケーションを作るにあたって、セキュリティ対策は切り離せないです。
自分のPCであれば、
「後はセキュリティソフトにお任せ!」
で済んだりするのですが、Webアプリケーションだと制作者がその対策を直接しないといけないです。
一時期mixiで有名になった「ぼくはまちちゃん!」騒動の元凶である、クロスサイトスクリプトフォージェリの脆弱性なんかは、うっかりミスでおこってしまう可能性があるので恐ろしいです。
とはいえ、正直何からしたらいいかわからないという人(私含む)に朗報!
こんな素敵な記事がありました。
これで完璧というわけではないですが、Webアプリケーションを作っている人は一度目を通すといいと思います。
知っている人も、再確認の意味で見て損はないのではないかと。
MTにSyntaxHighlighterを導入する1
※2009年9月9日、IE7で確認したところ、ソースコードの領域が2つ出現するバグが発生していましたので、急遽SyntaxHighlighterを解除しました。
また手すきの時にでも調整します。
※2009年9月10日に調整しました。
その後の調整の話を書きました。
ブログを書き始めると、ソースコードとかを書くことも多くなるかなと思い、自動でソースの色分けしてくれるプラグインか何かがないかなーと探してたら、ありました。
SyntaxHighlighterというJavascriptを用いたものです。
Perlとか使ってないので、導入もしやすいです。
対応している言語は
@C++
@C#
@CSS
@Delphi
@Java
@Java Script
@PHP
@Python
@Ruby
@Sql
@VB
@XML/HTML
のようで、十分なカバー量です。
参考:ソースコードを綺麗に表示するJS「dp.SyntaxHighlighter」 – Caraldo.net
ダウンロードして解凍したら、
・css
・Scripts
・Uncompressed
のフォルダができます。
CSSはそのまま読み込ませるか、自分のベースに使っているCSSに追記するカタチでも。
あと使うのは、Scriptsに入っているJSファイル群です。
言語別に分かれているので、必要な分だけアップします。
shCore.jsは必須です。
アップしたら、ヘッダーに記述。
私はMovableTypeのヘッダーテンプレートに
<script type="text/javascript" src="<$mt:BlogURL$>common/js/shCore.js"></script> <script type="text/javascript" src="<$mt:BlogURL$>common/js/shBrushJScript.js"></script> <script type="text/javascript" src="<$mt:BlogURL$>common/js/shBrushPhp.js"></script> <script type="text/javascript" src="<$mt:BlogURL$>common/js/shBrushCss.js"></script> <script type="text/javascript" src="<$mt:BlogURL$>common/js/shBrushSql.js"></script> <script type="text/javascript" src="<$mt:BlogURL$>common/js/shBrushXml.js"></script>
という風に追記。
また、
<script type="text/javascript"> window.onload = function () { dp.SyntaxHighlighter.ClipboardSwf = 'js/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('code'); } </script>
とヘッダーに記述してwindow.onLoadイベントで呼び出してあげる必要があるのです。
が、例えばbodyにonLoadイベントがあると、それと干渉してしまいます。
MTの仕様なのか、私のお借りしたテンプレートがそうなのかわからないのですが、bodyにonLoadイベントがあったので、はじめはうまく動いていなかったです。
なので、↑のコードを
<script type="text/javascript"> function SyntaxHighlighter() { dp.SyntaxHighlighter.ClipboardSwf = 'js/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('code'); } </script>
こんな感じに少し変えて、他のbodyにあったonLoadイベントの後に
<body onload="hogehoge();SyntaxHighlighter();">という風に記述すると動くようになります。
あとは変換したいところを
<pre name="code" class="xml"> </pre>
でくくってあげると完了です。
class名は、そのソースコードを色分けする言語名です。
http://code.google.com/p/syntaxhighlighter/wiki/Languages
ここのAliasesの欄を参考に、クラス名に必要なクラスを指定してあげてください。
auの携帯で、PHPからprintされた1バイトの文字は出力されるようになったのかな?
今でもそうなのか分からないのですが、1年前にハマった現象のお話。
シンプルだったauのPOST問題 – 畝田ブルースマンの休憩室
↑このブログの記事にもあるのですが、私も携帯サイトのメールフォームを作っている時に1バイトの
print出力ではまったことが。
その時はこんな感じで
<input name="shop_id" value="<?php print $shop_id; ?>" type="hidden" />
みたいな感じで書いていたんですが、shop_idが飛んでくる時と飛んでこない場合があって、おかしいおかしいと思っていたら、どうも1バイトのコードが飛んでこないことが判明。
PHPがおかしいのかと思ったりもしたけれど、softbankやdocomoだと問題なく、auだけでおこる現象。
最終的に、shop_idをゼロパディングして2桁にするようにして解決したんだけれど、この記事を書こうと思って調べてたらこんな記事が。
au携帯のSSLで文字化け – LAPISLAZULI HILL#Hatena
output_bufferingをonにするなんて想像しなかったので、私の時の問題がこれで解決したのかどうかはわからないのですが、もし同じ問題に直面した人は試してみるといいと思います。
- 脱出ゲームを作成しました
- Studio Yuksのサイト制作のお手伝いをさせていただきました
- よみがな.netを公開しました
- Slug or PostIDプラグインがバージョン1.0になりました。
- お問い合わせフォームへの連投を防ぐ方法+α
- phpMyAdminのsetup.phpに脆弱性があるみたいです
- 1つのデータベースに複数のWordPressをインストールする方法
- 仕事とプライベートで使っているマウスをご紹介
- WordPressでiFrameが消えないようにする記述が必要なくなったようです
- CSS3で横並びのメニューを簡単に作る方法
- JavaScriptでブラウザのテキスト選択を解除する
- PHPでurlの日本語パラメータをGETで受け取ると文字化けする場合
- FFFTPでファイルをダウンロードしたのに、ファイルがその場所になかった時
- PHPのSmartyでゼロパディングする
- Windows7にIllustratorCS2入れたけど日本語入力ができなかった
- お問い合わせフォームへの連投を防ぐ方法+α
- 投稿記事のURLにスラッグかPostIDを使うプラグイン
- WordPressでiFrameが消える時の解決方法
- EC-CUBE2.11.0とMySQLの組み合わせで文字化けする時の解決方法
- IEとFFでgetElementByIdの挙動がほんの少し違う罠
- HTML+CSS (8)
- JavaScript (12)
- PHP (21)
- PostgreSQL (4)
- WordPress (8)
- WordPressプラグイン (1)
- Movable Type (13)
- Photoshop (2)
- Illustrator (2)
- Firefox (5)
- ツール (2)
- 雑記 (23)
- 未分類 (3)
- Android (1)