In der PHP -Entwicklung müssen wir in der Regel mit dem Problem mit großen Dateien -Uploads oder Datenübertragungen vor dem Problem stehen, wie große Dateien effizient gespeichert oder übertragen werden können. Insbesondere bei Verwendung von MySQL -Datenbanken können herkömmliche Einfügen oder Aktualisierungsvorgänge keine großen Dateidaten effizient verarbeiten. Um diese Herausforderung zu befriedigen, bietet MySQLI_STMT :: SEND_LONG_DATA eine effiziente Lösung, mit der Entwickler große Dateidaten in Datenbanken streamen können.
MySQLI_STMT :: SEND_LONG_DATA ist eine Methode, mit der Big Data in der Erweiterung von PHP MySQLI übertragen wird. Es ermöglicht die Übertragung eines riesigen Datenstroms (z. B. Dateiinhalte) in eine MySQL -Datenbank, wenn Vorverarbeitungsanweisungen ausgeführt werden, ohne die gesamte Datei in den Speicher zu laden. Dies kann Speicherüberlauf oder Leistungs Engpässe vermeiden und ist eine sehr praktische Funktion beim Umgang mit großen Dateien.
In einigen Anwendungen, z. B. Online -Dateispeichersystemen oder Dateiverwaltungssystemen, können die von den Benutzern hochgeladenen Dateien sehr groß sein. Das direkte Lesen von Dateidaten direkt in den Speicher und das Speichern in der Datenbank kann den Speicherdruck verursachen und sogar PHP -Skripte zum Zeitpunkt bringen. In diesem Fall kann MySQLI_STMT :: SEND_LONG_DATA die Dateidaten nach und nach an die Datenbank senden und vermeiden, dass die gesamte Datei gleichzeitig in Speicher geladen wird.
Beispiel für Szenario : Eine Online -Bildverwaltungsplattform, auf der Benutzer Bilddateien hochladen. Um die Speicherungseffizienz zu verbessern, speichert die Plattform Bilder in einem binären Format in einer MySQL -Datenbank. Durch die Verwendung von MySQLI_STMT :: SEND_LONG_DATA wird jedes hochgeladene Bild in Segmenten übertragen, ohne die gesamte Datei in den Speicher zu laden, damit beim Hochladen großer Bilder kein Speicherüberlauf auftritt.
Einige Anwendungen erfordern große Mengen an Protokolldaten oder große Textdaten in der Datenbank. Das Protokollverwaltungssystem generiert beispielsweise GB von Protokolldateien, die in Segmenten in MySQL gespeichert werden müssen. In diesem Fall kann das Protokolldateifragment mithilfe von MySQLI_STMT :: send_long_data in die Datenbank hochgeladen werden, ohne den gesamten Dateiinhalt gleichzeitig zu laden.
Beispiel für Szenario : Ein Protokollanalysesystem sammelt und speichert verschiedene vom System generierte Protokolldateien. Die Protokolldatei ist riesig, und wenn die gesamte Datei jedes Mal geladen wird, hat sie einen ernsthaften Einfluss auf die Serverleistung. Durch die Verwendung von MySQLI_STMT :: SEND_LONG_DATA , um Protokolldateien allmählich hochzuladen, kann das System effizienter und stabiler machen.
Ähnlich wie das Hochladen großer Dateien sind auch in einigen Multimedia -Plattformen auch große Dateitypen, die große Dateien hochladen. Für die Speicherung von Video -Streams oder Audio -Streams ist es traditionell, sie durch Streamen zu speichern, anstatt sie gleichzeitig in den Speicher zu laden.
Beispiel für Szenario : Eine Video -Website muss die vom Benutzer hochgeladenen Videodateien in der Datenbank gespeichert. Mit MySQLI_STMT :: SEND_LONG_DATA können Videodateien in den Segmenten an die Datenbank anstelle des gesamten Datei geladen werden, um den Server in den Speicher zu laden.
In einigen Anwendungen können zusätzlich zu Dateien eine große Menge binärer Daten (wie Bilder, Audio, Video usw.) übertragen werden. Diese großen Objekte können von Benutzern hochgeladen oder von Anwendungen generiert werden. MySQLI_STMT :: SEND_LONG_DATA kann diese großen Objekte effektiv in der Datenbank speichern und sicherstellen, dass das Hochladen großer Objekte keinen Speicherüberlauf verursacht.
Beispiel für Szenario : Ein elektronisches Bibliotheksverwaltungssystem, in dem Benutzer elektronische Versionen von Büchern (PDF, EPUB usw.) hochladen, die möglicherweise sehr groß sein. Durch mySQLI_STMT :: SEND_LONG_DATA kann das System die Buchdatendaten Schritt für Schritt hochladen, ohne die gesamte Datei gleichzeitig in den Speicher zu laden, um den reibungslosen Upload -Vorgang sicherzustellen.
Mit mySQLI_STMT :: SEND_LONG_DATA muss mit MySQL -Vorverarbeitungsanweisungen verwendet werden. Hier ist ein typisches Code -Beispiel, das zeigt, wie diese Funktion zum Hochladen großer Dateidaten verwendet wird.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// Bereit zum Einfügen von Daten SQL Stellungnahme</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO files (name, data) VALUES (?, ?)"</span></span><span>);
</span><span><span class="hljs-comment">// Dateipfad und Öffnen Sie den Dateistrom</span></span><span>
</span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-string">"large_file.zip"</span></span><span>;
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>, </span><span><span class="hljs-string">"rb"</span></span><span>);
</span><span><span class="hljs-comment">// Binden Sie Parameter</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>);
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>);
</span><span><span class="hljs-comment">// Senden Sie Dateidaten in Segmenten</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>*</span><span><span class="hljs-number">1024</span></span><span>)); </span><span><span class="hljs-comment">// Jedesmal 1MB Daten</span></span><span>
</span><span><span class="hljs-comment">// 执行Stellungnahme</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-comment">// 关闭文件和Daten库连接</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In diesem Beispiel wird Fread verwendet, um den Inhalt der Datei zu lesen, und send_long_data sendet die Dateidaten in die Datenbank in Segmenten. Bei der Ausführung von Anweisungen werden Dateidaten nicht gleichzeitig in den Speicher geladen, sondern schrittweise auf MySQL übertragen, wodurch das Risiko eines Speicherüberlaufs vermieden wird.
Datenbankfeldtyp : Stellen Sie sicher, dass der Feldtyp in der Datenbanktabelle Blob oder Longblob ist, die zum Speichern von Big Data geeignet sind.
Übertragungslimits : Obwohl send_long_data große Dateien effektiv übertragen können, sollten Sie auch auf Upload -Beschränkungen in der PHP -Konfiguration achten (z. B. Upload_Max_FileSize und post_max_size ). Diese Konfigurationen müssen entsprechend den tatsächlichen Anforderungen angepasst werden.
Leistungssteuer : Wenn Sie sehr große Dateien verarbeiten, können Sie die Leistung des Servers gemäß der Leistung des Servers optimieren, indem Sie die Blockgröße der übertragenen Daten (z. B. 1 MB oder 10 MB pro Übertragung) anpassen.
MySQLI_STMT :: SEND_LONG_DATA ist eine sehr praktische Funktion, insbesondere für Szenarien, in denen große Dateien oder große Datenmengen erforderlich sind. Durch die Übertragung von Dateidaten in Segmenten kann es Entwicklern helfen, Speicherüberlauf und Leistungs Engpässe zu vermeiden und die Systemstabilität und Effizienz zu verbessern. send_long_data kann eine wichtige Rolle beim Upload-, Protokollspeicher- oder Multimedia -Datenverarbeitung spielen. Bei der Entwicklung von Anwendungen, die eine große Dateiverarbeitung beinhalten, kann die rationale Verwendung dieser Funktion den Datenübertragungsprozess erheblich optimieren.