gpt4 book ai didi

php - 并行运行 file_put_contents?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:09:20 24 4
gpt4 key购买 nike

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

基本上,我有一个数组,其中包含数百个 URL,指向远程服务器上的不同 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);
}

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

有什么方法可以加快 foreach 的速度吗?目前我正在考虑将每个 foreach 循环中的 file_put_contents 增加到 10 或 20,基本上将我的执行时间缩短 10 或 20 倍,但想不出如何实现这种最佳和最高性能的方式。关于如何进行的任何帮助或指示?

最佳答案

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

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

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

关于php - 并行运行 file_put_contents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com