Upload endet nach 20 Dateien

daniel_sun

Erfahrenes Mitglied
Datei-Upload endet nach 20 Dateien

Hallo,

Ich habe ein Datei Upload, mit dem ich mehrere Bilder hochladen kann. Diese Bilder werden dann auf dem Server in einem bestimmten Ordner kopiert und bestimmte Daten der Bilder in eine Datenbank geschrieben.

Nachdem ich den Datei Upload um mehrere Male getestet habe ist mir aufgefallen, dass nie mehr als 20 Dateien im Zielordner sind. Es ist egal ob ich 30 40 oder 50 hoch lade. In der Datenbank werden 30 40 oder 50 neue Einträge erstellt aber es werden trotzdem nur die ersten 20 Dateien in den Zielordner verschoben.

Ich frage mich nun, woran das liegen könnte. Gibt es irgendwo eine Grenze für die Dateianzahl oder für die Größe des Array? Wenn es so etwas gibt wie kann ich die Grenze höher setzen so dass der User auch größere Dateimengen ablaufen kann.



Gruß
Daniel Sun
 
Zuletzt bearbeitet:
Naja, sind die Bilder gleich benannt? bzw haben die selbe Syntax? Haben sie das selbe Dateiformat oder hast z.Bsp. gif-Bilder und der upload dieser wird unterbunden? Hast du genug Speicherplatz?

Wie packst du die Bilder in das Array?

Alternativ lädst du Bilder als Zip oder rar hoch und lässt die dort wieder entpacken
 
Sind die Bilder alle Gleich benannt?

Auf dem PC liegen Sie mit folgender syntax datum_name_bildnummer. Auf dem Server wird der name mit uniqid() vergeben.

Haben sie das selbe Dateiformat?

Ja es waren alles jpg's und habe auch drauf geachtet das ich nix hochlade was ausgeschlossen wird. Wenn ich gemischte type hochlade (gif, png, jpg) werden die ersten 20 Bilder (unabhängig des Typs) hochgeladen.

Hast du genug Speicherplatz?

Ja teste es lokal mit Xampp.

Wie packst du die Bilder in das Array?

Das Array ist schon im input-feld definiert:

HTML:
<input type="file" name="pictures[]" multiple="true" accept="image/*" size="85" />

So greife ich nacher drauf zu:

PHP:
$_FILES['pictures']['tmp_name'][0]

Hab schon gestestet ob es am size liegt aber das ist es nicht.

Ich verarbeite das Array in dem ich es in ner Schleife durchgehe:

PHP:
$count = count($_FILES['pictures']['name']);
					$count--;	
					$i = 0;
					
					do{
						//Prüfen um welchem Bild-Typ es sich handelt!
						switch($_FILES['pictures']['type'][$i])
						{
							case "image/jpeg":
								$type = "jpg";
								break;
							
							case "image/png":
								$type = "png";
								break;
								
							case "image/gif":
								$type = "gif";
								break;
						}

                                               //Hier geht die Verarbeitung noch weiter. mit datanbank eintrag und move_uploaded_file() ect.

$i++
}while($i <= $count);

Wie gesagt, die DB-Einträge werden immer für alle Datein gemacht (40, 50, 60). Aber die Datein stoppen bei 20.
 
Naja, wenn ich das richtig sehe, knallst du die nur in den Temporären Speicher. Vielleicht solltes du die Bilder von dort aus in ein anderes Verzeichnis schieben. Stichpunkt move_uploaded_file. Hier wird der tmp-Verzeichnis auch wieder geleert.
 
Naja, wenn du deine ganzen prüfungen abgeschlossen hast:
PHP:
 move_uploaded_file($_FILES['pictures']['name'],"bilder/bildernamen.jpg");
 
Aber das mach ich doch:

PHP:
//Zähler vorbereiten und Schleife starten
					$count = count($_FILES['pictures']['name']);
					$count--;	
					$i = 0;
					
					do{
						//Prüfen um welchem Bild-Typ es sich handelt!
						switch($_FILES['pictures']['type'][$i])
						{
							case "image/jpeg":
								$type = "jpg";
								break;
							
							case "image/png":
								$type = "png";
								break;
								
							case "image/gif":
								$type = "gif";
								break;
						}
																
						//Die bisher abgelegten Bilder für dieses Album zählen, umd die Sort_id weiter führen zu können
						$sql = "SELECT * FROM bilder WHERE album_id = '".$_GET['id']."'";
						$result = mysql_query($sql);
						$num = mysql_num_rows($result)+1;
						
						//Als namen eine zufällige ID festlegen
						$name = uniqid().".".$type; 
						
						//Hochgeladene Daten in den Richtigen Ordner verschieben!
						move_uploaded_file( $_FILES['pictures']['tmp_name'][$i]  , "../uploads/pictures/".$ordner."/".$name );
						
						//Daten des Bildes in die Datenbank schreiben
						$sql= "INSERT INTO bilder (name, dateiformat, vorschau_bild, sort_id, album_id) VALUES ('".$name."', '".$type."', 'false', '".$num."', '".$_GET['id']."')";
						mysql_query($sql);
						
						//Zähler um eins Erhöhen
						$i++;
					}while($i <= $count);

So wird bild für bild durch gegangen!
 
Sry!

wie schon gesagt. Gehe jede Datei in der schreife durch. Verschiebe sie in den Pics-Ordner und trage es in die DB ein!

Nach 20 Datein hört das verschieben auf aber die DB-Einträge werden fortgesetzt. Das verwundert mich halt. Wenn beides nach 20 Datein aufhören würde wüsste ich das ich an der schleife oder so suchen müsste. Aber die Geht alle Datein durch. Diese stehen auch alle mit name Typ ect in der DB.
 
Zurück