एक कमांड लाइन PHP स्क्रिप्ट के लिए XDebug प्रोफाइलर को कैसे ट्रिगर किया जाए?


195

XDebug कॉन्फ़िगरेशन निर्देश "xdebug.profiler_enable_trigger" प्रदान करता है जो HTTP के माध्यम से स्क्रिप्ट कॉल करते समय GET या POST पैरामीटर "XDEBUG_PROFILE" को पास करके प्रोफाइलिंग को सक्रिय करने की अनुमति देता है। यह आसान है यदि आप अपनी सभी लिपियों के लिए प्रोफाइलिंग नहीं करना चाहते हैं, लेकिन केवल कुछ विशेष मामलों के लिए, जो हमेशा आपके PHP कॉन्फ़िगरेशन को बदले बिना।

क्या कमांड लाइन PHP प्रोग्रामों के लिए समान व्यवहार प्राप्त करने का एक तरीका है? मैंने "XDEBUG_PROFILE" को कमांड लाइन तर्क के रूप में पारित करने की कोशिश की, लेकिन यह काम नहीं किया।

सामान्य तौर पर, प्रोफाइलिंग कमांड लाइन PHP अच्छी तरह से काम करती है, लेकिन मैं एक ब्राउज़र और HTTP सर्वर के समान प्रति कॉल-फ्लेक्सिबिलिटी रखना चाहूंगा।

कोई सुझाव?


क्षमा करें, मैं भी यह कोशिश कर रहा हूँ, लेकिन मुझे यह नहीं मिला। "XDEBUG_PROFILE" पैरामीटर में क्या होना चाहिए?
एंड्रेस सर्ज

इससे कोई फर्क नहीं पड़ता कि पैरामीटर में क्या है जब तक यह सब मौजूद है।
सेल्फवार्सप

XDEBUG_PROFILE पर्यावरण चर के लिए समर्थन की कमी XDebug बग ट्रैकर में बग 413 है।
आउटसाइड

जवाबों:


258

आप -dध्वज के साथ INI सेटिंग्स पास कर सकते हैं php -d xdebug.profiler_enable=On script.php:।


39
* निक्स आधारित प्रणालियों पर, आप एक उपनाम बनाकर उपयोग करने के लिए इसे थोड़ा आसान बना सकते हैं, जैसे alias phpp="php -d xdebug.profiler_enable=1":। इस तरह जब आप प्रोफ़ाइल का उपयोग नहीं करना चाहते हैं phpऔर जब आप उपयोग करते हैं phpp
जेसी यमोकोस्की

14
मुझे यह निर्दिष्ट करना था कि मुझे कौन सी निर्देशिका चाहिए थी कि प्रोफाइलर आउटपुट को भी बचाया जा सके, इसलिए यह मेरे लिए व्यर्थ था alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.":। वह हमेशा डिबग आउटपुट को आपकी वर्तमान कार्यशील निर्देशिका में संग्रहीत करता है।
लार्स न्यस्त्रम

हाँ, मैं Win7 पर्यावरण में एक्लिप्स और XAMPP के अधीन हूं। यह काम करता हैं।
गौचेयर

4
विंडोज पर, आप अपने पथ में एक phpp.cmdफ़ाइल बना सकते हैं , जिसमें php -d xdebug.profiler_enable=On %*आप बस चला सकते हैं phpp <args>
ग्रास डबल

43

मुझे यह Ubuntu / Netbeans पर काम कर रहा है:

  • /etc/php5/apache2/php.ini फ़ाइल से /etc/php5/cli/php.ini में xdebug कॉन्फ़िग लाइनों की प्रतिलिपि बनाना
  • डिबग सत्र के नाम के साथ एक पर्यावरण चर स्थापित करना (आप पृष्ठ डिबगिंग शुरू करने पर पृष्ठ नेटबाइन्स के यूआरएल में क्वेरी स्ट्रिंग से प्राप्त कर सकते हैं) कमांड है: एक्सपोर्ट XDEBUG_CONFIG = "आइडेक = नेटबिन्स-xdebug"

फिर यह केवल netbeans में डिबगिंग शुरू करने और कमांड लाइन पर "php myscript.php" करने का मामला है।


2
नोट: आपके द्वारा किए जाने के बाद यदि आप अपने डिबगर को सुनना चाहते हैं और इसे PHP कमांड के साथ ट्रिगर नहीं करना चाहते हैं, तो आप बस इसका उपयोग कर सकते हैं: "XDEBUG_CONFIG को अनसेट करें"।
दान लमन्ना

यह वास्तव में मेरे लिए काम कर रहा है, जबकि ऊपर जवाब नहीं है
;;

