ファイル移動中
scp でファイル転送するのが一番簡単そうだったので、
ただいま転送中・・・。
ハードディスクがギリギリになったのは、ちょっと理由があって、
2ちゃんねる(N.T.Technology)の有料サービス● のお試し版が株式会社ゼロ運営のゲーム
ニダークエスト2で貰えたため、それを使って過去ログを集めてました。
ざっと、現在までにニュース速報VIPやPCゲーム板など数十万スレッドが収集でき、
当分、読む物には困りそうもありません。
# 前にもこんな事書いた気がする。
これが勉強がてらC言語で書いたディレクトリリストと datファイルの先頭4文字を判断するプログラム。
CodeGearのサイトにあったリファレンスを見つつ作ってみたんだけども、意外と簡単に動くものです。
こうやって少しづつ作っていくことで、段々と作れる物が増えて行ければいいなぁ。
PHPは、関数が豊富なのと、実用的というか、直ぐ使えるような関数が一杯なので、
それと較べると、C言語は結構しんどいです。
「PHPポケットリファレンス」みたいな本がC言語にも有ればいいのになぁ。
「プログラミング言語C」の第2版は読んでみましたが、結構大変。
構造体とかが使えるようになれば、また一段と作れる物が増えるんだろうなぁ。
過去ログ用のストレージが限界近いです…。
46G 41G 2.7G 94% /dat
ライブスレッドのクローリングは平常通り運行しますが、
Express5800/110Ge で取得した過去ログの追加は、現在見合わせ中です。
クローラーのリブートを掛けるシェルで cd していなかったために、実際に動作していなかった。
(´・ω・`)
今度は、ちゃんと Cron で動作するのを確認したから、きっと大丈夫。
リブートする妖精さん、後は頼んだよ。
http://blog.yuhisa.com/archives/339 の件について
配列があふれてプロセス有るけど全く処理が動いていない状態だった。
オワタ\(^o^)/
15000 件のレコードが貯まったら一旦破棄するようにした。
やったね、これは成功!
http://blog.yuhisa.com/archives/303 から1週間。
2日目あたりから安定して iowait が激減した。
ちなみに、配列の掃除は全くしてないんだよね。
内部的にどうなってるんだろ?
クローラーの中にある行数をカウントする部分でIOを食いつぶしてるので
そろそろジャーナルファイルを作って管理しようと思う。
単一ファイルで書き換えた後に閉じなくても反映されてるんだったっけかなぁ?
ちょっと試してみよう。
管理方式はどうしようかなぁ?
ファイルの中身を配列として読み込む file という便利関数があるんですが、
これにはちょっと使い時があります。
PHP には memory_limit という設定があり、この設定値を超えると
処理が出来ないため、エラーになってしまいます。
実は file 関数とこの設定値は結構リンクしていて、memory_limit をバケツに例えると
バケツに対してバケツの容量以下の水を扱うには良いのですが、
バケツに対して、25mプール一杯の水を注ごうとするとあふれてしまうのと同じように下記のエラーになってしまいます。
Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes)
つまり、あまりにも大きいデータを読み込む時に file 関数は向いていないのです。
こういった場合、どうしたらいいのか?
答えは簡単で、 fopen でファイルを開いて fgets すれば良いだけです。
fopen はファイルポインタですから、使用した時点ではファイルの内容は読み込みません。
fgets を使用してはじめて読み込むわけですが、 fgets は指定バイト数もしくはEOFまでの読み込みであり、
巨大なデータでも行端で切り刻んで読み込むことが出来るため、前述のようなエラーにはならなかったりします。
file_get_contents も file と同じようなものと考えて組んでいかないと変なところでエラーが出てしまうので、
使い所には注意するべきですね。
あと、 PHP は一度スカラー変数として定義したものは、スカラー変数としてしか使えないので、
<?
$hoge = 1234;
$hoge[0] = 5678;
?>
というようなものを書くと Cannot use a scalar value as an array というエラーになりますよん。