ووردبريس XMLRPC:المغتربين يبلغون عن رمز الخطأ 5

StackOverflow https://stackoverflow.com/questions/102093

  •  01-07-2019
  •  | 
  •  

سؤال

كتبت صغيرة PHP التطبيق منذ عدة أشهر والذي يستخدم WordPress XMLRPC library لمزامنة مدونتين WordPress منفصلتين.لدي وظيفة "RPCRequest" عامة تعمل على حزم الطلب وإرساله وإرجاع استجابة الخادم، ولدي العديد من الوظائف المحددة التي تخصص نوع الطلب الذي يتم إرساله.

في هذه الحالة بالذات، أقوم باستدعاء "getPostIDs" لاسترداد عدد المنشورات الموجودة على الخادم البعيد ومعرفات المنشورات الخاصة بها.هنا هو الرمز:

$rpc = new WordRPC('http://mywordpressurl.com/xmlrpc.php', 'username', 'password');
$rpc->getPostIDs();

أتلقى رسالة الخطأ التالية:

expat reports error code 5
description: Invalid document end
line: 1
column: 1
byte index: 0
total bytes: 0

data beginning 0 before byte index: 

نوع من النهاية المشوقة، وهو أمر غريب أيضًا.ولكن نظرًا لعدم تنسيق رسالة الخطأ بتنسيق XML، فإن حدسي هو أن مكتبة XMLRPC المحلية هي التي تولد الخطأ، وليس الخادم البعيد.

والأمر الأكثر غرابة هو أنه إذا قمت بتغيير استدعاء "getPostIDs ()" إلى "getPostIDs (1)" أو أي عدد صحيح آخر، فإنه يعمل بشكل جيد.

إليك رمز فئة WordRPC:

public function __construct($url, $user, $pass) {
  $this->url = $url;
  $this->username = $user;
  $this->password = $pass;

  $id = $this->RPCRequest("blogger.getUserInfo",
                          array("null", $this->username, $this->password));
  $this->blogID = $id['userid'];
}

public function RPCRequest($method, $params) {
  $request = xmlrpc_encode_request($method, $params);
  $context = stream_context_create(array('http' => array(
                    'method' => "POST",
                    'header' => "Content-Type: text/xml",
                    'content' => $request
  )));

  $file = file_get_contents($this->url, false, $context);
  return xmlrpc_decode($file);
}

public function getPostIDs($num_posts = 0) {
  return $this->RPCRequest("mt.getRecentPostTitles",
                            array($this->blogID, $this->username,
                            $this->password, $num_posts));
}

كما ذكرت، فإنه يعمل بشكل جيد إذا تم إعطاء "getPostIDs" وسيطة عدد صحيح موجب.علاوة على ذلك، كان هذا يعمل بشكل جيد تمامًا كما هو؛تشير المعلمة الافتراضية 0 ببساطة إلى خادم RPC الذي يجب عليه استرداده الجميع المشاركات، وليس فقط الأحدث $num_posts دعامات.في الآونة الأخيرة فقط بدأ ظهور هذا الخطأ.

لقد حاولت البحث عن الخطأ على Google دون حظ كبير.سؤالي إذن هو ماذا يعني بالضبط "رمز الخطأ 5 في تقارير المغتربين"، ومن الذي يصدر الخطأ؟ نرحب أيضًا بأي تفاصيل/اقتراحات/رؤى أبعد من ذلك!

هل كانت مفيدة؟

المحلول

@ نوفاك:شكرا على اقتراحك.تبين أن المشكلة هي مشكلة في الذاكرة؛من خلال استرداد جميع المنشورات من الموقع البعيد، تجاوزت الاستجابة مقدار الذاكرة التي سمح لـ PHP باستخدامها، ومن هنا حدث خطأ الرمز المميز غير المغلق.

كانت مشكلة رسالة الخطأ الغامضة وغير المكتملة بسبب استخدام إصدار قديم من مكتبة XML-RPC.بمجرد أن قمت بترقية إصدار WordPress، زودني بمخرجات الخطأ الكاملة، بما في ذلك خطأ الذاكرة.

نصائح أخرى

لقد أصلحت هذا الخطأ أثناء تثبيت وحدة php-xmlrpc على Apache

PHP-xmlrpc.x86_64 :وحدة لتطبيقات PHP التي تستخدم بروتوكول XML-RPC

Expat هو محلل XML في PHP.رمز الخطأ 5 هو أحد ثوابت الأخطاء العديدة، في هذه الحالة: XML_ERROR_UNCLOSED_TOKEN.يبدو لي أن هناك خطأ في النتيجة التي تم إرجاعها من استدعاء RPC.قد ترغب في التحقق من بعض الأخطاء في RPCRequest بعد ذلك file_get_contents و قبل xmlrpc_decode.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top