วิธีตรวจสอบว่ามีไฟล์ php อยู่หรือไม่ ตรวจสอบการมีอยู่ของไฟล์ใน PHP การใช้ฟังก์ชันในทางปฏิบัติ

พารามิเตอร์ที่จำเป็นสำหรับฟังก์ชันนี้คือชื่อพาธ ซึ่งระบุเส้นทางไปยังไดเร็กทอรีที่จะสร้าง

เอ็มเคดิร์( "โฟลเดอร์ใหม่" );

หากคุณระบุโฟลเดอร์ด้วยวิธีนี้ โฟลเดอร์นั้นจะถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับที่สคริปต์ PHP ถูกเรียกใช้ หากคุณต้องการสร้างไดเร็กทอรีในตำแหน่งอื่น คุณสามารถระบุพาธสัมพันธ์ไปยังโฟลเดอร์ที่กำลังสร้าง หรือระบุพาธแบบเต็มจากไดเร็กทอรีรากของไซต์ได้

เอ็มเคดิร์( "../โฟลเดอร์ใหม่" ); // ลงไปหนึ่งระดับ

mkdir("/folder1/folder2/newfolder" ); //เส้นทางเต็ม

ในตัวอย่างสุดท้าย สิ่งที่จำเป็นต้องมีคือการมีไดเร็กทอรีย่อย "folder1" และ "folder2" หากไม่มีอยู่ ฟังก์ชันในแบบฟอร์มนี้จะไม่สามารถสร้างโฟลเดอร์ได้และจะส่งคืนข้อผิดพลาด:

คำเตือน: mkdir() : ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าวใน ...

หากสำเร็จ ฟังก์ชันจะส่งกลับ True หากไม่ได้สร้างแพ็ก จะส่งกลับค่าเท็จ

ถ้า (mkdir("โฟลเดอร์ใหม่"))
เสียงสะท้อน "สร้างโฟลเดอร์สำเร็จแล้ว";
อื่น
เสียงสะท้อน "ไม่ได้สร้างโฟลเดอร์";

แต่คุณไม่ควรใช้ฟังก์ชันนี้โดยไม่ตรวจสอบว่ามีโฟลเดอร์อยู่หรือไม่ เนื่องจากเซิร์ฟเวอร์จะยังคงแสดงข้อผิดพลาดว่าไม่สามารถสร้างโฟลเดอร์ได้

การกำหนดสิทธิ์เมื่อสร้างโฟลเดอร์

พารามิเตอร์ทางเลือกตัวที่สองของฟังก์ชัน mkdir มีหน้าที่รับผิดชอบในการกำหนดสิทธิ์ให้กับโฟลเดอร์ที่สร้างขึ้น ตามค่าเริ่มต้น สิทธิ์สูงสุดจะถูกกำหนด – 0777

สิทธิ์ถูกกำหนดโดยใช้ค่าฐานแปดโดยมีศูนย์นำหน้าบังคับ นอกเหนือจากศูนย์ตัวแรกแล้ว ตัวเลขยังแสดงถึงระดับการเข้าถึงสำหรับเจ้าของ สำหรับกลุ่มของเจ้าของ และสำหรับคนอื่นๆ ทั้งหมด

0 – การเข้าถึงถูกปฏิเสธ;

1 – การเข้าถึงเพื่ออ่าน;

2 – การเข้าถึงการเขียน;

4 – การเข้าถึงการดำเนินการ

ส่วนใหญ่แล้ว สิทธิ์จะถูกระบุเป็นจำนวนรวม เช่น:

7 – การเข้าถึงแบบเต็ม (1+2+4);

5 – การอ่านและการดำเนินการ (1+4)

เอ็มเคดิร์( "โฟลเดอร์ใหม่" , 0777); // เข้าถึงได้อย่างเต็มที่สำหรับทุกคน

การสร้างไดเร็กทอรีย่อยที่ซ้อนกันหลายรายการ

คุณสามารถสร้างโฟลเดอร์ย่อยได้หลายโฟลเดอร์พร้อมกันโดยเพียงระบุพารามิเตอร์บูลีนเสริมอื่น – แบบเรียกซ้ำ

mkdir("folder1/folder2/newfolder" , 0777, จริง ); // เข้าถึงได้อย่างเต็มที่สำหรับทุกคน

