php中file_get_contents()导致nginx出现504

 更新时间:2016年11月25日 16:46  点击:1785
下面我们一看一篇关于php中file_get_contents()导致nginx出现504问题的解决办法,希望此方法对各位朋友有所帮助。

Nginx+PHP-CGI(php-fpm) 的Web环境
突然发现系统负载上升,top 查看后发现很多 php-cgi 进程 CPU 使用率接近100%
找其中一个 CPU 100% 的 php-cgi 进程的 PID,用strace -p 10747跟踪,结果发现以下结果:
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)

几乎可以肯定是file_get_contents()导致的问题,
原因是:file_get_contents的目标网站如果反应过慢,file_get_contents就会一直卡在那里不会超时,
我们知道php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的以下参数:

The timeout (in seconds) for serving a single request after which the worker process will be terminated 
Should be used when 'max_execution_time' ini option does not stop script execution for some reason 
'0s' means 'off' 
<value name="request_terminate_timeout">0s</value>  默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。修改该参数,设置一个 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免“502 Bad Gateway”。

要做到彻底解决,不妨重新封装一下file_get_contents函数:

 代码如下 复制代码

function _file_get_content($str) {
$ctx = stream_context_create(array(  
   'http' => array(  
       'timeout' => 10 //设置一个超时时间,单位为秒  
       )  
   )  
);  
return file_get_contents($str, 0, $ctx);  
}

如此 用_file_get_content代替直接使用file_get_contents 问题解决。

PHP 5.3 ereg() 无法正常使用,提示“Function ereg() is deprecated Error”是因为它长ereg 函数进行了升级处理哦,需要像preg_match使用/ /来规则了,当然也是php5.3把ereg给费掉的节奏了。

PHP 5.3 ereg() 无法正常使用,提示“Function ereg() is deprecated Error”。

问题根源是php中有两种正则表示方法,一个是posix,一个是perl,php6打算废除posix的正则表示方法所以后来就加了个preg_match。此问题解决办法很简单,在ereg前加个过滤提示信息符号即可:把ereg()变成@ereg()。这样屏蔽了提示信息,但根本问题还是没有解决,php在5.2版本以前ereg都使用正常,在5.3以后,就要用preg_match来代替ereg。所以就需要变成这样,

原来:ereg("^[0-9]*$",$page)变成:preg_match("/^[0-9]*$/",$page)

特别提醒:posix与perl的很明显的表达区别就是是否加斜杠,所以与ereg相比,后者在正则的前后分别增加了两个"/"符号,不能缺少。


