Vinnaren i pepparkakshustävlingen!
2006-10-11, 01:15
  #1
Medlem
genos avatar
Hej.. jag har suttit och googlat ett bra tag nu men jag lyckas inte hitta någon lösning på mitt problem..

Jag försöker ladda upp en mp3fil till min databas.
Alltså så att filen sparas i databasen som en BLOB, inte bara till en mapp på webservern.

Följande fel dyker upp när jag försöker ladda upp en fil:
"fread(): supplied argument is not a valid stream resource"
Det skapas en entry i databasen fast BLOB-objektet är bara 0-bytes.
(Jag lyckades för länge sedan ladda upp en bild och spara den i databasen som en BLOB (med en annan tutorial jag hittade), är det någon skillnad på att mata in bilder / mp3filer i databasen?)

Koden jag mekar i nu (har googlat tutorials ett bra tag) ser ut enligt följande:
Kod:
<form action="index.php?a=upload" method="post" enctype="multipart/form-data">

<input type="hidden" name="MAX_FILE_SIZE" value="2000000">

<input name="userfile" type="file" id="userfile">
<input name="upload" type="submit" id="upload" value="Upload binary file">
</form>



<?
if ($_GET['a'] == "upload")
	{
	include("db.php");

	if(isset($_POST['upload']))
	{
	//get file information --step1
	$fileName = $_FILES['userfile']['name'];
	$tmpName = $_FILES['userfile']['tmp_name'];
	$fileSize = $_FILES['userfile']['size'];

	//get file content -- step1
	$fp = fopen($tmpName, 'r');
	$content = fread($fp, $fileSize);
	$content = addslashes($content);
	fclose($fp);



	//insert into database --step3
	$query = "INSERT INTO mp3files (file) VALUES ('$content')";
	mysql_query($query) or die('Error, query failed');

	//return insert information to client
	$id= mysql_insert_id();
	echo "File<b> $fileName</b> uploaded as id= $id<br>";
	}

	}
?>
Citera
2006-10-11, 08:37
  #2
Medlem
moniturs avatar
byt
Kod:
$fileSize $_FILES['userfile']['size']; 
till
Kod:
$fileSize filesize($tmpName); 

Och mellan
Kod:
$fp fopen($tmpName'r');
    
$content fread($fp$fileSize); 
ska du testa att lägga till
Kod:
print "$fp<br>$fileSize<br>$tmpName<br>";
passthru("ls -la $tmpName"); 
så att det blir
Kod:
$fp fopen($tmpName'r');
print 
"$fp<br>$fileSize<br>$tmpName<br>";
passthru("ls -la $tmpName");
$content fread($fp$fileSize); 
(Detta är altså för att scriptet ska skriva ut det den använder så man kanske kan se vad som är fel, ls -la är för att se filens rättigheter mm)
Men kom ihåg att inte låta andra använda scriptet när du provar detta för passthru gör att man kan köra commands på din dator.

för övrigt borde
Kod:
$content addslashes($content); 
bytas mot
Kod:
$content mysql_real_escape_string($content); 
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback