Workerman est un framework événementiel asynchrone hautes performances développé sur la base de PHP, qui peut facilement réaliser le développement de connexions longues sous le protocole TCP/UDP. De plus, Workerman fournit également la fonction de réalisation de transfert de fichiers, qui peut être utilisée dans des scénarios tels que le transfert de fichiers volumineux et la sauvegarde de données. Cet article explique comment implémenter la fonction de transfert de fichiers dans Workerman et fournit des exemples de code spécifiques.
1. Implémentation de la fonction de téléchargement de fichiers
La fonction de téléchargement de fichiers nécessite que le client envoie le fichier à télécharger au serveur, et le serveur vérifie et enregistre le fichier. Dans Workerman, la fonction de téléchargement de fichiers peut être implémentée à l'aide du composant Workerman/file-transfer. Le processus spécifique est le suivant :
$ftp = new Ftp($server_ip, $server_port); $ftp->connect(); $response = $ftp->send($zip_file_path);
Le composant FTP est utilisé ici pour envoyer le fichier zip packagé par le client vers le serveur.
public static function handle($connection, $data) { $zip_file = 'upload_file.zip'; file_put_contents($zip_file, $data); $zip = new ZipArchive(); if ($zip->open($zip_file) === TRUE) { $zip->extractTo('./unzip_file/'); $zip->close(); unlink($zip_file); } else { $connection->send("unzip failed"); } }
Le serveur reçoit les données du fichier du client via le composant workerman/file-transfer et les enregistre sous forme de fichier zip. Utilisez ensuite la bibliothèque ZipArchive pour décompresser le fichier et enregistrez le fichier décompressé dans le répertoire spécifié. Si la décompression échoue, les informations d'échec sont envoyées au client.
2. Implémentation de la fonction de téléchargement de fichiers
La fonction de téléchargement de fichiers nécessite que le client demande un fichier au serveur et enregistre les données du fichier répondues par le serveur en tant que fichier local. Dans Workerman, vous pouvez utiliser la fonction fopen() de PHP pour ouvrir la connexion de fichier local et la connexion de fichier côté serveur, et écrire les données de fichier renvoyées par le serveur dans le fichier local. Le processus spécifique est le suivant :
$client->send(json_encode([ 'type' => 'download', 'filename' => $filename, ]));
Le client envoie un message au serveur, portant le nom du fichier à télécharger.
public static function handle($connection, $data) { $data = json_decode($data, true); $filename = $data['filename']; if (!file_exists($filename)) { $connection->send(json_encode(['code' => -1, 'msg' => 'file not exist'])); return; } $fp = fopen($filename, 'rb'); $total = filesize($filename); $connection->send(json_encode(['code' => 0, 'msg' => 'filesize', 'data' => ['size' => $total]])); while (!feof($fp)) { $connection->send(fread($fp, 8192), true); } fclose($fp); }
Après avoir reçu la demande du client, le serveur détermine d'abord si le fichier existe. Si le fichier n'existe pas, un message d'échec est renvoyé au client. Si le fichier existe, la connexion au fichier est ouverte à l'aide de la fonction fopen() et la taille totale du fichier est calculée. Envoyez ensuite les informations sur la taille totale du fichier au client. Par la suite, le contenu du fichier est envoyé plusieurs fois au client via une boucle while.
public function download($client, $response) { $this->downloadSize = 0; $this->downloadTotal = $response['data']['size']; $data = json_encode(['type' => 'download_continue']); while ($this->downloadSize < $this->downloadTotal) { $client->send($data); } fclose($fp); }
Une fois que le client a reçu la taille totale du fichier du serveur, il utilise une boucle pour recevoir les données du fichier envoyées par le serveur et les enregistre en tant que fichier local.
En résumé, en utilisant le composant workman/file-transfer et la fonction fopen() de PHP, nous pouvons facilement implémenter les fonctions de téléchargement et de téléchargement de fichiers dans Workerman. Il convient de noter que lors du téléchargement de fichiers volumineux, des fonctions telles que la barre de progression du téléchargement ou la transmission segmentée doivent être ajoutées pour améliorer l'expérience utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!