バックアップスクリプトを改良した。[新]なんでも日記[新]なんでも日記ジャンル不定の日記です。バックアップスクリプトを改良した。DriveにUPするPerlスクリプトを作ったが、ファイルを読み込んでLWPでうpする仕様だったから、どうにかしてファイルを読み込まずに(メモリを使わずに)直接送れないかと方法を模索してた。Driveではmultipart/relatedで送る必要があるのでダメぽい。LWP以外にfurlってのも見たが、コマンド名を変えてるだけで中身はLWPと同じような気配だった。いうわけで、定番で使い慣れたPerl用HTTP通信モジュールのLWPではどうもできなそうなんで、より低レベルなIO::Socket::SSLを使って実装することにした。$str=shift;$str=~s/([^\w\-\.\~])/'%'.uc(unpack('H2',$1))/eg;return($str);}###こんな感じ。部分をLWP::UserAgentからIO::Socket::SSLに変更した。Socket使う場合はヘッダから直接printで出力しちゃえばいいだけだが、ファイル読み込まずにContent-Lengthを計算するのがめんどい。あと、前はファイル中にboundaryが出現しないかチェックしていたが、読み込まないんで決め打ちで「ファイル名+UNIXタイム」にした。出現しちゃったら失敗すると思うが、出現するようなことはありえないだろう。自動で切断はされないようなんでレスポンスのContent-Lengthを確認して適切なサイズでreadしないとダメぽい。GETすればフォルダ内だけに限定できるぽい。そっちの方がわかりやすいから変更した。最上位のファイルを取得する方法がわからなかったのだが、フォルダIDを"root"にすればルートフォルダの取得ができるぽいようなことも書いてあった。これなら普通のファイルシステムみたいに使えるね。目的通りメモリを使わずにUPできているかは確認しにくいが、topで見た感じだと問題無さそう。Driveに上げちゃおうかと思う。サーバーからのUPは転送量がきついが、自宅でPULLする代わりにGoogleにPUSHすれば同じだよね。自宅よりもGoogleの方がデータ消滅の危険は少ないと思うし、自宅のストレージ節約もできる。このところeBayよく見てるのだが・・・[AD]rentafree.net。