বর্তমান স্ক্রিপ্ট ফাইলের নাম পান


273

আমার যদি পিএইচপি স্ক্রিপ্ট থাকে তবে আমি কীভাবে সেই স্ক্রিপ্টের ভেতর থেকে ফাইলের নাম পেতে পারি?

এছাড়াও, ফর্মটির স্ক্রিপ্টের নাম দেওয়া হয়েছে jquery.js.php, আমি কীভাবে কেবল "jquery.js" অংশটি বের করতে পারি?


1
এটি একটিতে দুটি প্রশ্ন। আপনি কোনটি জানতে চান? বর্তমান স্ক্রিপ্টের নাম কীভাবে বলা যায়, কোনও ফাইলের নাম থেকে এক্সটেনশন কেটে যায় বা উভয়?
পেক্কা

3
শব্দটি alsoইঙ্গিত করে যে আপনি একটি অতিরিক্ত প্রশ্ন জিজ্ঞাসা করছেন। Sheesh। কিছু বাচ্চাদের উঁকি দেয়।
ডিজিসক্রিপ্টার

উত্তর:


411

বর্তমান ফাইলের নাম পেতে কেবল পিএইচপি ম্যাজিক ধ্রুবক ব্যবহার করুন __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"

স্ট্যান্ডার্ড স্ট্রিংয়ের গ্রন্থাগার ফাংশনগুলি ব্যবহার করা তত দ্রুত , যেমনটি আপনি আশা করেছিলেন d

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

1
কেন কেবল ব্যবহার substrএবং strrchrশেষ .এবং এর পিছনে সমস্ত কিছু সরিয়ে ফেলার জন্য নয়?
চোরমাস্টার

9
@ থিফমাস্টার কারণ ফাইল এক্সটেনশানগুলি পরিচালনা করতে পিএইচপি তে কিছু অন্তর্নির্মিত আছে। চাকা বিদ্যমান, এবং ভাল ঘূর্ণায়মান।
অ্যালেক্স

2
তবে একটি রেজেক্স আরও ব্যয়বহুল হতে পারে!
চোরমাস্টার

14
লাইনে __FILE__থাকা .phpফাইলটি দেওয়ার সময় আপনি আসলে $_SERVER['SCRIPT_NAME']চলমান শীর্ষ-স্তরের স্ক্রিপ্টটি (যা ওয়েব সার্ভার দ্বারা বা সরাসরি কমান্ড লাইনে
ড্রিউ স্টিফেনস

2
@ ড্র আমি অনুমান করি যে আপনি আসলে যা চান তার উপর নির্ভর করে।
অ্যালেক্স

125

আপনি যখন নিজের অন্তর্ভুক্তটি জানতে চান যে এটি কোন ফাইলে রয়েছে (যেমন। কী স্ক্রিপ্টের নামটি আসলে অনুরোধ করা হয়েছিল), ব্যবহার করুন:

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

কারণ আপনি যখন কোনও ফাইলে লিখছেন তখন সাধারণত আপনি এর নামটি জানতেন।

সম্পাদনা: অ্যালেক টিলের দ্বারা উল্লিখিত হিসাবে, আপনি যদি সিমলিঙ্ক ব্যবহার করেন তবে এটি পরিবর্তে সিমলিংকের নামটি প্রদর্শন করবে।


4
এটি আমার পক্ষে সহায়ক ছিল)) স্ক্রিপ্ট ফাইলের নাম, প্রয়োজনীয় ফাইলে পাওয়ার দরকার ছিল )
Denys Klymenko

4
এটি ভুল, এটি প্রকৃত পিএইচপি ফাইলটি পাবে না, তবে ফাইলটি ওয়েবসভারটি অনুরোধে সমাধান করেছে। আপনি যদি সিমলিঙ্ক ব্যবহার করেন তবে ভিন্ন।
আলেক টিল

এছাড়াও যদি আপনি পিএইচপি-এফপিএম ব্যবহার করেন তবে আলাদা।
অ্যান্ড্রু এনসলে

এছাড়াও আপনার যদি এক্সটেনশানটিরও প্রয়োজন হয়, ব্যবহার করুনpathinfo($_SERVER["SCRIPT_FILENAME"], PATHINFO_BASENAME);
c00000fd

