タグ「PHP」が付けられているもの

Multibyteの改善を望む

Python 3へ向け最新ベータ版、10月1日正式リリース。Pythonはとても便利なんだが、phpみたいに適当に放り込んでもマルチバイトがちゃんとハンドリング出来るようになって欲しいな。というか、phpはだからダメだとも言えるんだけど、とりあえず処理系をUTF-8に固定しちゃえばcharsetをほとんど意識しないで書けるのはやはり便利。

さて今日の福岡→羽田は

  • 投稿日:
  • by
  • カテゴリ:

福岡は朝の7時に風弱し。予報では北風10ノット、離陸する9時頃には北風3ノット。昨日と同じ34から上がってそのまま博多湾か?

METAR RJFF 022200Z VRB02KT 9999 FEW025 20/17 Q1017
TAF RJFF 022047Z 030624 01010KT 9999 FEW030 BECMG 1215 14005KT BECMG 2124 02003KT

羽田は北東風9ノット、着陸する時刻を含まない予報だけれどちょっと東よりの風が吹くのかな。8000フィートに雲が多い。34L/Rだと少し横風気味、04が理想だけど04って使うのか?

METAR RJTT 022200Z 03009KT 9999 FEW020 BKN080 20/16 Q1019
TAF RJTT 022041Z 030624 04008KT 9000 FEW015 SCT030 BKN050 BECMG 1821 09006KT

IPOは良いね

オープンソースCRMソフトのSugarCRM、「2年以内に株式公開する」--CEOが意向を明らかに。ストックオプションを持っている人はやる気が出るってもんだよ、これで。うちもIPOしないかなぁ...。

SugarCRMは日本語になってるけど、解説本はまだ少ないな...。結構機能も豊富なので、これで十分ってこともあると思うが。

xcache enabled with SELinux

  • 投稿日:
  • by

I tried to install xcache to my server in order to accelerate php.

Firstly, I got a src.rpm from Utter Ramblings's page and built a package with rpmbuild command. Needed php-devel package.

wget http://www.jasonlitka.com/media/files/SRPMS/php-xcache-1.2.0_0.3.src.rpm
rpm -ivh php-xcache-1.2.0_0.3.src.rpm
rpmbuild -bb /usr/src/redhat/SPECS/php-xcache.spec
rpm -ivh /usr/src/redhat/RPMS/i386/php-xcache-4.3.9_1.2.0-0.3.i386.rpm

I installed the php-xcache package succesfully. And set 'xcache.admin.user' and 'xcache.admin.pass' in /etc/php.d/xcache.ini. 'xcache.admin.pass' is md5ed password like the following.

echo "<?php echo md5('password'); ?>" | php

However, I've set SELinux to the enforcing mode, so I saw a message issued by avc like the following line when I restarted httpd service.

May  5 00:43:30 www kernel: audit(1178293410.685:17): avc:  denied  { read write } for  pid=27875 comm="httpd" name="zero" dev=tmpfs ino=2089 scontext=root:system_r:httpd_t tcontext=system_u:object_r:zero_device_t tclass=chr_file

I needed to install selinux-policy-targeted-sources package additionally to fix the policy, added the following two lines to the file, /etc/selinux/targeted/src/policy/domains/program/apache.te.

# xcache needs to read/write /dev/zero
allow httpd_t zero_device_t:chr_file { read write };

At last I issued 'make reload' in /etc/selinux/targeted/src/policy/ directory and restarted httpd service.

コメントスパム対策

  • 投稿日:
  • by
  • カテゴリ:

phpでiptablesを設定するスクリプトを書いて、だいぶ安定してきたようなので。

基本的にはJPNICが逆引き権限を持っているブロックと、APNICがJPにアサインしているブロックについてはFROMJPというChainに追加して許可して、FROMJPをJPFILTERというChainに追加して基本的にドロップするというiptablesコマンドを生成します。ただし、上記ブロックに登録されていないJPなブロックやgooglebotのブロックもあるので、それは適宜調整するという運用になります。要するに日本以外からのアクセスを禁止するということです。

とりあえず/var/log/messagesからドロップされたパケットを抜きだすスクリプトで見る限り、mxやらthやらcnからのお行儀の悪いパケットがドロップされているようなので、よしとするか。

英語でブログを書き始めたら、この対策は出来ないねぇ...。

-PHP Tips- 第13回 substrの裏技

  • 投稿日:
  • by
  • カテゴリ:

phpでスライスは出来ないの?
【Tips】1文字だけならスライスが可能、しかも高速!
【Description】スライスというのはpython、ruby、D言語などにある概念(関数)で、部分文字列を取得する方法です。phpでは通常substr関数を用いて実現しますが、部分文字列が1文字であればスライスすることが出来、しかもsubstr関数よりも高速です。substr($str, 5, 1)と$str[5]は等価です。ただし、substr($str, 5, 2)と同じ結果を得るために$str[5].$str[6]と連結してしまうとsubstr関数よりも低速になってしまいます。なお、$str[5:6]といった方法は使えません。

-PHP Tips- 第12回 リテラルの展開

  • 投稿日:
  • by
  • カテゴリ:

リテラルの展開はどのタイミングでするべき?
【Tips】もちろん展開しておいた方が高速!
【Description】例えば1日は86400秒ですが、これを86400と書くか60*60*24と書くかで実行速度は大きく変わってきます。">count関数の使い方でも説明したように、事前に出来る処理はしておくのが鉄則です。

-PHP Tips- 第11回 ob_start

  • 投稿日:
  • by
  • カテゴリ:

ob_start関数はクッキーやtext/html以外のMIMEタイプを出力するためだけのもの?
【Tips】ob_startを使うと数倍高速!
【Description】ob_start関数はクッキーを用いる場合などによく使われますが、通常のhtmlの出力の際にob_start関数とob_end_flush関数を使うと、echo関数やprint関数などの出力をバッファリングしてからapacheのAPIに出力を引き渡すと考えられるため(phpのソースを見たんですが確認できず(^^ゞ)、高速になります。
バッファリングしない場合、ob_implicit_flush関数を明示する方法もあります。

-PHP Tips- 第10回 strcmpと==

  • 投稿日:
  • by
  • カテゴリ:

文字列を比較するstrcmp関数は何のためにあるの?
【Tips】strcmpを使う方が僅かに高速!
【Description】単純に同じかどうかを比較するのであれば、$hoge == "fuga"をテストする方法と、!strcmp($hoge, "fuga")とする方法がありますが、後者の方が非常に僅かながら高速です。

ニュース続々追加

  • 投稿日:
  • by
  • カテゴリ:

※諸事情により公開を中止しました。

トップページの右の柱のニュースですが、巡回サイトをどんどん追加してます。というのも、プログラムを書き換えたことでかなりサーバへの負荷が抑えられていることが理由です。一度設定したクッキーが書き換わるまで少し時間がかかるため、カスタマイズページにアクセスして表示するサイトを変更してみてください。

-PHP Tips- 第9回 switchの条件の順番

  • 投稿日:
  • by
  • カテゴリ:

switch文に並べる条件の順番は?
【Tips】出現頻度順に並べる方が高速!
【Description】caseに並べる条件は出現頻度の多いものを先に書くべきです。以下のソースでは頻度0.7、0.2、0.1の順に並べて比較しましたが、もし数万件に1件しか含まれないような条件を先に書いてしまうと、かなり無駄なロジックになってしまいます。実際に運用してみないと分からないケースももちろんあるので、データベースで件数をカウントするなどして最適化をしましょう。