2009-12-20 10 views
17

मैं अपने फ़ंक्शन नामक स्क्रिप्ट का फ़ाइल नाम कैसे ढूंढूं?फ़ाइल नाम ढूंढना जो PHP में मेरे फ़ंक्शन को कॉल करता है

उदाहरण के लिए,

function sthing() { 
echo __FILE__; // echoes myself 
echo __CALLER_FILE__; // echoes the file that called me 
} 
+0

क्या आप कृपया इस बारे में अधिक जानकारी दे सकते हैं कि आपको इस तरह के कार्यात्मकता की आवश्यकता क्यों होगी y? हो सकता है कि आप गलत अंत से किसी समस्या का सामना कर रहे हों। – Gordon

उत्तर

29

एक समाधान debug_backtrace समारोह का उपयोग करने के हो सकता है: पश्व-अनुरेखन में, जानकारी उस तरह का मौजूद होना चाहिए।

या, जैसा कि गॉर्डन ने एक टिप्पणी में बताया, आप debug_print_backtrace का भी उपयोग कर सकते हैं यदि आप केवल उस जानकारी को आउटपुट करना चाहते हैं और इसके साथ काम नहीं करना चाहते हैं।


उदाहरण के लिए, temp.php के साथ इस युक्त

<?php 
include 'temp-2.php'; 
my_function(); 

और temp-2.php के साथ इस युक्त

:

<?php 
function my_function() { 
    var_dump(debug_backtrace()); 
} 


अपने ब्राउज़र से temp.php(i.e. the first script) कॉलिंग मुझे इस उत्पादन हो जाता है

array 
    0 => 
    array 
     'file' => string '/.../temp/temp.php' (length=46) 
     'line' => int 5 
     'function' => string 'my_function' (length=11) 
     'args' => 
     array 
      empty 

वहां, मेरे पास "temp.php" फ़ाइल नाम है - जिसमें वह कार्य है जिसे फ़ंक्शन कहा गया है।


बेशक , आप थोड़ा और (विशेष रूप से स्थितियों में, जहां समारोह "प्रथम स्तर" में नहीं है में फ़ाइल शामिल परीक्षण करने के लिए होगा, लेकिन एक फाइल एक दूसरे से शामिल में - यकीन नहीं debug_backtrace बहुत मदद मिलेगी, ...); लेकिन यह मदद कर सकता है आप पहली बार एक विचार प्राप्त ...

+0

शायद उत्तर में debug_print_backtrace() भी जोड़ें। – Gordon

+0

@ गॉर्डन: सुझाव के लिए धन्यवाद; मैंने इसे जोड़ने के लिए अपना जवाब संपादित किया :-) –

+0

अच्छा जवाब। अंत में शुरू होने वाली "कॉलिंग" फ़ाइल को खोजना आसान बनाता है, केवल अलग फ़ाइल की तलाश में ... – Franz

3

पास्कल मार्टिंस के सुझाव के अलावा, आप PECL विस्तार APD स्थापित करने और apd_callstack() है, जो (के हवाले से उदाहरण)

// returns an array containing an array of arrays. 

Each array appears to contain: 
[0] = function name 
[1] = filename that contains function 
[2] = *calling* line number in *calling* file 
[3] = An array which is usually empty 

लेकिन चूंकि तरह कुछ इस्तेमाल कर सकते हैं यह एक पीईसीएल एक्सटेंशन है और ज़ेंड ऑप्टिमाइज़र में हस्तक्षेप कर सकता है, तो आप debug_backtrace() के साथ जाने से बेहतर हो सकते हैं।

0

आप एक पैरामीटर के रूप में फ़ाइल नाम पारित कर सकते हैं:

function sthing($filename) { 
    echo __FILE__; // echoes myself 
    echo $filename; // echoes the file that called me 
} 

जब आप फ़ंक्शन को कॉल आप जादू निरंतर फ़ाइल पारित:

sthing(__FILE__); 
2

इस प्रयास करें:

$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function'))); 
var_dump(debug_backtrace()[$key]['file']); 
+0

पूर्णता। अपेक्षित के रूप में काम करता है। – Dovy

+0

php 5.6 पर ठीक से काम कर रहा है। धन्यवाद। –

संबंधित मुद्दे