douhuireng4407 2014-12-18 23:24
浏览 54

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

From http://php.net/manual/en/function.include.php:

If "URL include wrappers" are enabled in PHP, you can specify the file to be included using a URL.

So you can include a file like this:

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

This works fine if you have a valid SSL certificate but if you're using a self signed certificate the peer certificate verification fails:

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

This wasn't a problem in older versions but PHP 5.6 enables peer verification by default (http://php.net/manual/en/migration56.openssl.php).

Apparently you can set a default stream context using stream_context_set_default() where you can disable peer verification. So my code would look like this:

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

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

But this doesn't work. The Include() function still attempts to verify the peer and fails. If I use file_get_contents(), fopen(), copy(), readfile(), or file() instead of include(), it works fine.

Now I'm not sure if this is a bug in PHP or if I'm missing something here. Same issue exists with require().

Any ideas?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 R语言Rstudio突然无法启动
    • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
    • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
    • ¥15 用windows做服务的同志有吗
    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图
    • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值