PHP相对路径实例化$pemkey失败,无法加载签名私钥
解决PHP加载私钥文件找不到的问题
问题原因
你代码里写的file:///licensePrivateKey.pem是错误的路径格式——三个斜杠的file:///指向系统根目录,而非脚本所在的folder目录,导致openssl无法定位到目标文件。另外,PHP的工作目录可能和脚本所在目录不一致,直接用相对文件名也可能出现路径歧义。
解决方案
方法1:修正相对路径写法
可以调整file://协议的路径,或者直接省略file://(openssl_pkey_get_private支持直接传入文件名):
// 写法1:用正确的相对路径file协议 $pemkey = openssl_pkey_get_private("file://./licensePrivateKey.pem"); // 写法2:直接传入文件名(更简洁) $pemkey = openssl_pkey_get_private("licensePrivateKey.pem");
方法2:用绝对路径拼接(最可靠)
用__DIR__常量获取当前脚本所在的绝对目录,再拼接私钥文件名,彻底规避工作目录的影响:
$pemPath = __DIR__ . '/licensePrivateKey.pem'; $pemkey = openssl_pkey_get_private($pemPath); // 或者保留file://协议也可以 $pemkey = openssl_pkey_get_private("file://$pemPath");
额外检查项
- 确认
licensePrivateKey.pem文件名无拼写错误,Linux系统需注意大小写区分。 - 确保PHP进程有该文件的读取权限:Linux下可设置文件权限为644,Windows下需给IIS/PHP运行用户分配读取权限。
内容的提问来源于stack exchange,提问作者Akashiro
相关产品推荐
相关产品推荐

