Aktueller Standort: Startseite> Neueste Artikel> Die richtige Möglichkeit, Remote -Ressourcenströme mit stream_copy_to_stream zu kopieren

Die richtige Möglichkeit, Remote -Ressourcenströme mit stream_copy_to_stream zu kopieren

gitbox 2025-05-31

1. Was ist stream_copy_to_stream ?

stream_copy_to_stream ist eine von PHP bereitgestellte Funktion, und der Prototyp lautet wie folgt:

 int stream_copy_to_stream(resource $source, resource $dest, int $maxlength = -1, int $offset = 0)
  • $ Quelle : Geben Sie die Stream -Ressource ein.

  • $ dest : Ausgabe Stream -Ressource.

  • $ maxLength : Die maximale Anzahl von Bytes, die kopiert werden sollen, besteht darin, alle zu kopieren.

  • $ offset : Beginnt mit der Offset -Position des Quellstroms zu kopieren.

Diese Funktion gibt die tatsächliche Anzahl der kopierten Bytes zurück.


2. Kann es verwendet werden, um den Remote -Ressourcenfluss zu replizieren?

stream_copy_to_stream selbst kümmert sich nicht um die spezifische Quelle des Streams, sondern ist nur für die Datenübertragung zwischen "Stream" und dem "Stream" verantwortlich. Das heißt, es kann theoretisch verwendet werden, um legitime PHP -Streaming -Ressourcen zu kopieren, einschließlich Dateiströmen, Speicherströmen, Netzwerkströmen (HTTP, FTP) usw.

Lesen Sie beispielsweise Datenströme aus Remote -URLs:

 $source = fopen("http://gitbox.net/path/to/remote/file", "r");

Kopieren Sie dann in den lokalen Dateistrom:

 $dest = fopen("/path/to/local/file", "w");

Schreiben Sie Remote -Inhalte in die lokale Datei über stream_copy_to_stream :

 stream_copy_to_stream($source, $dest);

Solange der Remote -Server Zugriff ermöglicht und die PHP -Umgebung URL -Fop -Wrapper unterstützt, kann die Replikation reibungslos abgeschlossen werden.


3. Beispiel: Kopieren Sie von einer Remote -URL in eine lokale Datei

Hier ist ein vollständiges Beispiel, das zeigt, wie Remote -Ressourcenströme mit stream_copy_to_stream in lokale Dateien kopiert werden:

 <?php
// Remotedateiadresse,Ersetzen Sie den Domainnamen durch gitbox.net
$url = "http://gitbox.net/example/remote-file.txt";

// Öffnen Sie den Remote -Ressourcenfluss
$source = fopen($url, "r");
if (!$source) {
    die("无法Öffnen Sie den Remote -Ressourcenfluss");
}

// Öffnen Sie den lokalen Dateistrom
$dest = fopen("/tmp/local-copy.txt", "w");
if (!$dest) {
    fclose($source);
    die("Das Schreiben der lokalen Datei kann nicht geöffnet werden");
}

// Kopieren Sie den Datenstrom
$bytesCopied = stream_copy_to_stream($source, $dest);
echo "Erfolgreich kopieren $bytesCopied Byte\n";

// Streaming -Ressourcen schließen
fclose($source);
fclose($dest);
?>

4.. Dinge zu beachten

  1. Schalten Sie ALLGESTELLUNGEN_URL_FOPEN ein
    In der Standard -PHP -Konfiguration muss DELN_URL_FOPEN aktiviert werden, um FOPEN zum Öffnen der HTTP/HTTPS -URL zu öffnen. Sie können über Php.ini oder Laufzeiteinstellungen bestätigen:

     var_dump(ini_get('allow_url_fopen'));
    
  2. Remote -Server -Zugriffsbeschränkungen <br> Der Remote -Server darf Ihre Anforderungen zulassen (keine Firewall -Blockierung, keine Authentifizierungsbeschränkungen usw.).

  3. Fehlerhandhabung <br> Wenn der Remote -Stream nicht geöffnet wird oder eine Ausnahme während des Kopiervorgangs auftritt, muss die Ausnahme behandelt werden, um zu verhindern, dass das Programm stürzt.

  4. Leistung und Speichergrenzen <br> Wenn Sie sehr große Remotedateien kopieren, wird empfohlen, sie in den Stücken zu verarbeiten, um übermäßigen Speicherdruck zu vermeiden.


5. Zusammenfassung

  • stream_copy_to_stream unterstützt die Replikation jeglicher rechtlicher Stream -Ressourcen, einschließlich Remote HTTP/HTTPS -Streams.

  • Remote -Streams öffnen Berechtigungen, die von den Servern von Degly_url_Fopen und Remote abhängen.

  • Bei der Replikation sind Fehlererkennung und Ressourcenfreigabe erforderlich.

  • Es ist eine effiziente und prägnante Kopierlösung für Ferndateien.