• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • http://

    https://

    访问 HTTP(s)网址

    说明

    允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源。 HTTP 请求会附带一个Host:头,用于兼容基于域名的虚拟主机。如果在你的php.ini文件中或字节流上下文(context)配置了user_agent字符串,它也会被包含在请求之中。

    数据流允许读取资源的body,而 headers 则储存在了$http_response_header变量里。

    如果需要知道文档资源来自哪个 URL(经过所有重定向的处理后),需要处理数据流返回的系列响应报头(response headers)。

    The from directive will be used for theFrom:header if set and not overwritten by the 上下文(Context)选项和参数.

    用法

    • http://example.com
    • http://example.com/file.php?var1=val1&var2=val2
    • http://user:password@example.com
    • https://example.com
    • https://example.com/file.php?var1=val1&var2=val2
    • https://user:password@example.com

    可选项

    封装协议概要
    属性支持
    受allow_url_fopen限制Yes
    允许读取Yes
    允许写入No
    允许添加No
    允许同时读和写N/A
    支持stat()No
    支持unlink()No
    支持rename()No
    支持mkdir()No
    支持rmdir()No

    更新日志

    版本说明
    4.3.7检测 IIS 服务器避免"SSL: Fatal Protocol Error"错误。
    4.3.0添加https://
    4.0.5增加了对重定向的支持。

    范例

    Example #1 检测重定向后最终的 URL

    <?php
    $url = 'http://www.example.com/redirecting_page.php';
    $fp = fopen($url, 'r');
    $meta_data = stream_get_meta_data($fp);
    foreach ($meta_data['wrapper_data'] as $response) {
        /* 我们是否被重定向了? */
        if (strtolower(substr($response, 0, 10)) == 'location: ') {
            /* 更新我们被重定向后的 $url */
            $url = substr($response, 10);
        }
    }
    ?>
    

    注释

    Note:openssl扩展启用后才能够支持 HTTPS 协议。

    HTTP 连接是只读的;还不支持对一个 HTTP 资源进行写数据或者复制文件。

    比如发送POSTPUT请求,可以在HTTP Contexts的支持下实现。

    参见

    • HTTP context 选项
    • $http_response_header
    • stream_get_meta_data()从封装协议文件指针中取得报头/元数据
    Passing authentication information in the URL as in "https://user:password@example.com" works for HTTP "Basic" access authentication but not for HTTP "Digest" access authentication. You can use the cURL functions for servers requesting HTTP "Digest" access authentication.
    HTTP post function;
    <?php
    function post_it($datastream, $url) { 
    $url = preg_replace("@^http://@i", "", $url);
    $host = substr($url, 0, strpos($url, "/"));
    $uri = strstr($url, "/"); 
       $reqbody = "";
       foreach($datastream as $key=>$val) {
         if (!empty($reqbody)) $reqbody.= "&";
       $reqbody.= $key."=".urlencode($val);
       } 
    $contentlength = strlen($reqbody);
       $reqheader = "POST $uri HTTP/1.1\r\n".
              "Host: $host\n". "User-Agent: PostIt\r\n".
       "Content-Type: application/x-www-form-urlencoded\r\n".
       "Content-Length: $contentlength\r\n\r\n".
       "$reqbody\r\n"; 
    $socket = fsockopen($host, 80, $errno, $errstr);
    if (!$socket) {
      $result["errno"] = $errno;
      $result["errstr"] = $errstr;
      return $result;
    }
    fputs($socket, $reqheader);
    while (!feof($socket)) {
      $result[] = fgets($socket, 4096);
    }
    fclose($socket);
    return $result;
    }
    ?>
    
    As it says on this page:
    "The stream allows access to the body of the resource; the headers are stored in the $http_response_header variable. Since PHP 4.3.0, the headers are available using stream_get_meta_data()."
    This one sentence is the only documentation I have found on the mysterious $http_response_header variable, and I'm afraid it's misleading. It implies that from 4.3.0 onward, stream_get_meta_data() ought to be used in favor of $http_response_header. 
    Don't be fooled! stream_get_meta_data() requires a stream reference, which makes it ONLY useful with fopen() and related functions. However, $http_response_header can be used to get the headers from the much simpler file_get_contents() and related functions, which makes it still very useful in 5.x.
    Also note that even when file_get_contents() and friends fail due to a 4xx or 5xx error and return false, the headers are still available in $http_response_header.
    If you want to send more than one custom header, just make header an array:
    <?php
    $default_opts = array(
      'http' => array(
        'user_agent' => 'Foobar',
        'header' => array(
          'X-Foo: Bar',
          'X-Bar: Baz'
        )
      )
    );
    stream_context_get_default($default_opts);
    readfile('http://www.xhaus.com/headers');
    ?>
    

    上篇:file://

    下篇:ftp://