改前:function inject_check($sql_str) {

 $sql_str = strtolower($sql_str);
 return eregi('fopen|post|eval|select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str); // 进行过滤
}

解决方法:

找到代码所在的文件 位置

 

function inject_check($sql_str) {
 $sql_str = strtolower($sql_str);
 return preg_match('/fopen|post|eval|select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile/', $sql_str); // 进行过滤
}
 

注意:一定要加'/'开头与结束哦。此段参考:http://www.111cn.net/phper/31/47360.htm


Tips:此问题在php5.2之前版本不会出现。

header() 函数向客户端发送原始的 HTTP 报头,主要包括有HTTP协议的版本、状态代码、原因短语等我们常用于跳转页面,状态发送与文件下载,下面我们一起来看看。

header分为三部分:

第一部分为HTTP协议的版本(HTTP-Version);
第二部分为状态代码(Status);
第三部分为原因短语(Reason-Phrase)。

header()函数使用说明:  

一、作用:  
~~~~~~~~~  
       PHP只是以HTTP协议将HTML文档的标头送到浏览器,告诉浏览器具体怎么处理这个页面,至于传送的内容则需要熟悉一下HTTP协议了,与PHP无关了,可参照http://www.w3.org/Protocols/rfc2616/rfc2616。  
       传统的标头一定包含下面三种标头之一,并只能出现一次。  
       Location:  xxxx:yyyy/zzzz  
       Content-Type:  xxxx/yyyy  
       Status:  nnn  xxxxxx  

二、先来了解一下HTTP协议的运作方式  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
       HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。  
       它分四个过程,在HTTP协议中,服务端是指提供HTTP服务的部分,客户端是指你使用的浏览器或者下载工具等等。在通讯时,由客户端发出请求连接,服务端建立连接;然后,客户端发出HTTP请求(Request),服务端返回响应信息(Respond),由此完成一个HTTP操作。  

三、HTTP协议状态码表示的意思  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  1××  保留  
  2××  表示请求成功地接收  
  3××  为完成请求客户需进一步细化请求  
  4××  客户错误  
  5××  服务器错误  

 代码如下 复制代码

// fix 404 pages: 用这个header指令来解决URL重写产生的404 header
header(‘HTTP/1.1 200 OK’);

// set 404 header: 页面没找到
header(‘HTTP/1.1 404 Not Found’);

// 页面被永久删除,可以告诉seo/seo.html" target="_blank">搜索引擎更新它们的urls
// set Moved Permanently header (good for redrictions)
// use with location header
header(‘HTTP/1.1 301 Moved Permanently’);
// 访问受限
header(‘HTTP/1.1 403 Forbidden’);
// 服务器错误
header(‘HTTP/1.1 500 Internal Server Error’);

// 重定向到一个新的位置
// redirect to a new location:
header(‘Location: http://www.m-bang.com);

延迟一段时间后重定向
// redrict with delay:
header(‘Refresh: 10; url=http://www.sina.com.cn’);
print ‘You will be redirected in 10 seconds’;

// 覆盖 X-Powered-By value
// override X-Powered-By: PHP:
header(‘X-Powered-By: PHP/4.4.0′);
header(‘X-Powered-By: Brain/0.6b’);

// 内容语言 (en = English)
// content language (en = English)
header(‘Content-language: en’);

//最后修改时间 (在缓存的时候可以用到)
// last modified (good for caching)
$time = time() – 60; // or filemtime($fn), etc
header(‘Last-Modified: ‘.gmdate(‘D, d M Y H:i:s’, $time).’ GMT’);

// 告诉浏览器要获取的内容还没有更新
// header for telling the browser that the content
// did not get changed
header(‘HTTP/1.1 304 Not Modified’);

// 设置内容的长度 (缓存的时候可以用到):
// set content length (good for caching):
header(‘Content-Length: 1234′);

// 用来下载文件:
// Headers for an download:
header(‘Content-Type: application/octet-stream’);
header(‘Content-Disposition: attachment; filename=”example.zip”‘);
header(‘Content-Transfer-Encoding: binary’);

// 禁止缓存当前文档:
// load the file to send:readfile(‘example.zip’);
// Disable caching of the current document:
header(‘Cache-Control: no-cache, no-store, max-age=0, must-revalidate’);
header(‘Expires: Mon, 26 Jul 1997 05:00:00 GMT’);
// 设置内容类型:
// Date in the pastheader(‘Pragma: no-cache’);
// set content type:
header(‘Content-Type: text/html; charset=iso-8859-1′);
header(‘Content-Type: text/html; charset=utf-8′);
header(‘Content-Type: text/plain’);

// plain text file
header(‘Content-Type: image/jpeg’);

// JPG picture
header(‘Content-Type: application/zip’);

// ZIP file
header(‘Content-Type: application/pdf’);

// PDF file
header(‘Content-Type: audio/mpeg’);

// Audio MPEG (MP3,…) file
header(‘Content-Type: application/x-shockwave-flash’);

// 显示登录对话框,可以用来进行HTTP认证
// Flash animation// show sign in box
header(‘HTTP/1.1 401 Unauthorized’);
header(‘WWW-Authenticate: Basic realm=”Top Secret”‘);
print ‘Text that will be displayed if the user hits cancel or ‘;
print ‘enters wrong login da
ta’;
?>

现在表单的填写,我们可以用AJAX对用户随时进行验证,进行友好的提示,但是在用户没有留意AJAX友好提示,提交了错误的表单,跳回原页,而填写的信息却全部丢失了。要支持页面回跳,有以下的办法:
1. 使用session_cache_limiter方法: session_cache_limiter(‘private,must-revalidate’);但是要值得注意的是 session_cache_limiter()方法要写在session_start()方法之前才有用;
2.用header来设置控制缓存的方法: header(‘Cache-control:private,must-revalidate’);


页面跳转要注意的几个问题总结

1、location和“:”号间不能有空格,否则会出错。
2、在用header前不能有任何的输出。
3、header后的PHP代码还会被执行。
下面是和asp中重定向response.redirect的比较:
例1:

 代码如下 复制代码
response.redirect "../test.asp"
header("location:../test.php");

两者区别:
asp的redirect函数可以在向客户发送头文件后起作用.

 代码如下 复制代码
<html><head></head><body>
<%response.redirect "../test.asp"%>
</body></html>
查是php中下例代码会报错:
<html><head></head><body>
<?
header("location:../test.php");
?>
</body></html>
只能这样:
<?
header("location:../test.php");
?>
<html><head></head><body>...</body></html>

即header函数之前不能向客户发送任何数据.
例2:
asp中

 代码如下 复制代码
<html><head></head><body>
<%
response.redirect "../a.asp"
response.redirect "../b.asp"
%>
</body></html>
结果是重定向a.asp文件.
php呢?
<?
header("location:../a.php");
header("location:../b.php");
?>
<html><head></head><body></body></html>

我们发现它重定向b.php.
原来在asp中执行redirect后不会再执行后面的代码.
而php在执行header后,继续执行下面的代码.
在这方面上php中的header重定向不如asp中的重定向.有时我们要重定向后,不能执行后面的代码:
一般地我们用

 代码如下 复制代码
if(...)
header("...");
else
{
...
}

但是我们可以简单的用下面的方法:

 代码如下 复制代码
if(...)
{ header("...");exit();}

还要注意的是,如果是用Unicode(UTF-8)编码时也会出现问题,需要调整缓存设置.

 代码如下 复制代码
<[email=%@]%@LANGUAGE="VBSCRIPT[/email]" CODEPAGE="936"%>
<%if Request.ServerVariables("SERVER_NAME")="s.111cn.net" then
response.redirect "news/index.htm"
else%>
<%end if%>
<script>
var url = location.href;
if(url.indexOf('http://www.111cn.net/')!=-1)location.href='/index/index.htm';
if(url.indexOf('http://www.zhutiy.com/')!=-1)location.href='/index1/index.htm';
if(url.indexOf('http://www.111cn.net/')!=-1)location.href='/cn/index.asp';
if(url.indexOf('http://www.baidu.com/')!=-1)location.href='/cn/index.asp';
</script>
闭包函数是在PHP5.3版本才引入的了,闭包函数也就是匿名函数函数了,这个与js中的匿名函数很像了,下面我们来看看php匿名函数吧。

php闭包函数比如你现在就可以这样使用:

 代码如下 复制代码

$closure = function($param) { echo $param; };

感觉和js是不是一样的用法了.

一些闭包函数实例

 代码如下 复制代码


function test(){
$test='';
$test=function ($str){
echo 'test';
return $str;
};
timeout('Y-m-d H:i:s',function ($time){
//$this->date=time();
return $time-24*60*60;
});

var_dump($test(‘hello word!’));

}
function timeout($format,$time){
echo date($format,$time(time()));
}
test();
?>

上例输出

2013-11-19 16:24:56teststring(11) “hello word!”

这样子参数便可以用函数了。
条件是,php3.0以后php 4.0以后闭包函数支持$this用法

闭包函数通常被用在preg_match等有callback的函数

 代码如下 复制代码

class A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A::$sfoo;
};
$cl2 = function() {
return $this->ifoo;
};

$bcl1 = Closure::bind($cl1, null, ‘A’);
$bcl2 = Closure::bind($cl2, new A(), ‘A’);
echo $bcl1(), “n”;
echo $bcl2(), “n”;
?>

输出
1
2
bind将类可以在闭包函数中使用

 代码如下 复制代码


class A1 {
function __construct($val) {
$this->val = $val;
}
function getClosure() {
//returns closure bound to this object and scope
return function() { return $this->val; };
}
}

$ob1 = new A1(1);
$ob2 = new A1(2);

$cl = $ob1->getClosure();
echo $cl(), “n”;
$cl = $cl->bindTo($ob2);
echo $cl(), “n”;
?>

以上例程的输出类似于:
1
2
bindto在类里可以再次绑定类

 代码如下 复制代码

$fn = function(){
return ++$this->foo; // increase the value
};

class Bar{
private $foo = 1; // initial value
}

$bar = new Bar();

$fn1 = $fn->bindTo($bar, ‘Bar’); // specify class name
$fn2 = $fn->bindTo($bar, $bar); // or object
$fn3 = $fn2->bindTo($bar); // or object

echo $fn1(); // 2
echo $fn2(); // 3
echo $fn3(); // 4

?>

在类之外需要绑定类才能用,绑定可以是类名,也可以是对象,绑定过之后可以再次绑定不需要提拱类名或对象

isset函数我们多用于判断变量是不是存在了,如isset($a)了,如果存在返回 true,否则返回false了,下面我们一起来看看。

isset函数是检测变量是否设置。

格式:bool isset ( mixed var [, mixed var [, ...]] )

返回值:

若变量不存在则返回 FALSE
若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE
同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节("")并不等同于 PHP 的 NULL 常数。


获取用户属性时有的用户能,有的用户不能,同样的逻辑为什么不能经检查使用了类似这样的代码

 代码如下 复制代码

$userInfo=’abc’;
if(isset($userInfo['account'])) {
$account=$userInfo['account'];
} else {
$account=$userInfo;
}

发现$account得到的是空,查了一些资料也没得到结果
做了一个实验得到了结论

 代码如下 复制代码

$a=’abc’;
echo $a['account'];

结果是a

当是字符串key没有时,它会转化成数字key,是0,所以得到了a
现在php5.4已经修复

趁这机会,整理了一下isset的用法,供大家借鉴

 代码如下 复制代码

<?php

$var = '';

if (isset($var)) {
print "This var is set set so I will print.";
}

// 在后边的例子中,我们将使用 var_dump函数 输出 isset() 的返回值。

$a = "test";
$b = "anothertest";

var_dump( isset($a) ); // TRUE
var_dump( isset ($a, $b) ); // TRUE

unset ($a);

var_dump( isset ($a) ); // FALSE
var_dump( isset ($a, $b) ); // FALSE

$foo = NULL;
var_dump( isset ($foo) ); // FALSE

?>

这对于数组中的元素也同样有效:

 

 代码如下 复制代码

<?php

$a = array ('test' => 1, 'hello' => NULL);

var_dump( isset ($a['test') ); // TRUE
var_dump( isset ($a['foo') ); // FALSE
var_dump( isset ($a['hello') ); // FALSE

// 'hello' 等于 NULL,所以被认为是未赋值的。
// 如果想检测 NULL 键值,可以试试下边的方法。
var_dump( array_key_exists('hello', $a) ); // TRUE

?>

 

键 ‘b’ 的值等于 NULL,所以被认为是未置值的。
但是键’c'的值是空结果是true,空值是代表 有设置的 如果想检测 NULL 键值,可以试试下边的方法。

 代码如下 复制代码

var_dump( array_key_exists(‘hello’, $a) ); // TRUE

警告: isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用 defined() 函数。

一些应用中实例


PHP isset()对PHP参数判断您可以使用 PHP isset() 来判断一个参数是否被定义,注意如果该参数为空,或者"n"(NULL字节)使用 PHP isset() 判断之后,都会为TRUE。

 代码如下 复制代码

<?php
$weigeti=''; //这里初始参数$weigeti='';
$weigeti0=FALSE //这里初始参数为布尔FALSE
$weigeti2=NULL;  //这里定义$weigeti2=NULL,用isset()判断返回FALSE
$weigeti3=""; // 这里是NULL字节,用isset()判断,返回TRUE,不同于NULL常数
$weigeti4="www.v-get.com";  //这里定义会在下面给unset掉

if(isset($weigeti)){ echo '参数$weigeti已经设定,且值不为NULL'; }
// 参数$weigeti已经赋值,而且值为$weigeti='',所以会输出“参数$weigeti已经设定”

if(isset($weigeti0)){ echo '参数$weigeti0已经设定,且值不为NULL'; }
// 参数$weigeti0已经赋值,而且值为$weigeti=FALSE,所以会输出“参数$weigeti已经设定”

if(isset($vget)){ echo '参数$vget已经设定,且值不为NULL'; }
// 参数$vget根本就没有被提及过,isset($vget)返回FALSE,不会输出

if(isset($weigeti2)){ echo '参数$weigeti2已经设定,且值不为NULL'; }
// 这里是$weigeti2虽然被设定了,但是$weigeti2=NULL,所以isset($weigeti2)返回FALSE,不会输出

if(isset($weigeti3)){ echo '参数$weigeti3已经设定,且值不为NULL'; }
// 参数$weigeti3 虽然 就是代表NULL字节,但是这个不是常数NULL,所以$isset("")返回TRUE,会输出

unset($weigeti4);  //这里给$weigeti4 释放掉了
if(isset($weigeti4)){ echo '参数$weigeti4已经设定,且值不为NULL'; }
// 虽然开始已经定义$weigeti4,而且还不为NULL,但是后来又给 unset() 掉了,所以不会输出。
?>

PHP isset() 对数组的判断在使用PHP数组的时候,需要判断数组的某个值是否存在也可以使用 PHP isset() 函数。

 代码如下 复制代码

<?php
$V=array(
'WeiGeTi'=>'www.111cn.net',
'V-Get'=>array(
    'www'=>'www.v-get.com',
    'e'=>'e.v-get.com',
    'wuliu'=>array(
        'www'=>'wuliu.v-get.com',
        'yiwu'=>'www.111cn.net'
     )
   )
);

// var_dump用于输出TRUE 或 FALSE


var_dump(isset($V['WeiGeTi']));
// 数组$V 的$V['WeiGeTi'] ='www.111cn.net'已经存在,所以输出TRUE

var_dump(isset($V['V-Get']['e']));
//$V['V-Get']['e']='e.v-get.com' 所以输出 TRUE

var_dump(isset($V['V-Get']['wuliu']['yiwu']));
// $V['V-Get']['wuliu']['yiwu']='www.111cn.net'所以输出TRUE

var_dump(isset($V['V-Get']['wuliu']['sh']));
//根据数组,根本就没有设定该项,所以输出FALSE
?>

PHP isset()多参数判断很多时候我们需要对多个参数进行判断,可以使用isset($A)&&isset($B)……来判断这些参数是不是都已经设定了,而且都不为NULL,对此您可以使用isset()多参数来判断是不是都设定了。

 代码如下 复制代码
<?php
isset($v1)&&isset($v2)&&isset($v3)……
等价于
isset($v1,$v2,$v3……)
?>

使用isset()判断多个参数,需要所有参数都被设定,且不为NULL,只要其中有一个参数没有被设定过,或者为NULL,那么整个isset()就为FALSE。

PHP isset()判断$_POST、$_GET、$_REQUEST等值。用isset() 或者empty() 判断通过表单传递来的参数是isset() 最常见的用法。

 代码如下 复制代码
if(isset($_POST['from'])&&'E.V-Get.com'==$_POST['from']){
echo '网站通过POST传递的来源是E.V-Get.com';
}

根据上面我们可以用isset判断多参数,在对表单传递来的值进行判断就最方便了。

 代码如下 复制代码

<?php
//表单传递来user用户名和 pass必须同时存在才能执行
if(isset($_POST['user'],$_POST['pass'])){
$user=$_POST['user'];
$pass=$_POST['pass'];
echo '您填写的用户名是:',$user,';密码是:',$pass;

}
?>

PHP isset($var{字符串长度}) 判断字符串长度用PHP判断字符串是否存在或者判断字符串长度是否超过某一数字或者判断字符串长度是否为空一般使用strlen(),但是其实使用isset()性能更优越。

 代码如下 复制代码

<?php
//三元,等同于 if(isset($_POST['from'])){$weigeti=$_POST['from'];}else{$weiget='';}

$weigeti=isset($_POST['from'])?$_POST['from']:'';

//判断$weigeti存在,且字符串长度大于0
/* 菜鸟写法 
if(strlen($weigeti)>0){
echo '$weigeti子符长度大于0';}
*/

// 性能更优越的写法,判断$weigeti第1个字符是否设定了
if(isset($weigeti{1})){
echo '$weigeti字符长度大于0';
}
?>

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php file_get_contents 设置代理抓取页面示例

    file_get_contents函数在php中可以直接打开本地文件也可以直接抓取远程服务器文件,如果简单的采集我们可以使用file_get_contents直接来操作,如果有防采集我们可能需要...2016-11-25
  • php报错file_get_contents(): php_network_getaddresses问题

    本文章来为各位介绍一篇关于file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known...错误解决办法。 昨天,服务器的DN...2016-11-25
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • file_get_contents()获取https出现这个错误Unable to find the wrapper “https”

    下面我们来看一篇关于file_get_contents()获取https出现这个错误Unable to find the wrapper “https”问题的解决办法. file_get_contents()获取https出现这个错...2016-11-25
  • file_put_contents并发性问题解决方案整理

    在使用file_put_contents时会碰到并发性问题了,对于这个问题我们有多种解决方案了,其实锁是小编比较喜欢的解决办法了,当然也有其它办法,具体如下。 解决 办法一,fil...2016-11-25
  • php提示Warning: file_get_contents(): couldn’t resolve

    在使用file_get_contents函数获取远程文件时提示Warning: file_get_contents(): couldn’t resolve错误了,这个我们可以看出是dns的问题,解决办法也简单。 今天在...2016-11-25
  • php中file_get_contents和curl_get_contents介绍

    php中file_get_contents和curl_get_contents介绍 有需要的朋友可参考一下。 分享一个实际在用的函数: file_get_contents() 函数是用于将文件的内容读入到一个字符...2016-11-25
  • file_get_contents不能获取带端口的网址

    本文章来给各位同学介绍file_get_contents不能获取带端口的网址解决办法,有需要了解的同学可参考。 先们来了解file_get_contents() 函数,官方介绍说它是把整个...2016-11-25
  • DIV浮动IE文本出现3px间距的bug

    发生场合:当左边对象是浮动的,右边对象采用外补丁的左边距来定位,则右边对象内的文本会离左边有3px的空白误差。 没加修正: 运行代码框 代码如下 复制代...2017-07-06
  • centos下file_put_contents()无法写入文件的原因及解决方法

    下面小编就为大家带来一篇centos下file_put_contents()无法写入文件的原因及解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • 为什么出现“APACHE.EXE: cannot determine 

    由于Windows版本的Apache默认情况下不指定ServerName,所以运行时会出错。 解决的办法是修改Apache安装目录下的conf目录下的httpd.conf: - 搜索ServerName - 去掉前面...2016-11-25
  • CentOS 64 编译PHP出现 error: Cannot find ldap libraries in /usr/lib

    CentOS 64 编译PHP出现 error: Cannot find ldap libraries in /usr/lib 有需要的朋友可参考参考。 在CentOS 64位下编译安装PHP5.4.8。cp -frp /usr/lib64/libpn...2016-11-25
  • php file_put_contents 生成文件

    <html> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="http://ajax...2016-11-25
  • php curl file_get_contents post方式获取数据

    下面我们在这里来为各位介绍一篇关于php curl file_get_contents post方式获取数据例子,希望文章能够帮助到各位朋友. curl post,file_get_contents post,curl fi...2016-11-25
  • PHP中file_put_contents写入文件的优点

    file_put_contents写入文件在我看到的phper中很少用到了,但小编以前做flash接受数据时就用到了file_put_contents函数了,下面我们来看看file_put_contents写入文件的优...2016-11-25
  • php file_get_contents 函数

    php file_get_contents 函数 file_get_contents ( PHP 4中“ = 4.3.0 , PHP 5中) file_get_contents -读取整个文件转换成字符串 描述 字符串file...2016-11-25
  • php file_get_contents获取百度热词代码

    这是一段很简单的程序利用了php的file_get_contents函数来采集百度的数据,然后通过simplexml_load_String把它数据解析出来,这样数据就保存到了一个数组,我们就可以方便...2016-11-25
  • file file_get_contents HTTP request failed

    /* 我有一个问题,要求从php教程代码的url。我需要调用一个服务,使用从我的php代码的查询字符串。如果我的浏览器中键入一个网址,它工作还算可以,但如果我使用文件获取,内容...2016-11-25
  • php file_put_contents 函数

    php file_put_contents 函数 file_put_contents ( PHP 5中) file_put_contents -写一个字符串到一个文件 描述 国际file_put_contents (字符串$文件名,...2016-11-25