php 中file_get_contents超时问题的解决方法
创建一个可以控制的资源句柄,通过控制资源句柄超时来控制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( |
二、一次有延时的话那就多试几次
有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失败将返回 FALSE,所以可以下面这样编写代码:
代码如下 | 复制代码 |
$cnt=0; while($cnt < 3 && ($str=@file_get_contents('http...'))===FALSE) $cnt++; |
以上方法对付超时已经OK了。那么Post呢?细心点有人发现了'method'=>"GET", 对!是不是能设置成post呢?百度找了下相关资料,还真可以!而且有人写出了山寨版的post传值函数,如下:
代码如下 | 复制代码 |
function Post($url, $post = null) if (is_array($post)) $context['http'] = array 'timeout'=>60, return file_get_contents($url, false, stream_context_create($context)); $data = array echo Post('http://www.111cn.net', $data); |
例
代码如下 | 复制代码 |
function mkdirs($dir){ if(!mkdir($dir, 0777)){ return TRUE; $path="/aa/bb/cc/cd"; //要创建的目录 |
php创建目录的函数是mkdir($dir,$mode);但是它每次只能创建一个目录,也就是说它不能一次创建多级目录(这点大家肯定知道来的,这里小编多此一举了)。
小编整理了两个可以递归创建目录的方法供大家参考学习,谢谢啦!
代码如下 | 复制代码 |
<?php function mkdirs($dir, $mode = 0777) |
这是我自己写的一个php分页实例
代码如下 | 复制代码 |
<html> $query="SELECT count(*) FROM user"; |
上面代码不能重复使用,后来整理了一个类
代码如下 | 复制代码 |
#pages{display:block; text-align:center; overflow:hidden; color:#000; font-size:13px} |
PHP分页函数类源码:
代码如下 | 复制代码 |
<?php interface Page{ class AdminPage implements Page{ public function __construct($sql,$p){ $s = new Sql(); } public function showpage(){ if( $this->pageNum <=5){ $this->pageStr = '<ul id="pages"><li><a href="'.$this->urlstr.'?p=1" target="rframe" >首页</a></li>'; $this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$this->pageNum.'" target="rframe" >末页</a></li>'; }else if($this->pageNum>5){ $this->pageStr = '<ul id="pages"><li><a href="'.$this->urlstr.'?p=1" target="rframe" >首页</a></li>'; for($i=1;$i<=5;$i++){ $this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$this->pageNum.'" target="rframe" >末页</a></li>'; }else if($this->nowpage <= $this->pageNum -2 && $this->nowpage>=5){ }else if($this->nowpage>=$this->pageNum-3 && $this->nowpage <=$this->pageNum){ $this->pageStr = '<ul id="pages"><li><a href="'.$this->urlstr.'?p=1" target="rframe" >首页</a></li>'; for($i=$this->pageNum-4;$i<=$this->pageNum;$i++){ $this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$this->pageNum.'" target="rframe" >末页</a></li>'; } |
问题现象:zend studio xdebug 57% waiting for xdebug session
作者本人的开发环境通常是windows宿主机器+vmare Linux虚拟机,通过linux的samba功能将虚拟机下的目录共享给windows做磁盘映射,这样的开发环境可以快速的在windows下实现完整的Linux代码调试环境。
今日在虚拟机下给php装xdebug来调试代码时,按照网上的步骤对xdebug做了配置,因为我的虚拟机环境的网络是走NAT的。
linux虚拟机的网段是192.168.2.0/255.255.255.0 ,网关为192.168.2.2.
windows宿主机器的网段是192.168.1.0/255.255.255.0
在windows下浏览器访问虚拟机下的http服务时都是通过vmare 的nat虚拟网卡转发过去,此网卡绑定的p为192.168.2.1。那么问题就来了,虚拟机下获取到的来路请求ip都是192.168.2.1,获取到xdebug的调试请求后转发信息给zend studio时网络却受阻了。我在设置的xdebug端口号是19000.如下如所示:
可以从图中看到我们的请求在发送给192.168.2.1 的19000端口时,但是这是卡住的原因是syn_sent的过程网络不通,导致php无法连接到windows宿主机下的zend studio。只要问题定位到就好办了,最快的解决方法就是开启iptables的端口转发,将发送到192.168.2.1 端口19000的数据全部转发给宿主机IP:192.168.1.105。
我们用root配置如下iptabless规则:
iptables -t nat -A OUTPUT -p tcp -d 192.168.2.1 --dport 19000 -j DNAT --to 192.168.1.105:19000
这样我们的zend studio就可以轻松收到php发来的xdebug调试数据了。
用NAT网络模式的虚拟环境比较蛋疼,如果换成桥接模式让宿主机和虚拟机同一个网段,那么问题迎刃而解。
本文章来给各位同学介绍我一个常用的php用户注册时的一些用户名和密码验证函数,还有:邮件格式、手机号码格式、 QQ号码的格式、电话号码格式包括区号、检测参数是否为中文等。代码如下 | 复制代码 |
Class Check{ /** * IsUsername函数:检测是否符合用户名格式 * $Argv是要检测的用户名参数 * $RegExp是要进行检测的正则语句 * 返回值:符合用户名格式返回用户名,不是返回false */ function IsUsername($Argv){ $RegExp='/^[a-zA-Z0-9_]{3,16}$/'; //由大小写字母跟数字组成并且长度在3-16字符直接 return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsMail函数:检测是否为正确的邮件格式 * 返回值:是正确的邮件格式返回邮件,不是返回false */ function IsMail($Argv){ $RegExp='/^[a-z0-9][a-z.0-9-_] @[a-z0-9_-] (?:.[a-z]{0,3}.[a-z]{0,2}|.[a-z]{0,3}|.[a-z]{0,2})$/i'; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsSmae函数:检测参数的值是否相同 * 返回值:相同返回true,不相同返回false */ function IsSame($ArgvOne,$ArgvTwo,$Force=false){ return $Force?$ArgvOne===$ArgvTwo:$ArgvOne==$ArgvTwo; } /** * IsQQ函数:检测参数的值是否符合QQ号码的格式 * 返回值:是正确的QQ号码返回QQ号码,不是返回false */ function IsQQ($Argv){ $RegExp='/^[1-9][0-9]{5,11}$/'; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsMobile函数:检测参数的值是否为正确的中国手机号码格式 * 返回值:是正确的手机号码返回手机号码,不是返回false */ function IsMobile($Argv){ $RegExp='/^(?:13|15|18)[0-9]{9}$/'; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsTel函数:检测参数的值是否为正取的中国电话号码格式包括区号 * 返回值:是正确的电话号码返回电话号码,不是返回false */ function IsTel($Argv){ $RegExp='/[0-9]{3,4}-[0-9]{7,8}$/'; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsNickname函数:检测参数的值是否为正确的昵称格式(Beta) * 返回值:是正确的昵称格式返回昵称格式,不是返回false */ function IsNickname($Argv){ $RegExp='/^s*$|^c:\con\con$|[%,*"st<>&'()]|xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8/is'; //Copy From DZ return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsChinese函数:检测参数是否为中文 * 返回值:是返回参数,不是返回false */ function IsChinese($Argv,$Encoding='utf8'){ $RegExp = $Encoding=='utf8'?'/^[x{4e00}-x{9fa5}] $/u':'/^([x80-xFF][x80-xFF]) $/'; Return preg_match($RegExp,$Argv)?$Argv:False; } } |
相关文章
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25php file_get_contents 设置代理抓取页面示例
file_get_contents函数在php中可以直接打开本地文件也可以直接抓取远程服务器文件,如果简单的采集我们可以使用file_get_contents直接来操作,如果有防采集我们可能需要...2016-11-25- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21php报错file_get_contents(): php_network_getaddresses问题
本文章来为各位介绍一篇关于file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known...错误解决办法。 昨天,服务器的DN...2016-11-25总结android studio注意事项及打不开等问题解决方法
经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20- file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
MySQL ERROR 2013 (HY000)错误解决方法
当通过 TCP/IP 连接 MySQL 远程主机时,出现 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104 。如果是在linux shell命令行中直接打 mysql 命令,...2015-03-15IE6-IE9中tbody的innerHTML不能赋值的解决方法
IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </head> <body style="height:3...2014-06-07- centos6.2,停止mysqld然后修改/etc/my.cnf datadir的位置,启动mysqld提示FAILED,查看日志 复制代码 代码如下: 120609 11:31:31 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 120609 11:35:12 my...2015-03-15
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- 小米手机如果想要刷机就必须要先解锁验证才可以,那么,如果遇到小米解锁验证失败以及小米解锁工具登录失败的现象怎么办呢?对此,本文就为大家进行解答,有需要的朋友来看看。...2016-12-21
Photoshop提示“此产品的许可证已过期"及“无法开始您的Adobe Photoshop CS5.1 订阅”解决方法
首先不要鄙视我用Photoshop盗版,实在是贵。现在我们来看看如果你的Photoshop提示“此产品的许可证已过期",还有“无法开始您的Adobe Photoshop CS5.1 订阅”如何解决吧...2016-09-14- 今天小编在这里就来给各位photoshop的这一款软件的使用者们来详细的说一下软件的字体出现了乱码这一问题的解决方法,那么各位有出现这个问题的,下面就来跟着小编一起看...2016-09-14
- 有部分小伙伴表示自己遇到了51模拟器程序不能打开的情况,那么51模拟器打不开怎么回事?下面我就来为大家分享一下解决的方法,有需要的小伙伴就来看一看吧。  &...2017-07-06
CentOS下php使用127.0.0.1不能连接mysql的解决方法
php代码很简单:复制代码 代码如下: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,"mysql","mysql"); if (!$link) { die('Could not connect: ' . mysql_error().mysql_errno()); } lin...2015-03-15PHP is_subclass_of函数的一个BUG和解决方法
is_subclass_of的作用:复制代码 代码如下:bool is_subclass_of ( object object, string class_name )如果对象 object 所属类是类 class_name 的子类,则返回 TRUE,否则返回 FALSE。注: 自 PHP 5.0.3 起也可以用一个字符...2014-06-07mysql too many open connections问题解决方法
曾经以为在my.cnf写入max_connections = 2000就可以改变mysql的最大并发量,今天查到一个命令,发现服务器的mysql最大连接数为151.控制台,连接上mysql复制代码 代码如下:show variables;这条命令可以看到所有基础配置如果...2014-05-31