ในกรณีนี้ หากไม่มีโฟลเดอร์ "folder1" และ "folder2" ฟังก์ชันจะสร้างทั้งโฟลเดอร์เหล่านั้นและโฟลเดอร์ "newfolder" หากไม่มีปัญหาอื่นๆ เกิดขึ้น จะไม่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้น และฟังก์ชันจะส่งกลับค่า True

กำลังลบโฟลเดอร์

โฟลเดอร์ว่างใน PHP สามารถลบได้โดยใช้ฟังก์ชัน rmdir พารามิเตอร์ dirname ยังระบุพาธแบบเต็มหรือพาธสัมพันธ์ไปยังไดเร็กทอรีที่ต้องการลบ:

rmdir( "โฟลเดอร์ของฉัน" );

rmdir("folder1/folder2/myfolder" );

ในแต่ละกรณี เฉพาะโฟลเดอร์ "myfolder" เท่านั้นที่ถูกลบ หากไม่มีโฟลเดอร์หรือระบุเส้นทางไม่ถูกต้อง ข้อผิดพลาดจะปรากฏขึ้น:

คำเตือน: rmdir(myfolder) : ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าวใน ...

การลบโฟลเดอร์ที่ไม่ว่างเปล่า

การลบไดเร็กทอรีที่ไม่ว่างเปล่าทำได้โดยการลบไฟล์ย่อยในโฟลเดอร์ด้วยฟังก์ชัน unlink ตามลำดับ จากนั้นจึงลบโฟลเดอร์ว่างด้วยฟังก์ชัน rmdir คุณสามารถใช้ฟังก์ชันเช่นนี้เพื่อทำสิ่งนี้:

ฟังก์ชั่น my_delete_dir($mypath)(
$dir = opendir($mypath);
ในขณะที่ (($file = readdir($dir)))(
ถ้า (is_file($mypath."/" .$file))
ยกเลิกการเชื่อมโยง($mypath. "/" .$ไฟล์);
elseif (is_dir($mypath"/" .$file) && ($file != "." ) && ($file != ".." ))
my_delete_dir($mypath"/" .$file);
}
ปิด($dir);
rmdir($mypath);
}

my_delete_dir("โฟลเดอร์ของฉัน" ); // การเรียกใช้ฟังก์ชัน

การตรวจสอบการมีอยู่ของไดเร็กทอรี

ก่อนที่จะดำเนินการกับไดเร็กทอรีส่วนใหญ่ ควรตรวจสอบว่ามีอยู่หรือไม่ ฟังก์ชัน file_exists ใช้สำหรับสิ่งนี้

นอกจากนี้ คุณต้องตรวจสอบให้แน่ใจว่าวัตถุที่ระบุนั้นเป็นโฟลเดอร์ ไม่ใช่ไฟล์ - ฟังก์ชัน is_dir โฟลเดอร์ที่จะสแกนจะถูกระบุโดยเส้นทางแบบสัมพันธ์หรือแบบเต็ม

ถ้า (file_exists("myfolder"))
เสียงสะท้อน "มีโฟลเดอร์ที่ระบุอยู่";
อื่น
เสียงสะท้อน "ไม่มีโฟลเดอร์ที่ระบุ";

ถ้า (is_dir("myfolder"))
เสียงสะท้อน "วัตถุโฟลเดอร์ที่ระบุ";
อื่น
เสียงสะท้อน "วัตถุที่ระบุไม่ใช่โฟลเดอร์";

การใช้ฐานข้อมูลอย่างแพร่หลายไม่ได้ทำให้ระบบไฟล์ทั่วไปไม่เกี่ยวข้อง การเขียนและการอ่านไฟล์ยังคงเป็นส่วนสำคัญในการเขียนโปรแกรม

อัลกอริทึมในการตรวจสอบการมีอยู่ของไฟล์ช่วยให้คุณหลีกเลี่ยงข้อผิดพลาดเมื่อรันโค้ด ฟังก์ชัน PHP file_exists นำเสนอวิธีแก้ปัญหาง่ายๆ สำหรับการตรวจสอบการมีอยู่ของไฟล์หรือไดเร็กทอรี

ไวยากรณ์และการใช้ฟังก์ชัน file_exists

