زبان php شامل توابعی برای کار با پوشه ها در php مثل لیست محتویات دایرکتری ، ساخت / حذف و دیگر عملیات را در اختیار ما قرار می دهد .
توابع پایه کار با پوشه ها در php به صورت زیر لیست شده اند :
- mkdir() – ساخت پوشه جدید
- opendir() – باز کردن دایرکتری
- readdir() – خواندن یک دایرکتری بعد از باز کردن آن
- closedir() – بستن دایرکتری بعد از بازکردن
- rmdir() – حذف دایرکتری
در مقاله آموزشی معرفی توابع کار با پوشه ها در php ، قصد داریم در مورد هریک از توابع بالا صحبت کنیم و مثال هایی را در باره هر کدام به همراه پارامترهای ورودی مطابق با مثال خودمان ببینیم.
ساخت پوشه جدید
برای ساخت یک دایرکتری جدید با زبان اسکریپت نویسی php ، از تابع mkdir به صورت زیر استفاده می کنیم.
1 |
mkdir($directory_path,$mode,$recursive_flag,$context); |
تابع mkdir ، چهار آرگومان مشخص را دریافت می کند ، در بین آنها ، اولین آرگومان اجباری است و بقیه موارد اختیاری است .
- $directory_path – با مشخص کردن مسیر نسبی (relative) و یا کامل (absolute) ، یک پوشه جدید در مسیر مورد نظر ساخته می شود .
- $mode – پارامتر mod ، مقادیر اوکتال (octal) را که به مسیر ساخته بستگی دارد ، می پذیرد
- $recursive – این پارامتر یک پرچم (flag) است و مقدار آن true یا false می باشد که مقدار true اجازه ساخت پوشه های تو در تو را می دهد .
- $context – شبیه به تابع unlink در php که یک استریم برای مشخص کردن پروتکل مورد نظر و غیره .. داریم .
این تابع مقدار بولین (boolean) را برگشت می دهد ، اگر عملیات موفقیت آمیز باشد ، true در غیر اینصورت false را return می کند .
لیست محتوایت دایرکتری در php
برای لیست کردن محتویات دایرکتری ، به توابع کار با پوشه ها در php که بالا اشاره کردیم نیاز داریم . این توابع opendir و readdir هستند .
در لیست کردن محتویات دایرکتری باید دو قدم زیر را انجام بدیم
- قدم اول : باز کردن دایرکتری
- قدم دوم : خواندن محتویات به صورت لیست شده و یک به یک توسط حلقه ها
قدم اول : باز کردن دایرکتری
همانطور که اسم تابع مشخص است ، تابع opendir برای این مرحله استفاده می شود . و ، دارای دو آرگومان است ، یکی برای مشخص کردن مسیر پوشه موردنظر و دیگری اختیاری است که یک استریم را دریافت می کند .
سینتکس کلی به اینصورت است :
1 |
opendir($directory_path,$context); |
برخلاف تابع mkdir که یک مقدار boolean را برگشت می دهد ، تابع opendir داده هایی مثل خروجی fopen، mysqli_query و.. غیره را return می کند . بعد از دریافت مقدار خروجی ، می توانیم مراحل را برای خواندن محتویات پوشه دنبال کنیم .
قدم دوم : خواندن محتویات دایرکتری
برای این مرحله از تابع readdir() در یک حلقه استفاده می کنیم و این مورد را تا زمانیکه به انتها برسیم ، ادامه می دهیم .
1 2 3 4 |
$directory_handle = opendir($directory_path); while($directory_item = readdir($directory_handle)) { echo $directory_item . "<br>"; } |
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
با اجرای کد php بالا در هر خط یکی از موارد داخل دایرکتری چاپ می شود .
بنابراین با اجرای کد بالا و استفاده به دو تابع opendir و readdir می توانیم به راحتی محتوایت یک پوشه را بخوانیم .
بستن یک دایرکتری
بعد از بازکردن دایرکتری برای انجام عملیاتی مثل خواندن محتویات ، زمان این است که آن را ببندیم تا منابع سرور بیشتر درگیر نشوند . برای مثال به اینصورت :
1 2 3 4 |
$directory_handle = opendir($directory_path); ... ... closedir($directory_handle); |
در انتهای کد آن را با تابع closedir() می بندیم .
حذف پوشه در php
در مقاله های قبل (مدیریت فایل ها در php) ، حذف یک فایل از دایرکتری با تابع unlink در php را دیدیم .مشابه آن ، برای حذف کل یک پوشه ، php تابعی به اسم rmdir با همان آرگومان های مشابه تابع mkdir معرفی کرده است .
1 |
rmdir($directory_path,$mode,$recursive_flag,$context); |
اما ، این تابع برای حذف یک دایرکتری که خالی باشد ، استفاده می شود . برای حذف یک دیرکتری با فایل های درون آن ، کاربر باید یک تابع برای حذف تک تک فایل های درون یک دایرکتری به صورت تو در تو بنویسد و بعد تابع rmdir را که جزء توابع کار با پوشه ها در php را فراخوانی کند .
مثال جامع : توابع کار با پوشه ها در php
در این اسکریپت php قصد به کار بردن توابع برای ساخت یک دایرکتری جدید ، باز کردن و خواندن محتویات آن با یک حلقه و در نهایت بستن آن برای جلوگیری از پرشدن منابع سخت افزاری را داریم .
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php mkdir("php_directory_functions_manual",0777); /*Creating files into php_directory_functions_manual*/ $file_pointer1 = fopen("php_directory_functions_manual/mkdir.txt","x"); $file_pointer2 = fopen("php_directory_functions_manual/rmdir.txt","x"); fclose($file_pointer1); fclose($file_pointer2); $directory_handle = opendir("php_directory_functions_manual"); while($directory_item = readdir($directory_handle)) { echo $directory_item . "<br>"; } closedir($directory_handle); ?> |
کد php بالا ، لیستی از فایل های ساخته شده با تابع fopen را برگشت می دهد .
1 2 3 4 |
. .. mkdir.txt rmdir.txt |
و حالا یک مثال دیگر برای حذف یک دایرکتری با محتویات درون آن را می بینیم :
1 2 3 4 5 6 7 8 |
<?php $directory_handle = opendir("php_directory_functions_manual"); while($directory_item = readdir($directory_handle)) { @unlink("php_directory_functions_manual/".$directory_item); } closedir($directory_handle); rmdir("php_directory_functions_manual"); ?> |
برای هریک از محتویات داخل پوشه مورد نظر ، تابع unlink برای حذف فایل ها به کار می رود و بعد از خالی شدن دایرکتری ، از تابع rmdir برای حذف پوشه خالی استفاده می کنیم .
نکته :
- اگر یک بار از تابع opendir در اسکریپت php خود استفاده کنیم ، نیازی به پاس دادن مقدار خروجی آن که در یک متغییر ذخیره کردیم به توابع readdi() , closedir() و غیره .. نداریم . چونکه این توابع به طور پیش فرض به پوشه ای که باز شده و در مموری ذخیره شده است اشاره می کنند . بنابراینت فقط در صورت متغییر را به عنوان ورودی توابع بالا تعریف می کنیم که چندین بار از تابع opendir برای باز کردن پوشه استفاده کرده باشیم .
- برای دریافت نتیجه موفقیت آمیز از توابع unlink و rmdir ، باید پرمشین های لازم برای تغییر فولدر مورد نظر (۶۴۴-۷۵۵) را داشته باشیم .
امیدوارم آموزش توابع کار با پوشه ها در php برای شما مفید بوده باشه و بتونید در پروژه ها به سادگی از آن استفاده کنید .
هر مشکلی در پیاده سازی موارد بالا داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
با سلام!
اگه بخوایم نام یک فولدر رو عوض کنیم باید از چه تابعی استفاده بکنیم؟
سلام.
استفاده از تابع rename()