Rumah  >  Artikel  >  rangka kerja php  >  Laksanakan fungsi pemindahan fail dalam dokumen Workerman

Laksanakan fungsi pemindahan fail dalam dokumen Workerman

王林
王林asal
2023-11-08 15:39:161265semak imbas

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:

  1. Pelanggan membungkus fail ke dalam fail zip dan menghantarnya ke pelayan.
$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.

  1. Pelayan mengesahkan format fail dan menyahmampatnya.
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:

  1. Pelanggan memulakan permintaan muat turun fail ke pelayan.
$client->send(json_encode([
    'type' => 'download',
    'filename' => $filename,
]));

Pelanggan menghantar mesej kepada pelayan, membawa nama fail yang hendak dimuat turun.

  1. Pelayan menerima permintaan pelanggan dan menghantar data fail dalam cara penstriman.
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.

  1. Pelanggan menerima data fail daripada pelayan dan menyimpannya sebagai fail tempatan.
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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn