国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程序 微信開發(fā) 微信開發(fā)實現(xiàn)自定義菜單代碼教程

微信開發(fā)實現(xiàn)自定義菜單代碼教程

May 15, 2017 pm 01:28 PM
php 微信 自定義菜單

這篇文章主要為大家詳細(xì)介紹了php微信開發(fā)之自定義菜單完整流程,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、自定義菜單概述

自定義菜單能夠幫助公眾號豐富界面,讓用戶更好更快地理解公眾號的功能。開啟自定義菜單后,公眾號界面如圖所示:

二、申請自定義菜單

個人訂閱號使用微博認(rèn)證、企業(yè)訂閱號通過微信認(rèn)證;可以申請到自定義菜單資格

服務(wù)號默認(rèn)有菜單權(quán)限。

三、獲得AppId 和AppSecert

AppId和AppSecret在開發(fā)者中心-開發(fā)者ID中,可以找到。


四、獲得Access Token

用appid和appsecert獲得access token,接口

api.weixin.qq.com/cgi-bi ... mp;secret=APPSECRET

程序?qū)崿F(xiàn)如下

$appid = ""; 
$appsecret = ""; 
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 
$jsoninfo = json_decode($output, true); 
$access_token = $jsoninfo["access_token"];

你也可以直接在瀏覽器地址欄中,拼接出地址,執(zhí)行后,獲得如下數(shù)據(jù)

代碼如下:

{"access_token":"N2L7KXa084WvelONYjkJ_traBMCCvy_UKmpUUzlrQ0EA2yNp3Iz6eSUrRG0bhaR_viswd50vDuPkY5nG43d1gbm-olT2KRMxOsVE08RfeD9lvK9lMguNG9kpIkKGZEjIf8Jv2m9fFhf8bnNa-yQH3g",

代碼如下:

"expires_in":7200}

參數(shù)說明如下

其中的
N2L7KXa084WvelONYjkJ_traBMCCvy_UKmpUUzlrQ0EA2yNp3Iz6eSUrRG0bhaR_viswd50vDuPkY5nG43d1gbm-olT2KRMxOsVE08RfeD9lvK9lMguNG9kpIkKGZEjIf8Jv2m9fFhf8bnNa-yQH3g
就是access token。

或者使用官方的接口調(diào)試工具,地址為:
https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3%20/menu/create

使用網(wǎng)頁調(diào)試工具調(diào)試自定義菜單接口

點擊檢查問題得,得到

這樣也獲得了access token

五、組織菜單內(nèi)容

目前自定義菜單最多包括3個一級菜單,每個一級菜單最多包含5個二級菜單。一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以“...”代 替。請注意,創(chuàng)建自定義菜單后,由于微信客戶端緩存,需要24小時微信客戶端才會展現(xiàn)出來。建議測試時可以嘗試取消關(guān)注公眾賬號后再次關(guān)注,則可以看到創(chuàng) 建后的效果。

目前自定義菜單接口可實現(xiàn)兩種類型按鈕,如下:

click:
用戶點擊click類型按鈕后,微信服務(wù)器會通過消息接口推送消息類型為event 的結(jié)構(gòu)給開發(fā)者(參考消息接口指南),并且?guī)习粹o中開發(fā)者填寫的key值,開發(fā)者可以通過自定義的key值與用戶進(jìn)行交互;
view:
用戶點擊view類型按鈕后,微信客戶端將會打開開發(fā)者在按鈕中填寫的url值 (即網(wǎng)頁鏈接),達(dá)到打開網(wǎng)頁的目的,建議與網(wǎng)頁授權(quán)獲取用戶基本信息接口結(jié)合,獲得用戶的登入個人信息。

接口調(diào)用請求說明

http請求方式:POST(請使用https協(xié)議) api.weixin.qq.com/cgi-bi ... _token=ACCESS_TOKEN

請求示例

{ 
 "button":[ 
  {  
   "type":"click", 
   "name":"今日歌曲", 
   "key":"V1001_TODAY_MUSIC" 
  }, 
  { 
   "type":"click", 
   "name":"歌手簡介", 
   "key":"V1001_TODAY_SINGER" 
  }, 
  { 
   "name":"菜單", 
   "sub_button":[ 
   {  
    "type":"view", 
    "name":"搜索", 
    "url":"http://www.soso.com/" 
   }, 
   { 
    "type":"view", 
    "name":"視頻", 
    "url":"http://v.qq.com/" 
   }, 
   { 
    "type":"click", 
    "name":"贊一下我們", 
    "key":"V1001_GOOD" 
   }] 
  }] 
}

