ストリームラッパー関数とは?

このQ&Aのポイント
  • ストリームラッパー関数とは、その名の通りストリームをラップするための関数です。
  • 一般的なファイルのように扱えるストリームを作成することができます。
  • ファイルに落とすことなく、変数上でストリームとして扱うことができる便利な機能です。
回答を見る
  • ベストアンサー

ストリームラッパー関数?について

http://jp2.php.net/manual/ja/stream.streamwrapper.example-1.php に「グローバル変数の読み書き用のストリーム」ということで 便利なclass VariableStreamを掲載して頂いております。 非常に便利で使わせて頂いております。 例えば・・・データベース上から画像データ引っ張りだして $img_data = pg_unescape_bytea(データべーすから引っ張り出します); require_once("VariableStream.inc"); stream_wrapper_register("var", "VariableStream") or die("Failed to register protocol"); list($width, $height) = getimagesize("var://img_data"); とかしてファイルに落とさずに変数にいれたまま画像のサイズを取得したりしてます。 ----ここから本題----------------------------- んでもさすがに filesize("var://img_data"); これは動作しませんでした。 Warning: filesize(): VariableStream::url_stat is not implemented! 1,ファイルに落とさずに動作させることは理論的に可能でしょうか? 2,動作するような関数は既存で存在していますか?

  • PHP
  • 回答数2
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

ストリームラッパーを使う必要はありません。PHP5.4以降であればgetimagesizefromstring関数が使えます。 PHP Manual - getimagesizefromstring http://www.php.net/manual/ja/function.getimagesizefromstring.php PHP5.3向けに実装したい場合、以下のような関数を用意して代用します。 Gist - Define getimagesizefromstring to use in PHP 5.3 https://gist.github.com/t-cyrill/6109550 >> んでもさすがに >> >> filesize("var://img_data"); >> >> これは動作しませんでした。 strlen("img_data") でいいのでは…? PHP Manual - strlen http://www.php.net/manual/ja/function.strlen.php

muuming2001
質問者

お礼

たしかに確かに strlenでよかですねw

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

っていうか、データベースに格納してあるなら 文字列関数でバイト数を調べることできるでしょ?

muuming2001
質問者

お礼

たしかに確かに strlenでよかですね

