Jul 24, 2010

販売用のシステムを完成する

遺言コンサルタント業向けASPサービス「愛の遺言サーバー」の
販売のためのシステムを完成した。

開発は、php言語、MySQL-RDBを利用
ソース規模は、phpで 8,257行、単語数 24,470個 396[KB]

機能概要は、
・商品説明
・無料体験申し込み
・メンバーログイン機能
・販売管理機能
です。

開発期間は、約二ヶ月、時間がかかりけっこうつらかった。

もうすこしシステム機能の紹介をすると
・商品説明
-- トップページ
-- 機能一覧
-- 料金・サービス
-- 導入までの流れ
-- FAQ
-- お問い合わせはこちら
-- 特定商取引法に基づく表記
・無料体験申し込み
-- メンバー情報/サービス型番登録画面
-- 本人確認メール機能
・メンバーログイン機能
--利用サービス一覧・支払い連絡
--ログ・掲示板
--メールアドレス変更
--パスワード変更
--その他のユーザ情報変更
--ログアウト
・販売管理機能
--members一覧
--services一覧/振込み確認/インストール情報設定
--bbs_logログ・掲示板
--discount(割引き)コード設定
--hosts管理(ASPサーバの)
--sales(売り上げ表作成)
--mgr_log=管理者専用ログ
--logout

今回の場合支払いは銀行振り込みのみとした。
(PAYPALはまだ利用していない、クレジットカードはまだ利用できない)

Jul 13, 2010

WEBアプリケーションでの二重POSTの防止方法のまとめ

二重POSTの防止方法についていろいろ調査を繰り返す。

掲示板などリロードされるWEB画面では、Post-Redirect-Get パターンで実装を使う。
データの二重POSTからデータベースの一貫性を守りたいときは、ワンタイムトークンなどを使う。

参考サイト

 PHP 二重送信防止処理(サーバー側)

 PRGパターンをご存じですか

MySQL で カラム名をバッククォートする件 (自分のバグ)

MySQL にデータを追加する構文
INSERT INTO table SET colum1 = "value1", colum2 = value2",  ...
文でカラム名(項目名・col_name)をバッククォートしないとエラーになることがあった。

原因を調べてみると、
カラム名を定義するとき、MySQLAdminを利用しているため
カラム名の先頭に「偶然」空白文字が入り込み、
空白も含めてでバッククォートしないと
カラム名を認識しないことが原因。

(気が付くまで三日もかかるという情けなさです)

INSERT INTO table SET field1 = "value1",  `field2` = value2",  ...

Jun 24, 2010

確かに英語(とくに会話)は必要である。

自分は、米国のデータセンタのウェブホスティングサービスを利用している。

SSL Certificates with Dedicated IP(専用IPアドレスによるSSL証明書)を
WEBから追加購入すると、購入完了前に

「 you need to call our Verifications department first to verify your account.
 To do this, call (866)  573-4678, option 4.」
 と出てしまう。
 メールやWEB操作ではなく電話をかけなさいという意味である。

会話は苦手なので、WEBのヘルプセンターから質問を投げると
やっぱり電話せよと、メールで返事が来た。

そこで、仕方なく電話をする。
一生懸命、しどろもどろでもなんとか、うまくいったが、
皆さんは次のような準備をしておくべきである。

何を聞かれるか予想しておき、回答を用意。
・ドメイン名
・メールアドレス
・氏名
・パスワードの最後の4文字
(WEBサイトにログインするときの情報である)

名前やIDなどについて正しい綴りを伝える必要があり
そのやり取りのパターンについて、
事前に練習する必要がある。

とにかく大きな声でクリアに発音する。
(自分の発音には相手に聞き取れない弱点 l を 3 と聞き間違えられた
 があることが判った)

例 mydomain.com なら

(ope)  Please tell me your domain name ?
(me)   OK, I pronounce separately each character.
       "em wai di ou em ei ai enu dot ci ou em" ...
(ope)  I confirm it.
       em is mother.
       wai is young.
       di is donuld.
       ou is open.
       em is mother.
       ei is america.
       ai is important.
       enu is number.
       and dot-ci-ou-em.


氏名を First Name Last Name に分けていう。
First Name is SHINSUKE. Last Name is ONO.

相手が何を言っているか判らなくなったら、
単に聞き返せばいいレベルなら、 "perdon" でいいが、
本当につかめていないなら、 "just a moment please" で間を取って
質問を組み立ててから質問してみる。
(<- 自分はこのレベル)

Jun 18, 2010

PHP sem_ acquire sem_ get sem_ release sem_ remove チョット詳しいメモ

PHP sem_acquire sem_get sem_release sem_remove チョット詳しいメモ

---------------------------------------------------------------------
sem_acquire
マニュアル http://jp.php.net/manual/ja/function.sem-acquire.php
---------------------------------------------------------------------

■詳しい説明

