webForumDet fria alternativet

Problem med upload

2 svar · 415 visningar · startad av Denkan

DenkanMedlem sedan juni 2002261 inlägg
#1

Tjo!
Ska direkt säga att jag vet inte om denna tråd borde ligga i PHP eller Apache. Skit samma

Jo, jag har/hade en liten gullig upload som sparade filerna enkelt o smidigt i min mySQL-databas.
Visar sedan bilderna med hjälp av en php-fil. Funkade perfekt för två dagar sedan, då jag körde på gamla IIS(5.1).
Nu har jag även installerat Apache 1.3.22 och allt flyter på bra, både PHP, (chili!)ASP samt databaserna.

Satt idag o surfade omkring på en upload-skriptet och skulle ladda upp en bild.
Till min dampiga förvåning såg jag att filen inte blivit korrekt uppladdad.
Den visar halva bilden och sedan trasas den sönder. Som om den droppat data på vägen in till databasen.

Felsökte problemet genom att under uploadprocessen testa upload genom filsystem (copy()) och det funkade fint.
Ingen trasig bild där, inte. Dem redan befintliga bilderna i databasen visas också korrekt,
så det är inte heller fel på filen som skriver ut bilden.

[Tabelluppsättning: images]
id....................int
image.................longblob
image_type............varchar(50)
image_name............varchar(50)
image_size............int
h.....................int
w.....................int

och så till koderna (rensade från skräpkod)....

[upload]

<?php
if($_FILES){
$image_types = Array("image/jpeg","image/gif");
	
	if(is_uploaded_file($_FILES["pfil"]["tmp_name"])){
		$image = addslashes(fread(fopen($_FILES["pfil"]["tmp_name"],"r"),filesize($_FILES["pfil"]["tmp_name"])));
		$image_size = $_FILES["pfil"]["size"];
		$image_type = "image/gif";
		$image_name = "usr".$_SESSION['id'].".gif";
		
		if(in_array(strtolower($image_type),$image_types)){
			if($image_size <= 20000){
			$size = getimagesize($_FILES["pfil"]["tmp_name"]);
			$w = $size[0];
			$h = $size[1];
			
			mysql_connect(********,****,****);
			mysql_select_db(***);
			mysql_query("DELETE FROM images WHERE image_name='{$image_name}'");
			mysql_query("INSERT INTO images (image,image_size,image_type,image_name,w,h) VALUES ('{$image}','{$image_size}','{$image_type}','{$image_name}',{$w},{$h})");
                        
			echo "Jaja... filen uppladdad... weoweo";
			} else { echo "<font color=\"CC0000\"><b>[ ERROR ]</b><br>- Filen får max vara 20Kb stor</font>"; }
		} else { echo "<font color=\"CC0000\"><b>[ ERROR ]</b><br>- Tillåter endast *.gif och *.jpg -format</font>"; }
	} else { echo "<font color=\"CC0000\"><b>[ ERROR ]</b><br>- Ett fel uppstod -> kan inte läsa filen.<br>- Var god försök igen.</font>"; }
}

?>

      <form method="post" action="*****.php" enctype="multipart/form-data">
      <b>Sökvägen till din profilbild</b><br>
      <input type="file" name="pfil" size="30"><br>
      <input type="submit" value="LADDA UPP BILDEN">
      </form>

[visa bild]

<?php
if(isset($_GET['usr'])){
mysql_connect(********,****,****);
mysql_select_db(***);
	if($rs = mysql_fetch_array(mysql_query("SELECT * FROM images WHERE image_name='usr".$_GET['usr'].".gif'"))){

	} else {
	$rs = mysql_fetch_array(mysql_query("SELECT * FROM images WHERE image_name='none.gif'")); 
	}
} else {
$rs = mysql_fetch_array(mysql_query("SELECT * FROM images WHERE image_name='none.gif'")); 
}

$image = $rs['image'];
$image_type = $rs['image_type'];

	
Header("Content-type: $image_type");
print $image;
?>

Aja... mycket skit, men det funkade iaf innan.
Nu är frågan; är det fel på min kod, php-konfigurationen, eller apache?
Ska tilläggas att php-konfigurationen till Apache är så gott som identisk med IIS'.
Har också testat situationen på två servrar med samma resultat

Någon som varit med om nåt liknande, eller ännu bättre... har en lösning?

Rubriken ändrad mha §1 i wf´s regelsamling

PeW / moderator

MatteMedlem sedan aug. 20002 970 inlägg
#2

Det intressanta är att det fungerade med IIS :)

I och med att du kör/körde IIS får jag anta att du använder Windows, och på Windowssystem ska binära filer, typ bilder mm, skrivas och läsas binärt. Du ska alltså göra din fopen så här:

fopen($_FILES["pfil"]["tmp_name"],"rb")
DenkanMedlem sedan juni 2002261 inlägg
#3

Stort tack, ska du ha! :bire
Hade jag ingen susning om (nybörjare @ php)

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb