题
我想用的卷曲的扩展PHP要建立某种形式的载管理和我想如果卷允许实施这些2拥有我想:
1)多个连接,或多件下就像一个正常的桌面应用程序下载经理。
2)不断更新的在屏幕(文本或图形,没关系)下载进展情况。
不CURL for PHP允许任何呢?如果是这样,护理提供一些提示?
解决方案
curl_multi_xyz()函数,例如 curl_multi_exec()
允许您同时处理多个请求。如果你想下载,还可以看看 CURLOPT_RANGE
并行的同一文件的多个部分。
您可以使用 CURLOPT_READFUNCTION
和<设置回调函数a href =“http://docs.php.net/function.curl-setopt”rel =“nofollow noreferrer”> CURLOPT_WRITEFUNCTION
将允许您发送某种进度数据到客户。
其他提示
对所有"PHP不是大多任务"批评:
退后一步,并认为你有一个很棒的多线程的框架在你的处置,如果你是在灯的环境。使用这座建筑对你有好处-即Apache是多线程经理和一个该死的好的一个。
这是非常容易设置PHP工作,在这种环境。
- 设置max_execution_time=0到允许脚本运行indefinatly
- 设置ignore_user_abort=true以允许脚本运行,即使后 客户已经终止
设计轻重单个任务的其他网络服务。设计它们以这样一种方式,你不关心,当他们返回,如在队列中型系统。书面形式向队列是线的安全和消除从队列是线安全,如果做了一些基本的操作系统级别的互斥体。
"分解"网服务很简单,因为开文件:
fclose(fopen("http://somewebservice....php?a1=v1&a2=v2&....")); // Launch a web service and continue...
不只是这种方法多线程,但它是本质上分发。该网络的服务可以是当地的或位于世界各地。PHP肯定不关心。
对于一个基本系统唯一拥有你回来是多线程apache允许。否则你的代码是准备利用的负载平衡和所有其他整洁的技巧,高级Apache实现中提供的。
往往在开发认为,"多线"他们认为"哦我们到处理叉和执行董事和等待和Pid".如果你设计的系统方式-你是对的,它变得非常复杂,非常迅速。退后一步,使用什么定。你有访问的目录?繁荣-你得排队。你可以问题的网的电话?繁荣-你已经有了一个多螺纹(分)应用程序。现在只是合并的概念一起作为你的应用程序的规定。
有可能,请看一下curl_multi_init();
不,不是这种情况。这是不可能的,因为下载管理器调用处理下载5次的类 - 即PHP类实例。
这是一个示例类调用:
$tr = new teConnections();
$data = $tr->downloadManager(array('http', 'host', path', 'login', 'pass', 'port'), 'file name, compression, streaming);