本文目录一览:
- 1、如何严格设置php中session过期时间?
- 2、PHP 设置代码的最长执行时间
- 3、php进程超时接口返回504错误分析
- 4、php执行cmd脚本超时,不能去改ini因为超时期间页面一直在等待,怎么才能
- 5、php.ini 的配置问题
- 6、PHP 这个设置 ini_set('memory_limit', '200M') 的生效时间
如何严格设置php中session过期时间?
第一种方法即设置php.ini配置文件,设置session.gc_maxlifetime和session.cookie_lifetime节\x0d\x0a\x0d\x0a点属性值,当然也可以使用ini_set函数改变当前上下文环境的属性值:\x0d\x0a\x0d\x0aini_set('session.gc_maxlifetime',"3600");//秒\x0d\x0aini_set("session.cookie_lifetime","3600");//秒\x0d\x0a\x0d\x0a第二种方法即设置Session时间戳,比如下面的办法。\x0d\x0a\x0d\x0a在登录成功时设置时间戳为当前时间推后1小时,$_SESSION['expiretime']=time()+3600;。在\x0d\x0a\x0d\x0a检查用户登录情况使用如下代码:\x0d\x0a\x0d\x0aif(isset($_SESSION['expiretime'])){\x0d\x0aif($_SESSION['expiretime']
回答于 2022-12-14
PHP 设置代码的最长执行时间
php完成某些操作的时候,可能需要较长的执行时间。这就需要设置他的执行时间,否则服务器会在执行时间超时后,停止执行,页面出现空白的情况。下面推荐两种解决方案:
php文件页面设置:
?php
//修改最大执行时间
ini_set('max_execution_time', '0');
//修改此次最大运行内存
ini_set('memory_limit','128M');
/***
*
* 代码块省略......
*
*
*/
?
php.ini配置文件设置(具体值,根据需要设置):
max_execution_time = 60
memory_limit = 128M
注意:如果执行内存完全满足的话,就不需要设置了。具体设置,根据情况灵活设置。
php进程超时接口返回504错误分析
在一次接口测试中,发现返回的http 504 time out 的错误,然后查看了php-fpm的错误日志,发现了如下错误
从表现上看,是php进程超时导致的进程被kill了,那么这个超时时间以及kill的机制是跟哪些参数有关呢,这里系统这里一下。
Nginx服务一般因为php的错误或者超时会有两种错误码502 bad Gateway 或者 504 Gateway Time-out
一种情况是php产生了语法错误,比如循环调用、变量作用域错误、方法不存在等,如果开启错误日志输出的话,这种错误在php-fpm的错误日志中是可以看到调用栈信息的。
另外一种情况可能就是超时引起的php-fpm主动kill的情况,在php.ini和php.fpm中有两个配置项,用来管理php脚本的最大执行时间
当php脚本的执行时间超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。
以顶部的错误为例,当报502错误是,nginx的errorlog中有如下日志,:
所以只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了。request_terminate_timeout可以覆盖max_execution_time,
所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。
此外要注意的是Nginx的upstream模块中的max_fail和fail_timeout两项。这两个配置表示在fail_timeout事件内,如果fail的测试达到max_fail,那么在接下来的fail_timeout时间内,Nginx都会认为上游服务器挂掉了,都会返回502错误。 -php.ini配置耗时
所以可以将max_fail调大一些,将fail_timeout调小一些。
PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置
以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:
调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。-php.ini配置耗时
参考链接: 感谢分享!
php执行cmd脚本超时,不能去改ini因为超时期间页面一直在等待,怎么才能
PHP脚本执行超时的解决办法
在php中默认脚本执行超时时间为30秒了,如果未进行设置30秒之后如果你的脚本还未执行完就会超时了,下面我来给大详解解决PHP脚本执行超时的方法。
php.ini
中缺省的最长执行时间是
30
秒,虽然可以通过调整
php.ini
中
max_execution_time的值来达到目的,但有些情况是没有条件修改php.ini的,如何解决这个问题呢。
一种方法是在
PHP
脚本中加入
代码如下
ini_set('max_execution_time',
'0');
将运行时间设置成0(无限值);
另一种方法是在命令行下执行脚本,使用命令行执行脚本时,最大运行时间被设置为了无限值。
修改php.ini的脚本执行时间限制
编辑php.ini,修改max_execution_time值:
代码如下
max_execution_time=500
//此修改需要重新加载php.ini,需要重启web服务器生效。
通过.htaccess
文件设置脚本执行时间
代码如下
php_value
max_execution_time
500
在脚本中设置执行的最大时间
代码如下
ini_set('max_execution_time',
500);
用php的函数取消脚本的时间限制
代码如下
set_time_limit(0);
set_time_limit用来设置脚本的超时时间,此函数规定从该句运行时起程序必须在指定秒数内运行结束,超时则程序出错退出。
下面是一个例子.
有10000条数据,
要修改其中某些数据,
运用PHP分步执行处理,
代码如下:
action.php
代码如下
?php
$stid
=
isset($_GET['stid'])?$_GET['stid']:0;
$endid
=
$stid
+
100;
$maxid
=
10000;
function
dosomething(){
//要时间比较多的操作
……
}
$sql_string=”select
*
from
`table`
where
id’$stid’
and
id=’$endid’
order
by
id”;
$datas
=
getdata_bysql($sql_string);
foreach($datas
as
$data){
//处理数据
…..
echo
$id.”
处理完成.
br
/”;
if($id=$maxid){exit;}
}
if($stid=$maxid){
$stid
=
$stid
+
100;
$url=”action.php?stid=$stid”;
echo
$url;
echo
‘script
language=”javascript”location=”‘.$url.’”;
/script’;
}
?
其中的dosomething()是一个耗时操作.
这里我们通过限制id范围来减少运行时间,
运行完后通过javascript的跳转来自动运行下一步
现在dedecms生成html页面时就是这样做
php.ini 的配置问题
有两种方式可以进行控制.
1. 直接系统层面控制,如楼上所说,只要修改php.ini文件,重启APACHE,就可以让配置生效.
2. 程序页面的控制.
在程序页头可以利用函数 ini_set ( "display_errors" , "on" );设置是否开启错误显示模式. (可以在每个程序页头include一个配置文件,然后该配置文件用来控制是否开启或者关闭显示,这样在不需要启动APACHE情况下,就可以打开或者关闭调试模式)-php.ini配置耗时
另外给一些与错误显示相关的配置.
error_reporting = E_ALL ~E_NOTICE (需要显示错误的内容,如示例是要求显示所有错误,但不包括NOTICE错误)
log_errors = On (启用错误日志记录到日志,off为关)
ignore_repeated_errors = Off (忽略重复的错误日志,OFF为关)
error_log = filename (指定错误日志写入的文件)
PHP 这个设置 ini_set('memory_limit', '200M') 的生效时间
PHP 这个设置 ini_set('memory_limit', '200M') 的生效时间
1、这个设置完就生效了!
2、 只对当前的设置的程序生效,程序结束后还是原来的配置;
3、跑完这段代码后,设置还是恢复默认设置。
其实这些都是可以测试的:
1、你可以建一个测试文件 a.php 运行前先通过 ini_get('memory_limit')获取内存配置,然后设置完之后,再获取输出下内存配置;
2、你可以另建一个文件b.php,在a.php程序运行完之后,b.php里面通过 ini_get('memory_limit')获取下内存设置输出下看下!