參數(shù)說明

返回結(jié)果

正確時的返回JSON數(shù)據(jù)包如下:

{"errcode":0,"errmsg":"ok"}

錯誤時的返回JSON數(shù)據(jù)包如下(示例為無效菜單名長度):

{"errcode":40018,"errmsg":"invalid button name size"}

六、提交菜單內(nèi)容給服務(wù)器

菜單的JSON結(jié)構(gòu)為

{"button": [{"name":"天氣預(yù)報","sub_button":[{"type":"click","name":"北京天氣","key":"天氣北 京"}, 
{"type":"click","name":"上海天氣","key":"天氣上海"}, 
{"type":"click","name":" 廣州天氣","key":"天氣廣州"},{"type":"click","name":"深圳天氣","key":"天氣深圳"}, 
{"type":"view","name":"本地天氣","url":"http://m.hao123.com/a/tianqi"}]}, 
{"name":"方倍工作室","sub_button":[{"type":"click","name":"公司簡 介","key":"company"}, 
{"type":"click","name":"趣味游戲","key":"游戲"}, {"type":"click","name":"講個笑話","key":"笑話"}]}]}

將以下代碼保存為menu.php,并且在瀏覽器中運(yùn)行該文件(比如 127.0.0.1/menu.php),將直接向微信服務(wù)器提交菜單

php 
 
$access_token = ""; 
 
$jsonmenu = '{ 
  "button":[ 
  { 
   "name":"天氣預(yù)報", 
   "sub_button":[ 
   { 
    "type":"click", 
    "name":"北京天氣", 
    "key":"天氣北京" 
   }, 
   { 
    "type":"click", 
    "name":"上海天氣", 
    "key":"天氣上海" 
   }, 
   { 
    "type":"click", 
    "name":"廣州天氣", 
    "key":"天氣廣州" 
   }, 
   { 
    "type":"click", 
    "name":"深圳天氣", 
    "key":"天氣深圳" 
   }, 
   { 
    "type":"view", 
    "name":"本地天氣", 
    "url":"http://m.hao123.com/a/tianqi" 
   }] 
  
 
  }, 
  { 
   "name":"瑞雪", 
   "sub_button":[ 
   { 
    "type":"click", 
    "name":"公司簡介", 
    "key":"company" 
   }, 
   { 
    "type":"click", 
    "name":"趣味游戲", 
    "key":"游戲" 
   }, 
   { 
    "type":"click", 
    "name":"講個笑話", 
    "key":"笑話" 
   }] 
  
 
  }] 
}'; 
 
 
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token; 
$result = https_request($url, $jsonmenu); 
var_dump($result); 
 
function https_request($url,$data = null){ 
 $curl = curl_init(); 
 curl_setopt($curl, CURLOPT_URL, $url); 
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 
 if (!empty($data)){ 
  curl_setopt($curl, CURLOPT_POST, 1); 
  curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
 } 
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
 $output = curl_exec($curl); 
 curl_close($curl); 
 return $output; 
}
?>

或者使用官方的調(diào)試接口 使用網(wǎng)頁調(diào)試工具調(diào)試該接口

提交成功后,重新關(guān)注后即可看到菜單。菜單效果類似如下:

七、響應(yīng)菜單點擊事件

在消息接口中處理event事件,其中的click代表菜單點擊,通過響應(yīng)菜單結(jié)構(gòu)中的key值回應(yīng)消息,view事件無須響應(yīng),將直接跳轉(zhuǎn)過去

define("TOKEN", "weixin"); 
 
$wechatObj = new wechatCallbackapiTest(); 
if (!isset($_GET['echostr'])) { 
  $wechatObj->responseMsg(); 
}else{ 
  $wechatObj->valid(); 
} 
 
class wechatCallbackapiTest 
{ 
  public function valid() 
  { 
    $echoStr = $_GET["echostr"]; 
    if($this->checkSignature()){ 
      echo $echoStr; 
      exit; 
    } 
 } 
 
  private function checkSignature() 
  { 
    $signature = $_GET["signature"]; 
   $timestamp = $_GET["timestamp"]; 
    $nonce = $_GET["nonce"]; 
 
   $token = TOKEN; 
    $tmpArr = array($token, $timestamp, $nonce); 
    sort($tmpArr); 
    $tmpStr = implode( $tmpArr ); 
    $tmpStr = sha1( $tmpStr ); 
 
    if( $tmpStr == $signature ){ 
      return true; 
    }else{ 
      return false; 
    } 
  } 
 
