哀れWebDAV足切りクライアント

Coreserverの共有SSLで.htpasswdによるBasic認証 - 南旺理工

 .chってチェコじゃなくてスイスだったんですね。スイス製のこのPHP WebDAVクライアントクラス、実はとんでもない食わせ者でした。

  • ストリームのおしりがかじられています。毎回、かじられてる量は不定です。なので、ディレクトリ内ファイル一覧から何ファイルかランダムに欠けたり、ダウンロードファイルのサイズが微妙に足りなかったりします。なぜなのかは知りません。コードにもぐっていって、WebDAVの仕様と首っぴきして調べる気力もありません。(誰からもそういうツッコミ入ってないのは、単にPHPWebDAVクライアントというクラスの需要が少なすぎるのか、それとも僕がアクセスしているWebDAVサーバとの相性か…?)
  • アホなことに、WebDAVクラス内で、一個のファイル内容まるまる一気にすべてメモリに展開しているため、大きなファイルを転送しようとすると、メモリ不足エラーが出てしまう(こちとら共有サーバでございます…)。しかも、コードよく見ると、関数呼び出しが返っていく過程でこれが3度も無駄にコピー代入され(なんと、エラーログにまで!)、したがってメモリ消費も3倍速い。まさに赤いコードといえ、実用に耐えない。


 頭抱えましたが、気を取り直して再度ググったらHTTP_WebDAV_Client-1.0.0というものを見つけ、それを入れるにはPEARというものが必要と知り、それをCoreserverで入れるにはPHPCGIモードにしてgo-pear走らせて…
 ウッキー!
 でもなんとかやりとげたよママン。今はきれいにls取れてます。ただ、原始的ですけど…。
GREE Engineering
で言われてるように、ショボい。でも動作は確実。原始的ってだけ。ファイルじゃなくストリームを扱うクラスなんで、ファイル転送したければ、ストリームを自分でファイルに書いていかなきゃいけない。lsもしかり、ls見ますよ〜→ls一行下さいね〜→ぐるぐる→もうないですかじゃ閉めますよ〜式。すごく昔懐かしい感じ。でもその分、chunkのサイズとかは自分で自由に制御できるわけだから、メモリの使い方は完全に自分の思い通りになるわけだよね。だからきれいにls取れてます。ファイルもきれいに転送されるはず。それは明日のお楽しみ。


 ファイル属性の、[mode] => 438とは何ぞや? [atime] [mtime] [ctime] 3つあるのは何? 日付時刻の変換。そのへんは、スイス製クライアントの死体から剥ぎ取る所存。