انجمن عمومی گسترش فناوری آگو
مدیریت فایلها در PHP قسمت دوم : مدیریت فایلها و پوشه ها - نسخه‌ی قابل چاپ

+- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir)
+-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1)
+--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13)
+--- موضوع: مدیریت فایلها در PHP قسمت دوم : مدیریت فایلها و پوشه ها (/showthread.php?tid=2278)



مدیریت فایلها در PHP قسمت دوم : مدیریت فایلها و پوشه ها - agotd - 01-07-2014 02:52 PM

در قسمت قبل با نحوه خواندن و نوشتن محتویات فایلهای متنی در PHP آشنا شدید.در این این قسمت به مدیریت فایلها و پوشه ها میپردازیم.

مباحثی که در این بخش خواهیم آموخت :

لیست کردن فایلها و پوشه ها
ایجاد پوشه جدید
کپی کردن فایلها و پوشه ها
حذف فایلها
چک کردن وجود یک فایل یا پوشه

برای دسترسی به محتویات یک پوشه چندتا راه وجود داره.در زیر با این راه ها آشنا میشید.

تابع opendir

این تابع آدرس یک پوشه رو دریافت میکنه و یک اشاره گر رو برگشت میده که از این اشاره گر میتونیم در تابع readdir استفاده کنیم :

کد php:
<?php 
    $location 
'./'
    
$dp opendir($location); 
    while (
$entry readdir($dp)) 
    {
        if (
is_dir($location $entry))
        {
            echo 
'[Dir] ' $entry '<br />';
        }
        else if (
is_file($location $entry))
        {
            echo 
'[File] ' $entry '<br />';
        } 
    } 
    
closedir($dp); 
?>

در کد بالا ابتدا با استفاده از تابع opendir یک پوشه رو باز کردیم سپس در حلقه while و با استفاده ازتابع readdir محتویات پوشه رو یکی یکی در متغیر $entry ذخیره کردیم.

برای تشخیص اینکه آیا اشاره گر روی یک فایل قرار داره یا یک پوشه از توابع is_file و is_dir استفاده میکنیم.
تابع dir

خروجی این تابع یک شیء از کلاس Directory میباشد و با استفاده از متدهای این کلاس میتونیم محتویات پوشه رو پیمایش کنیم

کد php:
$location './'
    
$dir dir($location); 
    while (
$entry $dir->read()) 
    {
        if (
is_dir($location $entry))
        {
            echo 
'[Dir] ' $entry '<br />';
        }
        else if (
is_file($location $entry))
        {
            echo 
'[File] ' $entry '<br />';
        } 
    } 

کد بالا هم مثل مثال قبل نام فایلها و پوشه هارو چاپ میکنه.

کپی کردن فایلها

برای کپی کردن فایلها از یک مکان به مکان دیگه از تابع copy استفاده میکنیم :

کد php:
<?php
$file 
'example.txt';
$newfile 'example.txt.bak';

if (!
copy($file$newfile)) {
    echo 
"failed to copy $file...\n";
}
?>

این تابع دو پارامتر ورودی میگیره.اولی مسیر و نام فایل مبدا و دومی مسیر فایل مقصد.دقت کنید که اگر فایل مقصد وجود داشته باشه فایل overwrite میشه.

اگر هم خطایی در هنگام کپی خطایی رخ بده این تابع مقدار false برمیگردونه.

حذف فایل

برای حذف فایل هم میتونید از تابع unlink استفاده کنید :

کد php:
unlink('test.html'); 

برای چک کردن وجود یک فایل از تابع file_exists استفاده میشه.

کد php:
if(file_exists('test.jpg')) {
 
// ...


در ادامه یه کلاس ساده ساختم برای لیست کردن محتویات یک پوشه.

کد php:
<?php
class FileManager
{

    private 
$path;

    function 
__construct($path '')
    {
        
$this->path $path;
    }

    function 
getDirectories()
    {
            
$dirContent = array();
        
$dir opendir($this->path);
        while(
$contnets readdir($dir))
        {
            if(
is_dir($this->path $contnets) AND $contnets!='.' AND $contnets != '..')
            {
                
$dirContent['dir'][] = $contnets;            
            }elseif (
is_file($this->path $contnets))
            {
                
$dirContent['file'][] = $contnets;
            }

        }

        return 
$dirContent;
    }

    function 
render()
    {

                
$dirContent $this->getDirectories();
                echo 
'<h1>'.$this->path.'</h1>';

                echo 
'<a href="?dir=./">Root Directory.</a><br>';

                
$parent explode('/',$this->path);
                
array_pop($parent);
                
array_pop($parent);
                
$parent implode('/',$parent);              
                echo 
'<a href="?dir='.$parent.'/">Parent Directory.</a><br>';
                echo 
'Root ..
                <br>            
                <ul>    
                '
;
                foreach(
$dirContent as $key=>$value)
                {
                    if(
$key=='dir')
                    {
                       foreach(
$value as $v)
                       {
                           echo 
'<li><a href="?dir='.$this->path.$v.'/">'.$v.'</a></li><br>';
                       }
                    }
                    else
                    {
                        echo 
'<ul>';
                       foreach(
$value as $v)
                       {
                           echo 
'<li><a href="'.$this->path $v.'">'.$v.'</a></li><br>';
                       } 
                       echo 
'</ul>';
                    }

                }
                echo 
'<ul>';
    }



برای استفاده از کلاس بالا به صورت زیر عمل میکنیم :

کد php:
<?php
include 'FileManager.php';
$path '/files/';
if(isset(
$_GET['dir']))
{
    
$path $_GET['dir'];
    
$fileManager = new FileManager($_GET['dir']);
}else
    
$fileManager = new FileManager('./files/');

$fileManager->render();
?>

با استفاده از این کلاس میتونید لیست محتویات هر پوشه رو با کلیک روی پوشه مشاهده کنید.

منتظر نظراتتون هستم