  public function responseMsg() 
  { 
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
    if (!empty($postStr)){ 
      $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 
    $RX_TYPE = trim($postObj->MsgType); 
 
     switch ($RX_TYPE) 
      { 
        case "text": 
          $resultStr = $this->receiveText($postObj); 
          break; 
        case "event": 
         $resultStr = $this->receiveEvent($postObj); 
          break; 
        default: 
          $resultStr = ""; 
         break; 
      } 
      echo $resultStr; 
    }else { 
      echo ""; 
     exit; 
    } 
  } 
 
  private function receiveText($object) 
  { 
    $funcFlag = 0; 
    $contentStr = "你發(fā)送的內(nèi)容為:".$object->Content; 
    $resultStr = $this->transmitText($object, $contentStr, $funcFlag); 
    return $resultStr; 
  } 
   
  private function receiveEvent($object) 
  { 
    $contentStr = ""; 
    switch ($object->Event) 
    { 
      case "subscribe": 
        $contentStr = "歡迎洋洋博客"; 
      case "unsubscribe": 
        break; 
      case "CLICK": 
        switch ($object->EventKey) 
        { 
          case "company": 
            $contentStr[] = array("Title" =>"公司簡介",  
            "Description" =>"洋洋的博客",  
            "PicUrl" =>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg",  
            "Url" =>"weixin://addfriend/pondbaystudio"); 
            break; 
          default: 
            $contentStr[] = array("Title" =>"默認(rèn)菜單回復(fù)",  
            "Description" =>"您正在使用的是<span style="font-family: Arial, Helvetica, sans-serif;">洋洋的博客</span><span style="font-family: Arial, Helvetica, sans-serif;">", </span> 
            "PicUrl" =>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg",  
            "Url" =>"weixin://addfriend/pondbaystudio"); 
            break; 
        } 
        break; 
      default: 
        break;    
 
    } 
    if (is_array($contentStr)){ 
      $resultStr = $this->transmitNews($object, $contentStr); 
    }else{ 
      $resultStr = $this->transmitText($object, $contentStr); 
   } 
    return $resultStr; 
  } 
 
  private function transmitText($object, $content, $funcFlag = 0) 
  { 
    $textTpl = "<xml> 
<ToUserName><![CDATA[%s]]></ToUserName> 
<FromUserName><![CDATA[%s]]></FromUserName> 
<CreateTime>%s</CreateTime> 
<MsgType><![CDATA[text]]></MsgType> 
<Content><![CDATA[%s]]></Content> 
<FuncFlag>%d</FuncFlag> 
</xml>"; 
    $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $funcFlag); 
    return $resultStr; 
  } 
 
  private function transmitNews($object, $arr_item, $funcFlag = 0) 
  { 
    //首條標(biāo)題28字,其他標(biāo)題39字 
    if(!is_array($arr_item)) 
      return; 
 
    $itemTpl = "  <item> 
    <Title><![CDATA[%s]]></Title> 
    <Description><![CDATA[%s]]></Description> 
    <PicUrl><![CDATA[%s]]></PicUrl> 
    <Url><![CDATA[%s]]></Url> 
  </item> 
"; 
    $item_str = ""; 
    foreach ($arr_item as $item) 
      $item_str .= sprintf($itemTpl, $item[&#39;Title&#39;], $item[&#39;Description&#39;], $item[&#39;PicUrl&#39;], $item[&#39;Url&#39;]); 
 
    $newsTpl = "<xml> 
<ToUserName><![CDATA[%s]]></ToUserName> 
<FromUserName><![CDATA[%s]]></FromUserName> 
<CreateTime>%s</CreateTime> 
<MsgType><![CDATA[news]]></MsgType> 
<Content><![CDATA[]]></Content> 
<ArticleCount>%s</ArticleCount> 
<Articles> 
$item_str</Articles> 
<FuncFlag>%s</FuncFlag> 
</xml>"; 
 
   $resultStr = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item), $funcFlag); 
    return $resultStr; 
  } 
} 
?>

八、菜單中獲取OpenID

由于菜單中只能填寫固定的url地址,對于想要菜單中獲取用戶的OpenID的情況,可以使用OAuth2.0授權(quán)的方式來實現(xiàn)。

URL中填寫的地址為一個固定的回調(diào)地址。原理方法可以參考 微信公眾平臺開發(fā)(99) 自定義菜單獲取OpenID