関連するQ&A

  • なぜ関数をfuncで呼び出すのか。なぜfunc()ではいけないのか。

    画像の読み込み完了をトリガーとして動作する以下のような関数があります。 var img = new Image(); window.onload = function() { img.onload = func; } function func() { (省略) } img.onloadによって、画像の読み込みが完了したときに動作する関数を指定していますが、なぜfuncと書き、func()ではいけないのでしょうか?実際に試してみましたが、()をつけると動作しませんでした。()をつけないで関数を呼び出す方法を知らなかったので(無名関数を使う場合でさえ、変数名()という形を取るのに)、この理由が分からなくて困っています。どなたか教えてください。

  • [au携帯] DBに格納されたバイナリ形式の画像を表示する方法

    [au携帯] DBに格納されたバイナリ形式の画像を表示する方法 データベース(PostgreSQL)に格納されたバイナリデータの画像をPHPを使用して元に戻し表示しようとしています。 携帯用ホームページを作成しているのですが、ドコモだとちゃんと表示されるのにAUでアクセスすると画像がバッテンになってしまって表示できません。 下記のようにPHPを使って画像を表示しているのですが何処が間違っているのでしょうか。 画像の表示用 img.php <?php //DBから必要なデータを取得します。 // $imag_data ------- バイナリ形式の画像データ // $image_file_type - 画像保存時に下のようにして取得した値 // list($width,$height,$image_file_type)=getimagesize($imgurl); // $img_name -------- 画像の名前 $imag_data = pg_unescape_bytea($imag_data); header("Content-type: " .$image_file_type); header('Content-Disposition: inline; filename="' .$img_name.'"'); print($imag_data); exit(); ?> img.phpに直接アクセスするのと、<img src='http://…img.php' />で表示してみたのですが、ドコモだと2通りともできるのに、AUだと「リクエストされたページは表示できません。」と出てしまい、困っています。 どなたか、ご教授くださいますようよろしくお願いいたします。

    • 締切済み
    • PHP
  • getimagesizeを使う場合

    初心者です。わかりにくいかもしれませんがよろしくお願いします。 特定のディレクトリにある画像ファイルをすべて取得して サムネイル表示しようとしています。 画像サイズを取得するのに、getimagesize関数を使いますが、 //対象ディレクトリ $opdir = "./"; //img2ディレクトリ $dir = opendir($opdir); while( ($ent = readdir($dir)) !== false ) { $str = strstr($ent,"."); $imginfo = getimagesize($ent,$image_info); var_dump($imginfo); } こんな感じで、同一の階層にある画像はサイズがきちんと取得できるのですが、 //対象ディレクトリ $opdir = "../"; //img1ディレクトリ のように、別階層のディレクトリを指定すると、 エラー表示になってしまいます。 エラー内容 Warning: getimagesize(aisatu.gif): failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\test\img1\img2\img.php on line 27 bool(false) 別の階層の画像サイズは取得できないのでしょうか。 それとも方法が間違っているのでしょうか。

    • ベストアンサー
    • PHP
  • DBに格納されたバイナリデータを画像表示する方法

    PHP初心者ですみません。PHP、PSQLでDBにアップロードされた画像データ(バイナリデータ)をWEB上で例<img src=image.php>画像表示したいのですが、画像が×表示になってしまいます。格納時にデータが間違っているのか?それとも表示方法が間違っているのかわかりません。どなたか助けてください。 【アップファイル格納時スクリプト】 //fopenして変数に保存 $fp = fopen($_FILES["upfile"]["tmp_name"],"r"); $imagedata = fread($fp,filesize($_FILES["upfile"]["tmp_name"])); fclose($fp); //バイナリデータをエスケープ $imagedata = pg_escape_bytea($imagedata); $filename = $_FILES["upfile"]["name"]; $sql_g = "update img set img_data='$imagedata'"; $conn_g = connect(); $result_g = pg_query($conn_g,$sql_g); pg_close($conn_g); } 【画像表示用ファイルスクリプトimage.php】 $sql_i = "select img_data from img"; $conn_i = connect(); $res_i = pg_query($conn_i,$sql_i); $num_i = pg_num_rows($res_i); $img_data = pg_fetch_result($res_i,0,"img_data"); header('Content-type: image/gif'); header('Content-Disposition: inline; filename=' . $img_data); print"${img_data}"; 【画像表示部分スクリプト】 <img src="http://●●●●/●●/image.php" alt="イメージ" width="500" height="100"> こんな感じなのですが、どこがどう違うのか何度も試してやっとここまできたのですが、答えがでません。お解りの方いらっしゃいましたらご指摘をどうかよろしくお願いいたします。

  • imagecreatetruecolor()関数でのエラー

    imagecreatetruecolor()関数を使用するのですが どうしてもエラーが起きてしまい、使用できません。 そのソースですが $img1tmp = $_FILES['img1']['tmp_name']; list($width,$height)=getimagesize($img1tmp); header ("Content-type: image/jpeg"); $src=@imagecreatefromjpeg($img1tmp); $dst=@imagecreatetruecolor($cwidht1,$cheight1) or die ("Cannot Initialize new GD image stream"); imagecopyresized($dst,$src,0,0,0,0,$cwidth1,$cheight1,$width,$height); $boRtn1=imagejpeg($dst,「保存場所.ファイル名」); となってます。 各変数には、ちゃんと数値等は指定されています。 GDライブラリも問題なくインストールされているのですがimagecreatetruecolor()関数が動かず、上記で指定しているCannot Initialize new GD image streamが 表示されてしまいます。 どうぞ、よろしくお願い致します。

    • 締切済み
    • PHP
  • ダウンロードさせると*.phpにリネームされてしまう。

    phpでファイルのダウンローダを作成したのですが、IEで動かすと*.phpと動作しているphpのスクリプトネームにリネームされてしまいます。 FireFoxではリネームされる事無くダウンロードされるのですが、IEでの解決方法をご存知の方、どうぞご教授くださいませ。 コードは $filesize=filesize($filedldir); header ("Accept-Ranges: none"); header ("Content-Length: $filesize"); header ("Content-Type: application/octet-stream"); header ("Content-Disposition: attachment; filename=$fnames"); readfile ($filedldir); exit; といった感じです。 何がおかしいのでしょうか?

    • ベストアンサー
    • PHP
  • [html]クロスドメインのストリームを張り付ける

    mjpg-streamerを利用して、定点カメラで撮影している動画を ストリーム配信しています。 mjpg-streamerは8080番ポートで動作中で、 <http://xxx:8080/?action=stream>で動画が参照できます。 同一ノード上の80番ポートでウェブサーバが稼働しており、 そのhtmlページにmjpg-streamerのストリーム動画を張り付けたいです。 <img src="http://xxx:8080/?action=stream" /> で張り付けたところ、スマホのchromeからは動画が確認できましたが、 PCのchromeでは表示できません。デバッガ上には以下のメッセージが出ています。 GET http://xxx:8080/?action=stream net::ERR_CONNECTION_REFUSED 同一ノードとはいえ、ポートが違うのでクロスドメインと判定され、 接続拒否されているものと思います。 ボタンクリック等の際にクロスドメインのjavascriptからデータ取得等を行う場合には、jsonpやjquery.xdomainajax.jsを利用することで回避していますが、 streamを埋め込む場合にはどのようにすればよいのか分からず困っています。 解決方法が分かる方、教えてください。

    • ベストアンサー
    • AJAX
  • file_existsが動作しない

    お世話になります。 $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } という形で画像ファイルが存在するかを調べているのですが、PHPに直接記述した場合動作し、functionの中に入れると動作しなくなるのはなぜでしょうか? function pict($test){ $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } return $var; } 上記のfunction内に入れた場合、returnの値が「ないよ!」になってしまうのです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • DBからPHP出力された画像の情報取得について

    Linux、PHP4.3.11、MySQLの環境でPHPスクリプトの作成を試行しています。 MySQLの BLOB型 に格納された画像バイナリを呼び出してそのまま出力するスクリプトを作成し、同スクリプトから出力された画像ファイルのサイズや種別情報を「getimagesize()」で取得しようとしているのですがうまく行きません。 画像出力の処理は、MySQLからバイナリのデータを読み出して HTTP HEADER をつけてそのまま出力する処理を行っています。 // 画像出力処理 <?php $image = /* DBからバイナリを取得する処理 */ header("Content-type: image/jpeg\n\n"); echo $image; exit(); ?> 上のスクリプトをWEBブラウザで呼び出すと画像を表示する事ができます。 また、<img src="画像出力スクリプトのURL">としてHTML中に記述しても画像を表示できます。 しかし、getimagesize() で画像情報を取得しようとしても False となり、画像の構成情報を取得できません。 // 画像情報取得処理 <?php $src = "http://画像出力スクリプトのURL"; var_dump(getimagesize($src)); exit(); ?> $src にローカルにある実ファイル画像を指定した場合( "./hoge.jpeg" )や 他のWEBサーバ上にある画像ファイルを指定した場合( "http://よそのサーバURL/hoge.jpeg" )等は画像情報をちゃんと取得できます。 画像出力用のスクリプトで行わなければならない処理が何か不足しているのでしょうか。 原因となりそうな物が分かる方がいらっしゃいましたらご教示お願いいたします。

    • ベストアンサー
    • PHP
  • プログラムのみで複雑に画像を変える方法役

    クリックすると画像が次々と変わるものを作りたいのですが、 下記方法では画像の枚数が増えたり、複雑な動作を作る場合、 複雑な構造になってしまうと思うのですが、 少しでも複雑にならない方法はありますか? フラッシュは使わずにプログラムだけで 同じ位置で画像を変えたいです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title></title> <script language="JavaScript"> <!-- var img1 = new Image(100,50); var img2 = new Image(100,50); var img3 = new Image(100,50); var img1.src = "sample1.gif"; var img2.src = "sample2.gif"; var img3.src = "sample3.gif"; function mF1(){ document.images[0].src = img1.src; setTimeout("mF2()",100); } function mF2(){ document.images[0].src = img2.src; setTimeout("mF3()",100); } function mF2(){ document.images[0].src = img3.src; } //--> </script> </head> <body> <img src="omote.jpg" width="100" height="50" onclick="mF1()"> </body> </html> あと、document.images[0].srcを変数として格納すると動作しないのですが、 document~というのは変数にできないのでしょうか。 var dcum = document.images[0].src; function mF1(){ dcum = img1.src; setTimeout("mF2()",100); } function mF2(){ dcum = img2.src; setTimeout("mF3()",100); } function mF2(){ dcum = img3.src; }

専門家に質問してみよう