为什么stream_context_set_option的文件路径是搞乱的?

时间:2014-09-05 10:48:20

标签: php ssl

我在以下目录结构中有一些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,则没有错误。为什么上面的粗体线似乎受到调用函数的脚本的影响,而不是函数定义的脚本的位置?

1 个答案:

答案 0 :(得分:3)

根据include_path设置解析相对路径;这通常包括在每个请求开始时建立的当前工作目录。

如果您想确保始终相对于正在运行的当前脚本获取路径:

// NotificationService.php

$cert = __DIR__ . '/NOTIFICATION_CERTIFICATES/ck.pem';
stream_context_set_option($ctx, 'ssl', 'local_cert', $cert);