我正在使用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_blocking和stream_set_timeout,但它们似乎都不适用于SplFileObject。
2-此脚本目前遵循的超时设置是什么?是socket_timeout吗?或stream_timeout或curl超时?或者只是php脚本超时(我猜这是非常不可能的,因为脚本在命令行上运行)。
任何提示?