ผลลัพธ์ของฟังก์ชันเป็นจริงหรือเท็จ พารามิเตอร์เดียวคือชื่อไฟล์และเส้นทางไปยังไฟล์นั้น ผลลัพธ์ของฟังก์ชันถูกแคชไว้ เนื่องจากหาก PHP file_exists ไม่ทำงาน แต่มีไฟล์อยู่จริง แสดงว่านี่เป็นข้อผิดพลาดของอัลกอริทึม

ด้วยการใช้ฟังก์ชัน clearstatcache() คุณสามารถหลีกเลี่ยงข้อผิดพลาดมากมายในการตรวจสอบสถานะของระบบไฟล์ที่สามารถเข้าถึงได้ แต่โปรดทราบว่าในไฟล์ที่ไม่มีอยู่ PHP file_exists จะส่งคืนค่า false จนกว่าไฟล์ที่คุณกำลังมองหาจะถูกสร้างขึ้น จากนั้นจะส่งคืนค่าจริงแม้ว่าจะถูกลบไปแล้วก็ตาม

การผสมผสานที่ถูกต้องของฟังก์ชัน clearstatcache() และฟังก์ชันที่เกี่ยวข้องกับระบบไฟล์ (เช่น is_writable(), is_readable(), is_executable(), is_file(), is_dir() และอื่นๆ ช่วยให้คุณหลีกเลี่ยงการเรียกใช้สคริปต์ที่ "ซ่อนไว้" ข้อผิดพลาด

การแคชช่วยปรับปรุงประสิทธิภาพของระบบได้อย่างมาก แต่ในบางกรณีก็สามารถสร้างผลลัพธ์ที่ไม่น่าเชื่อถืออย่างแท้จริงในไฟล์สำคัญ และทำให้เกิดข้อผิดพลาดรันไทม์ที่ร้ายแรงและยากต่อการตรวจจับ

พารามิเตอร์ฟังก์ชัน PHP file_exists

PHP สามารถติดตั้งได้บนแพลตฟอร์มคอมพิวเตอร์ที่แตกต่างกัน ดังนั้นพาธและชื่อไฟล์จึงอาจแตกต่างกัน

เอกสารระบุว่าการตรวจสอบ PHP ตาม UID/GID แทนที่จะเป็นตัวระบุที่มีประสิทธิภาพ การพัฒนาอัลกอริทึม โดยใช้ PHP file_exists คุณควรใส่ใจไม่เพียง แต่เครื่องหมายทับที่ถูกต้อง (ไปข้างหน้าหรือข้างหลัง) การเข้ารหัสเส้นทางไปยังไฟล์และชื่อของไฟล์เท่านั้น แต่ยังตรวจสอบการมีอยู่ของการลงทะเบียนที่จำเป็น อักขระที่ถูกต้อง สิทธิ์การเข้าถึง และสถานการณ์อื่นๆ

ผลลัพธ์เชิงลบอาจได้รับผลกระทบจากการเข้ารหัสไฟล์สคริปต์ และอาจจำเป็นต้องแปลงสตริงอักขระที่ดึงมาจากฐานข้อมูล

การใช้ฟังก์ชันในทางปฏิบัติ

การใช้งาน สคริปต์ PHPแตกต่างกันอย่างมีนัยสำคัญ นี่ไม่ได้หมายความว่า PHP file_exists ใช้เพื่อจัดเก็บข้อมูลระบบ ไฟล์ข้อมูล วัตถุ หรือรูปภาพที่สร้างขึ้นแบบไดนามิกเท่านั้น

มีกรณีที่พบบ่อยในการใช้การสตรีมข้อมูลชั่วคราวปริมาณมากที่ไม่ได้ถูกวางลงในฐานข้อมูลอย่างมีประสิทธิภาพในทันที ข้อมูลจากผู้เยี่ยมชมหลายรายสามารถไหลไปยังไซต์ได้ และหลังจากการประมวลผลเบื้องต้นในช่วงระยะเวลาหนึ่งเท่านั้น ข้อมูลที่จำเป็นจะต้องวางไว้ในตารางฐานข้อมูล

การอ่าน ไฟล์ระบบอาจทำให้เกิดแคชเนื่องจากการรีเฟรชหลายหน้าหรือการกระทำของผู้เยี่ยมชมที่ไม่ถูกต้อง ในความเป็นจริงมีสถานการณ์ค่อนข้างมาก แต่เมื่อใช้อย่างถูกต้อง ฟังก์ชันนี้จะช่วยให้คุณสามารถเขียนโค้ดที่ปลอดภัยและเชื่อถือได้

มีบางครั้งที่คุณต้องตรวจสอบว่ามีไฟล์ที่ระบุอยู่หรือไม่ เช่น เพื่อดำเนินการบางอย่างกับไฟล์ในภายหลัง

ฉันยังพบปัญหานี้เมื่อพัฒนาโมดูล และฉันพบสองทางเลือกในการแก้ปัญหา

การตรวจสอบการมีอยู่ของไฟล์โดยใช้ลิงก์ URL

ใน PHP มีฟังก์ชั่น " โฟเพน" ซึ่งสามารถใช้เพื่อเปิด URL ที่ระบุได้

เรากำลังทำอะไรอยู่? เราพยายามเปิดไฟล์ และหากเราทำสำเร็จ ไฟล์นั้นก็จะมีอยู่ มิฉะนั้น ไฟล์นั้นก็จะไม่มีอยู่จริง

การนำไปปฏิบัติ:

แต่จะเกิดอะไรขึ้นถ้าเราไม่มีไฟล์เดียว แต่มีลิงก์หลายชุดล่ะ? นี่เป็นงานที่ยืนอยู่ตรงหน้าฉันตั้งแต่แรกเริ่ม และวิธีการแก้ไขปัญหานี้มีดังนี้:

ในกรณีนี้ เราได้รับรายการเฉพาะไฟล์ที่มีอยู่เท่านั้น

การตรวจสอบการมีอยู่ของไฟล์ในเครื่อง

คำว่า "ท้องถิ่น" หมายความว่าสคริปต์และไฟล์สำหรับการตรวจสอบอยู่บนเซิร์ฟเวอร์เดียวกัน หากคุณมีลิงก์จำนวนมาก ตัวเลือกนี้เหมาะที่สุดสำหรับการแก้ปัญหา เนื่องจากเราไม่ได้ส่งคำขอ เซิร์ฟเวอร์ของบุคคลที่สามแต่กำลังสแกนไดเร็กทอรีที่ระบุ

วิธีการนี้ใช้ฟังก์ชัน "file_exists" และโดยการเปรียบเทียบกับตัวเลือกก่อนหน้า เพียงแทนที่ส่วนหนึ่งของสคริปต์:

และเช่นเดียวกันสำหรับอาร์เรย์ลิงก์:

มันคุ้มค่าอะไร ใส่ใจ- ความจริงที่ว่าวิธีนี้สะดวกสำหรับการเรียกใช้ไฟล์ที่อยู่ในระบบไฟล์ของเรา ดังนั้นจึงแนะนำให้ระบุลิงก์ทั้งหมดเป็นลิงก์ที่เกี่ยวข้อง

อย่างไรก็ตาม เมื่อทำการสั่งซื้อรายการใดรายการหนึ่ง ด้วยวิธีนี้ฉันสามารถสแกนไฟล์ได้ประมาณ 135,000 ไฟล์ในเวลาเพียงไม่กี่วินาที

มีบางครั้งที่คุณต้องตรวจสอบว่ามีไฟล์ที่ระบุอยู่หรือไม่ เช่น เพื่อดำเนินการบางอย่างกับไฟล์ในภายหลัง

ฉันยังพบปัญหานี้เมื่อพัฒนาโมดูล และฉันพบสองทางเลือกในการแก้ปัญหา

การตรวจสอบการมีอยู่ของไฟล์โดยใช้ลิงก์ URL

ใน PHP มีฟังก์ชั่น " โฟเพน" ซึ่งสามารถใช้เพื่อเปิด URL ที่ระบุได้

เรากำลังทำอะไรอยู่? เราพยายามเปิดไฟล์ และหากเราทำสำเร็จ ไฟล์นั้นก็จะมีอยู่ มิฉะนั้น ไฟล์นั้นก็จะไม่มีอยู่จริง

การนำไปปฏิบัติ:

แต่จะเกิดอะไรขึ้นถ้าเราไม่มีไฟล์เดียว แต่มีลิงก์หลายชุดล่ะ? นี่เป็นงานที่ยืนอยู่ตรงหน้าฉันตั้งแต่แรกเริ่ม และวิธีการแก้ไขปัญหานี้มีดังนี้:

ในกรณีนี้ เราได้รับรายการเฉพาะไฟล์ที่มีอยู่เท่านั้น

การตรวจสอบการมีอยู่ของไฟล์ในเครื่อง

คำว่า "ท้องถิ่น" หมายความว่าสคริปต์และไฟล์สำหรับการตรวจสอบอยู่บนเซิร์ฟเวอร์เดียวกัน หากคุณมีลิงก์จำนวนมาก ตัวเลือกนี้เหมาะที่สุดสำหรับการแก้ปัญหา เนื่องจากเราไม่ได้ส่งคำขอไปยังเซิร์ฟเวอร์บุคคลที่สาม แต่กำลังสแกนไดเรกทอรีที่ระบุ

วิธีการนี้ใช้ฟังก์ชัน "file_exists" และโดยการเปรียบเทียบกับตัวเลือกก่อนหน้า เพียงแทนที่ส่วนหนึ่งของสคริปต์:

และเช่นเดียวกันสำหรับอาร์เรย์ลิงก์:

มันคุ้มค่าอะไร ใส่ใจ- ความจริงที่ว่าวิธีนี้สะดวกสำหรับการเรียกใช้ไฟล์ที่อยู่ในระบบไฟล์ของเรา ดังนั้นจึงแนะนำให้ระบุลิงก์ทั้งหมดเป็นลิงก์ที่เกี่ยวข้อง

อย่างไรก็ตาม เมื่อทำการสั่งซื้อรายการใดรายการหนึ่ง ด้วยวิธีนี้ฉันสามารถสแกนไฟล์ได้ประมาณ 135,000 ไฟล์ในเวลาเพียงไม่กี่วินาที

คำอธิบาย:

bool file_exists (สตริง $filename)

ตรวจสอบความพร้อม ไฟล์ที่ระบุหรือแคตตาล็อก

รายการพารามิเตอร์:

พาธไปยังไฟล์หรือไดเร็กทอรี

บนแพลตฟอร์ม Windows เพื่อตรวจสอบไฟล์ ทรัพยากรเครือข่ายให้ใช้ชื่อเช่น //ชื่อคอมพิวเตอร์/share/ชื่อไฟล์ หรือ \\ชื่อคอมพิวเตอร์\share\ชื่อไฟล์.

ส่งกลับค่า:

การส่งคืน จริงหากไฟล์หรือไดเร็กทอรีที่ระบุด้วยชื่อไฟล์มีอยู่ มิฉะนั้นจะส่งคืน เท็จ.

ความคิดเห็น:

ฟังก์ชันนี้ส่งคืน ฟอลส์ E ใช้สำหรับลิงก์สัญลักษณ์ที่ชี้ไปยังไฟล์ที่ไม่มีอยู่จริง

ความสนใจ!

หากไฟล์ไม่สามารถใช้งานได้เนื่องจากข้อจำกัดที่กำหนดโดย เซฟโหมด, ที่ ฟังก์ชั่นนี้จะกลับมา เท็จ- อย่างไรก็ตาม ไฟล์เหล่านี้ยังคงสามารถรวมได้หากอยู่ในไดเร็กทอรี safe_mode_include_dir

ความคิดเห็น:

ความคิดเห็น:

เนื่องจากประเภทจำนวนเต็มใน PHP เป็นจำนวนเต็มที่มีเครื่องหมาย และหลายแพลตฟอร์มใช้จำนวนเต็ม 32 บิต ฟังก์ชันระบบไฟล์บางฟังก์ชันอาจส่งคืนผลลัพธ์ที่ไม่คาดคิดสำหรับไฟล์ที่มีขนาดใหญ่กว่า 2GB

ตัวอย่าง:

ตัวอย่าง #1การตรวจสอบการมีอยู่ของไฟล์:

$filename = '/path/to/foo.txt'; if (file_exists($filename)) ( echo "ไฟล์ $filename มีอยู่"; ) else ( echo "ไฟล์ $filename ไม่มีอยู่"; )

file_exists

( PHP 3, PHP 4, PHP 5)

file_exists— ตรวจสอบการมีอยู่ของไฟล์หรือไดเร็กทอรีที่ระบุ

คำอธิบาย

บูล file_exists(ชื่อไฟล์สตริง)

ส่งคืนหากไฟล์หรือไดเร็กทอรีที่มีชื่อที่ระบุในพารามิเตอร์ชื่อไฟล์มีอยู่ กลับเป็นอย่างอื่น

บนแพลตฟอร์ม Windows หากต้องการตรวจสอบไฟล์ในการแชร์เครือข่าย ให้ใช้ชื่อเช่น หรือ

ตัวอย่างที่ 1: การตรวจสอบว่ามีไฟล์อยู่หรือไม่

ความคิดเห็น:ผลลัพธ์ของฟังก์ชันนี้ถูกแคชไว้ มากกว่า ข้อมูลรายละเอียดดูหัวข้อ ล้างสแตทแคช().

เบาะแส:ตั้งแต่ PHP 5.0.0 คุณลักษณะนี้สามารถใช้กับ url packer บางตัวได้ รายการ Wrapper ที่ตระกูลฟีเจอร์รองรับ สถิติ()โปรดดูภาคผนวก ม.

ดูคำอธิบายฟังก์ชันด้วย is_readable(), is_เขียนได้(), is_file()และ ไฟล์().

ดูเพิ่มเติมที่:
ไฟล์ฟังก์ชั่นทั้งหมด
คำอธิบายบน ru2.php.net
คำอธิบายบน php.ru

คุณต้องมีชื่อไฟล์ในเครื่องหมายคำพูดอย่างน้อยที่สุด (เป็นสตริง):

นอกจากนี้ตรวจสอบให้แน่ใจว่ามีการตรวจสอบอย่างถูกต้อง จากนั้นจะใช้งานได้เมื่อเปิดใช้งานในการกำหนดค่า PHP ของคุณเท่านั้น

ลองสิ่งนี้:

ตอนแรก คุณต้องการเข้าใจ: มี คุณไม่มีไฟล์ .
ไฟล์เป็นวัตถุ ระบบไฟล์แต่คุณกำลังส่งคำขอโดยใช้โปรโตคอล HTTP ซึ่งไม่รองรับไฟล์อื่นที่ไม่ใช่ URL

ดังนั้นคุณควรขอไฟล์ที่ไม่ได้ใช้โดยใช้เบราว์เซอร์ของคุณและดูโค้ดตอบกลับ

PHP ตรวจสอบการมีอยู่/มีอยู่ของไฟล์ระยะไกล

หากไม่ใช่ 404 คุณจะไม่สามารถใช้ wrappers ใด ๆ เพื่อดูว่ามีไฟล์อยู่หรือไม่และคุณต้องค้นหา cdn ของคุณโดยใช้โปรโตคอลอื่นเช่น FTP

ที่นี่ วิธีที่ง่ายที่สุดตรวจสอบว่ามีไฟล์อยู่หรือไม่:

มีความแตกต่างใหญ่ระหว่างและ

php.net/manual/en/function.is-file.php ส่งคืน true สำหรับไฟล์ (ปกติ):

การส่งคืน จริง,หากชื่อไฟล์มีอยู่และเป็นไฟล์ปกติ มิฉะนั้น เท็จ .

คืนค่าจริงสำหรับทั้งไฟล์และไดเร็กทอรี:

การส่งคืน จริง,หากมีไฟล์หรือไดเร็กทอรีที่ระบุด้วยชื่อไฟล์ เท็จในมิฉะนั้น.

บันทึก.สำหรับข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ โปรดตรวจสอบคำถามนี้โดยใช้

คุณสามารถใช้ cURL คุณอาจได้รับ cURL เพียงเพื่อให้ส่วนหัวไม่ใช่เนื้อหา ซึ่งอาจทำให้เร็วขึ้น โดเมนที่ไม่ถูกต้องอาจใช้เวลาสักครู่เสมอ เนื่องจากคุณจะต้องรอให้คำขอหมดเวลา คุณอาจเปลี่ยนระยะเวลาหมดเวลาได้โดยใช้ cURL

นี่คือตัวอย่าง:

ลองสิ่งนี้:

อ่านไม่เพียงแต่ไฟล์เท่านั้น แต่ยังรวมถึงเส้นทางด้วย ดังนั้นเมื่อว่างเปล่า คำสั่งจะทำงานเหมือนกับว่าเขียนไว้ดังนี้:

หากมีไดเร็กทอรี /images/ ฟังก์ชันจะยังคงส่งคืน

ฉันมักจะเขียนแบบนี้:

หากคุณใช้ curl คุณสามารถลองใช้สคริปต์ต่อไปนี้:

ส่งกลับค่า

ส่งคืนหากไฟล์หรือไดเร็กทอรีที่ระบุโดยพารามิเตอร์มีอยู่ มิฉะนั้นจะส่งคืน

ความคิดเห็น:

ฟังก์ชันนี้ส่งคืนลิงก์สัญลักษณ์ที่ชี้ไปยังไฟล์ที่ไม่มีอยู่จริง

จะตรวจสอบได้อย่างไรว่ามีไดเร็กทอรีอยู่ใน PHP และลบออกได้อย่างไร?

ความคิดเห็น:

การตรวจสอบความถูกต้องเกิดขึ้นโดยใช้ UID/GID จริง แทนที่จะเป็นตัวระบุที่มีประสิทธิภาพ

ความคิดเห็น: เนื่องจากประเภทจำนวนเต็มใน PHP เป็นจำนวนเต็มที่มีเครื่องหมายและหลายแพลตฟอร์มใช้จำนวนเต็ม 32 บิต ฟังก์ชันระบบไฟล์บางฟังก์ชันอาจส่งคืนผลลัพธ์ที่ไม่คาดคิดสำหรับไฟล์ที่มีขนาดใหญ่กว่า 2GB

ตัวอย่าง

ตัวอย่างที่ 1 การตรวจสอบว่ามีไฟล์อยู่หรือไม่

ข้อผิดพลาด

หากการดำเนินการล้มเหลว จะเกิดข้อผิดพลาดระดับขึ้น

  • is_readable() — กำหนดว่าไฟล์นั้นมีอยู่และสามารถอ่านได้หรือไม่
  • is_writable() - กำหนดว่าไฟล์สามารถเขียนได้หรือไม่
  • is_file() — กำหนดว่าไฟล์นั้นเป็นไฟล์ปกติหรือไม่
  • file() — อ่านเนื้อหาของไฟล์และวางลงในอาร์เรย์

กลับไปที่: ระบบไฟล์

การตรวจสอบการดำรงอยู่

PHP มีสองวิธีในการตรวจสอบว่ามีไดเร็กทอรีอยู่หรือไม่ อย่างแรกคือการใช้ฟังก์ชัน file_exists() หลักการทำงานของมันถูกกล่าวถึงก่อนหน้านี้ในบทความเกี่ยวกับสิทธิ์การเข้าถึง โปรดจำไว้ว่าฟังก์ชันรับพารามิเตอร์สตริงเพียงตัวเดียวเท่านั้น - เส้นทางไป ระบบไฟล์- แม้ว่าชื่อจะมีคำว่า "ไฟล์" แต่ก็ใช้งานได้ดีกับไดเร็กทอรี

วิธีที่สองเกี่ยวข้องกับฟังก์ชัน is_dir() ในตัว เช่นเดียวกับ file_exists() ยอมรับเส้นทางไดเร็กทอรีแบบสัมพัทธ์หรือแบบสัมบูรณ์ อย่างไรก็ตาม นอกเหนือจากการตรวจสอบการมีอยู่แล้ว ยังจะยืนยันข้อเท็จจริงด้วยว่าเป็นไดเรกทอรี ไม่ใช่ไฟล์ที่อยู่บนเส้นทางนี้ หากสตริงอธิบายตำแหน่งของลิงก์แบบฮาร์ดหรือสัญลักษณ์ is_dir() จะนำทางไปยังลิงก์นั้นและแยกวิเคราะห์จุดสิ้นสุดของเส้นทาง หากสำเร็จ ระบบจะส่งกลับค่าบูลีนจริง และหากไม่สำเร็จจะส่งกลับค่าเท็จ

//สร้างไดเร็กทอรีใหม่ในรูทของไซต์เพื่อตรวจสอบ $dirName = “($_SERVER['DOCUMENT_ROOT'])/directory”; if (!file_exists($dirName)) ( mkdir($dirName); ) var_dump(file_exists($dirName)); //ผลลัพธ์: bool(true) var_dump(is_dir($dirName)); //ผลลัพธ์: บูล(จริง)

บันทึก
ฟังก์ชั่นที่รับผิดชอบในการตรวจสอบไดเร็กทอรีที่มีอยู่อาจส่งคืนค่าเท็จหากไม่มีสิทธิ์ในการเข้าถึง สิ่งเหล่านี้ไม่ได้ขึ้นอยู่กับสคริปต์ PHP นี่คือระดับความรับผิดชอบของระบบปฏิบัติการ

การลบไดเร็กทอรี

หากต้องการลบไดเร็กทอรีใน PHP ให้ใช้ฟังก์ชัน rmdir() เนื่องจากเป็นพารามิเตอร์แรก จะต้องผ่านตำแหน่งของไดเร็กทอรี เช่นเดียวกับตัวอย่างข้างต้น ค่าบูลีนจริงหรือเท็จจะถูกส่งกลับ

การลบไดเร็กทอรีอาจดูเหมือนเป็นเรื่องง่าย อย่างไรก็ตาม ในกรณีส่วนใหญ่จะไม่เป็นเช่นนั้น ฟังก์ชัน rmdir() ใช้งานได้กับไดเร็กทอรีว่างเท่านั้น และส่งกลับค่าเท็จหากมีอย่างอื่นอยู่ ในกรณีนี้ คุณต้องใช้การลบแบบเรียกซ้ำ

//สร้างไดเรกทอรีชั่วคราวสำหรับการสาธิต $dirName = “($_SERVER['DOCUMENT_ROOT'])/directory”; if (!file_exists($dirName)) ( mkdir($dirName); ) if (rmdir($dirName)) ( echo 'ไดเร็กทอรีถูกลบเรียบร้อยแล้ว'; ) else ( echo 'ไม่สามารถลบไดเร็กทอรีได้'; )

การลบแบบเรียกซ้ำ

ไม่มีวิธีที่ง่ายในการลบไดเร็กทอรีทั้งหมด

ด้านล่างนี้เราให้สองตัวอย่างของการนำกลไกดังกล่าวไปใช้ สามารถบันทึกเป็นฟังก์ชันและนำไปใช้ได้ทุกที่ในโค้ด

วิธีแรกในการลบไดเร็กทอรีใน PHP คือการใช้ฟังก์ชันแบบเรียกซ้ำ นั่นคือฟังก์ชันที่เรียกตัวเองตราบใดที่ตรงตามเงื่อนไขบางประการ ลองดูตัวอย่างด้านล่าง มันค่อนข้างง่ายที่จะเข้าใจ

ตรวจสอบการมีอยู่ของไฟล์ใน php.ini

เราใช้ ฟังก์ชั่นมาตรฐาน scandir() เพื่อวนซ้ำเนื้อหาทั้งหมดของไดเร็กทอรี หากเราเจอไฟล์ เราจะเรียกใช้ฟังก์ชัน unlink() และหากพบไดเร็กทอรีอื่น เราจะใช้ชื่อไฟล์นั้นเพื่อทำการเรียกซ้ำ

//ตัวอย่างของฟังก์ชันสำหรับการลบไดเร็กทอรีที่กำหนดแบบวนซ้ำ ฟังก์ชัน DeleteDirectory($directoryName) ( $files = array_diff(scandir($directoryName), ['.', '..']); foreach ($files as $file) ( if (is_dir (“$directoryName/$file”)) ( DeleteDirectory(“$directoryName/$file”); ) else ( unlink(“$directoryName/$file”); ) ) return rmdir($directoryName);

PHP ยังมีคลาส RecursiveDirectoryIterator และ RecursiveIteratorIterator ในตัวอีกสองคลาส สามารถใช้เพื่อวนซ้ำระดับการซ้อนทั้งหมดของไดเร็กทอรีที่ระบุ โปรดทราบว่าเมื่อสร้างอินสแตนซ์ของคลาส RecursiveIteratorIterator เราจะใช้พารามิเตอร์ตัวที่สอง RecursiveIteratorIterator::CHILD_FIRST มันบังคับให้ไฟล์และไดเร็กทอรีทั้งหมดวนซ้ำโดยเริ่มจากไฟล์ที่ซ้อนกันมากที่สุด ด้วยวิธีนี้ คุณสามารถทำได้โดยไม่ต้องเรียกใช้ฟังก์ชันเรียกซ้ำอย่างชัดเจน

//ตัวอย่างฟังก์ชันที่ไม่ใช้ฟังก์ชันการเรียกแบบเรียกซ้ำ DeleteDirectory($directoryName) ( $iterator = new RecursiveDirectoryIterator($directoryName); $files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST); foreach ($files as $file) ( if (in_array($file->getFilename(), ['..', '.'])) ( Continue; ) ($file->isDir()) ? rmdir($file) : unlink( $ไฟล์); rmdir($ชื่อไดเรกทอรี);



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล