PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei-Upload - Größe macht Probleme


Heppi
20.01.2005, 06:59:50
Guten Morgen,

hab mir ein PHP-Skript geschrieben, welches eine hochgeladene zip-Datei entpackt und auf dem Server speichert. Dient dazu, daß ich die ganzen Bilder nicht extra hochladen muß. Geht nach langem hin und her jetzt auch richtig sauber. Habe da allerdings noch ein Problem - vielleicht nicht direkt PHP, aber vielleicht kann mir trotzdem jemand helfen.

Ich habe das unten stehende HTML-Formular.

<form name="bilder" enctype="multipart/form-data" action="../../body/abteilungen/bilder.php" method="post">
Titel f&uuml;r die Bilder<br>
<input type="text" name="titel" size=40 class="textfield"><br><br>
Bilder (max. 10000 kB)<br>
<input type="hidden" name="MAX_FILE_SIZE" value="10000000"><input type="file" name="bilder" size=40 class="textfield"><br><br>
<input type="submit" value="Bilder hochladen" class="inhalt">
<input type="reset" value="Felder l&ouml;schen" class="inhalt">
</form>

Wenn die Größe des hochzuladenden Files größer als ca. 2 MB ist, wird das PHP-Skript aufgerufen und meine Variable 'bilder' ist leer.
Hat jemand eine Ahnung was das sein kann? Gibt's da irgendwelche Timeouts oder so?

Grüße, Heppi.

c4
20.01.2005, 08:03:21
In der php.ini gibt es einen Wert bei upload_max_filesize, welcher wohl am Abbruch Schuld hat.

Heppi
20.01.2005, 08:23:32
Original geschrieben von _c_4_
In der php.ini gibt es einen Wert bei upload_max_filesize, welcher wohl am Abbruch Schuld hat.

Aber zu dem Zeitpunkt läuft das php-Skript doch noch gar nicht oder habe ich das jetzt falsch verstanden!?

c4
20.01.2005, 08:38:01
Was mir da so einfällt: PHP erfährt die Größe der Datei eigentlich erst, wenn die Datei komplett auf dem Server ist. Glaube ich.
Bricht es denn sofort ab oder erst nach eine Weile?

Solltest zumindest mal via phpinfo() ermitteln, welchen Wert die Variable hat.

Du hattest auch die Idee mit dem TimeOut. Den kannst Du mittels set_time_limit() (http://php.net/set_time_limit) umgehen.

Heppi
20.01.2005, 09:50:09
Original geschrieben von _c_4_
Was mir da so einfällt: PHP erfährt die Größe der Datei eigentlich erst, wenn die Datei komplett auf dem Server ist. Glaube ich.
Bricht es denn sofort ab oder erst nach eine Weile?

Solltest zumindest mal via phpinfo() ermitteln, welchen Wert die Variable hat.

Du hattest auch die Idee mit dem TimeOut. Den kannst Du mittels set_time_limit() (http://php.net/set_time_limit) umgehen.

Bricht erst nach einer Weile ab - je nach Verbindungsgeschwindigkeit.

Zweiteres geht nicht. Bin leider im Safe-Mode.

c4
20.01.2005, 09:53:44
hm. Dann wirst Du die Dateigröße auf unter 2 MB begrenzen müssen.

Was sagt denn phpinfo() nun?

Heppi
20.01.2005, 10:02:52
Original geschrieben von _c_4_
Was sagt denn phpinfo() nun?

Hab grad mal nachgeschaut.
post_max_time steht auf 8M.
max_file_size steht auf 2M (hier scheint wohl der Hund begraben zu sein).

Hab das dann folgendermaßen versucht:
ini_set("upload_max_filesize", "10M");
ini_set("post_max_size", "10M");
ini_set("max_execution_time", "120");

Bringt aber auch nichts.

xabbuh
20.01.2005, 16:04:13
Laut http://de.php.net/manual/de/function.ini-set.php
darfst du post_max_size und upload_max_filesize nur per php.ini, httpd.conf oder .htacces ändern und nicht per ini_set().

Heppi
20.01.2005, 18:26:27
So, hab das ganze jetzt mal per ftp versucht. Sieht dann folgendermaßen aus:
// Funktion zum Hochladen von Dateien auf den Server
function upload($file, $mod, $id){
//global $ftp;
$ftp['host'] = "localhost"; // Host des FTP-Servers, normal 'localhost', denn man will ja auf dem selben Server arbeiten
$ftp['user'] = "web210"; // FTP Benutzername
$ftp['pass'] = "xxx"; // FTP Passwort
$ftp['root'] = "/html/alex/test/"; // Verzeichnis, in das gewechselt werden muss um im selben zu sein wie das Skript

$file = "D:Homepageswww.tsg-leutkirch.deIMG_1072.zip";

//$ftpdir = $ftp['root'].'pix/body/abteilungen/'.$id.'/';
$ftpfile = $ftp['root'].'pix/body/abteilungen/handball/temp.zip';

echo("<br>1 ".$ftp['link'] = ftp_connect($ftp['host']));

echo("<br>2 ".ftp_login($ftp['link'], $ftp['user'], $ftp['pass']));

echo("<br>3 ".ftp_put($ftp['link'], $ftpfile, $file, FTP_BINARY));

echo("<br>4 ".ftp_close($ftp['link']));
die('<br>Ende.');
}

Allerdings gibt ftp_put() ein false zurück. Jemand 'ne Ahnung was ich da falsch gemacht habe?

c4
21.01.2005, 07:34:47
Schon mal mit domain.de statt localhost probiert? Stimmt die DocumentRoot?

Die lokale Datei auf d: packst Du mal lieber in ' und nicht in " (außer das Forum hat Deine verschluckt)

Tipp:
--> http://www.php-faq.de/q/q-datei-upload-ftp.html

xabbuh
21.01.2005, 08:15:03
EDIT: Bitte löschen...

langwebdesign
21.01.2005, 11:29:02
ich kann dir zwar bei deim Problem ned helfen, würd mich aber freuen wenn du mir die php dateien schickst die des zip file entpacken. bitte

thanks
stephan

stephan <klamaaffe> mittersthal.de

Heppi
21.01.2005, 20:50:32
Original geschrieben von langwebdesign
ich kann dir zwar bei deim Problem ned helfen, würd mich aber freuen wenn du mir die php dateien schickst die des zip file entpacken. bitte

Eigentlich ganz einfach:
Die Library pclzip (http://www.phpconcept.net/download.php?file=pclzip-2-3.zip) einbinden.
Anschließend die zwei folgenden Funktionen aufrufen:
$archive = new PclZip($zipfile);

$archive->extract(PCLZIP_OPT_PATH, $pfad);

In $zipfile steckt die Position des zip-Files und in $pfad steckt das Zeil wohin entpackt wird.


Hab übrigens mein Problem gelöst.
Kurze Email an den Provider und fünf Minuten später war's geändert.