2007年09月21日
予期しないエスケープ文字
フォーム書き込み時に勝手に「¥」(バックスラッシュ)が付いてしまった。。。
例えば、「パソコン」→「パソ¥コン」、「表示」→「表¥示」のような感じで。
これは、PHPの設定ファイル(PHP.ini)の「magic_quotes_gpc」という項目がONに設定されているためだそうです。
「magic_quotes_gpc」がON設定となっている場合、フォームから受け取った文字の中に「¥(バックスラッシュ)」「"(ダブルクォーテーション)」「'(シングルクォーテーション)」があった際、その後ろに自動で「¥」をつけるのです。こちらは「エスケープ処理」と言い、悪意あるユーザに不正な処理(SQL injection なんて有名ですね)をさせないためにも有効な設定となっています。
んで、S-JIS の文字コードには「0x5c」を含むものがあり、「0x5c」が「¥」と同じ文字コードであることがそもそもの問題なのです。たとえば、「パソコン」の「ソ」のコードは「0x83 0x5c」なので、「パソコン」→「パソ¥コン」となるわけですね。
原因が分かれば対処方法もおのずと見えてきます。まず、真っ先に思いつく方法として「PHP.ini」内の「magic_quotes_gpc」を「OFF」にすることが挙げられます。簡単ですが、問題もあって・・・。まず、レンタルサーバなど共用にてWebサーバを使用している場合にはこの設定は勝手に書き換えることができません。自分だけの都合で他人様に迷惑かけちゃだめですよね。まぁ、可能性としてサーバの管理者が「Apache」の「AllowOverride」の設定を「ALL」にしてくれているならば、「.htaccess」でユーザごとにこの制御が可能です。「.htaccess」ファイルの中に以下の1行を加えて下さい。
php_flag magic_quotes_gpc off
これで一応は解決できるのですが、既述の通りこれではセキュリティに不安が残ります。そこで、次のように不要なときにはバックスラッシュを取り除く処理を加えてやる方法をお奨めします。
if (get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
「stripslashe」はバックスラッシュが取り除かれた文字列を返します(2つ並んだバックスラッシュは1つのバックスラッシュになります)。逆に必要項目にバックスラッシュを加えたい場合は「addslashes」を使用します。こちらはデータベースへの問い合わせなどに際してクォートされるべき 文字の前にバックスラッシュを挿入した文字列を返します、とのことです(PHPマニュアル参照)。
【引用元URL】
PHP実験室
例えば、「パソコン」→「パソ¥コン」、「表示」→「表¥示」のような感じで。
これは、PHPの設定ファイル(PHP.ini)の「magic_quotes_gpc」という項目がONに設定されているためだそうです。
「magic_quotes_gpc」がON設定となっている場合、フォームから受け取った文字の中に「¥(バックスラッシュ)」「"(ダブルクォーテーション)」「'(シングルクォーテーション)」があった際、その後ろに自動で「¥」をつけるのです。こちらは「エスケープ処理」と言い、悪意あるユーザに不正な処理(SQL injection なんて有名ですね)をさせないためにも有効な設定となっています。
んで、S-JIS の文字コードには「0x5c」を含むものがあり、「0x5c」が「¥」と同じ文字コードであることがそもそもの問題なのです。たとえば、「パソコン」の「ソ」のコードは「0x83 0x5c」なので、「パソコン」→「パソ¥コン」となるわけですね。
原因が分かれば対処方法もおのずと見えてきます。まず、真っ先に思いつく方法として「PHP.ini」内の「magic_quotes_gpc」を「OFF」にすることが挙げられます。簡単ですが、問題もあって・・・。まず、レンタルサーバなど共用にてWebサーバを使用している場合にはこの設定は勝手に書き換えることができません。自分だけの都合で他人様に迷惑かけちゃだめですよね。まぁ、可能性としてサーバの管理者が「Apache」の「AllowOverride」の設定を「ALL」にしてくれているならば、「.htaccess」でユーザごとにこの制御が可能です。「.htaccess」ファイルの中に以下の1行を加えて下さい。
php_flag magic_quotes_gpc off
これで一応は解決できるのですが、既述の通りこれではセキュリティに不安が残ります。そこで、次のように不要なときにはバックスラッシュを取り除く処理を加えてやる方法をお奨めします。
if (get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
「stripslashe」はバックスラッシュが取り除かれた文字列を返します(2つ並んだバックスラッシュは1つのバックスラッシュになります)。逆に必要項目にバックスラッシュを加えたい場合は「addslashes」を使用します。こちらはデータベースへの問い合わせなどに際してクォートされるべき 文字の前にバックスラッシュを挿入した文字列を返します、とのことです(PHPマニュアル参照)。
【引用元URL】
PHP実験室
2007年07月07日
URLに自動的にリンクを貼りたい!
掲示板などでテキスト中にURLがある場合、自動的にリンクを貼りたかったが、めっちゃハマったのでココに記述。。。
正規表現を使う事で自動リンクが可能。
この正規表現は全く意味のわからない記号が並んでるので理解できなーい!…のでココでは説明できません。。。
様々なブログやサイトで正規表現について解説されてるので検索して下さい。
今回したかったのはURLの正規表現。
あるサイトを参考にして文中にURLがあった場合自動的にリンクを貼るかテストしてみた。
…でけた…!!
しかーし!URLの中に『-(ハイフン)』があった場合そこからリンクが貼られないではないか!!
ちゅーことで色々なサイト作成者様のお力を借り、自分なりに書き直したのが下です。
<?php
$com = "元気ですかー!! http://www.sample-123.co.jp てすと";
$com = ereg_replace("(https?|ftp)(://[[:alnum:]¥+¥$¥;¥?¥.%,!#~*/:@&=_-]+)","¥¥1¥¥2",$com);
echo $com;
?>
正規表現を使う事で自動リンクが可能。
この正規表現は全く意味のわからない記号が並んでるので理解できなーい!…のでココでは説明できません。。。
様々なブログやサイトで正規表現について解説されてるので検索して下さい。
今回したかったのはURLの正規表現。
あるサイトを参考にして文中にURLがあった場合自動的にリンクを貼るかテストしてみた。
…でけた…!!
しかーし!URLの中に『-(ハイフン)』があった場合そこからリンクが貼られないではないか!!
ちゅーことで色々なサイト作成者様のお力を借り、自分なりに書き直したのが下です。
<?php
$com = "元気ですかー!! http://www.sample-123.co.jp てすと";
$com = ereg_replace("(https?|ftp)(://[[:alnum:]¥+¥$¥;¥?¥.%,!#~*/:@&=_-]+)","¥¥1¥¥2",$com);
echo $com;
?>
2007年07月05日
html拡張子でPHPを実行
.htaccessを使用する。
※ロリポップでは使用可能。さくらインターネット不可。
Apacheを利用しているWEBサーバーで、「.htaccess」使用の許可があれば、この方法が利用できる。「.htaccess」は、サーバーの設定を変更できるファイルという風に考えればよい。
Apacheを使用していない場合は、この方法は使えない。
設定は、非常に簡単で「.htaccess」ファイルに、次のコードを記載してサーバーにアップロードするだけ。(.htaccessにおけるコメントの書き方は、perlと同じく「#」を使います。)
「.htaccess」というファイル名は、Windowsでは作成できませんので、「htaccess.txt」などというファイル名で作成し、アップロード後に変更すればOKです。
# 全てのPHPコードをHTMLのように作成する
AddType application/x-httpd-php .htm .html
これで、拡張子が「.html」と「.htm」のファイルの中に書かれたPHPスクリプトが実行されるようになります。
ロリポップでは、作成した「.htaccess」ファイルを設定したいフォルダにFTPでアップロードし、アップロード後、パーミッションを604に設定する必要がある。
また、「.htaccess」の設置されたディレクトリ、およびそのディレクトリ以下全てのディレクトリに対して、この設定が適用される。
例えば、 『 /abc 』 『 /abc/123 』 『 /456 』 『 /789 』 という4つのディレクトリが有ったとして、.htaccessを 『 /abc 』 に置いた場合、 設定が適用されるのは 『 /abc 』 『 /abc/123 』 の2つのディレクトリになる。
【参考URL】
※ロリポップでは使用可能。さくらインターネット不可。
Apacheを利用しているWEBサーバーで、「.htaccess」使用の許可があれば、この方法が利用できる。「.htaccess」は、サーバーの設定を変更できるファイルという風に考えればよい。
Apacheを使用していない場合は、この方法は使えない。
設定は、非常に簡単で「.htaccess」ファイルに、次のコードを記載してサーバーにアップロードするだけ。(.htaccessにおけるコメントの書き方は、perlと同じく「#」を使います。)
「.htaccess」というファイル名は、Windowsでは作成できませんので、「htaccess.txt」などというファイル名で作成し、アップロード後に変更すればOKです。
# 全てのPHPコードをHTMLのように作成する
AddType application/x-httpd-php .htm .html
これで、拡張子が「.html」と「.htm」のファイルの中に書かれたPHPスクリプトが実行されるようになります。
ロリポップでは、作成した「.htaccess」ファイルを設定したいフォルダにFTPでアップロードし、アップロード後、パーミッションを604に設定する必要がある。
また、「.htaccess」の設置されたディレクトリ、およびそのディレクトリ以下全てのディレクトリに対して、この設定が適用される。
例えば、 『 /abc 』 『 /abc/123 』 『 /456 』 『 /789 』 という4つのディレクトリが有ったとして、.htaccessを 『 /abc 』 に置いた場合、 設定が適用されるのは 『 /abc 』 『 /abc/123 』 の2つのディレクトリになる。
【参考URL】

2007年07月02日
getimagesize();「画像サイズを取得」
array getimagesize ( string ファイル名[, array &imageinfo] )
ファイル名で指定した画像の大きさを取得し、画像ファイルの「型」とIMGタグで使用される画像の「高さ」と「幅」を表す文字列を返します。
ファイル名が存在しない(または画像でない)場合にFALSEを返し、E_WARNINGレベルのエラーが発生します。
画像ファイル名に半角スペースが含まれる場合はエンコードする必要があります。
Ex. photo desu.gif→photo%20desu.gif
【返り値の連想配列】
[0] 画像の幅(px)
[1] 画像の高さ(px)
[2] 画像の種類(↓表示される数字の意味)
※実際表示される数字は1桁の場合、数字の前に『0』は付きません。
01 = GIF
02 = JPG
03 = PNG
04 = SWF
05 = PSD
06 = BMP
07 = TIFF(intel byte order)
08 = TIFF(motorola byte order)
09 = JPC
10 = JP2
11 = JPX
12 = JB2
13 = SWC
14 = IFF
15 = WBMP
16 = XBM
[3] width="xxx" height="xxx" (IMGタグで直接利用できる文字列)
[bits] RGB画像の場合に3、CMYK画像の場合に4
[channels] カラーの数
[mime] 画像のMIMEタイプ
【サンプル】
<?
list($width, $height, $type, $attr) = getimagesize("test.jpg");
echo "$width<br>¥n";
echo "$height<br>¥n";
echo "$type<br>¥n";
echo "$attr<br>¥n";
echo "<img src=¥"test.jpg¥" ".$attr."><br>¥n";
//<img src="test.jpg" width="640" height="480">
print_r(getimagesize("test.jpg"));
?>
【参考URL】
http://f32.aaa.livedoor.jp/~azusa/index.php?t=php&p=image
ファイル名で指定した画像の大きさを取得し、画像ファイルの「型」とIMGタグで使用される画像の「高さ」と「幅」を表す文字列を返します。
ファイル名が存在しない(または画像でない)場合にFALSEを返し、E_WARNINGレベルのエラーが発生します。
画像ファイル名に半角スペースが含まれる場合はエンコードする必要があります。
Ex. photo desu.gif→photo%20desu.gif
【返り値の連想配列】
[0] 画像の幅(px)
[1] 画像の高さ(px)
[2] 画像の種類(↓表示される数字の意味)
※実際表示される数字は1桁の場合、数字の前に『0』は付きません。
01 = GIF
02 = JPG
03 = PNG
04 = SWF
05 = PSD
06 = BMP
07 = TIFF(intel byte order)
08 = TIFF(motorola byte order)
09 = JPC
10 = JP2
11 = JPX
12 = JB2
13 = SWC
14 = IFF
15 = WBMP
16 = XBM
[3] width="xxx" height="xxx" (IMGタグで直接利用できる文字列)
[bits] RGB画像の場合に3、CMYK画像の場合に4
[channels] カラーの数
[mime] 画像のMIMEタイプ
【サンプル】
<?
list($width, $height, $type, $attr) = getimagesize("test.jpg");
echo "$width<br>¥n";
echo "$height<br>¥n";
echo "$type<br>¥n";
echo "$attr<br>¥n";
echo "<img src=¥"test.jpg¥" ".$attr."><br>¥n";
//<img src="test.jpg" width="640" height="480">
print_r(getimagesize("test.jpg"));
?>
【参考URL】
http://f32.aaa.livedoor.jp/~azusa/index.php?t=php&p=image
2007年06月20日
phpMyAdminログイン時にパスワード
phpMyAdminを用いてデータベースを操作するための認証を設定します。
【45行目】
43 * characters.
44 */
45 $cfg['blowfish_secret'] = '';
↓
43 * characters.
44 */
45 $cfg['blowfish_secret'] = 'nifty';
・45行目の『nifty』と書かれた部分はphpMyAdminへログインするためのパスワードを暗号化するフレーズとなっております。お客様にて任意の文字列に置き換えてください。
・前後にある『''』は消さないでください。
【71行目】
69 // used for all relational
70 // features (pmadb)
71 $cfg['Servers'][$i]['auth_type'] = ''; // Authentication method (config, http or cookie based)?
↓
69 // used for all relational
70 // features (pmadb)
71 $cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)?
・前後にある『''』は消さないでください。
【45行目】
43 * characters.
44 */
45 $cfg['blowfish_secret'] = '';
↓
43 * characters.
44 */
45 $cfg['blowfish_secret'] = 'nifty';
・45行目の『nifty』と書かれた部分はphpMyAdminへログインするためのパスワードを暗号化するフレーズとなっております。お客様にて任意の文字列に置き換えてください。
・前後にある『''』は消さないでください。
【71行目】
69 // used for all relational
70 // features (pmadb)
71 $cfg['Servers'][$i]['auth_type'] = ''; // Authentication method (config, http or cookie based)?
↓
69 // used for all relational
70 // features (pmadb)
71 $cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)?
・前後にある『''』は消さないでください。