扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
微信小程序推送服务通知需要收集足够的formid,使用过程中发现如果formid大量失效,在使用递归从redis从获取可用formid的时候会导致栈溢出问题,下面方法是使用php的高阶函数来消除递归,完美解决问题,记录之:
旌阳网站建设公司创新互联建站,旌阳网站设计制作,有大型网站制作公司丰富经验。已为旌阳超过千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的旌阳做网站的公司定做!
?php
class A
{
public static function factorial($n, $accumulator = 1) {
if ($n == 0) {
return $accumulator;
}
return function() use($n, $accumulator) {
return self::factorial($n - 1, $accumulator * $n);
};
}
public static function trampoline($params) {
$result = call_user_func_array('self::factorial', $params);
while (is_callable($result)) {
$result = $result();
}
return $result;
}
public static function run()
{
var_dump(self::trampoline(array(500)));
}
}
A::run();
你看看你的程序里面有没有用到递归,或者有没有死循环。
另外解决此类问题的主要思想就是分而治之
我觉得是foreach的机制的问题
foreach($arr as $key=$value){}这里面的$value是每次循环是把数组中元素的值赋值给$value
而foreach($arr as $key=$value){}这里的$value是引用赋值。
两者有什么区别呢?带引用的$value可以$value='aaa';直接改变元素的值;还有一个重要的,就是最后一次循环之后$value的值还会保留;
你这里是foreach($obj as $value){}对象默认是引用传值;所以循环过后要unset($obj);
php里还有一个函数clearstatcache(true)清楚文件状态缓存,虽然受影响的函数没有simplexml_load_file(),不过还是可以试试;
还有mysql系列的函数很多也不是很稳定,有时候不知道会出什么问题;建议用PDO;
深感php里面的坑太多了,稍不注意就跳进去了。
解决办法:
1、请检查您的 MySQL 帐号是否有相应的权限。
2、检查一下应用下的 config 配置文件中的连接数据库的帐号是否正确。
3、检查一下数据库是否满了,如果数据库满了没有空间后也会出现这种情况。
PHP has encountered a Stack overflow
空间不足或者服务器的php版本问题
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流