@ c00000fd আপনার যদি এক্সটেনশনটির প্রয়োজন হয় তবে কেবলমাত্র দ্বিতীয় প্যারামিটারটি বাদ দিন ...
স্পার্ক করুন


56

এখানে basename(__FILE__, ".php")এবং এর মধ্যে পার্থক্য basename($_SERVER['REQUEST_URI'], ".php")

basename(__FILE__, ".php")শো ফাইলের নাম যেখানে এই কোড অন্তর্ভুক্ত করা হয় - এটি এর মানে হল যে যদি আপনি এই কোড অন্তর্ভুক্ত header.php ও বর্তমান পাতা index.php , এটা ফিরে আসবে হেডার না সূচক

basename($_SERVER["REQUEST_URI"], ".php")- আপনি এই কোড অন্তর্ভুক্ত ব্যবহার করেন তাহলে header.php ও বর্তমান পাতা index.php , এটা ফিরে আসবে সূচক না হেডার


কোনটি নিরাপদ SCRIPT_FILENAMEবা REQUEST_URI? আমি জানি যে তারা দু'জনেই সার্ভার ওয়ার্স কিন্তু REQUEST_URIকোনও ব্যবহারকারীর টেম্পার্ড মান হয় না ? এটি একটি "ইউআরআই ইনজেকশন" হুমকি সক্ষম করে
স্পার্ক

1
উভয় তাদের নিজস্ব পুরুষত্বহীনতা আছে, কিন্তু আপনার URL টি বিভিন্ন filers ব্যবহার নিরাপদ করতে পারেন, mysql_real_escape_string মতো stripslashes ইত্যাদি ..
Khandad নিয়াজী

5
লিঙ্কটি ফর্মটি থাকলে খন্দাদনিয়াজি basename($_SERVER["REQUEST_URI"], ".php");ফোল্ডারের নাম ফিরিয়ে দেবে http://example.com/somefolder। যদিও basename($_SERVER['PHP_SELF'], ".php");সবসময় স্ক্রিপ্টের নাম ফিরে আসবো, এই ক্ষেত্রে index
কাটালিন_2003

27

এটি সাহায্য করতে পারে:

basename($_SERVER['PHP_SELF'])

এটি অন্তর্ভুক্ত ব্যবহার করে থাকলেও এটি কাজ করবে।


এটি এখনও .phpশেষের দিকে ছেড়ে দেয় যে ওপি মুক্ত হওয়ার চেষ্টা করেছিল
ব্রায়ান লেশম্যান

3
@stumpx তারপরে আপনি করতে পারেনbasename($_SERVER['PHP_SELF'], ".php");
কাতালিন_2003

আমার কাছে দুটি ফাইল, হেডার.এফপি এবং হোম.এফপি রয়েছে, হেডার.পিএফপিকে হোম.এফপি বলা হয় আমি কীভাবে শিরোনামে সনাক্ত করতে পারি যে বর্তমান পৃষ্ঠাটি হোম.এফপি বা কন্টাক্ট.এফপি যাতে আমি কিছু ব্যানার ইত্যাদি পরিবর্তন করতে পারি
মক্সেট খান

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। উপরের সমস্ত ফাংশন প্রিন্ট আউট হয় হয় ফাংশন বা সূচি বা ডোমেন বা এর কিছু প্রকরণ। কোন পিএইচপি স্ক্রিপ্টটি ফাংশনটি ডেকেছে তা আমি জানতে চাই না। এটি কি সম্ভব (এক-লাইনারে)? @begoyan
s3c


4

আরও সাধারণ উপায়ে প্যাথিনফো () ব্যবহার করা হবে । সংস্করণ 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

এটি অন্তর্ভুক্ত পিএইচপি ফাইলের অভ্যন্তরে চালিত হওয়ার পরেও আমার পক্ষে কাজ করে এবং আপনি বর্তমান পিএইচপি ফাইলের ফাইলের নাম চান:

$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')এটি পরীক্ষা করার ভাল উপায়।

দ্বিতীয়টি ব্যবহার করা আমার কাছে কিছু বৈধতা নির্দেশাবলীর সমাধান ছিল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.