Heim php教程 PHP源码 WxApi.class.php der WeChat-Schnittstelle, PHP-Version SDK

WxApi.class.php der WeChat-Schnittstelle, PHP-Version SDK

Nov 25, 2016 pm 02:05 PM
sdk

WeChats neueste PHP-Schnittstellenversion des SDK wird veröffentlicht, einschließlich Gruppierung, Abrufen von Benutzerinformationen, Abrufen von Beobachtungslisten, Erstellen von QR-Codes mit Parametern usw.

<?php
class OAuthException extends Exception {
     // pass
}
/**
* @package wx
* @author Jianjun Deng
* @version 1.0
*/
class WxAuthV2 {
     public $access_token;
     public $host = "https://api.weixin.qq.com/cgi-bin/";
     public $timeout = 30;
     public $connecttimeout = 30;
     public $ssl_verifypeer = FALSE;
     public $format = &#39;?&#39;;
     public $decode_json = TRUE;
     public $http_info;
     public static $boundary = &#39;&#39;;
     function __construct($access_token = NULL) {
          $this->access_token = $access_token;
     }
     function base64decode($str) {
          return base64_decode(strtr($str.str_repeat(&#39;=&#39;, (4 - strlen($str) % 4)), &#39;-_&#39;, &#39;+/&#39;));
     }
     /**
     * GET wrappwer for oAuthRequest.
     *
     * @return mixed
     */
     function get($url, $parameters = array()) {
          $response = $this->oAuthRequest($url, &#39;GET&#39;, $parameters);
          if ($this->format === &#39;?&#39; && $this->decode_json) {
               return json_decode($response, true);
          }
          return $response;
     }
     /**
     * POST wreapper for oAuthRequest.
     *
     * @return mixed
     */
     function post($url, $parameters = array(), $multi = false) {
          $response = $this->oAuthRequest($url, &#39;POST&#39;, $parameters, $multi );
          if ($this->format === &#39;?&#39; && $this->decode_json) {
               return json_decode($response, true);
          }
          return $response;
     }
     /**
     * DELTE wrapper for oAuthReqeust.
     *
     * @return mixed
     */
     function delete($url, $parameters = array()) {
          $response = $this->oAuthRequest($url, &#39;DELETE&#39;, $parameters);
          if ($this->format === &#39;json&#39; && $this->decode_json) {
               return json_decode($response, true);
          }
          return $response;
     }
     /**
     * Format and sign an OAuth / API request
     *
     * @return string
     * @ignore
     */
     function oAuthRequest($url, $method, $parameters, $multi = false) {
          if (strrpos($url, &#39;http://&#39;) !== 0 && strrpos($url, &#39;https://&#39;) !== 0) {
               $url = "{$this->host}{$url}{$this->format}"."access_token=".$this->access_token;
     }
     switch ($method) {
          case &#39;GET&#39;:
               $url = $url . &#39;&&#39; . http_build_query($parameters);
               return $this->http($url, &#39;GET&#39;);
          default:
               $headers = array();
               if (!$multi && (is_array($parameters) || is_object($parameters)) ) {
                    $body = $this->ch_json_encode($parameters);
               } else {
                    $body = self::build_http_query_multi($parameters);
                    $headers[] = "Content-Type: multipart/form-data; boundary=" . self::$boundary;
               }
               return $this->http($url, $method, $body, $headers);
     }
     }
     /**
     * Make an HTTP request
     *
     * @return string API results
     * @ignore
     */
     function http($url, $method, $postfields = NULL, $headers = array()) {
          $this->http_info = array();
          $ci = curl_init();
          /* Curl settings */
          curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
          curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
          curl_setopt($ci, CURLOPT_ENCODING, "");
          curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
          curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, &#39;getHeader&#39;));
          curl_setopt($ci, CURLOPT_HEADER, FALSE);
          switch ($method) {
               case &#39;POST&#39;:
                    curl_setopt($ci, CURLOPT_POST, TRUE);
                    if (!empty($postfields)) {
                         curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
                         $this->postdata = $postfields;
                    }
                    break;
          }
          curl_setopt($ci, CURLOPT_URL, $url );
          curl_setopt($ci, CURLOPT_HTTPHEADER, $headers );
          curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );
          $response = curl_exec($ci);
          $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
          $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
          $this->url = $url;
          curl_close ($ci);
          return $response;
     }
     /**
     * Get the header info to store.
     *
     * @return int
     * @ignore
     */
     function getHeader($ch, $header) {
          $i = strpos($header, &#39;:&#39;);
          if (!empty($i)) {
               $key = str_replace(&#39;-&#39;, &#39;_&#39;, strtolower(substr($header, 0, $i)));
               $value = trim(substr($header, $i + 2));
               $this->http_header[$key] = $value;
          }
          return strlen($header);
     }
     /**
     * @ignore
     */
     public static function build_http_query_multi($params) {
          if (!$params) return &#39;&#39;;
          uksort($params, &#39;strcmp&#39;);
          $pairs = array();
          self::$boundary = $boundary = uniqid(&#39;------------------&#39;);
          $MPboundary = &#39;--&#39;.$boundary;
          $endMPboundary = $MPboundary. &#39;--&#39;;
          $multipartbody = &#39;&#39;;
          foreach ($params as $parameter => $value) {
               if( in_array($parameter, array(&#39;pic&#39;, &#39;image&#39;)) && $value{0} == &#39;@&#39; ) {
                    $url = ltrim( $value, &#39;@&#39; );
                    $content = file_get_contents( $url );
                    $array = explode( &#39;?&#39;, basename( $url ) );
                    $filename = $array[0];
                    $multipartbody .= $MPboundary . "\r\n";
                    $multipartbody .= &#39;Content-Disposition: form-data; name="&#39; . $parameter . &#39;"; filename="&#39; . $filename . &#39;"&#39;. "\r\n";
                    $multipartbody .= "Content-Type: image/unknown\r\n\r\n";
                    $multipartbody .= $content. "\r\n";
               } else {
                    $multipartbody .= $MPboundary . "\r\n";
                    $multipartbody .= &#39;content-disposition: form-data; name="&#39; . $parameter . "\"\r\n\r\n";
                    $multipartbody .= $value."\r\n";
               }
          }
          $multipartbody .= $endMPboundary;
          return $multipartbody;
     }
     /**
      * 对数组和标量进行 urlencode 处理
      * 通常调用 wphp_json_encode()
      * 处理 json_encode 中文显示问题
      * @param array $data
      * @return string
      */
     function wphp_urlencode($data) {
     if (is_array($data) || is_object($data)) {
     foreach ($data as $k => $v) {
     if (is_scalar($v)) {
     if (is_array($data)) {
     $data[$k] = urlencode($v);
     } else if (is_object($data)) {
     $data->$k = urlencode($v);
     }
     } else if (is_array($data)) {
     $data[$k] = $this->wphp_urlencode($v); //递归调用该函数
     } else if (is_object($data)) {
     $data->$k = $this->wphp_urlencode($v);
     }
     }
     }
     return $data;
     }
     /**
      * json 编码
      *
      * 解决中文经过 json_encode() 处理后显示不直观的情况
      * 如默认会将“中文”变成"\u4e2d\u6587",不直观
      * 如无特殊需求,并不建议使用该函数,直接使用 json_encode 更好,省资源
      * json_encode() 的参数编码格式为 UTF-8 时方可正常工作
      *
      * @param array|object $data
      * @return array|object
      */
     public function ch_json_encode($data) {
     $ret = $this->wphp_urlencode($data);
     $ret = json_encode($ret);
     return urldecode($ret);
     }
}
class WxApi
{
 var $oauth;
     /**
     * 构造函数
     *
     * @access public
     * @param mixed $access_token OAuth认证返回的token
     * @return void
     */
     function __construct($access_token)
     {
          $this->oauth = new WxAuthV2($access_token);
     }
     /**
      * 查询分组 API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3
      * 
     */
     function groups_get()
     {
          $params = array();
          return $this->oauth->get(&#39;groups/get&#39;, $params);//可能是接口的bug不能补全
     }
     /**
      * 创建分组  API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E5.88.9B.E5.BB.BA.E5.88.86.E7.BB.84
      * $name  分组名字(30个字符以内)
      */
     function groups_create($name){
       $params = array("");
       $params[&#39;group&#39;][&#39;name&#39;] = trim($name);
       return $this->oauth->post(&#39;groups/create&#39;,$params );
     }
     /**
      * 修改分组名   API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E5.88.9B.E5.BB.BA.E5.88.86.E7.BB.84
      * POST数据例子:{"group":{"id":108,"name":"test2_modify2"}}
      * $id 分组id,由微信分配
      * $name 分组名字(30个字符以内)
      */
     function groups_update($id,$name){
     $params = array("");
     $params[&#39;group&#39;][&#39;id&#39;] = $this->id_format($id);
     $params[&#39;group&#39;][&#39;name&#39;] = trim($name);
     return $this->oauth->post(&#39;groups/update&#39;,$params);
     }
     /**
      * 移动用户分组   API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E5.88.9B.E5.BB.BA.E5.88.86.E7.BB.84
      * {"openid":"oDF3iYx0ro3_7jD4HFRDfrjdCM58","to_groupid":108}
      *  $openid 用户唯一标识符
      *  $to_groupid 分组id
      * $name 分组名字(30个字符以内)
      */
     function groups_members_update($openid,$to_groupid){
     $params = array("");
     $params[&#39;group&#39;][&#39;openid&#39;] = trim($openid);
     $params[&#39;group&#39;][&#39;to_groupid&#39;] = trim($to_groupid);
     return $this->oauth->post(&#39;groups/members/update&#39;,$params);
     }
     /**
      * 获取关注列表 一次最多返回1万
      * http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E5%85%B3%E6%B3%A8%E8%80%85%E5%88%97%E8%A1%A8
      * 
      * 
      */
     function user_get($next_openid="")
     {
     $params = array();
     $params[&#39;next_openid&#39;]=$next_openid;
     return $this->oauth->get(&#39;user/get&#39;, $params);//可能是接口的bug不能补全
     }
     /**
      * 获取用户基本信息
      *Array ( [subscribe] => 1 
      *[openid] => of76zt-k-bMZZaCip16MKfGAigec 
      *[nickname] => _魏什么。 
      *[sex] => 1 
      *[language] => zh_TW 
      *[city] => 福州 
      *[province] => 福建
      *[country] => 中国
      *[headimgurl] => http://wx.qlogo.cn/mmopen/kaTUtbf9iaBY32aSBLkcxWVDicjlhHSiapLWDcia1ic948tYdmhJQLQa8FpB7MdqpDNQHOVUWoVfPHjlymJ1z1fyStAUyduicvAbmh/0 
      *[subscribe_time] => 1381576837 )
      */
     function user_info($openid="")
     {
     $params = array();
     $params[&#39;openid&#39;]=$openid;
     return $this->oauth->get(&#39;user/info&#39;, $params);//可能是接口的bug不能补全
     }
     /*
      * 发送客服文本消息 
      * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF
      */
     function message_custom_send_text($touser,$content){
     $params = array("");
     $params[&#39;touser&#39;]=trim($touser);
     $params[&#39;msgtype&#39;]="text";
     $params[&#39;text&#39;]["content"]=$content;
     return $this->oauth->post(&#39;message/custom/send&#39;,$params);
     }
     /*
      * 发送客服图片消息
     * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF
     *  access_token 是 调用接口凭证
touser 是 普通用户openid
msgtype 是 消息类型,image
media_id 是 发送的图片的媒体ID
     */
     function message_custom_send_image($touser,$media_id){
     $params = array("");
     $params[&#39;touser&#39;]=trim($touser);
     $params[&#39;msgtype&#39;]="image";
     $params[&#39;image&#39;]["media_id"]=$media_id;
     return $this->oauth->post(&#39;message/custom/send&#39;,$params);
     }
     /*
      * 发送客服语音消息
     * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF
     *  access_token 是 调用接口凭证
     touser 是 普通用户openid
     msgtype 是 消息类型,image
     media_id 是 发送的图片的媒体ID
     */
     function message_custom_send_voice($touser,$media_id){
     $params = array("");
     $params[&#39;touser&#39;]=trim($touser);
     $params[&#39;msgtype&#39;]="voice";
     $params[&#39;voice&#39;]["media_id"]=$media_id;
     return $this->oauth->post(&#39;message/custom/send&#39;,$params);
     }
     /*
      * 发送客服图文消息 图文消息条数限制在10条以内。
     * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF
     *  access_token 是 调用接口凭证
     *  touser 是 普通用户openid
     *  msgtype 是 消息类型,image
     *  media_id 是 发送的图片的媒体ID
     *  $newsArray[0]=array(
         "title"=>"",
         "description"=>"",
         "url"=>"",
         "picurl"=>""
     )
     */
     function message_custom_send_news($touser,$newsArray){
     $params = array("");
     $params[&#39;touser&#39;]=trim($touser);
     $params[&#39;msgtype&#39;]="news";
     $params[&#39;news&#39;]["articles"]=$newsArray;
     return $this->oauth->post(&#39;message/custom/send&#39;,$params);
     }
     
     /*
      * 创建临时二维码ticket 
      * http://mp.weixin.qq.com/wiki/index.php?title=%E7%94%9F%E6%88%90%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81
      * expire_seconds 该二维码有效时间,以秒为单位。 最大不超过1800。
  *action_name 二维码类型,QR_SCENE为临时,QR_LIMIT_SCENE为永久
  *action_info 二维码详细信息
  *scene_id 场景值ID,临时二维码时为32位整型,永久二维码时最大值为1000
      */
     function qrcode_create_scene($expire_seconds="900",$scene_id){
     $params = array("");
     $params[&#39;expire_seconds&#39;]=$expire_seconds;
     $params[&#39;action_name&#39;]="QR_SCENE";
     $params[&#39;action_info&#39;]["scene"]["scene_id"]=$scene_id;
     return $this->oauth->post(&#39;qrcode/create&#39;,$params);
     
     }
     /*
      * 创建永久二维码ticket
     * http://mp.weixin.qq.com/wiki/index.php?title=%E7%94%9F%E6%88%90%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81
     * expire_seconds 该二维码有效时间,以秒为单位。 最大不超过1800。
     *action_name 二维码类型,QR_LIMIT_SCENE为永久
     *action_info 二维码详细信息
     *scene_id 场景值ID,临时二维码时为32位整型,永久二维码时最大值为1000
     */
     function qrcode_create_forever($action_name="",$scene_id){
     $params = array("");
     $params[&#39;action_name&#39;]="QR_LIMIT_SCENE";
     $params[&#39;action_info&#39;]["scene"]["scene_id"]=$scene_id;
     return $this->oauth->post(&#39;qrcode/create&#39;,$params);
     }
     /*
      * 通过ticket换取二维码
      * 
      */
     function showqrcode($ticket){
     return file_get_contents("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={$ticket}");
     }
     
     protected function id_format(&$id) {
          if ( is_float($id) ) {
               $id = number_format($id, 0, &#39;&#39;, &#39;&#39;);
          } elseif ( is_string($id) ) {
               $id = trim($id);
          }
     }
}


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1535
276
Ethereum, eine Blockchain -Plattform, die Bitcoin mit Vorteilen und Innovationsinventar übertrifft Ethereum, eine Blockchain -Plattform, die Bitcoin mit Vorteilen und Innovationsinventar übertrifft Aug 06, 2025 pm 11:57 PM

Durch seine Turing-Complete-intelligenten Verträge, EVM-virtuellen Maschinen und Gasmechanismen hat Ethereum eine programmierbare Blockchain-Plattform über Bitcoin hinaus entwickelt, die diversifizierte Anwendungsökosysteme wie Defi und NFT unterstützt. Zu den Kernvorteilen zählen ein reichhaltiges DAPP-Ökosystem, eine starke Programmierbarkeit, die aktive Entwicklergemeinschaft und eine interoperabilische Interoperabilität der Kette. Derzeit implementiert es die Konsenstransformation von POW zu POS durch das Upgrade von Ethereum 2.0 und führt die Einführung von Beacon -Ketten, Verifizierermechanismen und Bestrafungssystemen zur Verbesserung der Energieeffizienz, Sicherheit und Dezentralisierung. In Zukunft wird es auf die Sharding -Technologie beruhen, um Daten zu realisieren, die Daten Sharding und parallele Verarbeitung zu realisieren, wodurch der Durchsatz erheblich verbessert wird. Gleichzeitig wurde die Rollup-Technologie häufig als Layer-2-Lösung, optimistische Rollup und ZK-Rollu verwendet

Gehen Sie zum Beispiel für HTTP Middleware -Protokollierung Gehen Sie zum Beispiel für HTTP Middleware -Protokollierung Aug 03, 2025 am 11:35 AM

HTTP-Protokoll Middleware in Go kann Anforderungsmethoden, Pfade, Client-IP und zeitaufwändiges Aufzeichnen aufzeichnen. 1. Verwenden Sie http.Handlerfunc, um den Prozessor zu wickeln, 2. Nehmen Sie die Startzeit und die Endzeit vor und nach dem Aufrufen als nächstes auf. Der vollständige Beispielcode wurde überprüft, um auszuführen und eignet sich zum Starten eines kleinen und mittelgroßen Projekts. Zu den Erweiterungsvorschlägen gehören das Erfassen von Statuscodes, die Unterstützung von JSON -Protokollen und die Nachverfolgung von ID -IDs.

Edge PDF -Viewer funktioniert nicht Edge PDF -Viewer funktioniert nicht Aug 07, 2025 pm 04:36 PM

TestthepdfinanotherapptodetermineeiftheisueiswithTheFileoredge.2.Enablethebuilt-InpdfviewerByTurningOff "immerOpenpdffileSexTternal" und "DownloadPdffffiles" Inedgesetings

YII -Entwickler: Beherrschen der wesentlichen technischen Fähigkeiten YII -Entwickler: Beherrschen der wesentlichen technischen Fähigkeiten Aug 04, 2025 pm 04:54 PM

Um ein Meister von YII zu werden, müssen Sie die folgenden Fähigkeiten beherrschen: 1) Verstehen Sie die MVC -Architektur von YII, 2) die Verwendung von ActInereCordorm, 3) GII -Code -Erzeugungstools effektiv verwenden, 4) Master Yii -Überprüfungsregeln, 5) Optimieren von Datenbankabfrage -Leistung, 6) Ressourcen der Datenbankabfrage und Community -Ressourcen. Durch das Lernen und die Praxis dieser Fähigkeiten können die Entwicklungsfähigkeiten im Rahmen des YII -Frameworks umfassend verbessert werden.

Verwenden von HTML `Input` -Typen für Benutzerdaten Verwenden von HTML `Input` -Typen für Benutzerdaten Aug 03, 2025 am 11:07 AM

Durch die Auswahl des richtigen HTMlinput -Typs kann die Datengenauigkeit verbessert, die Benutzererfahrung verbessert und die Benutzerfreundlichkeit verbessert werden. 1. Wählen Sie die entsprechenden Eingabetypen gemäß dem Datentyp aus, z. B. Text, E -Mail, Tel, Nummer und Datum, die automatisch überprüft und an die Tastatur anpassen können. 2. Verwenden Sie HTML5, um neue Typen wie URL, Farbe, Reichweite und Suche hinzuzufügen, die eine intuitivere Interaktionsmethode bieten können. 3.. Verwenden Sie Platzhalter und erforderliche Attribute, um die Effizienz und Genauigkeit der Formulierung zu verbessern. Es sollte jedoch beachtet werden, dass der Platzhalter das Etikett nicht ersetzen kann.

VS -Code -Verknüpfung, um sich auf das Explorer -Panel zu konzentrieren VS -Code -Verknüpfung, um sich auf das Explorer -Panel zu konzentrieren Aug 08, 2025 am 04:00 AM

In VSCODE können Sie das Panel- und Bearbeitungsbereich durch Abkürzungsschlüssel schnell wechseln. Um zum linken Explorer -Feld zu springen, verwenden Sie die Strg -Verschiebung E (Windows/Linux) oder CMD Shift E (MAC). Kehren Sie in den Bearbeitungsbereich zurück, um Strg `oder ESC oder Strg 1 ~ 9 zu verwenden. Im Vergleich zum Mausbetrieb sind Tastaturverknüpfungen effizienter und unterbrechen den Codierungsrhythmus nicht. Weitere Tipps sind: Strg KCtrl E Fokus -Suchkästchen, F2 -Datei umbenennen, Datei löschen, die Öffnungsdatei eingeben, Pfeilschlüssel erweitern/kollapten.

Behoben: Windows Update konnte nicht installiert werden Behoben: Windows Update konnte nicht installiert werden Aug 08, 2025 pm 04:16 PM

RunthewindowsUpdatetrouBleshooterviaSettings> Update & Sicherheit> FehlerbehebungOautomatischfixcommonissues.2.

Gehen Sie mit gutem Beispielionieren einer Subprozesse aus Gehen Sie mit gutem Beispielionieren einer Subprozesse aus Aug 06, 2025 am 09:05 AM

Führen Sie den untergeordneten Prozess mit dem Betriebssystem/EXEC -Paket aus, erstellen Sie den Befehl über exec.Command, führen Sie ihn jedoch nicht sofort aus. 2. Führen Sie den Befehl mit .output () aus und fangen Sie Stdout an. Wenn der Exit-Code ungleich Null ist, return exec.exiterror; 3. Verwenden Sie .Start (), um den Prozess ohne Blockierung zu starten, mit .stdoutpipe () in Echtzeit aus der Ausgabe von Ausgang zu streamen; V. 5. Exec.EexitEerror muss verarbeitet werden, um den Ausgangscode und den Stderr des fehlgeschlagenen Befehls zu erhalten, um Zombie -Prozesse zu vermeiden.

See all articles