01-01-2014، 01:38 PM
(آخرین ویرایش: 24-01-2014، 06:05 PM، توسط Mohsen Omidvar.)
در قسمت قبل با نحوه خواندن و نوشتن محتویات فایلهای متنی در PHP آشنا شدید.در این این قسمت به مدیریت فایلها و پوشه ها میپردازیم.
مباحثی که در این بخش خواهیم آموخت :
لیست کردن فایلها و پوشه ها
ایجاد پوشه جدید
کپی کردن فایلها و پوشه ها
حذف فایلها
چک کردن وجود یک فایل یا پوشه
برای دسترسی به محتویات یک پوشه چندتا راه وجود داره.در زیر با این راه ها آشنا میشید.
تابع Opendir
این تابع آدرس یک پوشه رو دریافت میکنه و یک اشاره گر رو برگشت میده که از این اشاره گر میتونیم در تابع readdir استفاده کنیم :
در کد بالا ابتدا با استفاده از تابع opendir یک پوشه رو باز کردیم سپس در حلقه while و با استفاده ازتابع readdir محتویات پوشه رو یکی یکی در متغیر $entry ذخیره کردیم.
برای تشخیص اینکه آیا اشاره گر روی یک فایل قرار داره یا یک پوشه از توابع is_file و is_dir استفاده میکنیم.
تابع Dir
خروجی این تابع یک شیء از کلاس Directory میباشد و با استفاده از متدهای این کلاس میتونیم محتویات پوشه رو پیمایش کنیم
کد بالا هم مثل مثال قبل نام فایلها و پوشه هارو چاپ میکنه.
تابع Glob
تابع glob() برای پیدا کردن فایلها با استفاده از یک الگوی خاص میتونه به شما کمک کنه :
شما میتونید چند نوع فایل مختلف رو جستجو کنید
و یا یه مسیر بهش بدید :
برای گرفتن مسیر واقعی فایلها هم میتونید ازrealpath() تابع استفاده کنید :
کپی کردن فایلها
برای کپی کردن فایلها از یک مکان به مکان دیگه از تابع copy استفاده میکنیم :
این تابع دو پارامتر ورودی میگیره.اولی مسیر و نام فایل مبدا و دومی مسیر فایل مقصد.دقت کنید که اگر فایل مقصد وجود داشته باشه فایل overwrite میشه.
اگر هم خطایی در هنگام کپی خطایی رخ بده این تابع مقدار false برمیگردونه.
حذف فایل
برای حذف فایل هم میتونید از تابع unlink استفاده کنید :
برای چک کردن وجود یک فایل از تابع file_exists استفاده میشه.
در ادامه یه کلاس ساده ساختم برای لیست کردن محتویات یک پوشه.
برای استفاده از کلاس بالا به صورت زیر عمل میکنیم :
با استفاده از این کلاس میتونید لیست محتویات هر پوشه رو با کلیک روی پوشه مشاهده کنید.
مباحثی که در این بخش خواهیم آموخت :
لیست کردن فایلها و پوشه ها
ایجاد پوشه جدید
کپی کردن فایلها و پوشه ها
حذف فایلها
چک کردن وجود یک فایل یا پوشه
برای دسترسی به محتویات یک پوشه چندتا راه وجود داره.در زیر با این راه ها آشنا میشید.
تابع 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);
?>
برای تشخیص اینکه آیا اشاره گر روی یک فایل قرار داره یا یک پوشه از توابع 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 />';
}
}
تابع Glob
تابع glob() برای پیدا کردن فایلها با استفاده از یک الگوی خاص میتونه به شما کمک کنه :
کد php:
view sourceprint?
// get all php files
$files = glob('*.php');
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/
کد php:
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/
کد php:
$files = glob('../images/a*.jpg');
print_r($files);
/* output looks like:
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
کد php:
$files = glob('../images/a*.jpg');
// applies the function to each array element
$files = array_map('realpath',$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:wampwwwimagesapple.jpg
[1] => C:wampwwwimagesart.jpg
)
*/
برای کپی کردن فایلها از یک مکان به مکان دیگه از تابع copy استفاده میکنیم :
کد php:
<?php
$file = 'example.txt';
$newfile = 'example.txt.bak';
if (!copy($file, $newfile)) {
echo "failed to copy $file...\n";
}
?>
اگر هم خطایی در هنگام کپی خطایی رخ بده این تابع مقدار 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:
view sourceprint?
<?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();
?>
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.