2014-09-05 1 views
0

У меня есть некоторые скрипты PHP в следующей структуре каталогов.Почему путь к файлу stream_context_set_option пуст?

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'**); 

Однако, когда я включаю NotificationService.php в моем login.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, нет ERR или. Почему, по-видимому, на выделенной полужирной строке влияет скрипт, вызывающий функцию, а не на местоположение сценария, в котором определена функция?

ответ

3

Относительные пути разрешены на основе настройки include_path; это обычно включает текущий рабочий каталог, созданный в начале каждого запроса.

Если вы хотите, чтобы убедиться, что путь всегда берется относительно текущего сценария, который выполняющиеся:

// NotificationService.php 

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

Ответ нормально сейчас, однако, вопрос, безусловно, дубликат дубликата дубликатов. Во всяком случае, ответ правильный. – hek2mgl

+0

Спасибо, что на самом деле помогли, а не просто ныть о повторяющихся вопросах, таких как парень выше меня. Не все достаточно знакомы с языком, чтобы выяснить, как правильно задавать вопрос, а тем более найти чужое. – GoldenJoe