sem_acquire() は、(必要な場合) セマフォが確保できるまでブロックします。
既に確保されているセマフォを得ようとするプロセスは、 セマフォの獲得により
 sem_get()で指定した max_aquire 値を超える場合、 永久にブロックされます。

---------------------------------------------------------------------
sem_get
マニュアル http://jp.php.net/manual/ja/function.sem-get.php
---------------------------------------------------------------------
説明とパラメータの改善

■詳しい説明

sem_get() は、 System V セマフォを指定したキーで
アクセスするために使用可能な ID (例: "Resource id #1")を返します。

同じキーで sem_get() を 2 度コールした場合、 別のセマフォ ID
 (例: "Resource id #2")が返されます。
 しかし、どちらの ID も同じそのセマフォをアクセスします。

セマフォは、sem_ remove()するまで、OS上に残ります。

■詳しいパラメータ

□key

例: "123456"。
Linux の場合、 "cat /proc/sysvipc/sem" コマンドで、
key の一覧を見ることができます。
"cat /proc/sysvipc/sem" コマンドの "semid" と
この関数が返すセマフォ ID は、関係ありません。

□max_acquire

sem_ acquire()により、同時にセマフォを得ることが可能なプロセス数を
max_acquire にセットします。

つまり同時に1プロセスだけがアクセスできるよう排他制御したいときは、
max_acquire を1にします。

□perm

セマフォのパーミッション。 実際には、この値はプロセスが現在その
セマフォに付随している 唯一のプロセスであることがわかった場合にのみ
セットされます。

Linux の場合、 "cat /proc/sysvipc/sem" コマンドで、
keyとpermの一覧とを見ることができます。

□auto_release

リクエストの終了時に自動的にセマフォを開放するかどうかを指定します。

---------------------------------------------------------------------
sem_release
---------------------------------------------------------------------

(補足ありません)

---------------------------------------------------------------------
sem_remove
マニュアル http://jp.php.net/manual/ja/function.sem-remove.php
---------------------------------------------------------------------
説明の改善

■詳しい説明

sem_remove() は、指定したセマフォを削除します。

セマフォを削除した後、そのセマフォにはもうアクセスできません。

補足すれば、あるプロセスで、あるセマフォを削除した後、他のプロセスで
そのセマフォを利用する、sem_ acquire(), sem_ get(), sem_ release()が
Warningとなります。

Linux の場合、 "cat /proc/sysvipc/sem" コマンドで、
key の削除を確認できます。

phpのコードで sem_remove() を使う必要性はまずありません。

---------------------------------------------------------------------
コード例
---------------------------------------------------------------------

$seg = sem_get("423456", 1, 0666, 1) ;
if($seg !== false){
        echo date("c")." seg:".$seg."\n";
        $seg2 = sem_get("423456", 1, 0666, 1) ;
        if($seg2 !== false){
                echo date("c")." seg2:".$seg2."\n";
        }
        echo date("c")." sem_acquire\n";
        sem_acquire($seg);
        echo date("c")." sleep\n";
        sleep(5);
        echo date("c")." sem_release\n";
        sem_release($seg);
        //sem_remove($seg);
}
?>

Jun 17, 2010

「愛の遺言サーバー」のドメイン名は mylovewill.com

「愛の遺言サーバー」のドメイン名は mylovewill.com

 今日は価格を検討している。 

遺言コンサルタント(弁護士/司法書士等)の方に、
ユーザ数50名で、年間1万円以下でサービスしたい。

 司法書士の手塚宏樹さんに相談を開始。

Jun 16, 2010

php.ini のファイルアップロード関係のディレクティブを上書き変更する方法

How to Override the directives about file upload in php.ini.
(php.ini のファイルアップロード関係のディレクティブを上書き変更する方法)
The directives about file upload
(ファイルアップロード関係のディレクティブ)
NAME DEFAULTOverrideCHANGEABLE
max_execution_time "30" "60"PHP_INI_ALL
memory_limit"128M""256M"PHP_INI_ALL
post_max_size "8M" "20M"PHP_INI_PERDIR
upload_max_filesize "2M" "10M" PHP_INI_PERDIR
Where is the directives set in ?
(ディレクティブをどこで変更できるか)
CHANGEABLE Where is it set ?
PHP_INI_PERDIRphp.ini .htaccess httpd.conf
PHP_INI_ALL(anywhere)
Sample part of httpd.conf. We need "AllowOverride Options".
(httpd.confの抜粋例、"AllowOverride Options"を指定が必要です。)
DocumentRoot "/var/www/html"
<Directory />
    Options FollowSymLinks
    #AllowOverride None
    AllowOverride Options
</Directory>
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    #AllowOverride None
    AllowOverride Options
    Order allow,deny
    Allow from all
</Directory>
Sample .htaccess
(.htaccessの例)
<IfModule mod_php5.c>
  php_value max_execution_time "60"
  php_value memory_limit "256M"
  php_value post_max_size "20M"
  php_value upload_max_filesize "10M"
</IfModule>
Re-start httpd(apache)
(httpd(apache) の再起動方法)
service httpd restart