Beschränkungen der Upload-Dateigröße entfernen
Um ein LAMP-Setup (Linux, Apache, MySQL, PHP) zu konfigurieren, mit dem Benutzer große Dateien auf ihren Server hochladen können, müssen folgende Schritte ausgeführt werden:
Ändern Sie die folgenden Variablen in php.ini
memory_limit
= 1000M - Setzen Sie die Speichergrenze auf das im System verfügbarepost_max_size
= 4G - Stellen Sie sicher, dass dieser Wert größer oder gleich demupload_max_filesize
Wert istupload_max_filesize
= 4G - Stellen Sie hier den gewünschten Wert einupload_tmp_dir:
/mnt/raid10/Files/Temp
- Standardmäßig ist diese Option deaktiviert, sodass der temporäre Speicherort auf derselben Festplatte liegt, auf der das Betriebssystem installiert ist. In meinem Fall läuft alles von einem Raspberry Pi, das macht es zur SD-Karte. Um eine geringere Einschränkung zu haben, habe ich stattdessen die Position meines Netzlaufwerks festgelegt.
Nachdem Sie das oben beschriebene durchgeführt haben, ist die Beschränkung der Datei-Upload-Größe der für das Gerät verfügbare physische Arbeitsspeicher, für was auch immer dies festgelegt ist memory_limit
, und die Einschränkungen des Dateisystems (4 GB für eine FAT-Dateistruktur). Im Fall meines Raspberry Pi 3 waren das 1 GB.
Umgehen des Speicherlimits zum Hochladen einer Datei, die größer ist als der verfügbare Speicher
Die einzige Möglichkeit, die Speichergrenze zu überschreiten, besteht darin, den Upload zu teilen. Sobald das Chunking aktiviert ist, geschieht Folgendes während eines Uploads:
- Upload auf der Webseite gestartet.
- Daten aus der Quelldatei werden in den Speicher des Webservers übertragen.
- Die Daten werden vom Speicher des Webservers an den temporären Speicherort der Datei übertragen.
- Wenn die temporäre Datei die festgelegte Blockgröße erreicht, werden diese Daten in die endgültige Zieldatei gespeichert und die temporäre Datei wird gelöscht.
- Wiederholen Sie Schritt 2, bis die Datei abgeschlossen ist.
Wie benutze ich Chunking?
Wenn Sie einen ähnlichen Download-Handler ( https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/UploadHandler.php ) verwenden, stehen viele integrierte Optionen zur Verfügung.
In meinem Fall, in dem #fileupload deklariert ist, habe ich eine Zeile für Folgendes hinzugefügt maxChunkSize
:
$('#fileupload').fileupload({ maxChunkSize: 10 * 1024 * 1024, // 10 MB <-----This is the line I added add: function (e, data) { blah blah blah } }); } });
Welcher Wert auch immer hier steht, ist die verwendete Blockgröße. Die Größe, die Sie gewählt haben, erfordert ein wenig Experimentieren, da eine kleine Größe die Upload-Geschwindigkeit etwas verlangsamt, und eine zu große Einstellung führt dazu, dass der Benutzer der Site längere Zeit keinen Fortschritt in der Fortschrittsleiste sieht. Für mich waren 10MB ein glückliches Medium.
* Beachten Sie, dass sich der Fortschrittsbalken für das Hochladen nur bewegt, wenn jeder Chunk startet, so dass er abgehackter wird als ein schöner kontinuierlicher Fortschrittsbalken, aber ich bin damit einverstanden.