ما هي الخطوات التي تتخذ لاستكشاف مشكلات مع PHP الضفيرة؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

وتقريبا أي PHP يعمل مبرمج واجهت الحاجة إلى استخدام الضفيرة لإرسال طلبات HTTP الخام، سواء كان ذلك لمعالجة بطاقات الائتمان الدفع، الشائنة تجريف الشاشة، أو شيء من هذا في ما بينهما.

وتقريبا أي منتدى حيث يتجمع المبرمجين PHP لديها عدد كبير من الناس الذين لا يمكن الحصول على وظائف الضفيرة لتفعل ما تريد .

وعندما لا يعمل الضفيرة بالنسبة لك، ما تقنيات استكشاف الأخطاء وإصلاحها التي تستخدمها لمعرفة لماذا لا يعمل؟ ما gotchas غريب مع تنفيذ حليقة PHP ولقد واجهت؟ إذا طلب شخص ما "HALP MY الضفيرة IZ المكسور" سؤال في المنتدى، ما هي الخطوات التي تتخذ لمعرفة لماذا لا يعمل طلبها؟

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

المحلول

وأجد الخيار CURLINFO_HEADER_OUT أن يكون مفيدا للغاية.

<?php
$curl = curl_init('http://www.php.net');

curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_exec($curl);

echo '<fieldset><legend>request headers</legend>
  <pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '</pre>
</fieldset>';

echo '<fieldset><legend>response</legend>
  <pre>', htmlspecialchars(dbg_curl_data(null)), '</pre>
</fieldset>';

function dbg_curl_data($curl, $data=null) {
  static $buffer = '';

  if ( is_null($curl) ) {
    $r = $buffer;
    $buffer = '';
    return $r;
  }
  else {
    $buffer .= $data;
    return strlen($data);
  }
}

نصائح أخرى

في الواقع، لم أكن استخدام الضفيرة (في بي). والمعهد PHP تيار هو أكثر إتقانا من ذلك بكثير، ويمكن استخدامها لنشر بيانات كذلك. Wez فيرلونج ديه مقالا حول هذا الموضوع.

إذا كان لي أن استخدامه؟ كنت أبدأ مع تشغيل جميع الرسائل (وضع التقرير عن الخطأ إلى E_ALL). إذا وجدت أن PHP لا تقول لي ما أحتاج في رسائل الخطأ، كنت على الارجح استخدام نهج وكيل لنرى ما يحدث في الواقع على. تغيير عنوان الموقع المستهدف إلى صفحة فب المحلية التي تحتوي على شيء من هذا القبيل

<?php
var_dump($_POST);
var_dump($_GET);
var_dump($_SERVER);

وهي طريقة واحدة. وهناك طريقة أخرى لاستخدام أداة مثل أداة netcat للاستماع على المنفذ 80 وإرسال الطلب هناك:

netcat -l -p 80

وهذا لن يعود أي شيء إلى حليقة، ولكنها تسمح لك أن ترى بالضبط ما أرسلت الخادم، والتي قد تكون كافية لتشخيص المشكلة.

ويمكنك أيضا استرداد رؤوس من PHP باستخدام apache_request_headers () وظيفة . في معظم الحالات لكنني أفضل نهج أداة netcat، على الرغم من أنه يضمن أن أرى الحقيقة معدلة، وأيضا عرض البيانات الخام آخر.

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