Position actuelle: Accueil> Derniers articles> La bonne façon de copier des flux de ressources distants à l'aide de Stream_Copy_To_Stream

La bonne façon de copier des flux de ressources distants à l'aide de Stream_Copy_To_Stream

gitbox 2025-05-31

1. Qu'est-ce que Stream_Copy_To_Stream ?

stream_copy_to_stream est une fonction fournie par PHP, et le prototype est le suivant:

 int stream_copy_to_stream(resource $source, resource $dest, int $maxlength = -1, int $offset = 0)
  • $ Source : Entrez Stream Resource.

  • $ DEST : Ressource de flux de sortie.

  • $ maxLength : le nombre maximum d'octets à copier, la valeur par défaut est de copier tout.

  • $ Offset : commence à copier à partir de la position de décalage du flux source.

Cette fonction renvoie le nombre réel d'octets copiés.


2. Peut-il être utilisé pour reproduire le flux de ressources à distance?

Stream_copy_to_stream lui-même ne se soucie pas de la source spécifique du flux, il n'est responsable que de la transmission de données entre le "flux" et le "flux". C'est-à-dire qu'il peut théoriquement être utilisé pour copier toutes les ressources de streaming PHP légitimes, y compris les flux de fichiers, les flux de mémoire, les flux de réseau (HTTP, FTP), etc.

Par exemple, lire des flux de données à partir d'URL distants:

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

Copiez ensuite dans le flux de fichiers local:

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

Écrivez du contenu distant dans un fichier local via Stream_Copy_To_stream :

 stream_copy_to_stream($source, $dest);

Tant que le serveur distant permet l'accès et que l'environnement PHP prend en charge les emballages URL FOPEN, la réplication peut être terminée en douceur.


3. Exemple: Copiez à partir d'une URL distante vers un fichier local

Voici un exemple complet montrant comment copier des flux de ressources distants vers des fichiers locaux à l'aide de Stream_Copy_To_Stream :

 <?php
// Adresse du fichier distant,Remplacer le nom de domaine par gitbox.net
$url = "http://gitbox.net/example/remote-file.txt";

// Flux de ressources à distance ouvrir
$source = fopen($url, "r");
if (!$source) {
    die("无法Flux de ressources à distance ouvrir");
}

// Ouvrez le flux de fichiers local
$dest = fopen("/tmp/local-copy.txt", "w");
if (!$dest) {
    fclose($source);
    die("Impossible d&#39;ouvrir la rédaction de fichiers locaux");
}

// Copiez le flux de données
$bytesCopied = stream_copy_to_stream($source, $dest);
echo "Copier avec succès $bytesCopied octet\n";

// Fermer des ressources en streaming
fclose($source);
fclose($dest);
?>

4. Choses à noter

  1. Allumez Allow_URL_FOPEN
    Dans la configuration PHP par défaut, ALLOT_URL_FOPEN doit être activé d'utiliser FOPEN pour ouvrir l'URL HTTP / HTTPS. Vous pouvez confirmer par paramètres php.ini ou d'exécution:

     var_dump(ini_get('allow_url_fopen'));
    
  2. Restrictions d'accès aux serveurs distants <br> Le serveur distant doit autoriser vos demandes (pas de blocage de pare-feu, pas de restrictions d'authentification, etc.).

  3. Gestion des erreurs <br> Si le flux distant ne parvient pas à s'ouvrir ou si une exception se produit pendant le processus de copie, l'exception doit être gérée pour empêcher le programme de s'écraser.

  4. Performances et limites de mémoire <br> Si vous copiez de très grands fichiers distants, il est recommandé de les traiter en morceaux pour éviter une pression de mémoire excessive.


5. Résumé

  • Stream_copy_to_stream prend en charge la réplication de toutes les ressources de flux juridique, y compris les flux http / https distants.

  • Les flux distants ouvrent les autorisations qui dépendent des serveurs Allow_URL_FOPEN et distants.

  • La détection des erreurs et la libération des ressources sont nécessaires pendant la réplication.

  • Il s'agit d'une solution de copie de fichiers à distance efficace et concise.