2010-01-11 19 views
7

मैं वेब सेवाओं पर निर्भर एक PHP अनुप्रयोग विकसित करने के लिए ग्रहण और XDebug का उपयोग कर रहा हूं। मेरे पास टेस्ट पेज हैं जो मेरी सेवाओं को 2 तरीकों से उपभोग करते हैं: AJAX (jQuery का उपयोग करके) और curl।एक PHP वेब सेवा पृष्ठ का पता लगाने के लिए XDebug का उपयोग

मैं अपने सेवा पृष्ठ में ब्रेकपॉइंट जोड़ता हूं और डीबगर लॉन्च करता हूं। जब मैं AJAX से सेवा को कॉल करता हूं, तो निष्पादन ब्रेकपॉइंट पर अच्छी तरह से बंद हो जाता है, और मुझे अपने चर, चरण-दर-चरण नियंत्रण इत्यादि मिलते हैं।

लेकिन जब मैं curl (यानी एक PHP पृष्ठ के भीतर से) का उपयोग कर सेवा कहता हूं , ब्रेकपॉइंट्स काम करने में विफल रहता है। यहां तक ​​कि अगर मैं "पहली पंक्ति में तोड़ें" डीबगर विकल्प चालू करता हूं, तो मुझे कर्ल का उपयोग करते समय निष्पादन को रोकने के लिए नहीं मिल सकता है।

क्या यह एक डीबगर व्यवहार है? क्या मुझे अपने कर्ल कॉल में एक श्रोताओं को जोड़ने की ज़रूरत है? यूआरएल बदलें? या यह एक एक्सडीबग सीमा है?

अपना समय और प्रयास के लिए धन्यवाद, लड़का

उत्तर

9

मैं अभी तक टिप्पणी नहीं कर सकता, इसलिए मैं इसे एक उत्तर के रूप में पोस्ट करता हूं।

क्या आप एक सत्र में एक से अधिक AJAX अनुरोध डीबग कर सकते हैं? क्या आपका डीबग सत्र अभी भी ग्रहण में चल रहा था जब आपने curl का उपयोग करके डीबग करने का प्रयास किया था? कैसे यह मेरे लिए काम करता पर

विवरण: एक साधारण debug.php फ़ाइल है कि केवल एक <?php और कुछ नहीं होता है के साथ

  1. प्रारंभ डिबग सत्र। यह पहली पंक्ति पर रुक जाता है, आप इसे "जारी रखते हैं" और यह निष्पादन समाप्त करता है।
  2. अब स्क्रिप्ट अपने रास्ते को cURL (या किसी अन्य ब्राउज़र)? XDEBUG_SESSION_START = ECLIPSE_DBGP जोड़ने का उपयोग कर अनुरोध करते हैं (मैं भी लगता है कि यह इसके अलावा वैकल्पिक है)
  3. आपकी स्क्रिप्ट डिबग ध्यान में रखते हुए दिखाई देना चाहिए पहली पंक्ति पर रोका

आशा है कि मदद करता है।

+0

जनवरी की कोशिश करने के लिए धन्यवाद। हाँ, मैं एक से अधिक अजाक्स कॉल डीबग कर सकता हूं और हां मेरा डीबग सत्र अभी भी ग्रहण में चल रहा है। और जैसा कि आप नीचे देख सकते हैं, मैं ' मैंने XDEBUG_SESSION_START = ECLIPSE_DBGP को मेरे कर्ल कॉल में जोड़ने का प्रयास किया - कोई फायदा नहीं हुआ। –

+0

@ टेक टेक टेक गाय: मैं कल काम पर यह कोशिश करूंगा। मुझे 99% यकीन है कि यह मेरे लिए काम करता है, इसलिए हम इसे आपके लिए भी काम करेंगे। – janpio

+0

हाँ, इसे फिर से प्रयास किया और यह काम करता है। आपको कुंजी की आवश्यकता नहीं है, XDEBUG_SESSION_START पर्याप्त है। फिर यह प्रत्येक ब्राउज़र में काम करता है और हर तरह से मैं सर्वर से कनेक्ट करता हूं, मेरा डीबग सत्र चल रहा है। क्या आप सी अगर कर्ल अनुरोध वास्तव में सही काम करता है तो आपके अनुरोध लॉग को दबाया? – janpio

2

जब आप Ajax अनुरोध डीबग कर रहे हैं, कि एक दूसरे (गैर अजाक्स) अनुरोध के रूप में ब्राउज़र द्वारा भेजा जाता है एक ही नेविगेशन संदर्भ में - - यही कारण है कि यह ठीक काम करता है।


अनुरोध कर्ल द्वारा भेजे गए एक और, अलग, संदर्भ में है -, और मुझे यकीन है कि आप उस में डिबगर हुक कर सकते हैं नहीं कर रहा हूँ ... लेकिन शायद ...

पहले सभी, यहाँ एक जानकारी है कि उपयोगी साबित हो सकता है, के हवाले से है Xdebug's documentation:

Xdebug कार्यक्षमता एक डिबग सत्र के ट्रैक रखने के लिए जब एक ब्राउज़र के माध्यम शुरू कर दिया शामिल हैं: कुकीज़। यह काम करता है इस तरह:

  • जब यूआरएल चर XDEBUG_SESSION_START=name एक URL में संलग्न है Xdebug नाम "XDEBUG_SESSION" और XDEBUG_SESSION_START URL पैरामीटर मूल्य मूल्य के रूप में के साथ एक कुकी उत्सर्जन करता है।
  • जब कोई GET (या POST) चर XDEBUG_SESSION_START या XDEBUG_SESSION कुकी सेट है, Xdebug एक डिबग्लिएंट से कनेक्ट करने का प्रयास करेगा।
  • डीबग सत्र (और कुकी को नष्ट करने के लिए) को रोकने के लिए बस यूआरएल पैरामीटर XDEBUG_SESSION_STOP जोड़ें। Xdebug अब डीबग्लिएंट से कनेक्शन बनाने का प्रयास नहीं करेगा।

हो सकता है कि अगर आपको लगता है कि कुकी सेट "हाथ से" यह काम हो सकता है, यह कर्ल अनुरोध allong भेज रहा है ...

मैं द्वारा निर्धारित के रूप में, आपको पहले अपने मूल्य भी प्राप्त करना होगा लगता है डीबगिंग सत्र की शुरुआत में Xdebug - आपके ब्राउज़र में मौजूद कुकी का पुन: उपयोग करना संभव होना चाहिए, हालांकि।

नोट: मैंने कभी कोशिश नहीं की है - यदि आप कोशिश करते हैं, और यह काम करता है, तो क्या आप कृपया पुष्टि कर सकते हैं कि यह काम करता है?

+0

काम नहीं करता। मैंने जोड़ा है? XDEBUG_SESSION_START = ECLIPSE_DBGP और KEY = 12632513094615 प्रत्येक कर्ल URL पर (मैं ग्रहण द्वारा लॉन्च किए गए मेरे यूआरएल से मूल्य लेता हूं - कुंजी हर बार बदलती है)। मैंने सत्यापित किया कि यह यूआरएल है जो curl में जाता है - इसका कोई फायदा नहीं हुआ। –

+0

ओह ;-(बहुत बुरा ;-( –

+0

कोशिश करने के लिए धन्यवाद! :) –

2

मैं इस सटीक मुद्दे में भाग गया।

xdebug.remote_autostart = 0 

और उसके बाद वेब सेवा यूआरएल है कि मेरी वेब सेवा ग्राहक कॉल करने के लिए एपीआई कुंजी जोड़ने:

?XDEBUG_SESSION_START=<your API key here> 

और मुझे लगता है मैं php.ini में बंद स्वत: शुरू सुविधा बदल कर इसे हल मुझे यकीन नहीं है कि यह मायने रखता है, लेकिन मैंने अपने डीबगर (मैकजीडीबीपी) में एपीआई कुंजी दर्ज की है। अब डीबगर केवल तभी आग लग जाता है जब वेब सेवा सर्वर-साइड स्क्रिप्ट को कॉल किया जाता है, क्लाइंट शुरू होने पर नहीं।

उम्मीद है कि इससे मदद मिलती है।

1- कमांड लाइन से::

curl -H "Cookie: XDEBUG_SESSION=1" http://YOUR-SITE.com/your-script.php 

2- पीएचपी

से
<?php 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, 'http://YOUR-SITE.com/your-script.php'); 
curl_setopt ($ch, CURLOPT_COOKIE, 'XDEBUG_SESSION=1'); 
curl_exec ($ch); 
?> 

तो यह नहीं करता है '

7

यहाँ कैसे ब्राउज़र के बिना कर्ल से Xdebugger ग्राहक को गति प्रदान करने पर टिप है कोई फर्क नहीं पड़ता कि आप "XDEBUG_SESSION = 1" को कर्ल URL पर संलग्न करते हैं, लेकिन अनुरोध के साथ एक उचित कुकी को एक साथ भेजना आवश्यक है।

5

मुझे पता है कि यह एक बहुत पुराना धागा है, लेकिन मैंने सोचा कि मैं दूसरों के लिए अपना अनुभव पोस्ट करूंगा जो इस तरह से हो सकता है, जैसा मैंने किया था, वही समस्या के साथ। मैंने जो खोजा है वह यह है कि, यदि आप दूरस्थ रूप से डिबगिंग कर रहे हैं (जो मैं हमेशा करता हूं), इस काम को करने के लिए आपको कुछ सेटिंग्स हैं जिन्हें php.ini में बदलना है। यहाँ जो कि मेरे लिए काम किया हैं:

xdebug.remote_connect_back = false 
xdebug.remote_host = {client host name or IP} 

पहले सेटिंग सामान्य रूप से "सही", और xdebug बताता है एक ही आईपी पता जहां HTTP अनुरोध उत्पन्न पर ग्राहक के लिए देखने के लिए। इस मामले में, अनुरोध सर्वर से आ रहा है, इसलिए यह काम नहीं करेगा। इसके बदले आपको क्लाइंट को ढूंढने के लिए xdebug को बताने के लिए दूसरी सेटिंग का उपयोग करना होगा। उम्मीद है कि यह किसी को थोड़ी देर बचाने में मदद करता है!

3

डिबगर सरल समाधान कुकी दृष्टिकोण -b XDEBUG_SESSION=ECLIPSE_DBGP ग्रहण पर मेरे लिए काम किया उपयोग करने के लिए है को गति प्रदान करने के लिए, नीचे देखें:

curl -H 'Content-type: application/json' \ 
     -b XDEBUG_SESSION="ECLIPSE_DBGP" \ 
     -X POST \ 
     -d '{"uid":200, "message":"asdsad","message_type":1}' 
     http://daxuebao.local:8083/api/message/send 
संबंधित मुद्दे