1

我正在使用 SplFileObject 直接从 aws s3 服务器逐行读取文件。

$url = "s3://{$bucketName}/{$fileName}";
$fileHandle = new \SplFileObject($url, 'r');
$fileHandle->setFlags(SplFileObject::READ_AHEAD);

while(!$fileHandle->eof()){
    $line = $fileHandle->current();
    // process the line        
    $fileHandle->next();
}

这在 99% 的情况下都可以正常工作,除非在循环运行并且存在临时网络故障的情况下。脚本无法从 s3 访问下一行 x 秒过早退出。问题是你永远不知道脚本是完成了它的工作还是由于超时而退出了。

我的问题是

1-有没有办法在访问远程文件时在 SPLFileObject 上显式设置超时,以便当循环退出时,我可以了解它是否由于超时而退出,或者文件是否真的达到了 eof。

我检查了stream_set_blockingstream_set_timeout,但它们似乎都不适用于SplFileObject。

2-此脚本当前遵循的超时设置是什么?是 socket_timeout 吗?或 stream_timeout 或 curl 超时?或者只是 php 脚本超时(我猜这是极不可能的,因为脚本在命令行上运行)。

有什么提示吗?

4

0 回答 0