webForumDet fria alternativet
Logga in / Bli medlem

Problem med upload

PHP

2 svar · 417 visningar · startad av Denkan

Medlem sedan juni 2002256 inlägg
Trådstart#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

Medlem sedan aug. 20002 975 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")
Medlem sedan juni 2002256 inlägg
#3

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

266 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)