cari
Rumahpembangunan bahagian belakangtutorial phpmongodb - Mongo使用PHP进行断点续传的问题

1.刚开始接触mongodb,然后查询到PHP的DRIVER并不支持HTTP RANGE header,这样就无法支持断点续传,不知道该如何查询下去,不知道最近的mongoDB的php client有没有支持这个?

2.我自己想着应该可以用mongodb的chunks来实现一种断点续传,每个块默认是256K,程序根据自己下载的文件大小判断下载了多少个块,然后再请求下一块,遇到下载的chunks不是整数,删除不是整数的那一部分,然后从整数+1的那一个chunks继续下载。这种方案是否可行呢?

回复内容:

1.刚开始接触mongodb,然后查询到PHP的DRIVER并不支持HTTP RANGE header,这样就无法支持断点续传,不知道该如何查询下去,不知道最近的mongoDB的php client有没有支持这个?

2.我自己想着应该可以用mongodb的chunks来实现一种断点续传,每个块默认是256K,程序根据自己下载的文件大小判断下载了多少个块,然后再请求下一块,遇到下载的chunks不是整数,删除不是整数的那一部分,然后从整数+1的那一个chunks继续下载。这种方案是否可行呢?

关于php、关于HTTP RANGE、关于断点续传

  • 从php手册上看$_SERVER数组的信息是从Web服务器创建的信息获取,并不关php是否支持,要看你用的web服务器软件是否允许。虽然手册上并没有列出HTTP_RANGE信息。但是相关的例子不少。我看到写的较严谨的例子:http://www.thomthom.net/blog/2007/09/...
  • 你可以自己本地建立一个简易测试。比如使用它做现成测试:http://php.net/manual/zh/function.fre...
  • 下载文件,暂停再点继续。如果没有做断点续传是回到初始重新开始或者下载器报异常(你可删除相关http_range代码,验证一个事实)。事实上是php做断点续传是可行的

其实比较憋屈,文件服务器做的事让php去做了。如果是大文件,用fread一下子全部读出来,php基本会抛出异常,提示内存不够。那这里还要去控制一个读出限制。
比如我前面说那例子中是这么处理的(我简化了部分)。每次读出最多1024 * 8个字节数,到达EOF 的时候完成。

// Start buffered download
$buffer = 1024 * 8;
while(!feof($fp))
{
    set_time_limit(0); // Reset time limit for big files
    echo fread($fp, $buffer);
    flush(); // Free up memory. Otherwise large files will trigger PHP's memory limit.
}
fclose($fp);

可以想象下,如果服务器(不管是ftp还是http等等)他们不允许断点。那些众多的下载软件基本没市场了。目的服务器支持多线程最好了,如果不允许也没关系,到其他下载点返回一个断点,继续下载,自己实现一个多断点下载。这也是下载软件的基本原理。

Gridfs Mongodb存储
你所描述的“用mongodb的chunks来实现一种断点续传”这是错误的理解。断点这不关数据库的事。你所描述的是一个读取过程,控制的一个数据输出。并且因为HTTP本身协议原因,它没能力让你“删除不是整数的部分”你只能判断出具体文件字节流,再做细致数据输出。

其实你应该往”Gridfs Mongodb存储“方向去做应用。

gridfs就是做你所描述的类似的事情。将文件分割存储到mongodb。读出时再整合。其中内部机制我没研究,但肯定比你自己实现要有效率的多。你如果有兴趣可以去研究下。针对php的mongodb驱动也是评价非常好的。使用gridfs替换原始文件存储是可行的。

并且如果你使用的是Nginx服务器软件,可以避开php读取。直接做成Nginx模块。让Nginx去读取文件,会比使用php更高效。当然了写入还是用php。

HTTP 断点上传有难度,单纯的依靠它自身实现不了。目前的方案挺多:java、flash、silverlight、activex等等做客户端控制,然后服务器端再做处理等等。目前我知道的做的比较优秀的是Youtube:https://support.google.com/youtube/bi... (需要翻一下)

