我想使用PHP的CURL扩展创建某种下载管理器,我在想CURL是否允许实现以下两个功能:
1)多连接或多部分下载,就像普通桌面应用程序下载管理器一样。
2)不断更新屏幕上(无论是文本还是图形)的下载进度。
如果CURL for PHP允许这些功能中的任何一个,请提供一些提示。
1)多连接或多部分下载,就像普通桌面应用程序下载管理器一样。
2)不断更新屏幕上(无论是文本还是图形)的下载进度。
如果CURL for PHP允许这些功能中的任何一个,请提供一些提示。
设计轻量级单任务REST web服务。以队列类型系统的方式设计它们,使其返回时间对您来说并不重要。如果使用一些基本的操作系统级互斥锁,向队列写入是线程安全的,从队列中删除也是线程安全的。
- 将max_execution_time设置为0以允许脚本无限运行
- 将ignore_user_abort设置为true,即使客户端已经中止,也可以继续运行脚本
fclose(fopen("http://somewebservice....php?a1=v1&a2=v2&....")); // 启动 Web 服务并继续...
这种方法不仅是多线程的,而且本质上是分布式的。Web服务可以是本地的,也可以位于世界各地。PHP当然不会介意。PHP 不支持多线程,如果通过多次文件调用或者分叉等方式试图强制实现多线程,通常会导致结果低效。我建议不要这样做,尽管如此,可以通过混合使用 js、php(可能不包括 curl 但是可以使用自定义的 php 文件流),以及长轮询等方法来实现类似多线程的功能。
$tr = new teConnections();
$data = $tr->downloadManager(array('http', 'host', path', 'login', 'pass', 'port'), 'file name, compression, streaming);
这是可能的,看看curl_multi_init();
curl_multi_xyz() 函数,如 curl_multi_exec()
,允许您同时处理多个请求。如果您想并行下载同一文件的多个片段,请查看 CURLOPT_RANGE
。
而使用 CURLOPT_READFUNCTION
和 CURLOPT_WRITEFUNCTION
设置的回调函数可以向客户端发送某种进度数据。