TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #413 324
استریم‌ ها در PHP - قسمت یازدهم

- متدهای قابل پیاده‌سازی در استریم رپرها - قسمت دوم


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
.
  • 🍓 9
  • 👍 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →