file_get_contents高級用法

首先解決file_get_contents的超時問題,在超時返回錯誤後就象js中的settimeout那樣進行一次嘗試,錯誤超過3次或者5次後就確認為無法連線伺服器而徹底放棄。
這裡就簡單介紹兩種解決方法:

一、增加超時的時間限制

注意:set_time_limit只是設定你的PHP程式的超時時間,而不是file_get_contents函數讀取URL的超時時間。
我一開始以為set_time_limit也能影響到file_get_contents,後來經測試是無效的。真正的修改file_get_contents延時可以用resource $context的timeout參數:
PHP程式碼

$opts = array(
        ‘http‘=>array(
            ‘method‘=>"GET",
            ‘timeout‘=>60,
        )
    );

$context = stream_context_create($opts);

$html =file_get_contents(‘http://www.example.com‘, false, $context);
    fpassthru($fp);

二、多次嘗試

PHP程式碼
    $cnt=0;
    while($cnt < 3 && ([email protected]_get_contents(‘http...‘))===FALSE){
      $cnt++;
    }

以上方法對付超時已經OK了。接下來演示一下用file_get_contents實現Post,如下:
PHP程式碼

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‘ => ‘[email protected]‘,
        ‘submit‘ => ‘submit‘,
     );

echo Post(‘http://www.example.com‘, $data);

注意檔案頭的Set_time_out否則整個檔案都得超時了

时间: 2024-12-24 14:29:33

file_get_contents高級用法的相关文章

Android開發高級組件

Android開發高級組件--ScrollView(滾動視圖組件)1.手機屏幕的高度有限,當需要顯示多組信息時,ScrollView視圖可以合理的安排這些組件,浏覽是可以自動進行滾屏顯示.ScrollView是一個實現滾屏的組件,只要將需要滾屏的組件添加到ScrollView中即可.ScrollView之支持垂直滾動,HorizontalScrollView支持水平滾動. 2.ScrollView層次結構如下:   java.lang.Object      android.view.View 

Python高阶用法总结

目录 1. lambda匿名函数 1.1 函数式编程 1.2 应用在闭包 2. 列表解析式 3. enumerate内建函数 4. 迭代器与生成器 4.1 迭代器 4.3 生成器 5. 装饰器 前言: 接触python有一段时间了,从开始的看菜鸟的python教程,看了一些视频,一些书.很多人感觉python很简单,确实相比其他语言,python可能稍微简单一点,但是不能说只学了python基础语法就说自己python水平可以了.最近在阅读YOLOv3的pytorch版本源码,就遇到很多瓶颈,很

High-level structure of a simple compiler高級結構的簡單編譯器

1.lexical analysis,which analyzes the character string presented to it and divides it up into tokens that are legal members of the vocabulary of the language in which the program is written (and may produce error messages if the character string is n

Nginx高阶用法(一)

Nginx 状态页   基于nginx模块ngx_http_auth_basic_module实现,在编译安装nginx的时候需要添加编译参数--with-http_stub_status_module,否则配置完成之后监测会是提示语法错误. 查看是否加载了ngx_http_auth_basic_module模块 [[email protected] ~]#/apps/nginx/sbin/nginx -V nginx version: nginx/1.14.2 built by gcc 4.8

大数据技术之_29_MySQL 高級面试重点串讲_02_Mysql 简介+Linux 版的安装+逻辑架构介绍+性能优化+性能分析+查询截取分析+分区分库分表简介+锁机制+主从复制

第1章 Mysql 简介1.1 概述1.2 高级 MySQL第2章 Mysql Linux 版的安装2.1 下载地址2.2 检查当前系统是否安装过 mysql2.3 修改 Mysql 配置文件位置2.4 修改字符集和数据存储路径2.5 MySQL 的安装位置说明2.6 Mysql 配置文件说明2.7 Mysql 的数据存放目录第3章 Mysql 逻辑架构介绍3.1 总体概览3.2 查询说明第4章 Mysql 性能优化4.1 影响 mysql 的性能因素4.2 查询与索引优化分析4.2.1 性能下

python的一些高阶用法

map的用法 def fn(x): return x*2 L1 = [1,2,3,4,5,6] L2 = list(map(fn,L1)) L2 [2, 4, 6, 8, 10, 12] 通过上面的运行,可以知道map就是把一个数组内所有的元素都执行map加入的方法. 用法如下 map(方法,数组) reduce的用法 先看例子 from functools import reduce def add(x,y): return x + y L1 = [1,2,3,4,5,6] L2 = redu

C#高級------数据字典练习

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace out_ref { class Program { static void Main(string[] args) { //把123替换为一二三 string str = "1一 2二 3三"; string[]strs = str.Sp

CASE WHEN 高阶用法?

两个表做关联时,以左表为准,若左表某列不为空,则与右表对应列进行关联匹配,为空则不做匹配. 以上做法,有一种说不出来的感觉,不管怎样,问题是解决了. 如有更好的解决思路,请留言告知,不甚感激! 原文地址:https://www.cnblogs.com/sheng-jie/p/8481741.html

指针的高阶用法——指向指针的指针

关于C 指向指针的指针,我觉得并没有什么值得深究的,主要知识点以外部博客的形式列出. 但是这里讲一些自己的一些想法. C 指向指针的指针,其实就是多级指针的意思.将一个指针当成变量,进行二次转码,将其又转成指针,故而在将其转换为变量的时候需要进行两次转换 **.这个可以运用到二维数组上.二维数组的特点就是将数组作为元素放到一个数组中,这与指针将指针当作元素转化特别的相符. 而且在学习的时候,我看到了指针链的一个名词,这是一个相当有意思的词语,这也就是说,我可以将某个模块化代码的值储存在指针当中,