php: Fatal Error をキャッチするには

PHPはFatalエラーはキャッチできないと聞いて「そうだっけ?」と色々調べてみました。

結果Fatalエラーだと、どの段階で止まったというのは分からない、、という感じなんですかね?

http://keicode.com/cgi/php-error-handling.php

この辺をみると、 register_shutdown_function() で Fatal Error を捕まえられるらしいが、実質何もしないときと情報源が変わらず、せいぜい後処理をしてから終了できるくらいのようだ。
作ってみる

みたいです。
http://bmath.org/wordpress/?p=1118

MySQLのrootパスワードを忘れて再更新

パスワードを忘れたというか、MySQLをインストールした時に設定したパスワードを入れてもログインできない!まあ同じ様なものですが(笑)

rootパスワードをリセットする方法、忘れがちなのでメモっておきます。

http://open-groove.net/mysql/forgetting-mysql-rootpass/

スタンダードな対処法
1.MySQLインスタンスを停止する。
2.認証スキップモードで起動する。セーフモード、ともいうらしい。

# /usr/bin/mysqld_safe –skip-grant-tables &

※mysqld_safeのパスは標準では上記のようになると思うが、環境によっては違うかも。

3.認証なしでログイン。

# mysql -u root

4.rootパスワードを更新

mysql > UPDATE mysql.user SET password=PASSWORD(‘new-passowrd’) WHERE User= ‘root’;
mysql > FLUSH PRIVILEGES;
mysql > ¥q

剣呑剣呑。

vimでコピペ。タブが改行ごとに追加されないようにするには。

vimでphpを書いていて、ソースをどこからかコピペしたい時、普通にペーストするとタブが改行毎について、だーっと右に流れていくことがあるんですよね。
その場合にどうコピペすればよいのか忘れがちなのでメモ。

:set paste

でペーストモードに入ってからペーストする。

セキュアな PHP アプリケーションを作成するための 7 つの習慣

IBMのPHP記事は衒いがなく結構すきです。

セキュアな PHP アプリケーションを作成するための 7 つの習慣
http://www.ibm.com/developerworks/jp/opensource/library/os-php-secure-apps/

    入力を検証する
    ファイルシステムを保護する
    データベースを保護する
    セッション・データを保護する
    XSS (Cross-Site Scripting: クロスサイト・スクリプティング) の脆弱性から保護する
    フォームへの投稿を検証する
    CSRF (Cross-Site Request Forgeries: クロスサイト・リクエスト・フォージェリー) から保護する

復習復習っと。

PHPの基礎2:入力値は検証して使う

GETやPOSTで送られてきたデータなどは悪意が籠もったデータと考え、出来る限り検証して使う。

よくあるのは、入力値が数値の場合は、数値以外を受け付けないことだろう。


if (preg_match("/^[0-9]+$/", $_POST['id'])) {
$id = $_POST['id'];
}

フレームワークだと便利なvalidationが大体ついてますね。
ホワイトリストを通してデータを使うことを忘れずに!

PHPの基礎1:PHPでサニタイジングといえばhtmlspecialchars

最近PHPをペラ1で書くことが多く、そうはいってもしっかりしなければいけない部分が多いので、基礎のおさらいをメモっておきます。

PHPでサニタイジングっていったらhtmlspecialcharsです。

http://php.net/manual/ja/function.htmlspecialchars.php

よくあるのは

php5.4でflagが色々増えてますね。
昔は自分で関数つくってやっていたutf系も

ENT_SUBSTITUTE

なんてのが出来てますので、楽になりました。

Provisioning Profileを削除するには

PHPとは全然関係ない、iOSでの開発話なんですが、
Provisioning Profileをインストールしまくって、しかもアプリは同じ名前だしXcode上でどれがどれか分からん!となった時にはいったん全部のProfileを消してしまいます。どうぜDeveloper Siteからダウンロードできるので。

で、インストールされたProvisioning Fileの場所なのですが、

~/Library/MobileDevice/Provisioning Profiles

にあります。
さくっと消してしまいましょう。

JSONのエスケープ

JSONのエスケープについてよく纏められていましたのでメモです。

http://blog.ohgaki.net/json-escape

json_encode関数とjson_decode関数も色々あるんですね。。

MacでHomebrewでPHPをインストール

もうHomebrewを入れたなら、全てHomebrewでやりたい。そんなA型な私でございます。Homebrewは基本macに最初から入っているものはリポジトリにないため、野良リポジトリを追加します。

$ brew tap homebrew/dupes
$ brew tap josegonzalez/homebrew-php

tap がリポジトリを追加するコマンドみたいです。

$ brew options php55

でオプションを確認して必要な物を足しておきます。mysqlerなので

$ brew install php55 –with-mysql

ですね。

で、インストール終了時に色々説明が出るのでメモっておきます。

To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php5_module    /usr/local/opt/php55/libexec/apache2/libphp5.so
The php.ini file can be found in:
    /usr/local/etc/php/5.5/php.ini

✩✩✩✩ PEAR ✩✩✩✩

If PEAR complains about permissions, 'fix' the default PEAR permissions and config:
    chmod -R ug+w /usr/local/Cellar/php55/5.5.5/lib/php
    pear config-set php_ini /usr/local/etc/php/5.5/php.ini

✩✩✩✩ Extensions ✩✩✩✩  

If you are having issues with custom extension compiling, ensure that
you are using the brew version, by placing /usr/local/bin before /usr/sbin in your PATH:

      PATH="/usr/local/bin:$PATH"

PHP55 Extensions will always be compiled against this PHP. Please install them
using --without-homebrew-php to enable compiling against system PHP.

$ brew info php55

でいつでも確認できるみたいですが。。

PEAR,使うかな。brewに全部入ってないかなー。

Spika OSS Messenger APP

http://spikaapp.com/ja/

Spikaは完全オープンソース、MITライセンスのメッセンジャーアプリです。iOS版、Android版、バックエンドシステム全てがMITライセンスで公開されています。 Spikaを利用する事でメッセンジャーやソーシャルアプリの作成にかかる労力を大幅に軽減出来ます。

メッセンジャー系のSDKちょいちょいありますが、オープンソースなのは嬉しいですね。ちょっと入れてみようかな、という気になります。