php超时问题的研究

来源:互联网 发布:上海电梯灵异 知乎 编辑:程序博客网 时间:2024/05/16 05:16
<?php//php的超时问题/************php脚本本身的超时问题*************//* * 脚本的超时时间设置 set_time_limit(秒数); 设置为0就是一直运行不超速 * 网上找到的解释 * 当你的页面有大量数据时,建议使用set_time_limit()来控制运行时间,默认是30s,所以需要你将执行时间加长点,如 set_time_limit(300)  ,其中将秒数设为0 ,表示持续运行!        如:set_time_limit(0)表示长时间链接运行!                注意:这个函数的运行需要你关闭安全模式,在php.ini中将safe_mode = Off 安全模式设置为Off,否则将会出现下面错误:                Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in                 再次注意的是:                在php.ini可以通过定义max_execution_time来设置PHP页面的最大执行时间,比如下面:           set_time_limit(900);        这个函数指定了当前所在php脚本的最大执行时间,        虽然设定值是900秒,实际上        最大执行时间=php.ini里的max_execution_time数值 - 当前脚本已经执行的时间 + 设定值        假如php.ini里的max_execution_time=30,当前脚本已经执行10秒,则:        最大执行时间=30-10+900=920秒。 * *//************mysqli连接的超时问题*************///创建对象$mysqli = mysqli_init();//设置超时选项//Connect failed: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 1);//连接$mysqli->real_connect('localhost', '用户名', '密码', 'test');//如果超时或者其他连接失败打印错误信息if (mysqli_connect_errno()) {    printf("Connect failed: %s\n", mysqli_connect_error());    exit();}//成功输出连接信息printf ("Connection: %s\n.", $mysqli->host_info);$mysqli->close();/************socket请求的超时问题*************///..........$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);    //连接的时候指定连接超时//..............stream_set_blocking($fp, $block);stream_set_timeout($fp, $timeout);      //PHP函数stream_set_timeout(Stream Functions)作用于读取流时的时间控制@fwrite($fp, $out);$status = stream_get_meta_data($fp);if(!$status['timed_out']) {  //.................  }/************curl的超时问题*************/curl_setopt($ch,CURLOPT_TIMEOUT,60);//只需要设置一个秒的数量就可以//curl_setopt($ch,CURLOPT_NOSIGNAL,1);//注意,毫秒超时一定要设置这个//curl_setopt($ch,CURLOPT_TIMEOUT_MS,200);//超时毫秒,cURL7.16.2中被加入。从PHP5.2.3起可使用//file_get_contents超时$timeout=array(    'http'=>array(        'timeout'=>5//设置一个超时时间,单位为秒     ));$ctx=stream_context_create($timeout);$text=file_get_contents("http://example.com/",0,$ctx);/************fopen的超时问题*************/$timeout=array(    'http'=>array(        'timeout'=>5//设置一个超时时间,单位为秒     ));$ctx=stream_context_create($timeout);if($fp=fopen("http://example.com/","r",false,$ctx)){    while($c=fread($fp,8192)){        echo$c;    }    fclose($fp);}/************其他待研究,文章在个人收藏中*************/

0 0
原创粉丝点击