4
यह डिबगिंग (स्क्रिप्ट के माध्यम से कदम) के बारे में है। प्रश्न प्रोफाइलिंग के बारे में था (स्क्रिप्ट के प्रदर्शन का विश्लेषण करना, कौन से कार्यों में लंबा समय लगता है, आदि)
मैथ्यू फ्लशेन

32

दूरदराज के वेबसर्वर पर PhpStorm के साथ मैं इस कमांड का उपयोग करता हूं:

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

जहां server_namePhpStorm प्रोजेक्ट कॉन्फिगरेशन में सर्वर का नाम है


5
मैंने इसे .bash_aliases alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=इको $ SSH_CLIENT में जोड़ा है cut -d \ "= \" -f 2 | awk '{प्रिंट $ 1}' "तो जब मैं डीबग करना चाहता हूं तो मैं php के बजाय xphp का उपयोग करता हूं
oliver nadj

19

जैसा कि Xdebug रिमोट डिबगिंग पेज पर वर्णित है , प्रोफाइलिंग को XDEBUG_CONFIG"profile_enable = 1" निर्देश को टाल कर पर्यावरण चर के माध्यम से भी सक्षम किया जा सकता है :

XDEBUG_CONFIG="profiler_enable=1" php ...

यह एक स्वीकृत उत्तर होना चाहिए क्योंकि यह सबसे सुलभ विधि है। PHP बाइनरी को लपेटा जा सकता है, इसे इंटरप्रेटर # के रूप में सेट किया जा सकता है! / X / php उन स्थानों पर जहाँ आप स्पर्श नहीं करना चाहते हैं। Env वैरिएबल के उपयोग से इसे चुनिंदा रूप से सक्षम किया जा सकता है
जॉन

11

इसी तरह, लेकिन एक वीएम पर विकसित होने के दौरान इसे नेटबींस के साथ काम करने के लिए अलग-अलग प्रक्रिया।

रिमोट इनेबल्ड फ्लैग, ऑटो स्टार्ट फ्लैग, आइड फ्लैग और अपने रिमोट होस्ट के नाम को पास करना होगा।

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php

4

मैंने क्लाइंट डिबगिंग को संभालने के लिए एक शेल स्क्रिप्ट बनाई।

स्क्रिप्ट का नाम: phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

मैंने इस स्क्रिप्ट को रखा /usr/binऔर इसे निष्पादित अनुमतियाँ दीं।

स्क्रिप्ट phpdebug में दिए गए तर्कों को लेती है और xdebug तर्कों के साथ php को कॉल करती है और शेल स्क्रिप्ट, $ * के अंत में दिए गए तर्कों को जोड़ देती है।


हां, मेरे मामले में, वैसे भी, मुझे मेरी दूरस्थ होस्ट के लिए INI सेटिंग जोड़ने की आवश्यकता थी। एक PHP सीएलआई कमांड से मेरी आईडीई में डिबगिंग करने के लिए आवश्यक सभी था।
स्पेंसर विलियम्स

वास्तव में, मुझे XDEBUG_CONFIGपर्यावरण चर सेट करने की भी आवश्यकता थी । बस यही और xdebug.remote_hostसेटिंग ने काम कर दिया।
स्पेंसर विलियम्स

2

PhpStorm 7 में WAMP का उपयोग करके मुझे C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini की C: \ wamp \ bin \ php \ _ से अपनी पहले से ही काम कर रहे xdebug सेटिंग्स की प्रतिलिपि बनाकर काम करना है। phpX.YZ \ php.ini। फिर मैंने अपनी स्क्रिप्ट को इस तरह चलाया:

php -d xdebug.idekey=PHPSTORM script.php

यह भी लार्वा कारीगर लिपियों डिबगिंग के लिए काम किया

php -d xdebug.idekey=PHPSTORM artisan db:seed --force

0

Jetbrains से प्रलेखन

PHP कमांड लाइन स्विच का उपयोग करके डिबगिंग के साथ स्क्रिप्ट शुरू करने के लिए एक पर्यावरण चर सेट करें जो IDE से कनेक्ट करने के लिए XDebug को बताएगा:

विंडोज / मैकओएस / लिनक्स

export XDEBUG_CONFIG="idekey=123"  

यहां विचारधारा का एक यादृच्छिक मूल्य होना चाहिए।

निम्न कमांड-लाइन विकल्पों के साथ PHP लॉन्च करें:

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php

आप वग्रांत के साथ 127.0.0.1 के बजाय 10.0.2.2 का उपयोग कर सकते हैं (संबंधित एसओ प्रश्न देखें)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.