หากฉันมีสคริปต์ 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')เป็นวิธีทดสอบที่ดี
สำหรับฉันโดยใช้วิธีที่สองคือคำตอบสำหรับการตรวจสอบความถูกต้องบางอย่างที่ฉันทำ