زبان برنامه نویسی php تابع های معرکه ای برای مدیریت فایل های یک دایرکتری یا فولدر خاص دارد . تابع های سفارشی و کد های مثال زیر به شما نحوه نمایش لیست فایل ها در php را با یک مثال واقعی نشان میدهد.
نمایش لیست فایل ها در php و ذخیره در دیتابیس MySQL
اسکریپت php زیر یک مثال از به دست آوردن لیست فایل های موجود در یک پوشه و ذخیره تک تک آنها در جدولی از دیتابیس mysql است . قابلیت های دیگر این اسکریپت :
- ذخیره زمان آخرین تغییر در دیتابیس
- لیست تمام فایل هایی که در دیتابیس ذخیره نشدند ، در آرایه ای از خطاها ذخیره می شود .
استفاده از کد php زیر برای کار با فایل ها و دایرکتوری ها بسیار ساده است . کافیست تنها اسکریپت مورد نظر را در فولدری که قصد دریافت لیست فایل های آن را دارید قرار بدید و بعد آن را از طریق مرورگر اجرا کنید .
تشریح اسکریپت php نمایش لیست فایل ها
ساخت جداول دیتابیس :
کد SQL ساخت جدول example با فیلد های مورد نیاز
1 2 3 4 5 6 7 |
CREATE TABLE IF NOT EXISTS example ( id bigint(20) unsigned NOT NULL auto_increment, filename varchar(255) NOT NULL default '', lastdate datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (id), FULLTEXT KEY domain (filename) ) TYPE=MyISAM; |
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
ساخت کانکشن دیتابیس :
1 |
$db = new mysqli('localhost', 'username', 'password', 'databasename'); |
برای آشنایی با اتصال به دیتابیس mysqli با php کلیک کنید
این تابع لیست فایل های دیرکتری ای که به عنوان ورودی تابع تعیین کردید ، دریافت و یک آرایه شامل همه فایل های آن را return (برگشت) می دهد .
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function select_files($dir) { if (is_dir($dir)) { if ($handle = opendir($dir)) { $files = array(); while (false !== ($file = readdir($handle))) { if (is_file($dir.$file) && $file != basename($_SERVER['PHP_SELF'])) $files[] = $file; } closedir($handle); if (is_array($files)) sort($files); return $files; } } } |
بعد اسم فایل و تاریخ آخرین تغییر را فایل را در دیتابیس INSERT می کنیم .
1 2 3 4 5 6 7 8 |
function insert_record($name, $mod_date) { $sql = sprintf("INSERT INTO example SET filename = '%s', lastdate = '%s'", $name, $mod_date); if ($db->query($sql)) { return true; } else { return false; } } |
در این خط مسیر فایل را در متغییر $path ذخیره می کنیم .
1 |
$path = dirname(__FILE__); |
اسلش های بریده بریده را چک می کنیم و در صورت نیاز جایگرین slash مناسب با نوع لینوکسی یا ویندوزی می کنیم .
1 |
$path .= (substr($path, 0, 1) == "/") ? "/" : "\\"; |
دریافت لیست فایل های پوشه مورد نظر :
1 |
$file_array = select_files($path); |
ساخت چندین آرایه و متغییر برای دریافت تعداد فایل ها
1 2 3 |
$num_files = count($file_array); $success = 0; $error_array = array(); |
اگر تعداد فایل های فولدر موردنظر خالی نبود شرط زیر اجر می شود .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if ($num_files > 0) { foreach ($file_array as $val) { $fdate = date("Y-m-d", filectime($path.$val)); if (insert_record($val, $fdate)) { $success++; } else { $error_array[] = $val; } } echo "Copied ".$success." van ".$num_files." files..."; if (count($error_array) > 0) echo "\n\n<blockquote>\n".print_r($error_array)."\n</blockquote>"; } else { echo "No files or error while opening directory"; } |
ترتیب بندی و حذف فایل های پوشه در php
این تابع لیست فایل های یک پوشه را دریافت می کند . هر دفعه که یک فایل جدید ساخته شد ، اگر محدودیت تعداد مورد نظر پر شده بود ، یکی از فایل های قبلی حذف می شود (با استفاده از تابع unlink) .
پارامتر دوم ، اختیاری است و مقدار محدودیت را تعیین می کند
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php function get_oldest_file($directory) { if ($handle = opendir($directory)) { while (false !== ($file = readdir($handle))) { if (is_file($directory.$file)) { // add only files to the array (ver. 1.01) $files[] = $file; } } if (count($files) <= 12) { return; } else { foreach ($files as $val) { if (is_file($directory.$val)) { $file_date[$val] = filemtime($directory.$val); } } } } closedir($handle); asort($file_date, SORT_NUMERIC); reset($file_date); $oldest = key($file_date); return $oldest; } |
نحوه استفاده :
1 |
echo get_oldest_file("/path/to/your/directory/", 8); |
در آموزش نمایش لیست فایل ها در php سعی کردیم روش کار نمایش فایل های درون یک پوشه و چندین تابع دیگر مربوط به مدیریت فایل ها در php را به شما در قالب مثال نمایش بدیم . در آموزش قبلی نیز با تابع glob و unlink برای دریافت لیست فایل ها و همچنین حذف آنها آشنا شدیم .
امیدوارم از این آموزش هم لذت برده باشید . این موارد را می توانید در پروژه هایی که مربوط به مدیریت فایل های کاربران است استفاده کنید به اینصورت که آن را به صورت php cli در cron job استفاده کنید تا فضای هاست شما پر نشود.
هر گونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
سلام. بسیار اموزش کاربردی بود. بدون داشتن دیتابیس چطور میشه اینکارو کرد؟هاست های دانلود دیتابیس ندارن.یا اگه بشه ریموت به دیتابیس یه هاست دیگه وصلش کرد.
سلام. خوشحالیم که مفید واقع شده
خروجی تابع که لیست فایل ها هست رو بصورت json_encode کنید و با file_put_contents داخل یک فایل ذخیره کنید
سلام
چطور یک پوشه رو به طور کامل از وب کپی یا zip کنم؟
لطفا راهنمایی کنید
سلام. از این کد استفاده کنید:
سلام و وقت بخیر!
من یک کدی نیاز دارم که فقط پوشه هارو نشون بده !
لطفاً کامل بگذارید&
سلام ممنون.
از تابع glob و اضافه کردن فلگ GLOB_ONLYDIR بصورت زیر استفاده کنید
$directories = glob(“$dir/*” , GLOB_ONLYDIR);
چیزی نشون میده!
باید php متوسط رو بلد باشید. اینجوری نمیتونید با کد خروجی بگیرید
سلام.
چگونه میشه تمام پوشه های دایرکتوری رو دریافت کنیم؟
سلام با استفاده از تابع glob و اضافه کردن فلگ GLOB_ONLYDIR
$directories = glob(“$dir/*” , GLOB_ONLYDIR);
کمی باز تر بیان کنید!
باسلام خسته نباشید استاد
ببخشید من یک سوال داشتم
اگه امکان داره من بیشتر راهنمای کنید ممنونم میشم
من یک هاست داریم من میخوام باURLنام آخرین فایل موجود در هاست رو دریافت کنم راهنمای کنید ممنونم میشم
میشه من راهنمایی کنید ممنونم
متاسفانه بیشتر از این نمیشه راهنمایی کرد. بهتره php متوسط یاد بگیرید یا اگر پروژه هست به یکی بسپارید
سلام من میخواهم نام آخرین فایل موجود در یک ip سرور پیدا کنم وبعد کپی کنم رو هاست خودم میشه ؟ راهنمای کنید ؟
پاسخ نداره؟؟چکارکنم؟؟
سلام. سوال شما مشخص نیست همچنین چون دسترسی به هاست نیست نمیتونید تاریخ فایل ها رو دربیارید و بر این اساس مرتب کنید.
https://netparadis.com/web-scraping-php/
ممنون
من به هاست وتاریخ و ساعت ها دسترسی دارم و کامل میشه دید فیل ها رودید
عکس در واتساپ ارسال میکنم
با این کد میتونید نام جدیدتری یا همان آخرین فایل اضافه شده رو دریافت کنید
$files = scandir(‘data’, SCANDIR_SORT_DESCENDING);
$newest_file = $files[0];
بعد نام فایل رو به آدرس دامنه به همراه فولدر بچسابانید مثلا $url = “site.com/folder/$newest_file”;
بعد با این آموزش میتونید دانلود کنید https://netparadis.com/force-download-php
همچنین توجه کنید ایمیل بدون www. هست و درست در سایت ثبت کنید
خیلی خیلی ممنونم فقط یک سوال دیگه داشتم
من میخوام در هاست دوم پوشه هاست اول دریافت کنم اون رو چه چوری بنویسم ؟
ممنونم میشم راهنمای کنید
جواب نداره ؟
میشه کاری کرد یا نه؟
متاسفانه بیشتر از این نمیشه راهنمایی کرد بهتره php متوسط رو یاد بگیرید