webman 按照文档配置 SSL ,必须的用绝对路径吗?

andyzu
'transport'            => 'ssl',
'context'              => [
    'ssl' => array(
        'local_cert'                => '/path/to/your/server.crt', 
        'local_pk'                  => '/path/to/your/server.key',
        'verify_peer'               => false,
        'allow_self_signed'         => true, 
    )
],

按照文档配置后,如果写绝对路径(在服务器上),没问题。
但是我本地的路径结构跟服务器不一样,写相对路径 ,就会报错:
Error: write EPROTO 140612453044792:error:10000410:SSL routines:OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE:../../../../src/third_party/boringssl/src/ssl/tls_record.cc:594:SSL alert number 40
140612453044792:error:1000009a:SSL routines:OPENSSL_internal:HANDSHAKE_FAILURE_ON_CLIENT_HELLO:../../../../src/third_party/boringssl/src/ssl/handshake.cc:644:

'transport'  => 'ssl',
    'context'    => [
        'ssl' => [
            'local_cert'  => './ssl/ppv2.pem', 
            'local_pk'    => './ssl/ppv2.key',
            'verify_peer' => false,
        ]
    ],

这样调试很不方便啊,各位大神如何解决?求赐教。

406 3 0
3个回答

six

大哥,php咋学的,PHP自带的 __DIR__ 常量获取当前文件目录

  • 暂无评论
胡桃

__DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。

dirname

(PHP 4, PHP 5, PHP 7, PHP 8)

dirname — 返回路径中的目录部分

说明

dirname(string $path, int $levels = 1): string

给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名,且目录深度为 levels 级。

注意:

dirname() 纯粹基于输入字符串操作, 它不会受实际文件系统和类似 ".." 的路径格式影响。

警告

在 Windows 上,dirname() 假设当前设置的代码页,因此要查看具有多字节字符路径的正确目录名称,必须设置匹配的代码页。如果 path 包含当前代码页无效的字符,则 dirname() 的行为是未定义的。

在其它系统上,dirname() 假设 path 是以 ASCII 兼容编码进行编码的。否则函数的行为是未定义的。

参数

path

一个路径。

在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。

levels

要向上的父目录数量。

整型,必须大于 0。

返回值

返回 path 的父目录。如果在 path 中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把 path 中结尾的 /component(最后一个斜线以及后面部分)去掉之后的字符串。

警告

Be careful when using this function in a loop that can reach the top-level directory as this can result in an infinite loop.

<?php
dirname('.');    // Will return '.'.
dirname('/');    // Will return `\` on Windows and '/' on *nix systems.
dirname('\\');   // Will return `\` on Windows and '.' on *nix systems.
dirname('C:\\'); // Will return 'C:\' on Windows and '.' on *nix systems.
?>

更新日志

版本 说明

7.0.0 添加可选的 levels 参数。

示例

示例 #1 dirname() 例子

<?php
echo dirname("/etc/passwd") . PHP_EOL;
echo dirname("/etc/") . PHP_EOL;
echo dirname(".") . PHP_EOL;
echo dirname("C:\\") . PHP_EOL;
echo dirname("/usr/local/lib", 2);

以上示例的输出类似于:

/etc
/ (or \ on Windows)
.
C:\
/usr
  • 暂无评论
sockstack

不想用dirname或者__DIR__,可以用框架的方法base_path("ssl")

  • 暂无评论
🔝