php


【XAMPP】

 apacheやMySQLなど一括で環境構築できるので便利
 ※Skype起動中はapacheのサービスが起動できない。なにかが競合してる?

【エスケープ文字の処理について】


文字列をスラッシュでクォートする

string addslashes ( string $str )


参照:http://jp2.php.net/manual/ja/function.addslashes.php

データベースへの問い合わせなどに際してクォートされるべき文字の前に バックスラッシュを挿入した文字列を返します。 クォートされるべき文字とは、シングルクォート('), ダブルクォート("),バックスラッシュ (\) ,NUL (NULL バイト) です。

addslashes() の使用例は、 データベースにデータを登録するときです。例えば、 O'reilly という名前をデータベースに挿入するには、 エスケープする必要があります。ほとんどのデータベースでは O\'reilly という具合に \ を使用します。これはデータベースにデータを格納する場合のみ必要です。 追加される \ は挿入されません。 PHP のディレクティブ magic_quotes_sybase を \ にすると、' はもうひとつの ' でエスケープされます。

PHP ディレクティブ magic_quotes_gpc はデフォルトでは on で、 全ての GET、POST、COOKIE データについて基本的に addslashes() を実行します。 magic_quotes_gpc によってすでにエスケープされた文字列に対して addslashes() を実行しないでください。 さもないと、重複してエスケープされてしまいます。 関数 get_magic_quotes_gpc() はこれを確認するのに役立つかも知れません。

クォートされた文字列のクォート部分を取り除く

string stripslashes ( string $str )


注意: magic_quotes_sybase が on の場合はバックスラッシュは取り除かれず、そのかわりに 2 つの アポストロフィが 1 つに置き換えられます。
stripslashes() の使用例は、PHP ディレクティブ magic_quotes_gpc が on (デフォルトでオン) かつ、 データをエスケープして (データベースのような) ある場所に挿入していない場合です。 例えば、単純に HTML フォームからのデータを直接出力するような場合です。

上記を使わずとも、GETやPOSTで送信された値は、php.iniの設定で自動でエスケープしてくれる。
GPC(Get/Post/Cookie)処理に関するmagic_quotesの設定を行います。 magic_quotesがonの場合、'(シングルクオート)、"(ダブルク オート)、\(バックスラッシュ) 、NULLには全て自動的にバックスラッ シュでエスケープ処理が行われます。

なのですが!!

addslashesdでは、Shift-JISで、SQLインジェクションが可能になるようなので、
(0x5C文字がエスケープされないらしい)
mysql_real_escape_string、pg_escape_stringを使用しましょう。
参照:http://blog.ohgaki.net/addslashesa_la_a_a_ua_sa_pa_fa_a_bc_a_ma

とのことだが、mysql_real_escape_stringでも、やっぱりダメらしい。。。
だから、Prepared Statementsでってことだけど、
やっぱり、一部問題があるらしい・・
参照:http://d.hatena.ne.jp/hoshikuzu/20060211#P20060211PHPSQLINJECTION

magic_quotes_gpcディレクティブ = ON
ほとんど至るところで、自動的にaddslashesしているようなもの・・・ってことは?
使っちゃダメって事ですね

結局、Shift_JISは使うなと・・・
日本語(マルチバイト文字?)って、いたるところで、問題になりますね・・・
日本人に生まれて、よくなかったーーーーーーー!!


【相対パスについて】

includeとかrequireする時に、相対パスで設定したっくて、

www
 index.php
 folder1
  aaa.php
 folder2
  bbb.php

って構成の時に
aaa.phpでbbb.phpをrequireしたいとするじゃないですか、
 require("../folder2/bbb.php")
って、したらよさそうですが・・・
エラーになっちゃいます><
「実行したファイルのあるディレクトリが常に実行時のカレントディレクトリになる」っていう規則があるそうで・・・
参照:http://www.hoge256.net/2007/08/61.html

解決方は、参照しているファイルのディレクトリを基にパスを取得することで回避することができ、
具体的には dirname(__FILE__) を使うらしい。
 require(dirname(__FILE__) . "/../folder2/bbb.php");
って感じ?


【セッションにオブジェクトをぶち込む!!】

serializeすれば、いいそうだ。
取りだすときは、
unserializeを使うそうだ・・・

$_SESSION["obj"] = serialize($object);
$object = unserialize($_SESSION["obj")];

最終更新:2010年01月19日 08:52