path設定のセパレータがOSで違うのにハマった

ちょっと複雑な設計になってくると、パスの制限を回避したくなります。
いや、本当はそういう制限があっても問題ないのが本当はいいのだけど、いちいちdefineで宣言するのもめんどくさいし、過程よりも結果に重きをおくべきなのはいうまでもありません。
ということで、set_include_pathをいじって、システムの設計を一部変更して、テストサーバにアップしたとたんに異変が。
今まで動いていたのが、ファイルが見つからないの嵐に。
よくよく調べたら、Windowsとそれ以外ではpath設定のセパレータが異なるという。
OSのpathを利用しているからだと分かればたいしたことないのだけれど、コロンとセミコロンなんて、ぱっと見て違いに気づきませんよ、普通。
定数のPATH_SEPARATORを使えばいいのだけれど、こういう回避の仕方はphpだからこそというか、無理やりというか・・・
マニュアルのページには以下のようなコードが載っていました。

<?php
if ( ! defined( "PATH_SEPARATOR" ) ) {
  if ( strpos( $_ENV[ "OS" ], "Win" ) !== false )
    define( "PATH_SEPARATOR", ";" );
  else define( "PATH_SEPARATOR", ":" );
}
?>

phpの定数とか関数の初期値は、バージョンが変われば変化してしまう危険があるので、あまり使いたくないけど、どの道php6はまだ先のことだろうから、とりあえずPATH_SEPARATORをつかってしのぐことにしようかな。

.htaccessでやればいいみたいだけど、詳しい説明が載ってない。
設定済みのものを取得私鉄かしたいような場合だと、.htaccessでは全部書き直さなければいけないようなので、phpで一度取得した後に再設定する方法がいいのだろう・・・。

と、散々愚痴っていたけど、php.iniをよく見たら

; UNIX: "/path1:/path2"
; Windows: "\path1;\path2"


このように、しっかり書かれてあった。

まとめると、以下のようになる
php.iniで設定する場合

include_path = ".;c:\php\pear;c:\php\cli\pear;c:\home\php_myLib"

.htaccessで設定
する場合

php_value include_path ".:/usr/local/lib/php:/home/user/php_myLib"

長いこと使っていても知らなかった。
というか、使うことがなかっただけかもしれない。

脳みそコネコネ

なかなか更新できなくてすいません。
こっちを見に来ている方がどれぐらいいるかわかりませんが、頭の中だけに保存しているのももったいないので、ちょっとだけ書いておきます。

日報をゲーム化できないかと考えています。
まぁ、ゲーム化だなんていうと語弊がありそうですが、気持ちはそれぐらいということで。
BOINCのメンバ情報は、ある方法でアカウントを特定できます。
まず、こちらの管理するシステムに、現在の名前と改名予定の名前を登録してもらいます。
次の更新で改名が確認できれば、そのアカウントのidを登録した人のidをリンクさせることで、メンバを特定できます。
これができれば、後はメンバ同士のstat情報からいろいろとできますよね。
数でバトらせたり、SNS的な紹介ページも作れるし、いろいろと・・・

まぁ、そんなこんなで、アイデアはあるんですけど、時間の使い方が下手というか、お給金以上に働いてしまっているというか根つめてるだけというか、世渡りが下手なんですねぇ。
このアイデアは別にパクってもらってもかまいません。
にぎわえばそれでいいですから。

Webminがいつのまにか1.45に

Linuxでいろいろ設定をいじるのに役に立つツールWebmin。
とにかく自由にできるマシンを1台用意していじり倒せばだいたいどういうものかわかるはず。
サーバーはCUIでコマンドでviで・・・という意見もたまに聞くが、使えるものを使わずに棘の道を進めるほどMでもないので、楽できるなら楽したい。

