Rumah > Artikel > rangka kerja php > Laksanakan fungsi pemindahan fail dalam dokumen Workerman
Workerman ialah rangka kerja tak segerak berprestasi tinggi yang dibangunkan berdasarkan PHP, yang boleh merealisasikan pembangunan sambungan panjang di bawah protokol TCP/UDP dengan mudah. Selain itu, Workerman juga menyediakan fungsi merealisasikan pemindahan fail, yang boleh digunakan dalam senario seperti pemindahan fail besar dan sandaran data. Artikel ini akan memperkenalkan cara melaksanakan fungsi pemindahan fail dalam Workerman dan memberikan contoh kod khusus.
1. Pelaksanaan fungsi muat naik fail
Fungsi muat naik fail memerlukan klien menghantar fail untuk dimuat naik ke pelayan, dan pelayan mengesahkan dan menyimpan fail. Dalam Workerman, fungsi muat naik fail boleh dilaksanakan dengan menggunakan komponen pekerja/pemindahan fail. Proses khusus adalah seperti berikut:
$ftp = new Ftp($server_ip, $server_port); $ftp->connect(); $response = $ftp->send($zip_file_path);
Komponen FTP digunakan di sini untuk menghantar fail zip yang dibungkus oleh klien ke pelayan.
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"); } }
Pelayan menerima data fail daripada klien melalui komponen pekerja/pemindahan fail dan menyimpannya sebagai fail zip. Kemudian gunakan pustaka ZipArchive untuk menyahmampat fail dan menyimpan fail dinyahmampat dalam direktori yang ditentukan. Jika penyahmampatan gagal, maklumat kegagalan dihantar kepada klien.
2. Pelaksanaan fungsi muat turun fail
Fungsi muat turun fail memerlukan klien meminta fail daripada pelayan dan menyimpan data fail yang dijawab oleh pelayan sebagai fail tempatan. Dalam Workerman, anda boleh menggunakan fungsi fopen() PHP untuk membuka sambungan fail tempatan dan sambungan fail sebelah pelayan, dan menulis data fail yang dikembalikan oleh pelayan kepada fail tempatan. Proses khusus adalah seperti berikut:
$client->send(json_encode([ 'type' => 'download', 'filename' => $filename, ]));
Pelanggan menghantar mesej kepada pelayan, membawa nama fail yang hendak dimuat turun.
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); }
Selepas menerima permintaan pelanggan, pelayan terlebih dahulu menentukan sama ada fail itu wujud. Jika fail tidak wujud, mesej kegagalan dikembalikan kepada klien. Jika fail wujud, sambungan fail dibuka menggunakan fungsi fopen() dan jumlah saiz fail dikira. Kemudian hantarkan jumlah maklumat saiz fail kepada klien. Selepas itu, kandungan fail dihantar kepada klien beberapa kali melalui gelung sementara.
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); }
Selepas pelanggan menerima jumlah saiz fail daripada pelayan, ia menggunakan gelung untuk menerima data fail yang dihantar oleh pelayan dan menyimpannya sebagai fail tempatan.
Ringkasnya, dengan menggunakan komponen pekerja/pemindahan fail dan fungsi fopen() PHP, kami boleh melaksanakan fungsi muat naik dan muat turun fail dengan mudah dalam Workerman. Perlu diingat bahawa apabila memuat naik fail besar, fungsi seperti bar kemajuan muat naik atau penghantaran tersegmen perlu ditambah untuk meningkatkan pengalaman pengguna.
Atas ialah kandungan terperinci Laksanakan fungsi pemindahan fail dalam dokumen Workerman. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!