मैं अपने फ़ंक्शन नामक स्क्रिप्ट का फ़ाइल नाम कैसे ढूंढूं?फ़ाइल नाम ढूंढना जो PHP में मेरे फ़ंक्शन को कॉल करता है
उदाहरण के लिए,
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
मैं अपने फ़ंक्शन नामक स्क्रिप्ट का फ़ाइल नाम कैसे ढूंढूं?फ़ाइल नाम ढूंढना जो PHP में मेरे फ़ंक्शन को कॉल करता है
उदाहरण के लिए,
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
एक समाधान 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
बहुत मदद मिलेगी, ...); लेकिन यह मदद कर सकता है आप पहली बार एक विचार प्राप्त ...
पास्कल मार्टिंस के सुझाव के अलावा, आप 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() के साथ जाने से बेहतर हो सकते हैं।
आप एक पैरामीटर के रूप में फ़ाइल नाम पारित कर सकते हैं:
function sthing($filename) {
echo __FILE__; // echoes myself
echo $filename; // echoes the file that called me
}
जब आप फ़ंक्शन को कॉल आप जादू निरंतर फ़ाइल पारित:
sthing(__FILE__);
इस प्रयास करें:
$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function')));
var_dump(debug_backtrace()[$key]['file']);
पूर्णता। अपेक्षित के रूप में काम करता है। – Dovy
php 5.6 पर ठीक से काम कर रहा है। धन्यवाद। –
क्या आप कृपया इस बारे में अधिक जानकारी दे सकते हैं कि आपको इस तरह के कार्यात्मकता की आवश्यकता क्यों होगी y? हो सकता है कि आप गलत अंत से किसी समस्या का सामना कर रहे हों। – Gordon