本日、お仕事で新しいDELLのサーバーを準備したので、そのときにWebminを入れたらバージョンが上がっていたのに気がついた。
若干メニューが違っていて、ちょっとだけ戸惑った。
モジュールのリフレッシュとか、以前はどうやっていたんだっけ・・・?
家に帰って、自宅サーバーのWebminが1.40のままだったので、1.45にバージョンアップしてみる。
yumではパッケージを見つけてくれないので、Webサイトからパッケージをダウンロードして、ダブルクリックで楽チンインストール完了。
ドキュメントを読まずにとにかくパッケージを手に入れたい人は直接sourceforgeへどうそ。

しかし、PowerEdge2950はえー

忘れないようにメモ

522 :WCG週報@みさき先輩萌@one ◆MisakigHDA :2009/02/17(火) 21:26:01 ID:???
>515 404さん
修正ありがとうございます。

一点、改善依頼を…

>476を表示させると、13位と14位が
┃◎13 kan@LeafKey.      2(-6)人   3,081,895( +983,143)Pt.↑   7,457(+2,445)Res.   3:035:08:27:09(-2:206:11:07:41)
┃◎14 Kan@LeafKey      8(+6)人   2,141,066( -940,829)Pt.↓   5,082(-2,375)Res.   5:270:03:19:37(+2:234:18:52:28)
となります。

チーム名の大文字と小文字を同一視していないように見えます。
宜しくお願い致します。

553 :名無しさん?:2009/02/18(水) 22:29:33 ID:???
404氏の日報サイトを利用している者です、いつもお世話になっております
次期バージョンにて不具合を発見したので報告させていただきます

ttp://wcg-team2ch.no-ip.info/stat2.cgi?c=itamem-aa&b=all%40livevenus&s=point&u=&m=&bit=0-1088&t=20090217&f=20090215
内容:転出者の名前が表示されない

578 :名無しさん?:2009/02/19(木) 23:44:45 ID:???
>>558 404さん
いつも日報サイトを利用させていただいてます。お世話になっております。
現在次バージョンの日報支援開発中のところ,現行バージョンの話で
申し訳ないのですが,うちの板のメンバーから現行バージョンの不具合が
報告されましたので,お伝えしておきます。

URL: http://wcg-team2ch.no-ip.info/stat.cgi?c=ita-aa&b=utu&s=point&u=&m=&bit=4608-0&t=20090217&f=20090216
エラーメッセージ:
Illegal division by zero at /home/wcg-team2ch/public_html/stat.cgi line 3170.
For help, please send mail to the webmaster (root@localhost), giving this error message and the time and date of the error.

調べてみたところ,拡張設定で「変化のない行も表示する」だけにチェックが
入っている場合に0除算が起きているようです。
次バージョンでは問題なかったので,報告してくれたメンバーには,次バージョン
で見るか,拡張設定を外すように伝えておきました。
対応は急がなくて構いませんので,次バージョンの開発頑張ってください。

CentOS5.2にProFTPDをインストールする

Linuxのディストリの一つであるCentOS5.2にFTPサーバであるProFTPDをインストールする方法です。
管理マネージャはWebminを利用しますが、これに用意されている通常の方法ではインストールができず、以前の記事の内容とは異なる方法でインストールできたので、それを記録しておきます。
CentOS5.2はGUI(デスクトップ環境あり)を前提にします。

Webminからインストールができないのに変化はありませんので、やはりrpmファイルをDAGより入手します。

DAG:
href=”http://dag.wieers.com/rpm/packages/proftpd/

File:
proftpd-1.3.1-1.el5.rf.i386.rpm

デスクトップなどの適当なところへ保存しておきます。
以前の記事ではターミナルから必死にインストールを進めましたが、よくよく考えると
書庫ファイルをダブルクリックすればよかったのです。
ということで、ダブルクリックすると、パッケージマネージャが起動して依存関係を調べてインストールが完了します。
とても簡単です。

改めてWebminよりProFTPD Serverを開くと、設定などのメニューが表示され正常にインストールされていることが確認できました。

WCG-Team2ch次バージョンの構想

現在は取得元のxmlから直接ファイルに書き出しています。
この方法ではメンバー(個人)を対象にした解析が不可能でした。
個人的には、この機能はほしいもので、どうにか対応できないかと考えていました。
いろいろ考えましたが、メンバーのxmlファイルデータをDBに書き込んで、日付で集計したファイル(yyyymmdd_member.tsv)を書き出して、さらにメンバid別にファイルを書き出す。
データベースに入れてしまえば、スクリプト的にはかなり楽になりますが、問題はレコードの数です。
現在は9000人を超えていますので、1日に9000レコードを消費します。
さらに、その期間を保持するかを考えると、1ヶ月で9000×30=27000レコード、1年で9000×360=3240000レコード・・・
まあ、どうにかなるでしょう。

さて、個人の履歴が見えるようになると、推移を見たくなりますね。
グラフ化されたりするといいかもしれません。
問題は転送量に耐えられるかどうかですが・・・
場合によっては、皆さんに金銭的な支援を求めるかもしれません。
もしくは、昔のようにFTPでえっちらおっちらアップロードする方法に戻るかもしれません。
どの方法がいいのかは、実際に走らせないと分かりませんが。
一応この内容は仮のものですが、現実味はあります。
時間があまり取れなくて遅いだけで、何もやっていないわけではありません。
もしご意見やおご感想があれば2ちゃんラウンジスレか、ここのコメントにでも書き込んでください。

今日買った本

久しぶりにジュンク堂池袋店へ行きました。
レジの応対が不気味なほど丁寧で、しかも対応してくれた娘がちょっと好み入っていたのでドキドキ・・・ってオヤジですな。

さて、衝動買いした本はこれです。

奥付では「2009年1月25日 初版」となっている新刊です。
ポケリ(ポケットリファレンス)シリーズは、まれに外れがあるけども割とお買い得なシリーズです。
ずっと使い続けているMySQLへの理解を深めるために、この1冊を衝動買いしてしまったというわけです。
さて、活用できるかどうかは自分の腕次第・・・

PHPでメールを送信するときのメモ

メール送信はどうも使い慣れません。
現在のWebコンテンツでメール送信は切っても切り離せないものですが、どうも使い方に慣れません。

とりあえず、何度かこうやってメモしていけば体が覚えてくれることでしょう。
本棚にはオライリーの4000円もする「電子メールプロトコル」の本がありますが、たいして活用されていません。

とりあえず、さて、メールを送信したアドレスが存在しない場合、その送信先のドメインが存在しなかったり、ユーザが存在以内場合はリターンメールが返ってくるのですが、その通知先を指定できます。
(そもそもこの考え方であっているのか?)
ヘッダでは「Return-Path」です。
ヘッダにあたる部分には以下のように記述しておくことになっています。

Return-Path: return@exsample.com


しかし、この方法ではほとんど有効ではなく、スクリプトやサーバが指定したものに強制的に上書きされることがほとんどのようです。
もちろん、設定できるのですが、動的に変化させる場合この方法では使えません。
これを回避するには、sendmailへのスイッチが有効なようです。
PHPでは第5引数に次の内容を追加します。

"-f return@exsample.com"


つまり実際にはこうなります。

mb_send_mail( $to, $subject, $body, $headers, "-f $mail" );

これで、受信したメールのソースを見ても正常に設定されました。

メール送信用のモジュールやライブラリを使っている場合はこの限りではありませんので、ご注意ください。

参考にしたのはこのあたり
http://builder.japan.zdnet.com/member/u87200/blog/2009/02/08/entry_27020134/

CentOS5.3がそろそろ出るみたい

RedHatがいつの間にか5.3になっていたので、おそらく近いうちにCentOSもバージョンが同じになると思われます。
特に大きな変更はないと思いますが、またいじれるかと思うとwktkします。

ところで、CentOS5.2でImageMagickのバージョンをあげようと思ってyumをたたいてもパッケージは古いままで、ソースからコンパイルしようと思っても、./configureで画像ライブラリを認識してくれません。
今入っているバージョンでは動いているのでパスだとは思いますが、解説サイトの通りにやってもうまくいかないのでちょっと困ってます。
早めにCentOS5.3が出てくれて、ImageMagickも上がってくれればいいのですが・・・