リモートファイル重要

PHPの「Webの画像をローカルに保存する方法」に、驚愕。PHPの何たるかを垣間見たような気になりました。

PHPプロな方々にはつまらない話。。

プログラムはソコソコでPHP初心者(オレ)だと、
ストリームAPIとか、HTTPクライアントとか探すと思う。
「アレーないなー」「PHPのボケやろー」と半日費やしてしまった。

<?php
 copy( "http://url.to.png" , "local.png" );
?>

え、えぇぇぇ!!

PHPマニュアル - 第39章 リモートファイルの使用

こんな大事なことは第1章に書いてくれw

php.iniでallow_url_fopenを有効にした場合(アクセスレベルはシステム管理者ですがデフォルトはONのようです)、リモートファイルという概念が生まれるそうだ。

丁寧に入出力を書くなら、

<?php
 $in = fopen("http://url.to.png","rb");
 $out = fopen("local.png","wb");

 while( !feof($in) ) {
  $contents = fread($in, 8192);
  fwrite($out,$contents);
 }

 fclose($in);
 fclose($out);
?>

一般的な言語では、ファイルといえばハードディスクのファイルシステムのことを指すものだと思い込んでるから、とまどいや賛否があるような気もするが、これがPHP流と合点。PHP使いへの道を一歩前進できたような気がして、私にとっては大きな出来事であった。


コメント
test
2007/08/04
file('http://www.example.com/'); も便利
武田ソフト
2007/08/05
testさん?テスト投稿? 正直、違和感は拭えないですけど、
PHPらしさが端的に出てる機能ですね。
初心者
2007/08/05
Eclipseの質問は教えていただきましてありがとうございました。私はPHPしかわかりませんが、こんな機能があるなんて知りませんでした。もっと勉強せねば。
武田ソフト
2007/08/05
はい、コツコツがんばりましょ。初心者だなんて謙遜しないで、ハッタリかまして行きましょう!^^)
koichiro
2007/08/06
タイムリーにもLL魂でそれを利用した脆弱性についてのお話がありました。

http://labs.cybozu.co.jp/blog/takesako/2007/08/llspirit_imagefight.html

対策としてはPHPを避けること...
武田ソフト
2007/08/06
おおLL魂行ったのか。情報ありがとう。
ショック。。。しかしこの資料、 あえてインジェクションできるようにコーディングしてるだけじゃないか?と思ったけど・・・SQLインジェクションができてしまうDBは使うな、ということになるのか?よくわからないな。

偶然にも、あまりに遅いっつー理由で、リモートファイルは使わないでcURL使うことにしました。
php好
2007/08/07
>あまりに遅いっつー
遅いってことないと思うけどな???
武田ソフト
2007/08/07
数枚の画像とりこみが直列になってしまうから遅い、という意味でした。(並列にするためにcurl_multiを採用してます)
ですが、体感的に、起動が遅いような気もします。このあたりお詳しければ、ぜひ教えてください。

コメントしてください
お名前:
入力しなければ「匿名さん」。20字以内。

メール:
入力しても表示しません

URL:
入力すればリンクが貼れます


コメント: