PHP 8.2.29 Released!

Voting

: max(five, four)?
(Example: nine)

The Note You're Voting On

alexyam at live dot com
13 years ago
I wanted to use getimagesize() on .SWF files stored in the database as blob data and couldn't find a simple solution, so I created my own.

I am releasing this code under the MIT license to save everyone some time:

<?php
/*
----------------------------------------------------------------------
PHP Blob Data As File Stream v1.0 (C) 2012 Alex Yam <[email protected]>
This code is released under the MIT License.
----------------------------------------------------------------------
[Summary]

A simple class for PHP functions to read and write blob data as a file
using a stream wrapper.

Particularly useful for running getimagesize() to get the width and
height of .SWF Flash files that are stored in the database as blob data.

Tested on PHP 5.3.10.

----------------------------------------------------------------------
[Usage Example]

//Include
include('./blob_data_as_file_stream.php');

//Register the stream wrapper
stream_wrapper_register("BlobDataAsFileStream", "blob_data_as_file_stream");

//Fetch a .SWF file from the Adobe website and store it into a variable.
//Replace this with your own fetch-swf-blob-data-from-database code.
$swf_url = 'http://www.adobe.com/swf/software/flash/about/flashAbout_info_small.swf';
$swf_blob_data = file_get_contents($swf_url);

//Store $swf_blob_data to the data stream
blob_data_as_file_stream::$blob_data_stream = $swf_blob_data;

//Run getimagesize() on the data stream
$swf_info = getimagesize('BlobDataAsFileStream://');
var_dump($swf_info);

----------------------------------------------------------------------
[Usage Output]

array(5) {
[0]=>
int(159)
[1]=>
int(91)
[2]=>
int(13)
[3]=>
string(23) "width="159" height="91""
["mime"]=>
string(29) "application/x-shockwave-flash"
}

*/

class blob_data_as_file_stream {

private static
$blob_data_position = 0;
public static
$blob_data_stream = '';

public static function
stream_open($path,$mode,$options,&$opened_path){
static::
$blob_data_position = 0;
return
true;
}

public static function
stream_seek($seek_offset,$seek_whence){
$blob_data_length = strlen(static::$blob_data_stream);
switch (
$seek_whence) {
case
SEEK_SET:
$new_blob_data_position = $seek_offset;
break;
case
SEEK_CUR:
$new_blob_data_position = static::$blob_data_position+$seek_offset;
break;
case
SEEK_END:
$new_blob_data_position = $blob_data_length+$seek_offset;
break;
default:
return
false;
}
if ((
$new_blob_data_position >= 0) AND ($new_blob_data_position <= $blob_data_length)){
static::
$blob_data_position = $new_blob_data_position;
return
true;
}else{
return
false;
}
}

public static function
stream_tell(){
return static::
$blob_data_position;
}

public static function
stream_read($read_buffer_size){
$read_data = substr(static::$blob_data_stream,static::$blob_data_position,$read_buffer_size);
static::
$blob_data_position += strlen($read_data);
return
$read_data;
}

public static function
stream_write($write_data){
$write_data_length=strlen($write_data);
static::
$blob_data_stream = substr(static::$blob_data_stream,0,static::$blob_data_position).
$write_data.substr(static::$blob_data_stream,static::$blob_data_position+=$write_data_length);
return
$write_data_length;
}

public static function
stream_eof(){
return static::
$blob_data_position >= strlen(static::$blob_data_stream);
}

}
?>

<< Back to user notes page

To Top