वर्तमान स्क्रिप्ट फ़ाइल नाम प्राप्त करें


273

अगर मेरे पास PHP स्क्रिप्ट है, तो मुझे उस स्क्रिप्ट के अंदर से फ़ाइल नाम कैसे मिल सकता है?

इसके अलावा, फॉर्म की एक स्क्रिप्ट का नाम दिया गया है jquery.js.php, मैं सिर्फ "jquery.js" भाग कैसे निकाल सकता हूं?


1
यह एक में दो प्रश्न हैं। आप कौन सा जानना चाहते हैं वर्तमान स्क्रिप्ट का नाम कैसे बताएं, फ़ाइल नाम से एक्सटेंशन को कैसे काटें, या दोनों?
पेक्का

3
शब्द alsoइंगित करता है कि आप एक अतिरिक्त प्रश्न पूछ रहे हैं। शीश। कुछ झांकते बच्चे।
डिजीक्रिशन

जवाबों:


411

वर्तमान फ़ाइल नाम प्राप्त करने के लिए बस PHP जादू निरंतर __FILE__ का उपयोग करें ।

लेकिन ऐसा लगता है कि आप इसके बिना हिस्सा चाहते हैं .php। इसलिए...

basename(__FILE__, '.php'); 

एक अधिक सामान्य फ़ाइल एक्सटेंशन हटानेवाला इस तरह दिखेगा ...

function chopExtension($filename) {
    return pathinfo($filename, PATHINFO_FILENAME);
}

var_dump(chopExtension('bob.php')); // string(3) "bob"
var_dump(chopExtension('bob.i.have.dots.zip')); // string(15) "bob.i.have.dots"

मानक स्ट्रिंग लाइब्रेरी फ़ंक्शंस का उपयोग करना बहुत तेज़ है , जैसा कि आप अपेक्षा करेंगे।

function chopExtension($filename) {
    return substr($filename, 0, strrpos($filename, '.'));
}

1
क्यों नहीं बस का उपयोग करें substrऔर strrchrपिछले .और उसके पीछे सब कुछ छीनने के लिए ?
ThiefMaster

9
@ThiefMaster क्योंकि फ़ाइल एक्सटेंशन को संभालने के लिए PHP में कुछ बनाया गया है। पहिया मौजूद है, और अच्छी तरह से रोल करता है।
एलेक्स

2
लेकिन एक रेगीक्स अधिक महंगा हो सकता है!
ThiefMaster

14
जब __FILE__आप उस .phpफ़ाइल को देते हैं, जो लाइन में है, तो आप वास्तव $_SERVER['SCRIPT_NAME']में वर्तमान में चल रही शीर्ष-स्तरीय स्क्रिप्ट (जो वेब सर्वर द्वारा या सीधे कमांड लाइन पर मंगाई गई थी) के लिए चाहते हैं
ड्रू स्टीफंस

2
@ मुझे लगता है कि आप वास्तव में क्या चाहते हैं पर निर्भर करता है।
एलेक्स

125

जब आप चाहते हैं कि आपका यह जानना शामिल है कि यह किस फ़ाइल में है (यानी कि स्क्रिप्ट नाम वास्तव में क्या अनुरोध किया गया था), उपयोग करें:

basename($_SERVER["SCRIPT_FILENAME"], '.php')

क्योंकि जब आप किसी फाइल पर लिख रहे होते हैं तो आप आमतौर पर उसका नाम जानते हैं।

संपादित करें: जैसा कि एलेक टीले द्वारा कहा गया है, यदि आप सीमलिंक का उपयोग करते हैं तो यह सिम्लिंक नाम के बजाय दिखाएगा।


4
यह मेरे लिए उपयोगी था)) आवश्यक फ़ाइल में स्क्रिप्ट फ़ाइल नाम प्राप्त करने के लिए आवश्यक है )
डेनिस क्लेमेनको

4
यह गलत है, यह वास्तविक PHP फ़ाइल प्राप्त नहीं करेगा, लेकिन अनुरोध के लिए वेबसर्वर फ़ाइल को हल कर देता है। यदि आप simlinks का उपयोग करते हैं तो अलग।
एलेक चैले

अगर आप PHP-FPM का उपयोग करते हैं तो भी अलग है।
एंड्रयू एनस्ले

