- متدهای قابل پیادهسازی در استریم رپرها - قسمت دوم
11- متد mkdir
ساخت دایرکتوری جدید با مسیر و دسترسی داده شده.
پارامتر path مسیر دایرکتوری که باید ساخته شود، مثلا "mywrapper://newdir"
پارامتر mode دسترسیهای دایرکتوری (مثلا 0755)
پارامتر options گزینههایی مانند STREAM_MKDIR_RECURSIVE که به شما اجازه میدهد ساخت چند مرحلهای دایرکتوری را انجام دهید.
public function mkdir(string $path, int $mode, int $options): bool {
// Creating a virtual directory
return true;
}
// Called if:
mkdir("mywrapper://newdir", 0755);12- متد rmdir
برای حذف یک دایرکتوری.
پارامتر path مسیر دایرکتوری مورد نظر برای حذف
پارامتر options گزینههایی که میتوانند کنترل بیشتری بر حذف داشته باشند (در عمل معمولا 0)
public function rmdir(string $path, int $options): bool {
// Deleting a virtual directory
return true;
}
// Called if:
rmdir("mywrapper://newdir");13- متد rename
جابجایی یا تغییر نام فایل یا دایرکتوری.
پارامتر path_from مسیر مبدأ
پارامتر path_to مسیر مقصد
public function rename(string $path_from, string $path_to): bool {
// Rename or move a file or directory
return true;
}
// Called if:
rename("mywrapper://old.txt", "mywrapper://new.txt");14- متد unlink
حذف فایل مشخص شده.
پارامتر path مسیر فایل برای حذف
public function unlink(string $path): bool {
// Deleting a virtual file
return true;
}
// Called if:
unlink("mywrapper://file.txt");15- متد dir_opendir
بازکردن دایرکتوری برای شروع خواندن محتویات.
پارامتر path مسیر دایرکتوری
پارامتر options گزینهها (معمولاً 0)
public function dir_opendir(string $path, int $options): bool {
$this->dirEntries = ['file1.txt', 'file2.txt'];
$this->dirPosition = 0;
return true;
}
// Called if:
$dir = opendir("mywrapper://somedir");16- متد dir_readdir
خواندن نام فایل یا دایرکتوری بعدی از داخل دایرکتوری باز شده.
public function dir_readdir(): string|bool {
if (isset($this->dirEntries[$this->dirPosition])) {
return $this->dirEntries[$this->dirPosition++];
}
return false;
}
// Called if:
while (($file = readdir($dir)) !== false) {
echo $file . "\n";
}17- متد dir_rewinddir
بازگرداندن اشارهگر خواندن به ابتدای دایرکتوری.
public function dir_rewinddir(): bool {
$this->dirPosition = 0;
return true;
}
// Called if:
rewinddir($dir);18- متد dir_closedir
بستن دایرکتوری و آزادسازی منابع.
public function dir_closedir(): bool {
// Resource liberation
return true;
}
// Called if:
closedir($dir);19- متد stream_lock
اعمال قفل روی فایل برای هماهنگی دسترسی همزمان.
پارامتر operation نوع قفل مانند LOCK_SH (اشتراکی)، LOCK_EX (انحصاری)، یا LOCK_UN (آزادسازی قفل)
public function stream_lock(int $operation): bool {
// File lock management
return true;
}
// Called if:
flock($fp, LOCK_EX);20- متد stream_metadata
مدیریت متادیتا مثل chmod و touch.
پارامتر path مسیر فایل یا دایرکتوری
پارامتر option نوع تغییر (مثلاً STREAM_META_ACCESS برای تغییر دسترسی، STREAM_META_TOUCH برای تغییر زمان)
پارامتر value مقدار جدید (مثلاً دسترسی جدید یا زمان)
public function stream_metadata(string $path, int $option, mixed $value): bool {
// Changing file and directory permissions or time
return true;
}
// Called if:
chmod("mywrapper://file.txt", 0644);
touch("mywrapper://file.txt", time());21- متد stream_truncate
تغییر اندازه داده استریم (کوتاه کردن یا طولانی کردن).
پارامتر new_size اندازه جدید فایل
public function stream_truncate(int $new_size): bool {
$this->data = substr($this->data, 0, $new_size);
if (strlen($this->data) < $new_size) {
$this->data .= str_repeat("\0", $new_size - strlen($this->data));
}
return true;
}
// Called if:
ftruncate($fp, 1024);22- متد stream_cast
تبدیل به resource (مثلاً برای socket).
پارامتر cast_as نوع resource مورد نظر
public function stream_cast(int $cast_as): resource|false {
return false;
}
// Called if:
if (stream_select($read, $write, $except, 0, 200000)) {
echo fread($read[0], 1024);
}متدهای construct و destruct را نیز میتوانید بسته به نیاز خود پیادهسازی کنید.
#PHP #PHP_streams
@AmirhDeveloper
.