หากฉันมีสคริปต์ PHP ฉันจะได้ชื่อไฟล์จากภายในสคริปต์นั้นได้อย่างไร
นอกจากนี้ด้วยชื่อของสคริปต์ของฟอร์มjquery.js.php
ฉันจะแยกส่วน "jquery.js" ได้อย่างไร
also
ระบุว่าคุณกำลังถามคำถามเพิ่มเติม Sheesh เด็กบางคนแอบมอง
หากฉันมีสคริปต์ PHP ฉันจะได้ชื่อไฟล์จากภายในสคริปต์นั้นได้อย่างไร
นอกจากนี้ด้วยชื่อของสคริปต์ของฟอร์มjquery.js.php
ฉันจะแยกส่วน "jquery.js" ได้อย่างไร
also
ระบุว่าคุณกำลังถามคำถามเพิ่มเติม Sheesh เด็กบางคนแอบมอง
คำตอบ:
เพียงแค่ใช้ค่าคงที่เวทย์มนตร์ 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, '.'));
}
substr
และstrrchr
ถอดออกจากสิ่งสุดท้าย.
และทุกสิ่งที่อยู่ด้านหลัง
__FILE__
ให้.php
ไฟล์ที่อยู่ในบรรทัดคุณต้องการ$_SERVER['SCRIPT_NAME']
สคริปต์ระดับบนสุดที่ทำงานอยู่ในปัจจุบัน (ซึ่งถูกเรียกโดยเว็บเซิร์ฟเวอร์หรือบนบรรทัดคำสั่งโดยตรง)
เมื่อคุณต้องการให้ไฟล์ของคุณรวมอยู่ในไฟล์ใด (เช่นชื่อไฟล์ที่ร้องขอจริง) ให้ใช้:
basename($_SERVER["SCRIPT_FILENAME"], '.php')
เพราะเมื่อคุณเขียนไฟล์คุณมักจะรู้ชื่อของมัน
แก้ไข: ตามที่ระบุไว้โดย Alec Teal หากคุณใช้ symlink จะแสดงชื่อ symlink แทน
pathinfo($_SERVER["SCRIPT_FILENAME"], PATHINFO_BASENAME);
ดูhttp://php.net/manual/th/function.pathinfo.php
pathinfo(__FILE__, PATHINFO_FILENAME);
นี่คือความแตกต่างระหว่างและ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
? ฉันรู้ว่าพวกเขาทั้งสองเป็น vars เซิร์ฟเวอร์ แต่REQUEST_URI
ผู้ใช้ไม่ได้แก้ไขค่าหรือไม่ มันช่วยให้ "ฉีด URI" ภัยคุกคาม
basename($_SERVER["REQUEST_URI"], ".php");
http://example.com/somefolder
แม้ว่าbasename($_SERVER['PHP_SELF'], ".php");
จะส่งคืนชื่อสคริปต์เสมอในกรณีindex
นี้
สิ่งนี้อาจช่วย:
basename($_SERVER['PHP_SELF'])
มันจะทำงานแม้ว่าคุณจะใช้รวมถึง
.php
เมื่อสิ้นสุดที่ OP พยายามที่จะกำจัด
basename($_SERVER['PHP_SELF'], ".php");
คำตอบของ alex นั้นถูกต้อง แต่คุณสามารถทำได้โดยไม่ต้องใช้นิพจน์ทั่วไปเช่น:
str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));
hey.php-i-am-a-weird-filename.php
เสียหาย
นี่คือรายการสิ่งที่ฉันพบเมื่อเร็ว ๆ นี้ค้นหาคำตอบ:
//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>
index.php
รวมheader.php
สิ่งfunctions.php
ที่log_location()
อยู่ในนั้นด้วย ผมเรียกlog_location()
ในและจากนั้นผมทำงานheader.php
index.php
ฟังก์ชั่นด้านบนทั้งหมดพิมพ์ฟังก์ชั่นหรือดัชนีหรือโดเมนหรือการเปลี่ยนแปลงของสิ่งเหล่านี้ ฉันไม่รู้ว่าสคริปต์ PHP ตัวใดที่เรียกว่าฟังก์ชัน มันเป็นไปได้หรือไม่ (เป็นแบบเส้นเดียว)? @begoyan
คุณสามารถใช้สิ่งนี้:
echo $pageName = basename($_SERVER['SCRIPT_NAME']);
วิธีทั่วไปมากขึ้นจะใช้pathinfo () ตั้งแต่เวอร์ชัน 5.2 PATHINFO_FILENAME
จะสนับสนุน
ดังนั้น
pathinfo(__FILE__,PATHINFO_FILENAME)
จะทำสิ่งที่คุณต้องการ
$ argv [0]
$argv[0]
ฉันได้พบมันง่ายมากที่จะใช้ ชื่อของสคริปต์ดำเนินการมักจะเป็นองค์ประกอบแรกใน$argv
อาร์เรย์ แตกต่างจากวิธีอื่น ๆ ทั้งหมดที่แนะนำในคำตอบอื่น ๆ วิธีนี้ไม่จำเป็นต้องใช้basename()
เพื่อลบทรีไดเรกทอรี ตัวอย่างเช่น:
echo __FILE__;
ส่งคืนสิ่งที่ชอบ /my/directory/path/my_script.php
echo $argv[0];
ผลตอบแทน my_script.php
ลองสิ่งนี้
$current_file_name = $_SERVER['PHP_SELF'];
echo $current_file_name;
สิ่งนี้ใช้ได้สำหรับฉันแม้ว่าจะทำงานในไฟล์ PHP ที่รวมอยู่และคุณต้องการชื่อไฟล์ของไฟล์ php ปัจจุบันที่กำลังทำงานอยู่:
$currentPage= $_SERVER["SCRIPT_NAME"];
$currentPage = substr($currentPage, 1);
echo $currentPage;
ผลลัพธ์:
index.php
$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js
__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
อย่างที่บางคนพูดbasename($_SERVER["SCRIPT_FILENAME"], '.php')
และbasename( __FILE__, '.php')
เป็นวิธีทดสอบที่ดี
สำหรับฉันโดยใช้วิธีที่สองคือคำตอบสำหรับการตรวจสอบความถูกต้องบางอย่างที่ฉันทำ