微信小程序推送服務(wù)通知需要收集足夠的formid,使用過程中發(fā)現(xiàn)如果formid大量失效,在使用遞歸從redis從獲取可用formid的時候會導(dǎo)致棧溢出問題,下面方法是使用php的高階函數(shù)來消除遞歸,完美解決問題,記錄之:

旌陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,旌陽網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為旌陽超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的旌陽做網(wǎng)站的公司定做!
?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();
你看看你的程序里面有沒有用到遞歸,或者有沒有死循環(huán)。
另外解決此類問題的主要思想就是分而治之
我覺得是foreach的機制的問題
foreach($arr as $key=$value){}這里面的$value是每次循環(huán)是把數(shù)組中元素的值賦值給$value
而foreach($arr as $key=$value){}這里的$value是引用賦值。
兩者有什么區(qū)別呢?帶引用的$value可以$value='aaa';直接改變元素的值;還有一個重要的,就是最后一次循環(huán)之后$value的值還會保留;
你這里是foreach($obj as $value){}對象默認是引用傳值;所以循環(huán)過后要unset($obj);
php里還有一個函數(shù)clearstatcache(true)清楚文件狀態(tài)緩存,雖然受影響的函數(shù)沒有simplexml_load_file(),不過還是可以試試;
還有mysql系列的函數(shù)很多也不是很穩(wěn)定,有時候不知道會出什么問題;建議用PDO;
深感php里面的坑太多了,稍不注意就跳進去了。
解決辦法:
1、請檢查您的 MySQL 帳號是否有相應(yīng)的權(quán)限。
2、檢查一下應(yīng)用下的 config 配置文件中的連接數(shù)據(jù)庫的帳號是否正確。
3、檢查一下數(shù)據(jù)庫是否滿了,如果數(shù)據(jù)庫滿了沒有空間后也會出現(xiàn)這種情況。
PHP has encountered a Stack overflow
空間不足或者服務(wù)器的php版本問題
標(biāo)題名稱:php修改數(shù)據(jù)棧溢出 php數(shù)組溢出
標(biāo)題路徑:http://chinadenli.net/article0/dodpooo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、品牌網(wǎng)站建設(shè)、、ChatGPT、微信公眾號、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)