Я использую (Windows) IIS с PHP 8.1, grpc + натрия. У меня есть файл учетных данных из Google Firebase, и я просто читаю из коллекции под названием «информация».
На той же машине я использую IIS и Apache, тот же код отлично работает в Apache (Laragon), но не в IIS. IIS возвращает эту ошибку:
{ "ошибка": "{\n "сообщение": "пустой список адресов: ",\n "код": 14,\n "статус": "НЕДОСТУПНО",\n "подробности": []\n}" }
Я пробовал PHP8.1, 8.2 и 8.3 с той же ошибкой.
Я создал тестовую функцию, чтобы помочь, это функция, которую я запускаю.
public function testFirestore()
{
$credentialsPath = base_path(env('FIREBASE_CREDENTIALS'));
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentialsPath);
putenv('GRPC_VERBOSITY=DEBUG');
putenv('GRPC_TRACE=all');
try {
// Log the credentials path and environment variable
Log::info('GOOGLE_APPLICATION_CREDENTIALS: ' . getenv('GOOGLE_APPLICATION_CREDENTIALS'));
Log::info('Service account file exists: ' . (file_exists($credentialsPath) ? 'yes' : 'no'));
Log::info('GRPC_VERBOSITY: ' . getenv('GRPC_VERBOSITY'));
Log::info('GRPC_TRACE: ' . getenv('GRPC_TRACE'));
$firestore = new FirestoreClient([
'projectId' => '[projectid]',
]);
$collection = $firestore->collection('info');
$documents = $collection->documents();
$result = [];
foreach ($documents as $document) {
$result[] = [
'id' => $document->id(),
'data' => $document->data()
];
}
return response()->json($result);
} catch (\Exception $e) {
Log::error('Firestore error: ' . $e->getMessage());
return response()->json(['error' => $e->getMessage()], 500);
}
}
Буду рад отправить мой php.ini, если это поможет....
🤔 А знаете ли вы, что...
PHP был создан в 1994 году Расмусом Лердорфом и первоначально назывался 'Personal Home Page'.
Оказывается, сертификат pem был неправильным.
Загрузите сертификат отсюда...
https://github.com/grpc/grpc/blob/master/etc/roots.pem
Добавьте переменную env с ключом «GRPC_DEFAULT_SSL_ROOTS_FILE_PATH» и значением пути, в котором вы сохранили загрузку. «C:\dev\certs\roots.pem». Затем перезагрузитесь.