从原理上说,GridFS至少应该支持按照Chunk来读写,所以断点续传是可以实现的。但是由于目前的php sdk里头没有细化到chunk这一层,所以如果需要这么做的话,可能得自己改改。

mongodb 的 chunks 写入后不支持修改,所以你要注意到如果 chunks 尺寸过大会让你在下次传递的时候丢失一部分数据,上传客户端也先要从服务器获取已经上传的 chunks 的数量乘以尺寸为续传应该开始的地方。

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
PHP dan Python: Paradigma yang berbeza dijelaskanPHP dan Python: Paradigma yang berbeza dijelaskanApr 18, 2025 am 12:26 AM

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

PHP dan Python: menyelam mendalam ke dalam sejarah merekaPHP dan Python: menyelam mendalam ke dalam sejarah merekaApr 18, 2025 am 12:25 AM

PHP berasal pada tahun 1994 dan dibangunkan oleh Rasmuslerdorf. Ia pada asalnya digunakan untuk mengesan pelawat laman web dan secara beransur-ansur berkembang menjadi bahasa skrip sisi pelayan dan digunakan secara meluas dalam pembangunan web. Python telah dibangunkan oleh Guidovan Rossum pada akhir 1980 -an dan pertama kali dikeluarkan pada tahun 1991. Ia menekankan kebolehbacaan dan kesederhanaan kod, dan sesuai untuk pengkomputeran saintifik, analisis data dan bidang lain.

Memilih antara php dan python: panduanMemilih antara php dan python: panduanApr 18, 2025 am 12:24 AM

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

PHP dan Rangka Kerja: Memodenkan bahasaPHP dan Rangka Kerja: Memodenkan bahasaApr 18, 2025 am 12:14 AM

PHP tetap penting dalam proses pemodenan kerana ia menyokong sejumlah besar laman web dan aplikasi dan menyesuaikan diri dengan keperluan pembangunan melalui rangka kerja. 1.Php7 meningkatkan prestasi dan memperkenalkan ciri -ciri baru. 2. Rangka kerja moden seperti Laravel, Symfony dan CodeIgniter memudahkan pembangunan dan meningkatkan kualiti kod. 3. Pengoptimuman prestasi dan amalan terbaik terus meningkatkan kecekapan aplikasi.

Impak PHP: Pembangunan Web dan seterusnyaImpak PHP: Pembangunan Web dan seterusnyaApr 18, 2025 am 12:10 AM

Phphassignificantelympactedwebdevelopmentandextendsbeyondit.1) itpowersmajorplatformslikeworderpressandexcelsindatabaseIntions.2) php'SadaptabilityAldoStoScaleforlargeapplicationFrameworksLikelara.3)

Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Apr 17, 2025 am 12:25 AM

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Apr 17, 2025 am 12:24 AM

Dalam PHP, gunakan kata kunci klon untuk membuat salinan objek dan menyesuaikan tingkah laku pengklonan melalui kaedah Magic \ _ _ _. 1. Gunakan kata kunci klon untuk membuat salinan cetek, mengkloning sifat objek tetapi bukan sifat objek. 2. Kaedah klon \ _ \ _ boleh menyalin objek bersarang untuk mengelakkan masalah menyalin cetek. 3. Beri perhatian untuk mengelakkan rujukan pekeliling dan masalah prestasi dalam pengklonan, dan mengoptimumkan operasi pengklonan untuk meningkatkan kecekapan.

PHP vs Python: Gunakan Kes dan AplikasiPHP vs Python: Gunakan Kes dan AplikasiApr 17, 2025 am 12:23 AM

PHP sesuai untuk pembangunan web dan sistem pengurusan kandungan, dan Python sesuai untuk sains data, pembelajaran mesin dan skrip automasi. 1.PHP berfungsi dengan baik dalam membina laman web dan aplikasi yang cepat dan berskala dan biasanya digunakan dalam CMS seperti WordPress. 2. Python telah melakukan yang luar biasa dalam bidang sains data dan pembelajaran mesin, dengan perpustakaan yang kaya seperti numpy dan tensorflow.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma