入力チェック
// 入力チェック
if ( strlen( $PARAM['key'] ) > 0 ) {
//エラー処理
}
// 100文字以内チェック
if ( strlen($PARAM['key']) > 100 ) {
//エラー処理
}
// 半角数値チェック
if ( mb_ereg ( '[^0-9]', $PARAM['key'] ) ) {
//エラー処理
}
// 半角英数チェック
if ( mb_ereg ('[^0-9a-zA-Z]', $PARAM['key'] ) ) {
//エラー処理
}
// メールアドレスチェック
if ( !(ereg("^[^@]+@[^.]+\..+", $PARAM['mail'] ) ) ) {
//エラー処理
}
Smartyでcompile_dirに作成されるキャッシュを削除する
PHPでSmartyを使っていてWindows環境では問題なかったんですが、
Linux環境にしたらテンプレートを修正したものがcompile_dirに
反映されなくなってしまい、いちいち削除してましたが、
とてもやってられないので開発中だけでも毎回compile_dirに
コンパイルしなおすようにしました。
サンプルプログラム
//Smarty初期化
$o_smarty = new Smarty();
$o_smarty->template_dir = './templates/keitai/';
$o_smarty->compile_dir = './templates_c/keitai/';
//debug用 compile_tplの中をクリアする
$o_smarty->clear_compiled_tpl();
PHPインストール後のPostgresモジュールインストール方法(Linux)
LinuxでPHPをインストールすると、後からDBをmysqlからpostgres
に変更することになって困ったことはりませんか?
※Linuxのみで、Windowsでは関係ありません。
その場合のモジュール追加方法をPostgreを例に説明いたします。
1.PHPソースファイルにあるextensionフォルダに移動します。
# cd /usr/local/src/php/php-5.2.1/ext/pgsql
2.phpizeを実行し、configureファイルを作成します。
# phpize
3.configureを実行
# configure --with-pgsql
4.makeを実行
# make
5.インストール
# su
# make install
これで pgsql.soファイルが作成されました。
作成された場所は
/usr/local/lib/php/extensions/no-debug-non-zts-20060613
にあります。
※環境によってフォルダ名が変わります。
6.私の場合は、 PDOを使っていたので同様に pdo_pgsqlについても実行しました。
# cd /usr/local/src/php/php-5.2.1/ext/pgsql
# phpize
# configure --with-pdo-pgsql
# make
# su
# make install
7.次にphp.iniファイルを編集します。
; extensionsの置かれている場所
extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20060613
; 利用するextension
extension = pgsql.so
extension = pdo_pgsql.so
8.apacheを再起動してください。
(参考サイト)
http://www.aglabo.com/agl/proevo/PHP/install/ext-pgsql.html
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28902&forum=10&7
http://ml.php.gr.jp/pipermail/php-users/2002-August/009435.html
Linux(CentOS)へのPHP5インストール
(1)ソースコードを入手する
以下のURLから最新安定版をダウンロードしてください
http://www.php.net/downloas.php
(2)コンパイル、インストール
ファイルを移動させます
$cd /home/hoge /usr/local/src
解凍します
$ tar zxvf php-5.1.1.tar.gz
$ cd php-5.1.1
$ ./configure --with-apxs2=/usr/sbin/apxs --with-zlib --enable-mbregex --enable-mbstring --enable-trans-sid --enable-soap --with-xmlrpc --with-xmlreader
$ make
$ su
# make install
これでインストール完了です。
エラーメッセージが出ていないことを確認してください
(3)php.iniファイルを設定する
アーカイブ内であらかじめ用意されている「php.ini-dist」をコピーして
「php.ini」に名前変更し、このiniファイルを「/usr/local/lib」ディレクトリ
に移動します。
$ cp php.ini-dest /usr/local/lib/php.ini
php.iniファイルの内容を変更します
454: doc_root="/usr/local/apache2/htdocs"
461: extension_dir="/usr/local/lib/php/ext"
444: include_path=".:/usr/local/include/php:/usr/local/lib/php:"
101: output_buffering=On
115: output_handler=mb_output_handler
433: default_charset=Shift_JIS
1091: mbstring.language=Japanese
1096: mbstring.internal_encoding=EUC-JP
1099: mbstring.http_input=auto
1103: mbstring.http_output=EUC-JP
1110: mbstring.encoding_translation=On
1114: mbstring.detect_order=auto
1118: mbstring.substitute_character=auto
1129: mbstring.script_encoding=EUC-JP
(4)PHPとApacheとの連携を行う
httpd.confを修正します
780: AddDefaultCharset none
875: AddType application/x-httpd-php .php
※PHP4からPHP5にバージョンアップをする場合、PHP5インストール時に
httpd.confへモジュールが自動的に書き込まれるのですが、
Apacheの設定で conf.d フォルダに php.confファイルを読込んいる場合があります。
その場合、php.confファイルの修正が必要になりますので注意してください。
(5) Apacheを起動(再起動)する
# /usr/local/apache2/bin/apachectl restart
※ファイルやフォルダが見つからない場合は
locate ファイル名で探しましょう。
(最初にlocateする場合は、 updatedb コマンドを入力して最新の
ディレクトリ情報を取得させる必要があります。
またrootユーザでないと updatedbコマンドは利用できません)
(6)PHPが正常に動作していることを確認する
次のファイルの表示を試してください
phpinfo.phpファイル
<?php phpinfo(); ?>
2重更新を防ぐ方法
利用者の方が入力した内容を登録する処理はよくある処理です。
ここではDBに登録するときに2重更新を防ぐ方法について
簡単にまとめてみました。
2重更新とは?
2重更新とは、登録完了後の画面で利用者の方がブラウザの
リロードボタンを押してしまって同じ内容が再度登録されてしまう
現象のことを指します。
通常の掲示板などでは、それほど問題になりませんが、
申込ページや、お金に関係するページなどでは大問題に
発展する可能性もでてきます。
解決方法
①DB(データベース)を利用する
DBに利用者のIPアドレスと、登録内容を記録し、
登録処理ごとに同じIPからの登録内容でないか、同じ登録内容でないか
を確認します。
IP,登録内容が同じ場合登録を拒否します。
②Cookieを利用する
登録処理をするたびにCookieを食べてもらい
Cookieの中に時刻をいれておき、一定時間経過しない場合拒否します。
(Cookieを利用できない利用者の場合問題があります。)
簡単な掲示板など向きです。
③Locationを使う
登録更新完了後、Locationを使ってリダイレクトをかける方法です。
簡単でお手軽な方法です。
管理ツールなどの更新などはこれで十分でしょう。
(Locationで画面遷移した先でブラウザをリロードしてもLocation前の処理は実行されません)
④セッションを使う
Form内にセッションIDとタイムスタンプを埋めておき、
POSTされたとき、該当セッションIDから最後にうけつけたリクエスト
のタイムスタンプより値が大きければ受付ます。
そうでなければ更新を拒否します。
⑤DBを使う方法+α
DBを使う方法で利用者のIPアドレスを利用する方法を説明しましたが、
携帯電話の場合、キャリアによって同一のIPアドレスのユーザが
多数いる可能性があり、IPアドレスは利用できません。
そこで登録前に独自のID(セッションIDのようなもの)を自分で発行し、
登録時にIDも保存し、同じIDでの登録の場合は登録を拒否します。
ちょっと面倒ですが、ボタンの2度押しにもこれで対応できるかと思います。
①~⑤までを単独で利用するのではなく、
それぞれを合わせて利用したほうが、よりセキュリティが強固になるでしょう。
たとえば、
①+③
③+④
というのはどうでしょうか?