[php] Zip Fkt. => Manche Bilder Nicht Richtig Gespeichert

bodo2005

Lt. Junior Grade
Registriert
Okt. 2005
Beiträge
333
Ich habe einen kleinen Codeausschnitt beigefügt, der aus einem Zip-Archive, welches vom user hochgeladen wurde die .jpg Dateien in einem Ordner abspeichern soll und auch ein Thumbnail erzeugt. Funktioniert soweit auch, bis daruaf, dass manche Bilder nicht richtig abgespeichert werden, d.h. die Datei wird angelegt, aber der Inhalt anscheinend nicht rein geschrieben wird... Bei einem Archive mit ca. 15 Bildern passiert dies ca. 2-3 mal... meist beim letzten Bild...

Woran kann dies liegen? (Die Thumbnails der betroffenen Bilder werden alleridngs perfekt erzeugt...) Das ist ja das paradoxe, hat jemand eine Idee?

Code:
if($_POST['group'] != '')
					{
							if(isset($_FILES["zip_file"]) && $_FILES["zip_file"]['name'] != '')
							{
									if($_FILES["zip_file"]['error'] == UPLOAD_ERR_OK)
									{
										$zip = zip_open($_FILES["zip_file"]['tmp_name']);
										while ($zip_entry = zip_read($zip))
										{				
											$time = time()+mt_rand(1,100);
											$name = ABS_HOME.'upload/img_'.$time.'.jpg';
											
											zip_entry_open($zip, $zip_entry, 'r');
																		
											$fopen = fopen(ABS_HOME.'upload/img_'.$time.'.jpg', 'w');
											fwrite($fopen, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));
											fclose($fopen);
											zip_entry_close($zip_entry);
											
											mysql_query("INSERT INTO bilder (name, gruppe) VALUES ('img_$time.jpg', '".$_POST['group']."')");
								
											
											// Thumbnail erzeugen
											$grafik = $name;
											$werte = getimagesize($grafik);
											$breite = $werte[0];
											$hoehe = $werte[1];
	
											// Neue Werte festlegen
											if($breite > $hoehe)
											{
												$breite_neu = $image_breite;
												$skal = $breite/$breite_neu;
												$hoehe_neu = intval($hoehe/$skal);
											}
											else 
											{
												$breite_neu = $image_breite2;
												$skal = $breite/$breite_neu;
												$hoehe_neu = intval($hoehe/$skal);
											}
		
											$bild = imagecreatefromjpeg($grafik);
											$bild_neu = imagecreatetruecolor($breite_neu, $hoehe_neu);
	
											imagecopyresized($bild_neu, $bild, 0, 0, 0, 0, $breite_neu, $hoehe_neu, $breite, $hoehe);
		
											imagejpeg($bild_neu, ABS_HOME.'upload/img_'.$time.'_small.jpg', 80);
											imagedestroy($bild);
											imagedestroy($bild_neu);
										}
										
										zip_close($zip);
										move_uploaded_file($_FILES["zip_file"]['tmp_name'], $name);
									}
							}
					
						$meldung = 'Alle Bilder wurden hochgeladen!';
						$ew = '?section='.$sec;
 
öffne alle Dateien mal im Binär-Modus.
Also z.B.
$fopen = fopen(ABS_HOME.'upload/img_'.$time.'.jpg', 'wb');
 
Habe selten so komisch eingerückten Code gesehen :D
Könnte auch sein, dass der Server das Skript vorher abbricht, also das es ein Problem beim ausführen des Skripts ist. Oder die Bilder sind zu groß & deswegen wird kein Thumbnail erzeugt. Habe letztens auch so ne Funktion für ein cms geschrieben, funktioniert bei mir wunderbar.

EDIT:

Habe den Code schnippsel nun nich genauer angeschaut, prüfst du ob die Datei schon vorhanden ist? Könnte ja sein, dass die Datei schon vorhanden ist und deswegen nicht angelegt werden kann.
 
Nein es lag daran, dass ich das Zip-File zum Schluss noch verschieben lassen habe und dummerweise mit dem zuletzt verwendeten Dateinamen, geht jetzt bestens, nur ein Prob, wenn das Zip bsw. 100 MB groß ist, bricht das Script ab, warum??? (bzw. wird nichts gemacht)...
 
100 MB groß? Also bei Hosteurope dürfen Dateien max. 8 MB groß sein wenn man sie hochlädt. Da man den Uploadvorgang mit PHP auch nicht steuern kann, würde ich nicht so große ZIP Dateien nehmen. Entweder isses nen Timeout Problem oder PHP verarbeitet die Datei nicht, weil se eben zu groß is.
 
Naja als Beispiel wurden ja 100 MB große Zips auf dem Heimserver verwendet ;)
Naja also bei ca. 14-15 MB ist schluss, dann verarbeitet PHP nicht mehr... wo kann man dies einstellen??? :)
 
Ich vermute mal in der php.ini
Wie gesagt in echten Anwendungen, würde ich das nicht mit all zu großen Dateien machen.
 
Zurück
Oben