دایرکتوری
جالنو کلاس packages\base\IO\Directory
را برای مدیریت دایرکتوری ها در اختیار توسعه دهندگان قرار داده است. این کلاس بصورت abstract یا مجرد ایجاد شده و بنابراین برنامه نویس قادر به ایجاد شی بصورت مستقیم از این کلاس نمیباشد.
در حال حاضر چهار کلاس دیگر با نام های زیر از ک لاس Directory مشتق شدند که با توجه به موقعیت نگهداری فایل استفاده میشوند:
نام کلاس | موقعیت نگهداری دایرکتوری |
---|---|
packages\base\IO\Directory\Local | دایرکتوری های محلی |
packages\base\IO\Directory\Tmp | دایرکتوری های محلی موقت |
packages\base\IO\Directory\Ftp | دایرکتوری های ریموت |
packages\base\IO\Directory\Sftp | دایرکتوری های ریموت |
توجه: یک شی از کلاس Directory حتما به آدرس یک دایرکتوری اشاره میکند، اما لزومی ندارد که آن دایرکتوری وجود داشته باشد. گاهی قصد ایجاد یک دایرکتوری جدید را داریم، بنابراین ابتدا یک شی از زیرکلاس های دایرکتوری میسازیم و سپس اقدام به ایجاد دایرکتوری میکنیم.
متد ها
متد هایی که در تمام زیر کلاس های Directory قابل فراخوانی هستند:
نام متد | شرح عملکرد |
---|---|
copyTo(directory $dest): bool | کپی محتویات یک دایرکتوری در یک دایرکتوری دیگر |
copyFrom(directory $source): bool | کپی محتویات از یک دایرکتوری دیگر |
delete(): mixed | حذف دایرکتوری از دیسک |
rename(string $newName): bool | تغییر نام |
move(directory $dest): bool | انتقال یک دایرکتوری به یک دایرکتوری دیگر |
make(): bool | ایجاد دایرکتوری |
files(bool $recursively): array | لیست فایل های موجود در دایرکتوری |
items(bool $recursively): array | لیست آیتم های موجود در دایرکتوری |
directories(bool $recursively): array | لیست دایرکتوری های موجود در دایرکتوری |
file(string $name): File | فایلی را به دایرکتوری نسبت میدهد |
directory(string $name): Directory | پوشه ای را به دایرکتوری نسبت میدهد |
size(): int | محاسبه حجم یک دایرکتوری بر مبنای بیت |
getPath(): string | دریافت آدرس یک دایرکتوری |
isEmpty(): bool | مشخص کننده اینکه آیا دایرکتوری خالی است یا خیر |
getDirectory(): Directory | دسترسی به پوشه حاوی این دایرکتوری را فراهم میکند. |
exists(): bool | بررسی وضعیت وجود دایرکتوری |
متغیر ها
نام | شرح |
---|---|
basename | نام پوشه در آن ذخیره شده است. |
directory | مسیر پوشه در آن ذخیره شده است. |
توجه: متغیر های کلاس Directory در تمامی نوع ها به صورت مستقیم قابل دسترسی هستند.
دایرکتوری های محلی
اگر دایرکتوری که قصد دسترسی به آن را دارید در همان سروری است که جالنو بر روی آن نصب شده، از کلاس packages\base\IO\Directory\Local
یک شی بسازید و آدرس دایرکتوری را به عنوان ورودی به آن بدهید.
علاوه بر متد های اصلی کلاس Directory
متد زیر نیز برای دایرکتوری های محلی تعریف شده است.
نام متد | شرح عملکرد |
---|---|
getRealPath(): string | دریافت آدرس دقیق یک دایرکتوری |
توجه: اگر ابتدای آدرس وارد شده / وجود نداشته باشد، آدرس دهی بصورت نسبی و از پو شه اصلی پروژه (همان پوشه ای که فایل index.php و پوشه ی packages در آن موجود است) شروع میشود. برای کسب اطلاعات بیشتر در خصوص آدرس دهی نسبی به این مقاله مراجعه کنید.
مثال 1:
use packages\base\IO\Directory;
$directory = new Directory\Local("/home/ali/public_html/");
مثال 2:
use packages\base\IO\Directory;
$directory = new Directory\Local("packages/base");
مثال 3:
<?php
namespace package\packagename\controllers;
use packages\base\{Controller, Response, IO\Directory, view\Error, Packages};
class Directories extends Controller {
public function Make(): Response {
$inputs = $this->checkInputs(array(
"name" => array(
"type" => "string",
),
));
$directory = new Directory\Local("packages/packagename/storage/private/" . $inputs["name"]);
/**
* Or you can use Package::getDirectory instead
* $directory = Packages::package("packagename")->getDirectory("storage/private/" . $inputs["name"]);
*/
if ($directory->exists()) {
throw new Error("already_exists");
}
$directory->make(true);
$this->response->setData($directory->getPath(), "path");
$this->response->setStatus(true);
return $this->response;
}
}
دایرکتوری های موقت
اگر نیاز دارید تا دایرکتوری بصورت موقت ساخته شود از کلاس packages\base\IO\Directory\Tmp
نمونه بسازید. این کلاس هیچ ورودی در سازنده ی خود دریافت نمیکند و بصورت خودکار یک دایرکتوری محلی را پوشه ی پیشنهاد شده توسط سیستم عامل ایجاد میکند.
توجه: هر دایرکتوری موقت یک دایرکتوری محلی نیز بوده و تمام قابلیت ها و توانایی های packages\base\IO\Directory\Local
را دارد.
نکته: دایرکتوری موقت به محض ایجاد شی Tmp ایجاد میشود و اماده خواندن و نوشتن است و به محض پاک شدن آن شی ، از روی هارد دیسک نیز حذف خواهد شد. حذف شی یا صراحتا با دستور unset و یا بصورت ضمنی توسط garbage collector مفسر php انجام خواهد شد.
مثال 1:
use packages\base\IO\Directory;
$tmp = new Directory\Tmp();
مثال 2:
<?php
namespace package\packagename\controllers;
use packages\base\{Controller, Response, IO\Directory, view\Error, Packages};
class Directories extends Controller {
public function Swap(): Response {
$inputs = $this->checkInputs(array(
"src" => array(
"type" => "string",
),
"dest" => array(
"type" => "string",
),
));
$source = new Directory\Local("packages/packagename/storage/private/" . $inputs["src"]);
/**
* Or you can use Package::getDirectory instead
* $source = Packages::package("packagename")->getDirectory("storage/private/" . $inputs["src"]);
*/
if (!$source->exists()) {
throw new Error("source_isnot_exists");
}
$destination = new Directory\Local("packages/packagename/storage/private/" . $inputs["dest"]);
/**
* Or you can use Package::getDirectory instead
* $destination = Packages::package("packagename")->getDirectory("storage/private/" . $inputs["dest"]);
*/
if (!$destination->exists()) {
throw new Error("destination_isnot_exists");
}
$tmp = new Directory\Tmp();
$source->copyTo($tmp);
$destination->copyTo($source);
$destination->copyFrom($tmp); // Or $tmp->copyTo($destination);
$this->response->setStatus(true);
return $this->response;
}
}
دایرکتوری های ریموت / FTP
برای دسترسی به دایرکتوری هایی که بر روی سرور های دیگر هستند، از کلاس packages\base\IO\Directory\Ftp
میتوان استفاده کرد.
برای دسترسی به دایرکتوری ها ابتدا یک شی از کلاس Ftp میسازیم آدرس دایرکتوری مورد نظر در سرور را به آن میدهیم و سپس مشخصات سرور را تنظیم میکنیم.
مثال 1:
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
توجه: درصورتی که مشخصات سرور وارد شده اشتباه باشد Warning: ftp_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known
دریافت میکنیم.
مثال 2:
<?php
namespace package\packagename\controllers;
use packages\base\{Controller, Response, IO\Directory, view\Error, Packages};
class Directories extends Controller {
public function UploadViaFTP(): Response {
$inputs = $this->checkInputs(array(
"src" => array(
"type" => "string",
),
"dest" => array(
"type" => "string",
),
"hostname" => array(
"type" => "string",
),
"username" => array(
"type" => "string",
),
"password" => array(
"type" => "string",
),
));
$source = new Directory\Local("packages/packagename/storage/private/" . $inputs["src"]);
/**
* Or you can use Package::getDirectory instead
* $source = Packages::package("packagename")->getDirectory("storage/private/" . $inputs["src"]);
*/
if (!$source->exists()) {
throw new Error("source_isnot_exists");
}
$destination = new Directory\Ftp($inputs["dest"]);
$destination->hostname = $inputs["hostname"];
$destination->username = $inputs["username"];
$destination->password = $inputs["password"];
if (!$destination->exists()) {
$destination->make(true);
}
$source->copyTo($destination);
$this->response->setStatus(true);
return $this->response;
}
}
دایرکتوری های ریموت / SFTP
برای دسترسی به دایرکتوری های ریموت از کانال SSH2 از کلاس packages\base\IO\Directory\Sftp
نیز میتوان استفاده کرد.
برای دسترسی به دایرکتوری ها ابتدایک شی از کلاس Sftp میسازیم؛ آدرس دایرکتوری مورد نظر در سرور را به آن میدهیم و سپس مشخصات سرور را تنظیم میکنیم.
مثال:
use packages\base\IO\Directory;
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
$sftp->port = 7624;
توجه: درصورتی که مشخصات سرور وارد شده اشتباه باشد exception: packages\base\ssh\ConnectionException
دریافت میکنیم.
مثال 2:
<?php
namespace package\packagename\controllers;
use packages\base\{Controller, Response, IO\Directory, view\Error, Packages};
class Directories extends Controller {
public function UploadViaSFTP(): Response {
$inputs = $this->checkInputs(array(
"src" => array(
"type" => "string",
),
"dest" => array(
"type" => "string",
),
"hostname" => array(
"type" => "string",
),
"username" => array(
"type" => "string",
),
"password" => array(
"type" => "string",
),
"port" => array(
"type" => "number",
"min" => 1,
"max" => 65535,
"default" => 22,
"optional" => true,
),
));
$source = new Directory\Local("packages/packagename/storage/private/" . $inputs["src"]);
/**
* Or you can use Package::getDirectory instead
* $source = Packages::package("packagename")->getDirectory("storage/private/" . $inputs["src"]);
*/
if (!$source->exists()) {
throw new Error("source_isnot_exists");
}
$destination = new Directory\Sftp($inputs["dest"]);
$destination->hostname = $inputs["hostname"];
$destination->username = $inputs["username"];
$destination->password = $inputs["password"];
$destination->port = $inputs["port"];
if (!$destination->exists()) {
$destination->make(true);
}
$source->copyTo($destination);
$this->response->setStatus(true);
return $this->response;
}
}
ایجاد دایرکتوری
برای ایجاد یک دایرکتوری از متد make()
استفاده میشود.
این متد در ورودی خود یک مقدار boolean دریافت میکند; اگر مقدار true
به متد داده شود تمامی پوشه های تو در تو نیز ایجاد میشوند .
درصورتی که مقدار false
به متد داده شود تنها آخرین دایرکتوری در مسیر مشخص شده ساخته میشود
نکته: مقدار آرگومان ورودی متد make()
به صورت پیش فرض false
است.
توجه: اگر به متد مقدار false داده شود و دایرکتوری والد آن وجود نداشته باشد warning دریافت میکنیم.
توجه:درصورتی که دایرکتوری وجود داشته باشد warning دریافت میکنیم.
مثال 1 از کد خطا
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory/dir");
$dir->make(); // or -> $dir->make(false); // Warning: mkdir(): No such file or directory
مثال 2 از کد خطا
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory/exists-dir");
$dir->make(); // or -> $dir->make(false); // Warning: mkdir(): File exists
مثال 1:
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory/dir");
if (!$dir->exists()) {
$dir->make(true);
}
در مثال فوق علاوه بر دایرکتوری dir اگر دایرکتوری های والد آن وجود نداشته باشد نیز ایجاد میشود.
مثال 2:
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory/dir");
if (!$dir->exists() and $dir->getDirectory()->exists()) {
$dir->make();
}
در مثال فوق تنها دایرکتوری dir ایجاد میشود بنابراین باید ابتدا از وجود دایرکتوری های والد آن اطمینان حاصل شود.
مثال 3:
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
if (!$ftp->exists()) {
$ftp->make(true);
}
مثال 4:
use packages\base\IO\Directory;
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
$sftp->port = 7624;
if (!$sftp->exists()) {
$sftp->make(true);
}
حذف دایرکتوری
برای حذف دایرکتوری از متد delete()
استفاده میشود .
توجه: در صورت عدم وجود دایرکتوری warning دریافت میکنیم.
مثال از کد خطا:
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory");
$dir->delete(); // Warning: scandir(packages/jalno/non-exists-directory): failed to open dir: No such file or directory
مثال 1:
use packages\base\IO\Directory;
$dir = new IO\directory\local("packages/jalno/directory");
if ($dir->exists()) {
$dir->delete();
}
مثال 2:
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
if ($ftp->exists()) {
$ftp->delete();
}
مثال 3:
use packages\base\IO\Directory;
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
$sftp->port = 7624;
if ($sftp->exists()) {
$sftp->delete();
}
انتقال دایرکتوری
برای انتقال دایرکتوری از متد move()
استفاده میشود . این متد برای آرگومان ورودی یک شی از کلاس های مشتق شده از کلاس packages\base\IO\Directory
دریافت میکند و مقدار بازگشتی آن boolean میباشد.
توجه : درصورت موجود نبودن دایرکتوری مبدا warning دریافت میکنیم
توجه: باید توجه داشته باشیم قبل از صدا زدن متد move()
از عدم وجود دایرکتوری مقصد اطمینان حاصل کنیم.
مثال از کد خطا :
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory");
$destination = new Directory\Local("packages/jalno/directory");
$dir->move($destination); // Warning: rename(packages/jalno/non-exists-directory,packages/jalno/directory/non-exists-directory): No such file or directory
مثال 1 از کد درست :
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory");
$destination = new Directory\Local("packages/jalno/newDirectory");
if ($dir->exists() and !$destination->exists()) {
$dir->move($destination);
}
مثال 2 از کد درست :
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory");
$destination = new Directory\Tmp();
if ($dir->exists()) {
$dir->move($destination);
}
مثال 3 از کد درست:
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
$destination = new Directory\Ftp('public_html/packages/test/newDir');
$destination->hostname = "test.com";
$destination->password = "123";
$destination->username = "ali";
if ($ftp->exists() and !$destination->exists()) {
$ftp->move($destination);
}
مثال 4 از کد درست:
use packages\base\IO\Directory;
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
$sftp->port = 7624;
$local = new Directory\Local("packages/jalno/dir");
if ($sftp->exists() and !$local->exists()) {
$sftp->move($local);
}
محاسبه حجم دایرکتوری
برای محاسبه حجم دایرکتوری از متد size()
استفاده میشود . حجم محاسبه شده در مبنای بایت میباشد.
توجه : درصورت موجود نبودن دایرکتوری warning دریافت میکنیم
مثال از کد خطا :
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory");
echo $dir->size(); // Warning: scandir(packages/jalno/non-exists-directory): failed to open dir: No such file or directory
مثال از کد درست :
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory");
if ($dir->exists()) {
echo $dir->size();
}
کپی دایرکتوری
برای کپی کردن محتویات موجود در یک دایرکتوری در دایرکتوری دیگر از متد copyTo()
استفاده میشود.
آرگومان ورودی این متد یک شی از کلاس های مشتق شده از کلاس packages\base\IO\Directory
میباشد.
نکته: اگر دایرکتوری مقصد وجود نداشته باشد ، ایجاد میشود.
توجه: در صورت عدم وجود دایرکتوری مبدا warning دریافت میکنیم.
نکته مهم: برنامه نویسان باید توجه داشته باشند اگر در دایرکتوری مبدا فایل (یا دایرکتوری) با نامی مشابه در دایرکتوری مقصد وجود داشته باشد فایل (یا دایرکتوری ) در دایرکتوری مقصد جایگزین میشود.
مثال از کد خطا
use packages\base\IO\Directory;
$source = new Directory\Local("packages/jalno/non-exists-directory");
$destination = new Directory\Local("packages/jalno/new");
$source->copyTo($destination); // Warning: scandir(packages/jalno/non-exists-directory): failed to open dir: No such file or directory
مثال 1 از کد درست
use packages\base\IO\Directory;
$source = new Directory\Local("packages/jalno/directory/dir");
$destination = new Directory\Local("packages/jalno/new/dir");
if ($source->exists()) {
$source->copyTo($destination);
}
مثال 2 از کد درست
use packages\base\IO\Directory;
$source = new Directory\Local("packages/jalno/directory/dir");
$tmp = new Directory\Tmp();
if ($source->exists()) {
$source->copyTo($tmp);
}
مثال 3 از کد درست:
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
$destination = new Directory\Ftp('public_html/packages/test/newDir');
$destination->hostname = "test.com";
$destination->password = "123";
$destination->username = "ali";
if ($ftp->exists()) {
$ftp->copyTo($destination);
}
مثال 4 از کد درست:
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
$local = new Directory\Local('packages/jalno/dir');
if ($local->exists()) {
$local->copyTo($ftp);
}
مثال 5 از کد درست:
use packages\base\IO\Directory;
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
$sftp->port = 7624;
$tmp = new Directory\Tmp();
if ($sftp->exists()) {
$sftp->copyTo($tmp);
}
برای کپی کردن محتویات از دایرکتوری دیگر از متد copyFrom()
استفاده میشود
توجه:باید از موجود بودن دایرکتوری که قصد داریم محتویات را از آن کپی کنیم اطمینان حاصل شود.
**مثال ** از کد درست
use packages\base\IO\Directory;
$destination = new Directory\Local("packages/jalno/directory/dir");
$source = new Directory\Local("packages/jalno/copy-items");
if ($source->exists()) {
$destination->copyFrom($source);
}
**مثال ** از کد غلط
use packages\base\IO\Directory;
$destination = new Directory\Local("packages/jalno/directory/dir");
$source = new Directory\Local("packages/jalno/non-exists-directory");
$destination->copyFrom($source); // Warning: scandir(packages/jalno/non-exists-directory): failed to open dir: No such file or directory
تغییرنام دایرکتوری
برای تغییر نام دایرکتوری ها از متد rename()
استفاده میشود
آرگومان ورودی این متد از جنس string
است, نام جدید برای متد ارسال میشود.
توجه: در صورت عدم وجود دایرکتوری warning دریافت میکنیم.
توجه: اگر دایرکتوری با نامی مشابه نام جدید در دایرکتوری والد وجود داشته باشد و خالی نباشد warning دریافت میکنیم.
مثال 1 از کد غلط
use packages\base\IO\Directory;
$directory = new Directory\Local("packages/jalno/non-exists-directory");
$directory->rename("newName"); // Warning: rename(packages/jalno/non-exists-directory,packages/jalno/newName): No such file or directory
مثال 2 از کد غلط
use packages\base\IO\Directory;
$directory = new Directory\Local("packages/jalno/directory");
$directory->rename("newName"); // Warning: rename(packages/jalno/directory,packages/jalno/newName): Directory not empty
مثال 1 از کد درست
use packages\base\IO\Directory;
$directory = new Directory\Local("packages/jalno/directory");
$checkExistsDir = $directory->getDirectory()->directory("newName")->exists();
if ($directory->exists() and !$checkExistsDir) {
$directory->rename("newName");
}
مثال 2 از کد درست
use packages\base\IO\Directory;
$directory = new Directory\Ftp('public_html/packages/test/dir');
$directory->hostname = "test.com";
$directory->password = "123";
$directory->username = "ali";
$checkExistsDir = $directory->getDirectory()->directory("newName")->exists();
if ($directory->exists() and !$checkExistsDir) {
$directory->rename("newName");
}
مثال 3 از کد درست
use packages\base\IO\Directory;
$directory = new Directory\Sftp('public_html/packages/test/dir');
$directory->hostname = "test.com";
$directory->password = "123";
$directory->username = "ali";
$directory->port = 7624;
$checkExistsDir = $directory->getDirectory()->directory("newName")->exists();
if ($directory->exists() and !$checkExistsDir) {
$directory->rename("newName");
}
لیست پوشه های موجود در دایرکتوری
با استفاده از متد directories()
لیست پوشه های موجود در دایرکتوری را دریافت میکنیم . آرگومان ورودی متد boolean
میباشد.
اگر مقدار true
به متد ارسال شود دایرکتوری های تودرتو را نیز برمیگرداند و
اگر مقدار false
به متد ارسال شود تنها پوشه های اولیه را بر میگرداند. خروجی این متد یک آرایه بوده که هر خانه از آن یک شئ از کلاس Directory میباشد.
نکته: آرگومان ورودی بصورت پیش فرض true
میباشد.
توجه: اگر دایرکتوری وجود نداشته باشد warning دریافت میکنیم.
مثال از کد خطا
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory");
$directories = $dir->directories(); // Warning: scandir(packages/jalno/non-exists-directory): failed to open dir: No such file or directory
مثال 1 از کد درست:
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory");
if ($dir->exists()) {
$directories = $dir->directories(false);
print_r($directories);
}
/* output
Array
(
[0] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory
[basename] => dir1
)
)
*/
مثال 2 از کد درست:
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory");
if ($dir->exists()) {
$directories = $dir->directories(true);
print_r($directories);
}
/* output
Array
(
[0] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory
[basename] => dir1
)
[1] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory/dir1
[basename] => dir1.1
)
[2] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory/dir1/dir1.1
[basename] => dir1.1.1
)
)
*/
مثال 3 از کد درست
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
if ($ftp->exists()) {
$directories = $ftp->directories(false);
foreach ($directories as $directory) {
echo "directory: " . $directory->directory . " - basename: " . $directory->basename . "<br>";
}
}
/** output
* directory: public_html/packages/test/dir - basename: dir1
*/
مثال 4 از کد درست
use packages\base\IO\Directory;
$tmp = new Directory\Tmp();
$file = $tmp->file("newFile.txt");
$file->touch();
$dir = $tmp->directory("dir");
$dir->make();
print_r($tmp->directories());
/* output
Array
(
[0] => packages\base\IO\directory\local Object
(
[directory] => /tmp/L7lHwsjRp
[basename] => dir
)
)
*/
مثال 5 از کد درست
use packages\base\IO\Directory;
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
$sftp->port = 7624;
if ($sftp->exists()) {
$directories = $sftp->directories(false);
foreach ($directories as $directory) {
echo "directory: ".$directory->directory." - basename: ".$directory->basename."<br>";
}
}
/* output
directory: public_html/packages/test/dir - basename: dir1
*/
لیست فایل های موجود در دایرکتوری
برای دریافت لیست فایل های موجود در دیرکتوری از متد files()
استفاده میشود.
آرگومان ورودی این متد boolean میباشد .
اگر مقدار true
به متد ارسال شود فایل های داخلی را نیز برمیگرداند و
اگر مقدار false
به متد ارسال شود تنها فایل های موجود در دایرکتوری اصلی را بر میگرداند. خروجی این متد یک آرایه بوده که هر خانه از آن یک شئ از کلاس File میباشد.
نکته: آرگومان ورودی بصورت پیش فرض true
میباشد.
توجه: اگر دایرکتوری وجود نداشته باشد warning دریافت میکنیم.
مثال از کد خطا
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory");
$files = $dir->files(); // Warning: scandir(packages/jalno/non-exists-directory): failed to open dir: No such file or directory
مثال 1
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory");
if ($dir->exists()) {
$files = $dir->files(false);
print_r($files);
}
/* output
Array
(
[0] => packages\base\IO\file\local Object
(
[directory] => packages/jalno/directory
[basename] => file1
)
)
*/
مثال 2
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/directory");
if ($dir->exists()) {
$files = $dir->files(true);
print_r($files);
}
/* output
Array
(
[0] => packages\base\IO\file\local Object
(
[directory] => packages/jalno/directory/dir1/dir1.1
[basename] => file1.1
)
[1] => packages\base\IO\file\local Object
(
[directory] => packages/jalno/directory
[basename] => file1
)
)
*/
مثال 3
use packages\base\IO\Directory;
$tmp = new Directory\Tmp();
$file = $tmp->file("newFile.txt");
$file->touch();
$dir = $tmp->directory("dir");
$dir->make();
print_r($tmp->files());
/* output
Array
(
[0] => packages\base\IO\file\local Object
(
[directory] => /tmp/ka3Dg5w4K
[basename] => newFile.txt
)
)
*/
مثال 4
use packages\base\IO\Directory;
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
if ($ftp->exists()) {
$files = $ftp->files(false);
foreach ($files as $file) {
echo "directory: ".$file->directory." - basename: ".$file->basename."<br>";
}
}
/* output
directory: public_html/packages/test/dir - basename: file1
*/
مثال 5
use packages\base\IO\Directory;
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
if ($sftp->exists()) {
$files = $sftp->files(false);
foreach ($files as $file) {
echo "directory: ".$file->directory." - basename: ".$file->basename."<br>";
}
}
/* output
directory: public_html/packages/test/dir - basename: file1
*/
لیست آیتم های موجود در دایرکتوری
برای دریافت لیست آیتم های موجود در دیرکتوری از متد items()
استفاده میکنیم.
آرگومان ورودی این متد boolean میباشد .
اگر مقدار true
به متد ارسال شود آیتم های داخلی را نیز برمیگرداند و
اگر مقدار false
به متد ارسال شود تنها آیتم های موجود در دایرکتوری اصلی را بر میگرداند. خروجی این متد یک آرایه از شئ های File و Directory است.
نکته: آرگومان ورودی بصورت پیش فرض true
میباشد.
توجه: اگر دایرکتوری وجود نداشته باشد warning دریافت میکنیم.
مثال از کد خطا
use packages\base\IO\Directory;
$dir = new Directory\Local("packages/jalno/non-exists-directory");
$items = $dir->items(); // Warning: scandir(packages/jalno/non-exists-directory): failed to open dir: No such file or directory
مثال 1 از کد درست:
$dir = new IO\directory\local("packages/jalno/directory");
if ($dir->exists()) {
$items = $dir->items(false);
print_r($items);
}
/*output
Array
(
[0] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory
[basename] => dir1
)
[1] => packages\base\IO\file\local Object
(
[directory] => packages/jalno/directory
[basename] => file1
)
)
*/
مثال 2 از کد درست:
$dir = new IO\directory\local("packages/jalno/directory");
if ($dir->exists()) {
$items = $dir->items(true);
print_r($items);
}
/*output
Array
(
[0] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory
[basename] => dir1
)
[1] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory/dir1
[basename] => dir1.1
)
[2] => packages\base\IO\directory\local Object
(
[directory] => packages/jalno/directory/dir1/dir1.1
[basename] => dir1.1.1
)
[3] => packages\base\IO\file\local Object
(
[directory] => packages/jalno/directory/dir1/dir1.1
[basename] => file1.1
)
[4] => packages\base\IO\file\local Object
(
[directory] => packages/jalno/directory
[basename] => file1
)
)
*/
مثال 3 از کد درست:
use packages\base\IO\Directory;
$tmp = new Directory\Tmp();
$file = $tmp->file("newFile.txt");
$file->touch();
$dir = $tmp->directory("dir");
$dir->make();
print_r($tmp->items());
/* output
Array
(
[0] => packages\base\IO\directory\local Object
(
[directory] => /tmp/1iQGbNTY9
[basename] => dir
)
[1] => packages\base\IO\file\local Object
(
[directory] => /tmp/1iQGbNTY9
[basename] => newFile.txt
)
)
*/
مثال 4 از کد درست:
$ftp = new Directory\Ftp('public_html/packages/test/dir');
$ftp->hostname = "test.com";
$ftp->password = "123";
$ftp->username = "ali";
if ($ftp->exists()) {
$items = $ftp->items(false);
foreach ($items as $item) {
echo "directory: " . $item->directory . " - basename: " . $item->basename . "\n";
}
}
/* output
directory: public_html/packages/test/dir - basename: dir1
directory: public_html/packages/test/dir - basename: file1
*/
مثال 5 از کد درست:
$sftp = new Directory\Sftp('public_html/packages/test/dir');
$sftp->hostname = "test.com";
$sftp->password = "123";
$sftp->username = "ali";
$sftp->port = 7624;
if ($sftp->exists()) {
$items = $sftp->items(false);
foreach ($items as $item) {
echo "directory: " . $item->directory . " - basename: " . $item->basename . "\n";
}
}
/* output
directory: public_html/packages/test/dir - basename: dir1
directory: public_html/packages/test/dir - basename: file1
*/