Dateiupload mit php unter verwendung eines Arrays

Hallo zusammen,

Ich habe eine Internetseite gebaut, auf der die Möglichkeit besteht Dateien auf meinen Server zu laden. Die upload-Funktion habe ich mit php umgesetzt. Damit man mehrere Dateien gleichzeitig hochlaen kann, verwende ich ein Array.
Den Quellcode seht ihr weiter unten.
Nun zu meiner Frage:
Die ganze Sache läuft gut, solange ich nur 10 Dateien hochlade. Sobald ich 11 oder mehr laden möchte, kommt folgende Fehlermeldung:
„Warning: Variable passed to each() is not an array or object in /mnt/web8/41/90/51916590/htdocs/sun-villa.com/dt/upload.php on line 29“

Hier mein Quellcode (Auszug):

zunächst definiere ich, dass ich 20 uploadfelder haben möchte. Diese werden dann in einer for-Schleife erzeugt. Der name der inputfelder definiert das array „images[]“

$max_no_img=20; // Maximum number of images value to be set here

echo „“;
echo „“;

?>
" />

<?php for($i=1; $i<=$max_no_img; $i++){
echo "|Bild "; } echo "Preisliste "; echo ""; echo " "; } else { ?\> //hier geht es weiter mit dem html in der upload.php, die mit method post aufgerufen wird, greife ich auf das array zu: Hier wieder ein Ausschnitt: <?php $objekt = $_POST['objekt'];
while(list($key,$value) = each($\_FILES[images][name])) //Name des files wird gelesen { if(!empty($value)){ // this will check if any blank field is entered $filename = $value; // original Name des Files wird in an $filename übergeben $filename=str\_replace(".","\_$objekt.",$filename);// Add \_ inplace of blank space in file name, you can remove this line $add = "../upload/$filename"; // upload directory path is set //echo $\_FILES[images][type][$key]; // uncomment this line if you want to display the file type // echo " "; // Display a line break copy($\_FILES[images][tmp\_name][$key], $add); // upload the file to the server chmod("$add",0777); // set permission to the file. } } ?\> Ich habe keine Ahnung wieso das ganze nur mit maximal 10 Dateien funktioniert. Kann mir jemand weiterhelfen? vielen Dank Lucas

Hallo Lucas,

ich weiss nicht mehr genau wo es war, also entweder direkt bei aktuellen PHP Versionen oder in Suhosin (Sicherheitserweiterung fuer PHP), da wurde die maximale Anzahl der Dateien, die mit einem mal hoch geladen werden koennen, beschraenkt (ich glaube auch auf 10) - evtl. schlaegt das bei dir zu.
Das kannst du AFAIK nur in der php.ini aendern

Gruss
Stefan

Hallo Steffan,

Danke für die Antwort.
Die php.ini ist aber doch eine Datei, die auf dem Rechner eines jeden einzelnen liegt oder?
Heißt das, dass jeder erstmal seine php.ini ändern müsste, um mehr als 10 Dateien hochzuladen?
Oder ist die php.ini eine Datei auf dem Server?

Ich habe gerade mal mit phpinfo() nachgesehen. Also da steht bei mir bei max_file-uploads 20

Ich denke mal, dass das also nicht der Grund des Problems ist.

Aber außerdem habe ich gesehen das register_long-arrays auf off steht. kann es vlt. damit zusammenhängen? Ich war mir bis gerade gar nicht darüber bewusst, dass es long arrays und „short arrays“ gibt. Kann es sein, dass ein normales array nur 10 Elemente haben kann, und dass ich register_long_arrays auf on stellen muss, damit 20 Elemente zur Verfüging stehen?
Oder kann ich auf eine andere Art definieren, dass mein Array 20 Elemente haben soll?

lg

Lucas

Die php.ini ist aber doch eine Datei, die auf dem Rechner
eines jeden einzelnen liegt oder?
Heißt das, dass jeder erstmal seine php.ini ändern müsste, um
mehr als 10 Dateien hochzuladen?
Oder ist die php.ini eine Datei auf dem Server?

Die Datei liegt auf dem Server, auf dem PHP installiert ist. Sprich, sie muesste auf jedem Server geaendert werden wo deine Anwendung laufen soll. Das ist aber oftmals bei Webspace-Anbietern nicht moeglich.

Ich habe gerade mal mit phpinfo() nachgesehen. Also da steht
bei mir bei max_file-uploads 20

Ich denke mal, dass das also nicht der Grund des Problems ist.

Denk ich auch.

Aber außerdem habe ich gesehen das register_long-arrays auf
off steht. kann es vlt. damit zusammenhängen? Ich war mir bis
gerade gar nicht darüber bewusst, dass es long arrays und
„short arrays“ gibt. Kann es sein, dass ein normales array nur
10 Elemente haben kann, und dass ich register_long_arrays auf
on stellen muss, damit 20 Elemente zur Verfüging stehen?
Oder kann ich auf eine andere Art definieren, dass mein Array
20 Elemente haben soll?

register_long_arrays hat laut PHP Doku nichts damit zu tun.
Siehe http://www.php.net/manual/de/ini.core.php#ini.regist…

Eine andere Idee ist noch die maximale Upload-Groesse von Dateien, die bei dir da evtl. zuschlaegt. (Hier gilt die Gesamtuploadgroesse und nicht die Groesse je Datei)
Ansonsten hab ich so auf die Schnelle keine Idee.

Gruss
Stefan