PHP 5.6 include / require忽略默认流上下文

时间:2014-12-18 23:24:29

标签: php ssl

来自http://php.net/manual/en/function.include.php

  

如果在PHP中启用了“URL include wrappers”,则可以使用URL指定要包含的文件。

所以你可以包含这样的文件:

<?php
include 'https://localhost:1234/index.php';
?>

如果您拥有有效的SSL证书,但是如果您使用自签名证书,则对等证书验证失败,这样可以正常工作:

Warning: include(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in [...]

这在旧版本中不是问题,但PHP 5.6默认启用对等验证(http://php.net/manual/en/migration56.openssl.php)。

显然,您可以使用stream_context_set_default()设置默认流上下文,您可以在其中禁用对等验证。所以我的代码看起来像这样:

<?php
stream_context_set_default(
  array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    )
  )
);

include 'https://localhost:1234/index.php';
?>

但这不起作用。 Include()函数仍尝试验证对等方并失败。如果我使用file_get_contents(),fopen(),copy(),readfile()或file()而不是include(),它可以正常工作。

现在我不确定这是PHP中的错误还是我在这里遗漏了什么。 require()也存在同样的问题。

有什么想法吗?

0 个答案:

没有答案