webForumDet fria alternativet

BLOB till fil

4 svar · 256 visningar · startad av Kim

KimMedlem sedan jan. 20007 697 inlägg
#1

Jag har en mysql-databas med en tabell där en blob finns som i sin tur innehåller en bild. Kan man på något smidigt sätt kopiera innehållet i en blob till en fil som sedan ska ligga på servern? :q

SPiNMedlem sedan mars 20007 896 inlägg
#2

Det borde gå. Försök något sånt här:

<?php
mysql_connect ( "server", "uid", "pwd" );
mysql_select_db ( "db" );
$result = mysql_query ( "SELECT picture FROM table WHERE id = 1" );
$row = mysql_fetch_array ( $result );
$data = $row [ 'picture' ];
mysql_close ();

$filePointer = fopen ( "theImage.jpg", 'w+' );
fputs ( $filePointer, $data, strlen ( $data ) );
fclose ( $filePointer );
?>

Bara något som poppade upp i huvudet, annars har jag ingen aning om hur man kan göra. Ett annat sätt är iofs att innan du stoppar in bilden göra om den till en ASCII-sträng, och sedan när du plockar ut den göra om den till binär innan du puffar in den i en fil.

Då skulle det kunna se ut nåt så här:
Lägga in i databasen:

<?php
$theImage = "C:\\Pictures\\theImage.jpg";

$filePointer = fopen ( $theImage, 'r' );
set_magic_quotes_runtime ( 0 );
$data = fread ( $filePointer, filesize ( $theImage ) );
set_magic_quotes_runtime ( get_magic_quotes_gpc () );
fclose ( $filePointer );

function bin2asc ( $temp ) {
&nbsp; $len = strlen ( $temp );
&nbsp; for ( $i=0; $i<$len; $i+=8 )
&nbsp; &nbsp; $result .= chr ( bindec ( substr ( $temp, $i, 8 ) ) );
&nbsp; return $result;
}

mysql_connect ( "server", "uid", "pwd" );
mysql_select_db ( "db" );
mysql_unbuffered_query ( "INSERT INTO table ( picture ) VALUES ( '" . bin2asc ( $data ) . "' )" );
mysql_close ();
?>

Ta ut ur databasen:

<?php
mysql_connect ( "server", "uid", "pwd" );
mysql_select_db ( "db" );
$result = mysql_query ( "SELECT picture FROM table WHERE id = 1" );
$row = mysql_fetch_array ( $result );
$data = $row[ 'picture' ];
mysql_close ();

function asc2bin ( $temp ) {
&nbsp; $len = strlen ( $temp );
&nbsp; for ( $i=0; $i<$len; $i++ )
&nbsp; &nbsp; $result .= sprintf ( "%08b", ord ( substr ( $temp, $i, 1 ) ) );
&nbsp; return $result;
}

$filePointer = fopen ( "theImage.jpg", 'w+' );
$binaryData = asc2bin ( $data );
fputs ( $filePointer, $binaryData, strlen ( $binaryData ) );
fclose ( $filePointer );
?>

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

KimMedlem sedan jan. 20007 697 inlägg
#3

Jo, jag kom på det, men tack ändå! :)

SPiNMedlem sedan mars 20007 896 inlägg
#4

Hur? Vilket? Var? :)

Hur gjorde du? Alltid intressant... :)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

KimMedlem sedan jan. 20007 697 inlägg
#5

Jag gjorde ungefär som du gjorde i ditt första exempel. :)

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)