इसके अलावा अगर आपको एक्सटेंशन की भी जरूरत है, तो उपयोग करेंpathinfo($_SERVER["SCRIPT_FILENAME"], PATHINFO_BASENAME);
c00000fd

@ c00000fd यदि आपको एक्सटेंशन की आवश्यकता है तो बस दूसरे पैरामीटर को छोड़ दें ...
स्पार्क


56

यहाँ basename(__FILE__, ".php")और के बीच अंतर है basename($_SERVER['REQUEST_URI'], ".php")

basename(__FILE__, ".php")उस फ़ाइल का नाम दिखाता है जहाँ यह कोड शामिल है - इसका मतलब है कि यदि आप इस कोड को हैडर में शामिल करते हैं। पीपीपी और करंट पेज इंडेक्स हैएफपीपी है , तो यह हेडर को इंडेक्स नहीं लौटाएगा ।

basename($_SERVER["REQUEST_URI"], ".php")- यदि आप हेडर में इस कोड को शामिल करते हैं। एफपी और वर्तमान पृष्ठ इंडेक्स है। एफपी , यह इंडेक्स को हेडर नहीं लौटाएगा ।


जो सुरक्षित है SCRIPT_FILENAMEया REQUEST_URI? मुझे पता है कि वे दोनों सर्वर वर्जन हैं, लेकिन क्या कोई REQUEST_URIउपयोगकर्ता छेड़छाड़ मूल्य नहीं है? यह एक "URI इंजेक्शन" खतरे को सक्षम करता है
SparK

1
दोनों की अपनी-अपनी नपुंसकता है, लेकिन आप mysql_real_escape_string,
स्ट्रिप्सलैश

5
basename($_SERVER["REQUEST_URI"], ".php");अगर लिंक फॉर्म का है तो @KadadNiazi फ़ोल्डर का नाम वापस कर देगा http://example.com/somefolder। जबकि basename($_SERVER['PHP_SELF'], ".php");इस मामले में, हमेशा स्क्रिप्ट का नाम वापस आ जाएगा index
katalin_2003

27

यह मदद कर सकता है:

basename($_SERVER['PHP_SELF'])

यदि आप शामिल हैं तो भी यह काम करेगा।


वह अभी भी .phpअंत में छोड़ देता है कि ओपी से छुटकारा पाने की कोशिश कर रहा था
ब्रायन लीशमैन

3
@stumpx तब आप कर सकते हैंbasename($_SERVER['PHP_SELF'], ".php");
katalin_2003

मेरे पास 2 फाइलें हैं, शीर्ष लेख ।php और home.php, शीर्ष लेख ।php को home.php में कहा जाता है। मैं हेडर में कैसे पता लगा सकता हूं कि वर्तमान पृष्ठ home.php या contact.php है, इसलिए मैं कुछ बैनर आदि बदल सकता हूं
मोक्सेट खान

19

एलेक्स का जवाब सही है लेकिन आप ऐसा बिना नियमित भाव के भी कर सकते हैं:

str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));

6
यह एक फ़ाइल नाम जैसे नामकरण के जोखिम को चलाता है hey.php-i-am-a-weird-filename.php
एलेक्स

मुझे पहले से ही ऐसा लगा था, लेकिन मुझे लगा कि वे प्रश्न में वर्णित एकल पृष्ठ के लिए इसका उपयोग कर रहे हैं। आप यह देखने के लिए भी जांच कर सकते हैं कि क्या ".php" स्ट्रिंग के अंत में है। यह कहते हुए कि आपका प्रश्न गलत नहीं है, लेकिन नियमित रूप से जासूसी करने से गधे में दर्द हो सकता है और आमतौर पर ऐसे परिदृश्यों में उपयोग किया जाता है जहां बहुत सरल और कम संसाधन गहन विधि का उपयोग किया जा सकता है।
उपयोगकर्ता

शोफ़नर मैंने कुछ बेंचमार्क चलाए और आपका रास्ता लगभग दोगुना तेज है, लेकिन फिर भी 1000 से अधिक पुनरावृत्तियों में अंतर 0.003231 माइक्रोसेकंड है।
एलेक्स

16

यहाँ एक सूची है जो मैंने हाल ही में एक उत्तर खोजने के लिए पाया है:

