TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #71 694
استریم‌ ها در PHP - قسمت دهم

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


در قسمت قبل با ساخت یک استریم رپر سفارشی آشنا شدیم.
در کلاس‌های استریم رپر متدهایی با نام خاص پیاده‌سازی می‌شوند و هرکدام در مواقع خاص (مثل بازکردن استریم یا خواندن و نوشتن روی استریم) اجرا می‌شوند.

در ادامه با این متدها آشنا می‌شویم.

1- متد stream_open
این متد برای باز کردن استریم استفاده می‌شود.

پارامتر path مسیر استریم مثل mywrapper://file.txt
پارامتر mode حالت باز کردن مثل "r", "w", "a" و غیره
پارامتر options گزینه‌های اضافی (مثل STREAM_USE_PATH)
پارامتر opened_path ارجاعی برای مسیر واقعی باز شده (اختیاری)

public function stream_open(string $path, string $mode, int $options, ?string &$opened_path): bool {
$this->position = 0;
$this->data = "";
return true;
}

// Called if:
$fp = fopen("mywrapper://file.txt", "r");

در این مثال اشاره‌گر برابر 0 قرار می گیرید، داده اولیه برابر "" قرار می گیرد و در نهایت اعلام می شود که با موفقیت انجام شده.

2- متد stream_read
برای خواندن از استریم استفاده می‌شود.

پارامتر count تعداد بایتی که قرار است خوانده شود.

public function stream_read(int $count): string|false {
$result = substr($this->data, $this->position, $count);
$this->position += strlen($result);
return $result;
}

// Called if:
$data = fread($fp, 100);

این متد بخشی از داده را از موقعیت فعلی می‌خواند و موقعیت را جلو می‌برد.

3- متد stream_write
برای نوشتن در استریم به کار می‌رود.

پارامترdata رشته داده‌ای که باید نوشته شود.

public function stream_write(string $data): int {
$left = substr($this->data, 0, $this->position);
$right = substr($this->data, $this->position + strlen($data));
$this->data = $left . $data . $right;
$this->position += strlen($data);
return strlen($data);
}

// Called if:
fwrite($fp, "Hello World");

داده در محل اشاره‌گر نوشته شده و موقعیت جابجا می‌شود و طول داده نوشته شده برمی‌گردد.

4- متد stream_eof
بررسی رسیدن به انتهای استریم.

public function stream_eof(): bool {
return $this->position >= strlen($this->data);
}

// Called if:
if (feof($fp)) {
echo "End of file";
}


5- متد stream_tell
موقعیت فعلی خواندن/نوشتن در استریم را برمی‌گرداند.

public function stream_tell(): int {
return $this->position;
}

// Called if:
$pos = ftell($fp);


6- متد stream_seek
برای جابجایی موقعیت خواندن/نوشتن.

پارامتر offset جابجایی
پارامتر whence مبنا (SEEK_SET, SEEK_CUR, SEEK_END)

public function stream_seek(int $offset, int $whence): bool {
$length = strlen($this->data);
switch ($whence) {
case SEEK_SET:
if ($offset >= 0 && $offset <= $length) {
$this->position = $offset;
return true;
}
return false;
case SEEK_CUR:
//
case SEEK_END:
//
default:
return false;
}
}

// Called if:
fseek($fp, 10, SEEK_SET);

جابجایی موقعیت اشاره‌گر بر اساس $offset و مبنای $whence (ابتدا، موقعیت فعلی، یا انتها).

7- متد stream_close
برای بستن استریم و آزادسازی منابع.

public function stream_close(): void {
// free up resources.
}

// Called if:
fclose($fp);


8- متد stream_flush
برای خالی کردن بافر داده‌ها به مقصد نهایی.

public function stream_flush(): bool {
// Save or send data
return true;
}

// Called if:
fflush($fp);


9- متد stream_stat
بازگرداندن اطلاعات استریم مانند اندازه و زمان تغییرات.

public function stream_stat(): array|false {
return [
'size' => strlen($this->data),
'mtime' => time(),
'mode' => 0100666,
];
}

// Called if:
$fstat = fstat($fp);


10- متد url_stat
دریافت اطلاعات مسیر بدون باز کردن استریم.

پارامتر path مسیر کامل فایل یا دایرکتوری مثل "mywrapper://file.txt"
پارامتر flags فلگ‌هایی که اطلاعات بیشتری درباره نوع stat می‌دهند. معمولاً 0 یا ترکیبی از STREAM_URL_STAT_LINK (برای گرفتن اطلاعات لینک نمادین) یا STREAM_URL_STAT_QUIET (بدون تولید خطا)

public function url_stat(string $path, int $flags): array|false {
return $this->stream_stat();
}

// Called if:
stat("mywrapper://file.txt");


در قسمت بعد با سایر متدها آشنا خواهیم شد.

🔖 #PHP, #پی_اچ_پی

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 🔥 2
  • 👎 1
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 &rlm;LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
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 →