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
BLOB till fil
4 svar · 256 visningar · startad av Kim
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 ) {
$len = strlen ( $temp );
for ( $i=0; $i<$len; $i+=8 )
$result .= chr ( bindec ( substr ( $temp, $i, 8 ) ) );
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 ) {
$len = strlen ( $temp );
for ( $i=0; $i<$len; $i++ )
$result .= sprintf ( "%08b", ord ( substr ( $temp, $i, 1 ) ) );
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. --
Jo, jag kom på det, men tack ändå! :)
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. --
Jag gjorde ungefär som du gjorde i ditt första exempel. :)