Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何处理Guzzle异步请求中的异常?_Php_Asynchronous_Guzzle - Fatal编程技术网

Php 如何处理Guzzle异步请求中的异常?

Php 如何处理Guzzle异步请求中的异常?,php,asynchronous,guzzle,Php,Asynchronous,Guzzle,当我尝试使用Guzzle下载许多图像时,我遇到了问题。其中一些可能无效,所以当我发出异步请求时,我无法处理每个图像的异常 我尝试了一种验证方法,这种方法必须能够处理下载的文件,但它不能按时工作 $requests=函数()使用($client,$imagesMetaData){ foreach($imagesMetaData作为$index=>$image){ yield$index=>function()使用($client,$image){ 试一试{ $resource=fopen($im

当我尝试使用Guzzle下载许多图像时,我遇到了问题。其中一些可能无效,所以当我发出异步请求时,我无法处理每个图像的异常

我尝试了一种验证方法,这种方法必须能够处理下载的文件,但它不能按时工作


$requests=函数()使用($client,$imagesMetaData){
foreach($imagesMetaData作为$index=>$image){
yield$index=>function()使用($client,$image){
试一试{
$resource=fopen($image['savePath','w+b');
如果(!$resource){
//做smth
}
$opts=['sink'=>$resource];
$result=$client->requestAsync('GET',$image['downloadUri',$opts);
返回($结果);
}捕获(\异常$e){
$image['writeLog'](
//做smth
);
返回新的响应(404);
}
};
}
};
池::批处理($client,$requests()[
“并发”=>5,
“已完成”=>函数(响应$Response,$index)使用($me,$imagesMetaData,&$COMPLETED,&$rejected){
$image=$imagesMetaData[$index];
foreach($imagesMetaData作为$image){
如果($me->ValidatedDownloadeImage($image)){
$emplified[]=$image;
}否则{
$rejected[]=$image;
}
}
},
“拒绝”=>函数($reason,$index)使用($me,$imagesMetaData,&$rejected){
$image=$imagesMetaData[$index];
$me->rejectImage($image,$reason);
$rejected[]=$image;
}
]);
返回[$已完成,$已拒绝];
如果文件图像正常-一切正常,但如果其中一个失败-我有下一个错误

在文件/var/www/my.site/localhost/core/libraries/guzzlehttp/psr7/src/Stream.php的第250行抛出RuntimeException类型的目录导入异常。无法写入流


如果有人知道这一点,请帮助。

我用开放流解决了这个问题:

$stream=stream\u for($resource);
然后把这条小溪送到“水槽” :

'sink'=>$stream
最终代码如下所示:

$requests=function()使用($client,$imagesMetaData){
foreach($imagesMetaData作为$index=>$image){
yield$index=>function()使用($client,$image){
试一试{
$resource=fopen($image['savePath','w+b');
$stream=stream\u表示($resource);
如果(!$resource){
//做smth
}
$opts=['sink'=>$stream];
$result=$client->requestAsync('GET',$image['downloadUri',$opts);
返回($结果);
}捕获(\异常$e){
$image['writeLog'](
//做smth
);
返回新的响应(404);
}
};
}
};
池::批处理($client,$requests()[
“并发”=>5,
“已完成”=>函数(响应$Response,$index)使用($me,$imagesMetaData,&$COMPLETED,&$rejected){
$image=$imagesMetaData[$index];
foreach($imagesMetaData作为$image){
如果($me->ValidatedDownloadeImage($image)){
$emplified[]=$image;
}否则{
$rejected[]=$image;
}
}
},
“拒绝”=>函数($reason,$index)使用($me,$imagesMetaData,&$rejected){
$image=$imagesMetaData[$index];
$me->rejectImage($image,$reason);
$rejected[]=$image;
}
]);
返回[$已完成,$已拒绝];

我用开放流解决了这个问题:

$stream=stream\u for($resource);
然后把这条小溪送到“水槽” :

'sink'=>$stream
最终代码如下所示:

$requests=function()使用($client,$imagesMetaData){
foreach($imagesMetaData作为$index=>$image){
yield$index=>function()使用($client,$image){
试一试{
$resource=fopen($image['savePath','w+b');
$stream=stream\u表示($resource);
如果(!$resource){
//做smth
}
$opts=['sink'=>$stream];
$result=$client->requestAsync('GET',$image['downloadUri',$opts);
返回($结果);
}捕获(\异常$e){
$image['writeLog'](
//做smth
);
返回新的响应(404);
}
};
}
};
池::批处理($client,$requests()[
“并发”=>5,
“已完成”=>函数(响应$Response,$index)使用($me,$imagesMetaData,&$COMPLETED,&$rejected){
$image=$imagesMetaData[$index];
foreach($imagesMetaData作为$image){
如果($me->ValidatedDownloadeImage($image)){
美元[]=