Я читаю файл построчно прямо с сервера aws s3, используя SplFileObject.
$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 timeout? или просто тайм-аут сценария php (что очень маловероятно, так как сценарий запускается из командной строки).
Есть намеки?
Задача ещё не решена.
Других решений пока нет …