phpの作り方のヒントの履歴
いろいろ
CSVファイルを読み込むときは...
fgetcsv という関数があるそうです。流石PHP!
変数名や関数名などの命名について
以下のリストは、PHP プロジェクトで新たな内部識別子を作成する際に どのような基準で名前を決めているのかを おおまかにまとめたものです。
面白い。言語用のリファレンスに命名規則が書いてあるんだ。
英語だけど公式なコーディング規則はここにある。(まだ読んでない。)
This file lists several standards that any programmer, adding or changing
code in PHP, should follow. Since this file was added at a very late
stage of the development of PHP v3.0, the code base does not (yet) fully
follow it, but it's going in that general direction. Since we are now
well into the version 4 releases, many sections have been recoded to use
these rules.http://cvs.php.net/viewvc.cgi/php-src/CODING_STANDARDS?view=co
ほとんどの機能が関数の形で実装されてきたphpの性質上、たぶん命名規則はとても重要なものかと思う。
未定義の変数でも動いちゃうじゃん...
httpdのエラーログにエラーが出力されていませんか?
こんなページもあった。
http://openlab.dino.co.jp/2008/05/09/231348244.html
まだ読んでないですが、ありがとうございます!
セッションのトランザクション処理
セッションデータは、session_write_close() をコールしなくても、スクリプト終了時に保存されます。しかし、 セッションデータは、同時書き込みを防ぐためにロックされるため、 ある時点であるセッションの処理ができるスクリプトは、1つだけです。 セッションでフレームセットを使用する場合、 このロックのためにフレームがひとつずつロードされるような経験をするでしょう。 セッションへの全ての変更が行われるとすぐにセッションを終了することにより、 全てのフレームのロードに要する時間を減らすことができます。
http://www.php.net/manual/ja/function.session-write-close.php
「すごいリロード対策」
いわゆるトランザクショントークン。
こんな感じで実装できるらしい → http://itpro.nikkeibp.co.jp/article/COLUMN/20070910/281585/
ふと、二つのプロセスが同時に処理をして、session_startと本当に同時に変数を書き換えたらどうなるのか気になって試してみたら、ちゃんと動いた。
(本当に同時に=phpがセッション情報をストレージから読み込み、修正したデータを書き込むまでの間のそれなりに短い間)
調べてみたら、「ある時点であるセッションの処理ができるスクリプトは、1つだけです。(上記の引用)」とのこと。
ということは、重い処理をしたり、同時に二つの処理をするときには session_write_close() を早めに呼び出してあげたほうが良いのかもしれない。
どうしてもPrepared Statementが使えないときは
サーバー環境の理由でPHPでPrepared Statementが使えないときは、こんな感じにして書くと読みやすい。(これがベストな方法かどうかはまったく自信なし。)
mysql_query( sprintf( "SELECT * FROM sometable WHERE some_column = %s", mysql_real_escape_string( $value ) ) );
追記:
今まで、addslashes 関数を使っていましたが、'mysql_real_escape_string 関数というものがある'そうです。マニュアルはちゃんと読まねば
addslashes と違い、ちゃんと文字コードも理解してくれます。
現在の接続の文字セットで unescaped_string の特殊文字をエスケープし、 mysql_query() で安全に利用できる形式に変換します。バイナリデータを挿入しようとしている場合、 必ずこの関数を利用しなければなりません。
mysql_real_escape_string() は、MySQL のライブラリ関数 mysql_real_escape_string をコールしています。 これは以下の文字について先頭にバックスラッシュを付加します。 \x00, \n, \r, \, ', " そして \x1a.
データの安全性を確保するため、MySQL へクエリを送信する場合には (わずかな例外を除いて)常にこの関数を用いなければなりません。http://www.php.net/manual/ja/function.mysql-real-escape-string.php