Frage

Ich möchte eine große Datei mit maximaler Größe 10 MB auf meine MySQL-Datenbank hochzuladen. Mit .htaccess änderte ich eigenes Datei-Upload-Limit von PHP auf „10485760“ = 10 MB. Ich bin in der Lage Dateien ohne Probleme bis zu 10 MB hochladen.

Aber ich kann die Datei nicht in der Datenbank einfügen, wenn es mehr als 1 MB groß ist.

Ich bin mit file_get_contents alle Dateidaten zu lesen und es an die INSERT-Abfrage übergibt als eine Zeichenfolge in ein LONGBLOB Feld eingefügt werden.

Aber Dateien größer als 1 MB sind nicht in die Datenbank aufgenommen, obwohl ich print_r($_FILES) sicherstellen kann, dass die Datei korrekt hochgeladen. Jede Hilfe wird geschätzt, und ich muss sie innerhalb der nächsten 6 Stunden. Also, bitte helfen Sie!

War es hilfreich?

Lösung

Soweit ich weiß, es ist in der Regel schneller und besser Praxis nicht auf die Datei in der DB zu speichern, da es sehr schnell massiv bekommen und verlangsamen. Am besten ist es, einen Weg zu speichern Sie die Datei in einem Verzeichnis zu machen und dann speichern Sie einfach den Speicherort der Datei in der db.

Wir tun es für Bilder / pdfs / mpegs etc im CMS wir, indem Sie einen Ordner für die Datei aus der URL-safe Dateinamen und speichert den Namen des Ordners in der db Namen bei der Arbeit haben. Es ist nur einfach, dann die URL in der Präsentationsschicht zu schreiben.

Andere Tipps

Sie wollen den MySQL-Konfigurationswert „max_allowed_packet“ überprüfen, die zu klein eingestellt werden könnten, verhindern, dass die INSERT (die großen selbst ist) nicht passiert.

Führen Sie die folgenden von einer MySQL-Eingabeaufforderung ein:

mysql> show variables like 'max_allowed_packet';

Stellen Sie sicher, seine groß genug. Weitere Informationen zu dieser Konfigurationsoption finden Sie unter

MySQL max_allowed_packet

Dies hat auch Auswirkungen mysql_escape_string () und mysql_real_escape_string () in PHP, um die Größe der Zeichenfolge Schöpfung zu begrenzen.

Die beste Antwort ist eine Implementierung zu verwenden, die besser ist und funktioniert auch um dieses Thema. Sie können einen Artikel hier . Shop 10 MB, 1000 MB, keine Rolle spielt. Die Implementierung Stücke / schneidet die Datei in viele kleinere Stücke und speichert sie in mehreren Reihen .. Dies hilft bei der Last und Holen der so funktioniert Speicher nicht auch ein Problem werden.

Einige PHP-Erweiterungen für MySQL haben Probleme mit LONGBLOB und LONGDatenTypen. Die Verlängerungen können nicht blob-Streaming (Posting das Blob ein Segment zu einem Zeitpunkt) unterstützen, so dass sie das gesamte Objekt auf einmal zu schreiben.

Also, wenn PHP-Speicherlimit oder MySQL-Paketgröße Grenze die Größe eines Objekts beschränken Sie auf die Datenbank schreiben können, können Sie entweder PHP oder MySQL dies zu ermöglichen, müssen einige Einstellungen ändern.

Sie habe nicht gesagt, welche PHP-Erweiterung, die Sie verwenden (mindestens drei für MySQL sind), und Sie zeigte keine der Code verwenden Sie das Blob in die Datenbank zu schreiben.

könnten Sie verwenden MySQL LOAD_FILE Funktion um die Datei speichern, aber Sie immer noch den max_allowed_packet Wert und die Tatsache, dass die Datei auf dem gleichen Server wie die MySQL-Instanz sein muss.

gehorchen müssen

Sie sagen nicht, was Fehler Sie bekommen (Verwendung mysql_error() erfahren), aber ich vermute, Sie sein kann, die maximale Paketgröße zu treffen.

Wenn dies der Fall ist, dann würden Sie brauchen, um Konfiguration MySQL ändern max_allowed_packet

  

Sie sagen nicht, welche Fehler Sie bekommen (Verwendung mysql_error (), um herauszufinden), aber ich vermute, Sie können die maximale Paketgröße schlagen werden.

     

Wenn dies der Fall ist, dann würden Sie Ihre MySQL-Konfiguration max_allowed_packet ändern müssen

Nun, ich habe das gleiche Problem. Und die Daten können nicht in der MySQL-Datenbank chunck von chunck in einem „io-Modus“

eingegeben werden
loop for : 
   read $data from file,
   write $data to blob
end loop
close file
close blob

Eine Lösung scheint eine Tabelle mit mehrteiligen Blobs zu erstellen wie create table data_details ( id int pk auto_increment, chunck_number int nicht null, dataPart blob ); ???

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top