<?php 
/* 
  洋洋的博客 
*/ 
 
define("TOKEN", "weixin"); 
$wechatObj = new wechatCallbackapiTest(); 
if (isset($_GET[&#39;echostr&#39;])) { 
  $wechatObj->valid(); 
}else{ 
  $wechatObj->responseMsg(); 
} 
 
class wechatCallbackapiTest 
{ 
  public function valid() 
  { 
    $echoStr = $_GET["echostr"]; 
    if($this->checkSignature()){ 
      header(&#39;content-type:text&#39;); 
      echo $echoStr; 
      exit; 
    } 
  } 
 
  private function checkSignature() 
  { 
    $signature = $_GET["signature"]; 
    $timestamp = $_GET["timestamp"]; 
    $nonce = $_GET["nonce"]; 
 
    $token = TOKEN; 
    $tmpArr = array($token, $timestamp, $nonce); 
    sort($tmpArr, SORT_STRING); 
    $tmpStr = implode( $tmpArr ); 
    $tmpStr = sha1( $tmpStr ); 
 
    if( $tmpStr == $signature ){ 
      return true; 
    }else{ 
      return false; 
    } 
  } 
 
  public function responseMsg() 
  { 
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
 
    if (!empty($postStr)){ 
      $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA); 
      $fromUsername = $postObj->FromUserName; 
      $toUsername = $postObj->ToUserName; 
      $keyword = trim($postObj->Content); 
      $time = time(); 
      $textTpl = "<xml> 
            <ToUserName><![CDATA[%s]]></ToUserName> 
            <FromUserName><![CDATA[%s]]></FromUserName> 
            <CreateTime>%s</CreateTime> 
            <MsgType><![CDATA[%s]]></MsgType> 
            <Content><![CDATA[%s]]></Content> 
            <FuncFlag>0</FuncFlag> 
            </xml>"; 
      if($keyword == "?" || $keyword == "?") 
      { 
        $msgType = "text"; 
        $contentStr = &#39;當(dāng)前時間是:&#39;.date("Y-m-d H:i:s",time()); 
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); 
        echo $resultStr; 
      } 
    }else{ 
      echo ""; 
      exit; 
    } 
  } 
} 
?>

【相關(guān)推薦】

1. 特別推薦“php程序員工具箱”V0.1版本下載

2. 微信公眾號平臺源碼下載

3. 阿貍子訂單系統(tǒng)源碼下載

以上是微信開發(fā)實現(xiàn)自定義菜單代碼教程的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
超越燈堆:PHP在現(xiàn)代企業(yè)體系結(jié)構(gòu)中的作用 超越燈堆:PHP在現(xiàn)代企業(yè)體系結(jié)構(gòu)中的作用 Jul 27, 2025 am 04:31 AM

PHPisstillrelevantinmodernenterpriseenvironments.1.ModernPHP(7.xand8.x)offersperformancegains,stricttyping,JITcompilation,andmodernsyntax,makingitsuitableforlarge-scaleapplications.2.PHPintegrateseffectivelyinhybridarchitectures,servingasanAPIgateway

PHP中的對象關(guān)聯(lián)映射(ORM)性能調(diào)整 PHP中的對象關(guān)聯(lián)映射(ORM)性能調(diào)整 Jul 29, 2025 am 05:00 AM

避免N 1查詢問題,通過提前加載關(guān)聯(lián)數(shù)據(jù)來減少數(shù)據(jù)庫查詢次數(shù);2.僅選擇所需字段,避免加載完整實體以節(jié)省內(nèi)存和帶寬;3.合理使用緩存策略,如Doctrine的二級緩存或Redis緩存高頻查詢結(jié)果;4.優(yōu)化實體生命周期,定期調(diào)用clear()釋放內(nèi)存以防止內(nèi)存溢出;5.確保數(shù)據(jù)庫索引存在并分析生成的SQL語句以避免低效查詢;6.在無需跟蹤變更的場景下禁用自動變更跟蹤,改用數(shù)組或輕量模式提升性能。正確使用ORM需結(jié)合SQL監(jiān)控、緩存、批量處理和適當(dāng)優(yōu)化,在保持開發(fā)效率的同時確保應(yīng)用性能。

用PHP和RabbitMQ建造彈性微服務(wù) 用PHP和RabbitMQ建造彈性微服務(wù) Jul 27, 2025 am 04:32 AM

要構(gòu)建彈性的PHP微服務(wù),需使用RabbitMQ實現(xiàn)異步通信,1.通過消息隊列解耦服務(wù),避免級聯(lián)故障;2.配置持久化隊列、持久化消息、發(fā)布確認(rèn)和手動ACK以確保可靠性;3.使用指數(shù)退避重試、TTL和死信隊列安全處理失??;4.通過supervisord等工具守護(hù)消費(fèi)者進(jìn)程并啟用心跳機(jī)制保障服務(wù)健康;最終實現(xiàn)系統(tǒng)在故障中持續(xù)運(yùn)作的能力。

為PHP創(chuàng)建準(zhǔn)備生產(chǎn)的Docker環(huán)境 為PHP創(chuàng)建準(zhǔn)備生產(chǎn)的Docker環(huán)境 Jul 27, 2025 am 04:32 AM

使用正確的PHP基礎(chǔ)鏡像并配置安全、性能優(yōu)化的Docker環(huán)境是實現(xiàn)生產(chǎn)就緒的關(guān)鍵。1.選用php:8.3-fpm-alpine作為基礎(chǔ)鏡像以減少攻擊面并提升性能;2.通過自定義php.ini禁用危險函數(shù)、關(guān)閉錯誤顯示并啟用Opcache及JIT以增強(qiáng)安全與性能;3.使用Nginx作為反向代理,限制訪問敏感文件并正確轉(zhuǎn)發(fā)PHP請求至PHP-FPM;4.采用多階段構(gòu)建優(yōu)化鏡像,移除開發(fā)依賴,設(shè)置非root用戶運(yùn)行容器;5.可選Supervisord管理多個進(jìn)程如cron;6.部署前驗證無敏感信息泄

python run shell命令示例 python run shell命令示例 Jul 26, 2025 am 07:50 AM

使用subprocess.run()可安全執(zhí)行shell命令并捕獲輸出,推薦以列表傳參避免注入風(fēng)險;2.需要shell特性時可設(shè)shell=True,但需警惕命令注入;3.使用subprocess.Popen可實現(xiàn)實時輸出處理;4.設(shè)置check=True可在命令失敗時拋出異常;5.簡單場景可直接鏈?zhǔn)秸{(diào)用獲取輸出;日常應(yīng)優(yōu)先使用subprocess.run(),避免使用os.system()或已棄用模塊,以上方法覆蓋了Python中執(zhí)行shell命令的核心用法。

VSCODE設(shè)置。JSON位置 VSCODE設(shè)置。JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位于用戶級或工作區(qū)級路徑,用于自定義VSCode設(shè)置。1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

無服務(wù)器革命:使用BREF部署可擴(kuò)展的PHP應(yīng)用程序 無服務(wù)器革命:使用BREF部署可擴(kuò)展的PHP應(yīng)用程序 Jul 28, 2025 am 04:39 AM

Bref使PHP開發(fā)者能無需管理服務(wù)器即可構(gòu)建可擴(kuò)展、成本高效的應(yīng)用。1.Bref通過提供優(yōu)化的PHP運(yùn)行時層,將PHP帶入AWSLambda,支持PHP8.3等版本,并與Laravel、Symfony等框架無縫集成;2.部署步驟包括:使用Composer安裝Bref,配置serverless.yml定義函數(shù)和事件,如HTTP端點和Artisan命令;3.執(zhí)行serverlessdeploy命令即可完成部署,自動配置APIGateway并生成訪問URL;4.針對Lambda限制,Bref提供解決

深入了解PHP的內(nèi)部垃圾收集機(jī)制 深入了解PHP的內(nèi)部垃圾收集機(jī)制 Jul 28, 2025 am 04:44 AM

PHP的垃圾回收機(jī)制基于引用計數(shù),但循環(huán)引用需靠周期性運(yùn)行的循環(huán)垃圾回收器處理;1.引用計數(shù)在變量無引用時立即釋放內(nèi)存;2.循環(huán)引用導(dǎo)致內(nèi)存無法自動釋放,需依賴GC檢測并清理;3.GC在“可能根”zval達(dá)閾值或手動調(diào)用gc_collect_cycles()時觸發(fā);4.長期運(yùn)行的PHP應(yīng)用應(yīng)監(jiān)控gc_status()、適時調(diào)用gc_collect_cycles()以避免內(nèi)存泄漏;5.最佳實踐包括避免循環(huán)引用、使用gc_disable()優(yōu)化性能關(guān)鍵區(qū)及通過ORM的clear()方法解引用對象,最

See all articles