
PHPって・・・と思いました。
PHPのシャットダウン時(システム終了時)に実行する関数を登録するregister_shutdown_functionという関数を最近知ったのですが、その関数内でfile_put_contentsなどのファイル保存系の関数を利用すると、平常時との挙動が違うことを発見しました。
再現時のPHPのバージョンは5.2.4でした。
Ajaxian » Every keystroke is a prisoner - a neat commenting trickより。
デバッグの最中は頻繁にコードをコメントアウトしたりコメントを除去したり面倒に思う時があります。
は
でコメントアウトできますが、コメントを元に戻す場合は「/*」と「*/」の両方を除去しないといけません。デバッグの最中に毎回二行修正していては時間の無駄となってしまいます。
上のコードの出力結果は以下のうちどれか
現在なぜPHPアプリにセキュリティホールが多いのか?:第5回 まだまだ残っているSQLインジェクション|gihyo.jp … 技術評論社を読んでいるのですが、正規表現の間違いによるSQLインジェクションのいい例がありましたので紹介を。
私はわからなかったのですが、ユーザからのパラメータに対する数値チェックで以下の二つのPHPコードにおける脆弱性についてでした。
まだまだ正規表現の修行が足りなかったようです。。
当ブログシステムで使っているWikiコンポーネント(自作)のURL抽出部分でした。
でリンクを意味するWiki記法を抽出するための正規表現なのですが、
といった記述がある場合、2つに分割されず合体して抽出されてしまいました。
phpMyAdminは文字のエンコード周りの設定さえうまくいけばデータの簡易チェックとしてとても便利なツールです(最近はクエリのチェックにはシンプルなCSE+ODBCを利用しています)。ただ、以前はconfigファイルの設定をちょっといじればタイムアウト時間を変更することが出来たのですが、最近(私の環境は2.11.2.1です)はちょっと調べないとタイムアウト時間を延ばすことが出来ません。
cronを定期的に処理を実行させることはよくあります。PHPの場合、
で(PHPの実行ファイルが/usr/bin/phpにある場合)ユーザ名:user_nameで、/var/www/html/hage/hoge.phpのphpファイルをPHPで実行させることができます。
同一PC内ならそれでもいいのですが、Cron機能が使えないサーバーのためWebアクセスをトリガーにしてで定型処理を行う必要があったためその方法についてです。
6 PHP coding tips to write less code | Alex @ Netにてlazy developerへPHPのコードを短く書くためのTipsが掲載されていましたので簡単に紹介しておきます。
1. Use || (or) and && (and) operations instead of if.(if文の代わりにand・orを使う)
が
に。DRYな感じに出来ます。これは知っている人も多いのではないでしょうか?
A and B→Aがtrue、ならばB
A or B→AがtrueでなければB(つまりAがfalseならB)
確かに以前こんなソースを見たことありますが、実際使う際は書き慣れた書き方になってしまう気もします。
2. Use ternary operator.(一時的なオペレータを使う)はよくやる手法ですね。
を
にします。
if文を使う場合に
を
とするのはバリデーションがらみの箇所でよく使いますね。
3. Use for instead of while.(while文の代わりにfor文を使う)
を
にしています。
ただ、for文の3番目の評価式に数値演算以外($i+=2など)を入れるのは個人的には嫌いだったりします。私の場合上の例でしたら
のようにしています(サンプルより2文字多くはなります)。
4. In some cases PHP requires you to create a variable. Some examples you can find in my PHP fluent API tips article. Another example is getting array element when array is returned by the function. (意訳:PHPはjQueryなどのようにメソッドチェーンが出来ないけど汎用関数を使えば出来るよ)
は
で書くことができます(関数aと関数rを定義)。使いどころによってはちょっと便利かもですね。
ってかpathifo($file_name)で連想配列に帰ってくるんですねぇ。今まで
などの関数を書いていました。。