große Dateien übertragen

14/09/2011 - 22:20 von Heiko Warnken | Report spam
Hallo,

ich habe ein Problem beim Upload von Dateien, die größer als rund 9 MB sind.
Ich mache den Upload in meinem PHP-Script via FTP. Das Script an sich
funktioniert problemlos, da ich Dateien bis 9 MB problemlos übertragen kann.

Doch nun habe ich das Problem, dass jemand (wissentlich und gewollt)
eine Datei mit einer Größe von 170 MB hochladen will.

mit <input type="file" name="dateiname"> wird die hochzuladende Datei
ausgewàhlt und mit dem "Senden"-Button wird das Formular abgesendet.
Dann wird eine Verbindung zum FTP-Server aufgebaut und der Upload
beginnt (normalerweise). Das kann ich natürlich nicht sagen, weil der
Uploadstatus im Browser ja nicht angezeigt wird.
Das Script wird trotz laufendem Upload, der rund 11 Minuten dauern soll,
nach 6 Minuten beendet und die Seite mit dem zuvor beschriebenen
Formular wird wieder geladen.
Das an sich ist schon unlogisch, denn nach dem erfolgten Upload soll
eigentlich eine andere Meldung erscheinen.

Selbst die Verlàngerung der Script-Laufzeit mit
ini_set('max_execution_time', 1800);
auf 30 Minuten (1800 Sekunden) bricht das Script nach 6 Minuten ab.

Hier mal auszugsweise der in Frage kommende Code:

Das Formular:
<form action="index.php" method="post" enctype="multipart/form-data" >
<p>Du kannst ein Video hochladen<br>
Wàhle die Videodatei auf Deiner Festplatte durch anklicken der
Schaltflàche "Durchsuchen" aus.</p>
<p>Video: <input type="file" name="film">&nbsp;&nbsp;&nbsp;
<input type="submit" name="videosend" value="Video hochladen"></p>
</form>

und nun das Upload-Script:
// Verbindung zum FTP-Server aufnehmen und Login
$ftp_server = "ftp.example.com";
$benutzername="username";
$passwort="password";
$connection_id =ftp_connect($ftp_server);
$login_result = ftp_login($connection_id, $benutzername, $passwort);
if ((!$connection_id) || (!$login_result))
{
echo "Es konnte keine Verbindung zum Zielrechner hergestellt werden.";
die;
}
$zieldatei=$_FILES['film']['name'];
$m = str_replace(" ", "_", "$zieldatei");
$zieldatei=$m;
$tempdatei = "usertemp/" . $zieldatei;
$upload = ftp_put($connection_id, $tempdatei, $film, FTP_BINARY);
if (!$upload)
{
echo "Beim hochladen Deines Videos " . $_FILES['film']['name'] . " ist
ein Fehler aufgetreten<br>";
die;
}
$zieldatei = "/htdocs/omega/videos/" . $zieldatei;
$tempdatei = "/" . $tempdatei;
$result = ftp_rename($connection_id, $tempdatei, $zieldatei);
echo "<p><h3>Glückwunsch</h3>";
...
In der Zeile
$upload = ftp_put(...)
wird das Script anscheinend abgebrochen und der gesamte nachfolgende
Code wird nicht abgearbeitet.
Könnte das u. U. an einer Speicherbegrenzung liegen?

Gruß
Heiko

http://spandaunet.de | masterdomino@spandaunet.de
 

Lesen sie die antworten

#1 Gustaf Mossakowski
15/09/2011 - 12:34 | Warnen spam
Heiko Warnken schrieb:

ich habe ein Problem beim Upload von Dateien, die größer als rund 9 MB sind.
Ich mache den Upload in meinem PHP-Script via FTP. Das Script an sich
funktioniert problemlos, da ich Dateien bis 9 MB problemlos übertragen kann.

Doch nun habe ich das Problem, dass jemand (wissentlich und gewollt)
eine Datei mit einer Größe von 170 MB hochladen will.
[...]
und nun das Upload-Script:
[...]
$upload = ftp_put($connection_id, $tempdatei, $film, FTP_BINARY);
[...]
...
In der Zeile
$upload = ftp_put(...)
wird das Script anscheinend abgebrochen und der gesamte nachfolgende
Code wird nicht abgearbeitet.
Könnte das u. U. an einer Speicherbegrenzung liegen?



Ja. Du làdst die Datei nicht auf einen FTP-Server hoch, sondern auf
einen Webserver. Der wiederum làdt die Datei auf einen FTP-Server hoch.
Ob das sinnvoll ist, solltest du prüfen.

Das PHP auf dem Webserver ist in der php.ini konfiguriert,
upload_max_filesize und post_max_size sind hier die beiden Variablen,
die angepaßt werden müssten.

Um eine Fehlermeldung auszugeben, kannst du z. B. prüfen, ob
$_SERVER['REQUEST_METHOD'] 'POST' ist, gleichzeitig $_POST leer ist
und $_SERVER['CONTENT_LENGTH'] > als ini_get('post_max_size') (ggf.
umformatieren in Bytes) ist. Wenn die Datei zu groß ist, wird der
FTP-Upload gar nicht erst ausgeführt, d. h. in deinem Code wird schon
früher abgebrochen.

Grüße, Gustaf

Ähnliche fragen