IT資料館(覚え書き) -2ページ目

入力チェック


// 入力チェック

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();


ZYBOX

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度押しにもこれで対応できるかと思います。



①~⑤までを単独で利用するのではなく、

それぞれを合わせて利用したほうが、よりセキュリティが強固になるでしょう。

たとえば、

①+③

③+④

というのはどうでしょうか?