PHP集成Firebase时服务账户JSON文件读取失败求助
错误信息
Fatal error: Uncaught Kreait\Firebase\Exception\InvalidArgumentException: pakistandb-7130e-firebase-adminsdk-5dz83-7af18b5684.json can not be read: SplFileObject::__construct(pakistandb-7130e-firebase-adminsdk-5dz83-7af18b5684.json): Failed to open stream: No such file or directory in C:\xampp\htdocs\pakistanPlants\vendor\kreait\firebase-php\src\Firebase\ServiceAccount.php:126 Stack trace: #0 C:\xampp\htdocs\pakistanPlants\vendor\kreait\firebase-php\src\Firebase\ServiceAccount.php(74): Kreait\Firebase\ServiceAccount::fromJsonFile('pakistandb-7130...') #1 C:\xampp\htdocs\pakistanPlants\vendor\kreait\firebase-php\src\Firebase\Factory.php(128): Kreait\Firebase\ServiceAccount::fromValue('pakistandb-7130...') #2 C:\xampp\htdocs\pakistanPlants\fbconfig.php(24): Kreait\Firebase\Factory->withServiceAccount('pakistandb-7130...') #3 C:\xampp\htdocs\pakistanPlants\admin\aaddblog.php(3): include('C:\xampp\htdocs...') #4 {main} Next Kreait\Firebase\Exception\InvalidArgumentException: Invalid service account: pakistandb-7130e-firebase-adminsdk-5dz83-7af18b5684.json can not be read: SplFileObject::__construct(pakistandb-7130e-firebase-adminsdk-5dz83-7af18b5684.json): Failed to open stream: No such file or directory in C:\xampp\htdocs\pakistanPlants\vendor\kreait\firebase-php\src\Firebase\ServiceAccount.php:76 Stack trace: #0 C:\xampp\htdocs\pakistanPlants\vendor\kreait\firebase-php\src\Firebase\Factory.php(128): Kreait\Firebase\ServiceAccount::fromValue('pakistandb-7130...') #1 C:\xampp\htdocs\pakistanPlants\fbconfig.php(24): Kreait\Firebase\Factory->withServiceAccount('pakistandb-7130...') #2 C:\xampp\htdocs\pakistanPlants\admin\aaddblog.php(3): include('C:\xampp\htdocs...') #3 {main} thrown in C:\xampp\htdocs\pakistanPlants\vendor\kreait\firebase-php\src\Firebase\ServiceAccount.php on line 76
当前配置代码
<?php require __DIR__.'/vendor/autoload.php'; use Kreait\Firebase\Factory; // use Kreait\Firebase\Contract\Auth; $factory = (new Factory)->withServiceAccount('pakistandb-7130e-firebase-adminsdk-5dz83-7af18b5684.json') ->withDatabaseUri('https://pakistandb-7130e-default-rtdb.firebaseio.com/'); // $auth = $factory->createAuth(); $database = $factory->createDatabase(); ?>
解决步骤
- 确认文件位置与名称:将Firebase服务账户JSON文件放在
fbconfig.php所在的目录(C:\xampp\htdocs\pakistanPlants\),确保文件名完全匹配,包括大小写(避免因系统大小写敏感问题导致找不到文件)。 - 使用绝对路径:相对路径可能因调用脚本的目录不同出现问题,改用
__DIR__拼接绝对路径,确保脚本能准确定位文件:$factory = (new Factory)->withServiceAccount(__DIR__.'/pakistandb-7130e-firebase-adminsdk-5dz83-7af18b5684.json') - 检查文件权限:确保Web服务器(Apache)拥有该JSON文件的读取权限。在Windows系统中,右键文件→属性→安全,给
IIS_IUSRS或当前运行Apache的用户添加读取权限。 - 重新下载服务账户文件:如果文件损坏或内容错误,从Firebase控制台重新下载服务账户文件,下载后不要修改文件内容或名称。
内容的提问来源于stack exchange,提问作者Syed Farid

