`

stream_context_create作用

    博客分类:
  • php
 
阅读更多

转 

http://huangliangfeixu.blog.163.com/blog/static/189747062201142510383782/

 

 

stream_context_create作用  

2011-05-25 10:38:03|  分类: PHP|举报|字号 订阅

 
 
stream_context_create作用:
创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。
函数原型:resource stream_context_create ([ array $options [, array $params ]] )

在使用file_get_contents函数的时候,经常会出现超时的情况,在这里要通过查看一下错误提示,看看是哪种错误,比较常见的是读取超时,这种情况大家可以通过一些方法来尽量的避免或者解决。这里就简单介绍两种:

一、增加超时的时间限制

这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。一开始以为set_time_limit也能影响到file_get_contents,后来经测试,是无效的。真正的修改 file_get_contents延时可以用resource $context的timeout参数:
  $opts = array(
    'http'=>array(
    'method'=>"GET",
    'timeout'=>60,
  )
);
//创建数据流上下文
$context = stream_context_create($opts);

$html =file_get_contents('http://blog.sina.com/mirze', false, $context);

//fopen输出文件指针处的所有剩余数据:
//fpassthru($fp); //fclose()前使用

二、一次有延时的话那就多试几次

有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失败将返回 FALSE,所以可以下面这样编写代码:
$cnt=0;
while($cnt < 3 && ($str=@file_get_contents('http://blog.sina.com/mirze'))===FALSE) $cnt++;

以上方法对付超时已经OK了。

那么Post呢?细心点有人发现了'method'=>"GET", 对!是不是能设置成post呢?百度找了下相关资料,还真可以!而且有人写出了山寨版的post传值函数,如下:

function Post($url, $post = null){
     $context = array();

     if (is_array($post)) {
         ksort($post);

         $context['http'] = array (
             'timeout'=>60,
             'method' => 'POST',
             'content' => http_build_query($post, '', '&'),
         );
     }
     return file_get_contents($url, false, stream_context_create($context));
}

$data = array(
     'name' => 'test',
     'email' => 'test@gmail.com',
     'submit' => 'submit',
);
echo Post('http://www.ej38.com', $data);

OK , 上面函数完美了,既解决了超时控制又解决了Post传值。再配合康盛的改良版RC4加密解密算法,做一个安全性很高的webservice就简单多了。
分享到:
评论

相关推荐

    PHP stream_context_create()函数的使用示例

    然后,`stream_context_create()` 使用这些选项创建了一个上下文 `$context`,最后在 `file_get_contents()` 中使用这个上下文进行文件内容获取。 2. **设置超时时间**: ```php $opts = array( 'http' =&gt; array...

    PHP stream_context_create()作用和用法分析

    通过提供给stream_context_create()的选项,开发者可以控制如何发起网络请求、如何处理重定向、如何验证身份等等。例如,设置超时选项可以避免在网络延迟或服务器无响应的情况下,PHP脚本长时间等待;设置代理选项...

    PHP使用stream_context_create()模拟POST/GET请求的方法

    本文实例讲述了PHP使用stream_context_create()模拟POST/GET请求的方法。分享给大家供大家参考,具体如下: 有时候,我们需要在服务器端模拟 POST/GET 等请求,也就是在 PHP 程序中去实现模拟,改怎么做到呢?或者说...

    php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)

    知识点三:使用stream_context_create伪造Referer PHP提供了stream_context_create函数,通过它可以创建一个上下文流来修改HTTP请求。stream_context_create可以被用来伪造HTTP_REFERER头部,从而绕过防盗链措施。...

    PHP 获取网页内容的三种方法

    $context = stream_context_create([ 'http' =&gt; [ 'method' =&gt; 'GET', 'header' =&gt; 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 ...

    ffmpeg生成gif动图.pdf

    11. avfilter_graph_create_filter:创建滤波器的上下文。 12. av_opt_set_int_list:给滤波器设置参数。 13. avfilter_graph_parse_ptr:设置滤波器图的描述字符串。 14. avfilter_graph_config:检查FilterGraph的...

    php使用event扩展的io复用测试的示例

    $context=stream_context_create([ 'socket'=&gt;[ 'backlog'=&gt;2000 ]]); stream_context_set_option($context,'socket','so_reuseaddr',1); //设置连接重用 //sock_set_option($this-&gt;server, SOL_SOCKET, SO_...

    php常用Stream函数集介绍

    5. **stream_context_create()**: 创建一个新的数据流上下文,这个上下文包含了处理数据流时的各种选项和参数,可以用于定制网络请求、文件读写等操作。 6. **stream_context_get_default()**: 获取默认的数据...

    PHP实现获取当前链接地址的301或者302跳转之后的真实链接地址.zip

    $context = stream_context_create($options); $response = file_get_contents($url, false, $context); // 从HTTP响应头部获取Location,即重定向URL $headers = stream_get_meta_data($context)['wrapper_...

    php实现telnet

    $context = stream_context_create(array( 'telnet' =&gt; array( 'newline' =&gt; PHP_EOL, ), )); $socket = stream_socket_client("tcp://{$host}:{$port}", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context)...

    PHP采集远程网址数据

    $socket = stream_socket_client($proxy, $err, $errMsg, 30, STREAM_CLIENT_CONNECT, stream_context_create()); $head = "GET http://example.com HTTP/1.1\r\n". "Host: example.com\r\n". "User-Agent: ...

    基于YOLOv5的神经网络训练用于检测火灾初期的火焰和烟雾模型

    TRT_LOGGER、Runtime、Logger、deserialize_cuda_engine、create_execution_context、volume、nptype、get_binding_shape get_binding_dtype:TensorRT中的类和函数,用于构建和执行加速的深度学习推理引擎。 cuda....

    基于YOLOv5的神经网络训练用于检测火灾初期的火焰和烟雾模型源代码+训练数据

    TRT_LOGGER、Runtime、Logger、deserialize_cuda_engine、create_execution_context、volume、nptype、get_binding_shape get_binding_dtype:TensorRT中的类和函数,用于构建和执行加速的深度学习推理引擎。 cuda....

    网页跳转直接打开小程序代码

    $result = file_get_contents($url, false, stream_context_create($options)); $link = json_decode($result, true)["openlink"]; //这个link就是最终生成的链接 $link = '...

    iOS实现从后台向手机客户端推送消息的代码[参考].pdf

    $ctx = stream_context_create(); stream_context_set_option($ctx, "ssl", "local_cert", "apns-dev.pem"); $pass = "xxxxxx"; stream_context_set_option($ctx, 'ssl', 'passphrase', $pass); // 根据环境...

Global site tag (gtag.js) - Google Analytics