我在以下目录结构中有一些PHP脚本。
ROOT
---COMMON
------(Login.php)
---APPSERVICE
------(NotificationService.php)
------NOTIFICATION_CERTIFICATES
---------(ck.pem)
在NotificationService.php
中,我的"notifyUser()"
函数中有以下行:
stream_context_set_option($ctx, 'ssl', 'local_cert', **'NOTIFICATION_CERTIFICATES/ck.pem'**);
但是,当我在Login.php脚本中包含NotificationService.php并尝试调用notifyUser()时,它会给我这个错误:
stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in [my file path]
但是,如果我从与notifyUser()
相同的目录中的脚本调用NotificationService.php
,则没有错误。为什么上面的粗体线似乎受到调用函数的脚本的影响,而不是函数定义的脚本的位置?
答案 0 :(得分:3)
根据include_path
设置解析相对路径;这通常包括在每个请求开始时建立的当前工作目录。
如果您想确保始终相对于正在运行的当前脚本获取路径:
// NotificationService.php
$cert = __DIR__ . '/NOTIFICATION_CERTIFICATES/ck.pem';
stream_context_set_option($ctx, 'ssl', 'local_cert', $cert);