//self name with file extension
echo basename(__FILE__) . '<br>';
//self name without file extension
echo basename(__FILE__, '.php') . '<br>';
//self full url with file extension
echo __FILE__ . '<br>';

//parent file parent folder name
echo basename($_SERVER["REQUEST_URI"]) . '<br>';
//parent file parent folder name with //s
echo $_SERVER["REQUEST_URI"] . '<br>';

// parent file name without file extension
echo basename($_SERVER['PHP_SELF'], ".php") . '<br>';
// parent file name with file extension
echo basename($_SERVER['PHP_SELF']) . '<br>';
// parent file relative url with file etension
echo $_SERVER['PHP_SELF'] . '<br>';

// parent file name without file extension
echo basename($_SERVER["SCRIPT_FILENAME"], '.php') . '<br>';
// parent file name with file extension
echo basename($_SERVER["SCRIPT_FILENAME"]) . '<br>';
// parent file full url with file extension
echo $_SERVER["SCRIPT_FILENAME"] . '<br>';

//self name without file extension
echo pathinfo(__FILE__, PATHINFO_FILENAME) . '<br>';
//self file extension
echo pathinfo(__FILE__, PATHINFO_EXTENSION) . '<br>';

// parent file name with file extension
echo basename($_SERVER['SCRIPT_NAME']);

हटाने के लिए मत भूलना :)

<br>


1
तो ... SCRIPT_NAME, SCRIPT_FILENAME और PHP_SELF 3 अलग-अलग चीजें हैं, सही? (एक ही मूल्य के साथ इतने सारे संस्करण क्यों?
रासमस

परिदृश्य: index.phpजिसमें header.phpशामिल है functions.php, जिसमें शामिल है , जहां log_location()रहता है। मैं फोन log_location()में header.php, और फिर मैं चलाने के index.php। उपरोक्त सभी फ़ंक्शन या तो फ़ंक्शन या इंडेक्स या डोमेन या इनमें से कुछ भिन्नता का प्रिंट आउट लेते हैं। मुझे पता नहीं था कि कौन सी PHP लिपि फंक्शन कहलाती है। क्या यह भी संभव है (एक लाइनर में)? @begoyan
s3c


4

एक और सामान्य तरीका है pathinfo () का उपयोग करना । संस्करण 5.2 के बाद से यह समर्थन करता है PATHINFO_FILENAME

इसलिए

pathinfo(__FILE__,PATHINFO_FILENAME)

वह भी करेंगे जो आपको चाहिए।


2

$ Argv [0]

मैंने इसे उपयोग करने के लिए बहुत सरल पाया है $argv[0]। निष्पादित स्क्रिप्ट का नाम हमेशा $argvसरणी में पहला तत्व है । अन्य उत्तरों में सुझाए गए अन्य सभी तरीकों के विपरीत, इस विधि basename()को निर्देशिका ट्री को हटाने के लिए उपयोग की आवश्यकता नहीं है । उदाहरण के लिए:

  • echo __FILE__; कुछ इस तरह देता है /my/directory/path/my_script.php

  • echo $argv[0]; रिटर्न my_script.php



2

मेरे लिए यह तब भी काम करता है, जब किसी सम्मिलित PHP फ़ाइल के अंदर चलाया जाता है, और आप चाहते हैं कि मौजूदा php फ़ाइल का फ़ाइल नाम चल रहा हो:

$currentPage= $_SERVER["SCRIPT_NAME"];
$currentPage = substr($currentPage, 1);
echo $currentPage;

परिणाम:

index.php



0

__FILE__ स्थानीय होस्ट सर्वर परिणामों के आधार पर उदाहरणों का उपयोग करें:

echo __FILE__;
// C:\LocalServer\www\templates\page.php

echo strrchr( __FILE__ , '\\' );
// \page.php

echo substr( strrchr( __FILE__ , '\\' ), 1);
// page.php

echo basename(__FILE__, '.php');
// page

0

जैसा कि कुछ ने कहा basename($_SERVER["SCRIPT_FILENAME"], '.php')और basename( __FILE__, '.php')यह परीक्षण करने के अच्छे तरीके हैं।

दूसरे का उपयोग करने के लिए मेरे द्वारा किए गए कुछ सत्यापन निर्देशों का समाधान था

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