并行运行file_put_contents?

Dav*_* K. 4 php arrays foreach curl

正在搜索stackoverflow的解决方案,但找不到任何甚至接近我想要实现的东西.也许我只是幸福地没有意识到每个人都在解决这个问题的一些神奇的PHP酱......;)

基本上我有一个数组,给出或采取几百个网址,指向远程服务器上的不同XML文件.我正在做一些神奇的文件检查,看看XML文件的内容是否已经改变,如果有,我会下载更新的XML到我的服务器.

PHP代码:

$urls = array(
    'http://stackoverflow.com/a-really-nice-file.xml',
    'http://stackoverflow.com/another-cool-file2.xml'
);
foreach($urls as $url){
    set_time_limit(0);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, false);
    $contents = curl_exec($ch);
    curl_close($ch);
    file_put_contents($filename, $contents);
}
Run Code Online (Sandbox Code Playgroud)

现在,$ filename被设置在其他地方,并根据我的逻辑为每个xml提供它自己的ID.到目前为止,这个脚本运行正常并且做了应有的事情,但它的速度非常慢.我知道我的服务器可以处理更多,我怀疑我的foreach正在减慢这个过程.

有什么方法可以加速foreach吗?目前我正在考虑将每个foreach循环中的file_put_contents提升到10或20,基本上将我的执行时间缩短10或20倍,但是无法想到如何以最佳和最佳性能方式处理它.有关如何进行的任何帮助或指示?

Akn*_*sis 6

您的瓶颈(最有可能)是您的curl请求,您只能在每个请求完成后写入文件,没有办法(在单个脚本中)加速该过程.

我不知道它是如何工作的,但你可以并行执行curl请求:http://php.net/manual/en/function.curl-multi-exec.php.

也许您可以获取数据(如果内存可用于存储它),然后在完成填充数据时.