کشف و تصحیح خطا مقاله شماره 2

دو روش مشهور که برای کشف خطا وجود دارد:

 PCC  Parity Check Code  و CRC  Cyclic Redundancy Check  است. روش سوم که مجموعه مقابله‌ای یا Checksum نام دارد، مکانیزمی است که در اینترنت جهانی کاربرد دارد و توسط چندین پروتکل مورد استفاده قرار می‌ گیرید که در اینجا به شرح آن می پردازیم.

این مکانیز نیز مانند دو روش PCC و CRC بر اساس مفهوم افزونگی طراحی شده اند. این روش را با حل یک مثال ساده، به آسانی درک خواهید کرد.

مثالمجموعه مقابله‌ای 8 بیتی را برای بلوک 16 بیتی 1010100100111001  محاسبه کنید و نشان دهید خطایی وجود ندارد.

قدم اولکد 16 بیتی را به دو کد 8 بیتی تقسیم میکنیم.

قدم دوماعداد را در دسته های 8 بیتی جمع می کنیم.

10101001 + 00111001 = 11100010

قدم سوماز عدد بدست آمده مکمل 1 میگیریم.

00011101

نتیجه بدست آمده را به انتهای کد اضافه می کنیم.

101010010011100100011101

برای نشان دادن عدم وجود خطا، کافیست گیرنده 24 بیت بدست آمده را به سه قسمت 8 تایی تقسیم کنیم و اعداد را با هم جمع کنیم و از آن مکمل 1 بگیریم. اگر نتیجه نهایی برابر با 0 شود، می توان نتیجه گرفت که خطایی رخ نداده است.

10101001 + 00111001 + 00011101 = 11111111

مکمل 1 = 00000000

مجموع مقابله‌ایکه اینترنت جهانی از آن استفاده می کند از نظر سنتی 16 بیتی است. قابلیت مجموع مقابله ای در وارسی خطا به توانایی CRC نیست. به عنوان مثال اگر مقدار یک کلمه کد افزایش یابد و مقدار کلمه کد دیگر به همان میزان کاهش، دو خطای پدید آمده قابل کشف نخواهد بود. زیرا حاصل جمع و مجموع مقابله ای یکسانی خواهند شد. مضافا چنانچه مقادیر چندین کلمه افزایش یابند اما تغییر کلی مضربی از 65535 باشد، حاصل جمع و مجموع مقابله ای تغیرر نخواهند کرد که به

معنای عدم کشف خطاهای پدید آمده است.
======

هرگاه یک کانال ارتباطی برای انتقال اطلاعات داشته باشیم در حین انتقال به دلیل وجود نویز اطلاعات دچار تغییر می شوند. باید روشی برای مشخص کردن این تغییرات داشته باشیم و بهتر است به روشی دست یابیم که میتواند این تغییرات ناخواسته یا خطا ها را اصلاح نماید.


1-1 مفاهیم کدینگ (Coding Concepts) 
برای آنكه بتوانیم یك كلمه (Word) از داده ها را بگونه ای کد گذاری كنیم كه قابلیت تشخیص و تصحیح خطا را داشته باشد، باید تعداد بیت هاى آن را افزایش دهیم. اگر طول یك Data Word به اندازه D بیت باشد، پس از کد گذاری یك كلمه کد شده (Codeword) به اندازه C بیت خواهد بود. بگونه ای كه C>D می‌باشد. پس حالا ما بجای 2D حالت ممكن، 2C حالت ممكن داریم. ولی تمام این حالت ها درست نیستند، و این همان چیزی است كه باعث می شود سیستم بتواند وجود خطا را تشخیص دهد. یعنی اگر یك عدد در یكی از این حالات غیرمجاز باشد، سیستم می فهمد كه خطایی روى داده است. در بعضی از روش ها، سیستم در یك سری از حالات می تواند خطای بوجود آمده را نیز اصلاح كند. روش ارائه شده باید این قابلیت را داشته باشد كه از بین C بیت موجود D بیت اصلی را خارج كند. به این عمل اصطلاحا Decoding می گویند. یكی از مشكلات استفاده از کدینگ این است كه سیستم مجبور است تا یك مدت زمانى را صرف عملیات Encoding و Decoding كند كه باعث ایجاد سربار (Overhead) در سیستم می شود

1-2 کد همینگ
در دهه ۱۹۵۰ میلادی ریچارد همینگ که در آزمایشگاههای شرکت بل کار می کرد به معرفی دسته ای از کد های اصلاح کننده خطا پرداخت که بنام خود او کدهای همینگ خوانده می شوند. شاید ساده ترین روش برای آشکار کردن خطای یک بیت در یک بایت، استفاده از بیت توازن است

1-3 فاصله همینگ (Hamming Distance) 
فاصله همینگ بین دو Codeword برابر است با تعداد بیت هایی كه آنها با هم متفاوتند. یعنی نشان میدهد كه اگر در اثر خطا یك کد بخواهد به یك کد دیگر تبدیل شود، چند بیت از آن باید تغییر كند تا این تبدیل انجام شود بدون آنکه سیستم آن را خطا به حساب آورد .
در تئوری اطلاعات فاصله همینگ بین دو رشته برابر طول تعداد مکانهایی است که سمبولهای متناظر متفاوت هستند. به معنای دیگر، کمترین تعداد جایگزینی هایی است که یک رشته به یک رشته دیگر تغییرپیدا کند، یا تعداد خطاهایی که یک رشته به رشته دیگر تبدیل گردد.  
چند مثال برای فاصله همینگ بین چند رشته:
«toned»و«roses» فاصله همینگ سه هست.
۱۰۱۱۱۰۱ و ۱۰۰۱۰۰۱ فاصله همینگ دو هست.
۲۱۷۳۸۹۶ و ۲۲۳۳۷۹۶ فاصله همینگ سه هست.
کدهای 101 و 011 در 2 بیت با یك دیگر متفاوت هستند. در نتیجه فاصله همینگ بین آنها برابر 2 است. اما کدهای 101 و 100 فقط در یك بیت با هم تفاوت دارند. در نتیجه اگر یك خطا در بیت كم ارزش آنها روى دهد، یكی از آنها را به دیگری تبدیل می كند و سیستم متوجه وجود خطا نخواهد شد. فاصله همینگ به اندازه 2 تضمین می كند كه اگر یك خطای تك بیتی اتفاق بیفتد سیستم حتما متوجه بروز خطا خواهد شد
در شکل روبه رو مکعب باینری را میبیند که در هر گوشه آن یک عدد باینری قرار دارد . در این مکعب هر ضلع یک فاصله همینگ به حساب می آید . برای مثال فاصله بین دو عدد 001 تا 010 دو ضلع است به عبارتی فاصله همینگ آن 2 است .    

 

                                                       



1-4
فاصله کد (Code Distance) 
فاصله کد برابر است با كمترین فاصله همینگ كه بین هر دو کد موجود در یك مجموعه کد وجود دارد. یعنی اگر مثلا در یك روش کدینگ فاصله کد برابر 2 باشد به این معنی است كه هیچ كدام از کدها با کدهای دیگر فاصله همینگ كمتر از 2 ندارند. برای مثال مجموعه کدهای {001، 010، 100، 111} همگی باهم فاصله 2 دارند. در نتیجه این کد می تواند هر خطای تك بیتی را تشخیص دهد
به عنوان مثالی دیگر کدهای {000، 111} داراى فاصله 3 هستند پس می توانند هر خطای تك بیتی یا دو بیتی را تشخیص دهند. اما اگر فرض شود احتمال خطای دو بیتی كم است، این کد را می توان به عنوان روشى كه می تواند خطاهای تك بیتی را اصلاح (Correct) كند، نیز استفاده شود

1-5
محدودیت تشخیص و تصحیح (Detection and Correction) 
به عنوان یك تعریف ریاضی می توان گفت : برای آنكه بتوانیم تا حداكثر t بیت خطا را تشخیص دهیم، نیاز به حداقل فاصله کد به اندازه t+1 داریم. ولی برای آنكه بتوانیم تا حداكثر t بیت خطا را تصحیح كنیم، نیاز به حداقل فاصله کد 2t+1 داریم

1-6
کدینگ و افزونگی (Coding and Redundancy)
فرض كنید كه یك مجموعه کد شامل دو حالت به صورت {000، 111} باشد كه برای نشان دادن تنها یك بیت به كار می رود. در واقع عدد 0 به شكل 000 کد شده است و عدد 1 به شكل 111. این سیستم کد دهی معادل سیستم های TMR می باشد. در واقع کدینگ همیشه همراه با افزونگی (Redundancy) می‌باشد كه در نتیجه می توان از تكنیكهاى بكار رفته شده برای افزونگی در کدینگ نیز استفاده كرد. مثلا Duplex یكی از راه هاى افزونگی است كه در این روش Codeword دو بار عینا تكرار می شود. برای مثال برای یك تك بیت دو حالت وجود دارد كه 00 و 11 است كه از دو بار تكرار 0 و 1 به دست آمده اند

1-7
جداپذیری کد (Code Separability) 
داده های کد شده می توانند دو حالت داشته باشند :
   
جدا پذیر (Separable)

کدی را جداپذیر می گوییم كه بیت هاى مربوط به داده اصلی با بیت های اضافه شده برای کد از هم جدا باشند. در این حالت استخراج اطلاعات از کد بسیار ساده تر است. چون تنها كافیست كه بیت هاى مربوط به کد را كنار بگذاریم

   
جدا ناپذیر (Non-Separable) 
در کدهای جداناپذیر داده های اصلی با کدهای اضافی با هم تركیب شده اند و جدا سازی آنها از یك دیگر نیاز به انجام پردازش های اضافی دارد

2-1
روشهای کدینگ (Coding methods) 

2-1-1
کد Parity (Parity Coding) 
پریتی (Parity) ساده ترین روش كد گذاری جدا پذیر است. در این روش اطلاعات کد شده شامل N بیت داده اصلی به همراه یك بیت اضافه كه Parity را نگه می دارد، می‌باشد. دو نوع Parity وجود دارد:
     Even (
زوج)
در روش زوج بیت Parity به گونه ای تنظیم می شود كه تعداد یك ها در كل بیت ها (داده اصلی و Parity) زوج باشد

     Odd (
فرد)
روش فرد بر عكس عمل می كند. یعنی در روش فرد بیت Parity به گونه ای تنظیم می شود كه تعداد یك ها در كل بیت ها (داده اصلی و Parity) فرد باشد
تعداد كل بیت ها در نهایت برابر (N+1) است. در این حالت عملا به میزان 1/N بیت جدید به داده اضافه شده است. کد Parity داراى فاصله همینگ 2 می‌باشد كه در نتیجه می تواند هر خطای تك بیتی را تشخیص دهد ولی نمی تواند هیچ نوع تصحیحی انجام دهد. کد Parity نمی تواند یك خطای دو بیتی را تشخیص دهد، ولی خطاهای سه بیتی را می تواند تشخیص دهد. در کل کد پریتی قابلیت تشخیص خطا در تعداد فرد را دارد .

    Parity
فرد بهتر است یا زوج؟ ادامه در مقاله بعدی




ارائه شده توسط تیم digigoez
Whoops! There was an error.
UnexpectedValueException
The stream or file "/home/rezabehr/storage/logs/laravel-2022-01-25.log" could not be opened: failed to open stream: Disk quota exceeded UnexpectedValueException thrown with message "The stream or file "/home/rezabehr/storage/logs/laravel-2022-01-25.log" could not be opened: failed to open stream: Disk quota exceeded" Stacktrace: #11 UnexpectedValueException in /home/rezabehr/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107 #10 Monolog\Handler\StreamHandler:write in /home/rezabehr/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php:119 #9 Monolog\Handler\RotatingFileHandler:write in /home/rezabehr/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php:39 #8 Monolog\Handler\AbstractProcessingHandler:handle in /home/rezabehr/vendor/monolog/monolog/src/Monolog/Logger.php:344 #7 Monolog\Logger:addRecord in /home/rezabehr/vendor/monolog/monolog/src/Monolog/Logger.php:707 #6 Monolog\Logger:error in /home/rezabehr/vendor/laravel/framework/src/Illuminate/Log/Logger.php:176 #5 Illuminate\Log\Logger:writeLog in /home/rezabehr/vendor/laravel/framework/src/Illuminate/Log/Logger.php:87 #4 Illuminate\Log\Logger:error in /home/rezabehr/vendor/laravel/framework/src/Illuminate/Log/LogManager.php:498 #3 Illuminate\Log\LogManager:error in /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php:114 #2 Illuminate\Foundation\Exceptions\Handler:report in /home/rezabehr/app/Exceptions/Handler.php:37 #1 App\Exceptions\Handler:report in /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:81 #0 Illuminate\Foundation\Bootstrap\HandleExceptions:handleException in [internal]:0
11
UnexpectedValueException
/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php107
10
Monolog\Handler\StreamHandler write
/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php119
9
Monolog\Handler\RotatingFileHandler write
/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php39
8
Monolog\Handler\AbstractProcessingHandler handle
/vendor/monolog/monolog/src/Monolog/Logger.php344
7
Monolog\Logger addRecord
/vendor/monolog/monolog/src/Monolog/Logger.php707
6
Monolog\Logger error
/vendor/laravel/framework/src/Illuminate/Log/Logger.php176
5
Illuminate\Log\Logger writeLog
/vendor/laravel/framework/src/Illuminate/Log/Logger.php87
4
Illuminate\Log\Logger error
/vendor/laravel/framework/src/Illuminate/Log/LogManager.php498
3
Illuminate\Log\LogManager error
/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php114
2
Illuminate\Foundation\Exceptions\Handler report
/app/Exceptions/Handler.php37
1
App\Exceptions\Handler report
/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php81
0
Illuminate\Foundation\Bootstrap\HandleExceptions handleException
[internal]0
/home/rezabehr/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php
    /**
     * {@inheritdoc}
     */
    protected function write(array $record)
    {
        if (!is_resource($this->stream)) {
            if (null === $this->url || '' === $this->url) {
                throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().');
            }
            $this->createDir();
            $this->errorMessage = null;
            set_error_handler(array($this, 'customErrorHandler'));
            $this->stream = fopen($this->url, 'a');
            if ($this->filePermission !== null) {
                @chmod($this->url, $this->filePermission);
            }
            restore_error_handler();
            if (!is_resource($this->stream)) {
                $this->stream = null;
                throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: '.$this->errorMessage, $this->url));
            }
        }
 
        if ($this->useLocking) {
            // ignoring errors here, there's not much we can do about them
            flock($this->stream, LOCK_EX);
        }
 
        $this->streamWrite($this->stream, $record);
 
        if ($this->useLocking) {
            flock($this->stream, LOCK_UN);
        }
    }
 
    /**
     * Write to stream
     * @param resource $stream
     * @param array $record
     */
Arguments
  1. "The stream or file "/home/rezabehr/storage/logs/laravel-2022-01-25.log" could not be opened: failed to open stream: Disk quota exceeded"
    
/home/rezabehr/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php
        $this->url = $this->getTimedFilename();
        $this->close();
    }
 
    /**
     * {@inheritdoc}
     */
    protected function write(array $record)
    {
        // on the first record written, if the log is new, we should rotate (once per day)
        if (null === $this->mustRotate) {
            $this->mustRotate = !file_exists($this->url);
        }
 
        if ($this->nextRotation < $record['datetime']) {
            $this->mustRotate = true;
            $this->close();
        }
 
        parent::write($record);
    }
 
    /**
     * Rotates the files.
     */
    protected function rotate()
    {
        // update filename
        $this->url = $this->getTimedFilename();
        $this->nextRotation = new \DateTime('tomorrow');
 
        // skip GC of old logs if files are unlimited
        if (0 === $this->maxFiles) {
            return;
        }
 
        $logFiles = glob($this->getGlobPattern());
        if ($this->maxFiles >= count($logFiles)) {
            // no files to remove
            return;
Arguments
  1. array:8 [
      "message" => "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
      "context" => array:1 [
        "exception" => ErrorException {#146
          #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
          #code: 0
          #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
          #line: 122
          #severity: E_WARNING
        }
      ]
      "level" => 400
      "level_name" => "ERROR"
      "channel" => "local"
      "datetime" => DateTime @1643095417 {#363
        date: 2022-01-25 10:53:37.991906 Asia/Tehran (+03:30)
      }
      "extra" => []
      "formatted" => """
        [2022-01-25 10:53:37] local.ERROR: file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded {"exception":"[object] (ErrorException(code: 0): file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded at /home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122)\n
        [stacktrace]\n
        #0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'file_put_conten...', '/home/rezabehr/...', 122, Array)\n
        #1 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122): file_put_contents('/home/rezabehr/...', 'a:3:{s:6:\"_toke...', 2)\n
        #2 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php(83): Illuminate\\Filesystem\\Filesystem->put('/home/rezabehr/...', 'a:3:{s:6:\"_toke...', true)\n
        #3 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/Store.php(129): Illuminate\\Session\\FileSessionHandler->write('HGsGDQ4IIiLccwh...', 'a:3:{s:6:\"_toke...')\n
        #4 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(87): Illuminate\\Session\\Store->save()\n
        #5 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(218): Illuminate\\Session\\Middleware\\StartSession->terminate(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #6 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(189): Illuminate\\Foundation\\Http\\Kernel->terminateMiddleware(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #7 /home/rezabehr/public_html/index.php(63): Illuminate\\Foundation\\Http\\Kernel->terminate(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #8 {main}\n
        "} \n
        """
    ]
    
/home/rezabehr/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php
 *
 * @author Jordi Boggiano <j.boggiano@seld.be>
 * @author Christophe Coevoet <stof@notk.org>
 */
abstract class AbstractProcessingHandler extends AbstractHandler
{
    /**
     * {@inheritdoc}
     */
    public function handle(array $record)
    {
        if (!$this->isHandling($record)) {
            return false;
        }
 
        $record = $this->processRecord($record);
 
        $record['formatted'] = $this->getFormatter()->format($record);
 
        $this->write($record);
 
        return false === $this->bubble;
    }
 
    /**
     * Writes the record down to the log of the implementing handler
     *
     * @param  array $record
     * @return void
     */
    abstract protected function write(array $record);
 
    /**
     * Processes a record.
     *
     * @param  array $record
     * @return array
     */
    protected function processRecord(array $record)
    {
Arguments
  1. array:8 [
      "message" => "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
      "context" => array:1 [
        "exception" => ErrorException {#146
          #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
          #code: 0
          #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
          #line: 122
          #severity: E_WARNING
        }
      ]
      "level" => 400
      "level_name" => "ERROR"
      "channel" => "local"
      "datetime" => DateTime @1643095417 {#363
        date: 2022-01-25 10:53:37.991906 Asia/Tehran (+03:30)
      }
      "extra" => []
      "formatted" => """
        [2022-01-25 10:53:37] local.ERROR: file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded {"exception":"[object] (ErrorException(code: 0): file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded at /home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122)\n
        [stacktrace]\n
        #0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'file_put_conten...', '/home/rezabehr/...', 122, Array)\n
        #1 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122): file_put_contents('/home/rezabehr/...', 'a:3:{s:6:\"_toke...', 2)\n
        #2 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php(83): Illuminate\\Filesystem\\Filesystem->put('/home/rezabehr/...', 'a:3:{s:6:\"_toke...', true)\n
        #3 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/Store.php(129): Illuminate\\Session\\FileSessionHandler->write('HGsGDQ4IIiLccwh...', 'a:3:{s:6:\"_toke...')\n
        #4 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(87): Illuminate\\Session\\Store->save()\n
        #5 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(218): Illuminate\\Session\\Middleware\\StartSession->terminate(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #6 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(189): Illuminate\\Foundation\\Http\\Kernel->terminateMiddleware(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #7 /home/rezabehr/public_html/index.php(63): Illuminate\\Foundation\\Http\\Kernel->terminate(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #8 {main}\n
        "} \n
        """
    ]
    
/home/rezabehr/vendor/monolog/monolog/src/Monolog/Logger.php
        }
        $ts->setTimezone(static::$timezone);
 
        $record = array(
            'message' => (string) $message,
            'context' => $context,
            'level' => $level,
            'level_name' => $levelName,
            'channel' => $this->name,
            'datetime' => $ts,
            'extra' => array(),
        );
 
        try {
            foreach ($this->processors as $processor) {
                $record = call_user_func($processor, $record);
            }
 
            while ($handler = current($this->handlers)) {
                if (true === $handler->handle($record)) {
                    break;
                }
 
                next($this->handlers);
            }
        } catch (Exception $e) {
            $this->handleException($e, $record);
        }
 
        return true;
    }
 
    /**
     * Ends a log cycle and frees all resources used by handlers.
     *
     * Closing a Handler means flushing all buffers and freeing any open resources/handles.
     * Handlers that have been closed should be able to accept log records again and re-open
     * themselves on demand, but this may not always be possible depending on implementation.
     *
     * This is useful at the end of a request and will be called automatically on every handler
Arguments
  1. array:8 [
      "message" => "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
      "context" => array:1 [
        "exception" => ErrorException {#146
          #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
          #code: 0
          #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
          #line: 122
          #severity: E_WARNING
        }
      ]
      "level" => 400
      "level_name" => "ERROR"
      "channel" => "local"
      "datetime" => DateTime @1643095417 {#363
        date: 2022-01-25 10:53:37.991906 Asia/Tehran (+03:30)
      }
      "extra" => []
      "formatted" => """
        [2022-01-25 10:53:37] local.ERROR: file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded {"exception":"[object] (ErrorException(code: 0): file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded at /home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122)\n
        [stacktrace]\n
        #0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'file_put_conten...', '/home/rezabehr/...', 122, Array)\n
        #1 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122): file_put_contents('/home/rezabehr/...', 'a:3:{s:6:\"_toke...', 2)\n
        #2 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php(83): Illuminate\\Filesystem\\Filesystem->put('/home/rezabehr/...', 'a:3:{s:6:\"_toke...', true)\n
        #3 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/Store.php(129): Illuminate\\Session\\FileSessionHandler->write('HGsGDQ4IIiLccwh...', 'a:3:{s:6:\"_toke...')\n
        #4 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(87): Illuminate\\Session\\Store->save()\n
        #5 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(218): Illuminate\\Session\\Middleware\\StartSession->terminate(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #6 /home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(189): Illuminate\\Foundation\\Http\\Kernel->terminateMiddleware(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #7 /home/rezabehr/public_html/index.php(63): Illuminate\\Foundation\\Http\\Kernel->terminate(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))\n
        #8 {main}\n
        "} \n
        """
    ]
    
/home/rezabehr/vendor/monolog/monolog/src/Monolog/Logger.php
     * @param  array  $context The log context
     * @return bool   Whether the record has been processed
     */
    public function err($message, array $context = array())
    {
        return $this->addRecord(static::ERROR, $message, $context);
    }
 
    /**
     * Adds a log record at the ERROR level.
     *
     * This method allows for compatibility with common interfaces.
     *
     * @param  string $message The log message
     * @param  array  $context The log context
     * @return bool   Whether the record has been processed
     */
    public function error($message, array $context = array())
    {
        return $this->addRecord(static::ERROR, $message, $context);
    }
 
    /**
     * Adds a log record at the CRITICAL level.
     *
     * This method allows for compatibility with common interfaces.
     *
     * @param  string $message The log message
     * @param  array  $context The log context
     * @return bool   Whether the record has been processed
     */
    public function crit($message, array $context = array())
    {
        return $this->addRecord(static::CRITICAL, $message, $context);
    }
 
    /**
     * Adds a log record at the CRITICAL level.
     *
     * This method allows for compatibility with common interfaces.
Arguments
  1. 400
    
  2. "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
    
  3. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
        #code: 0
        #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
        #line: 122
        #severity: E_WARNING
      }
    ]
    
/home/rezabehr/vendor/laravel/framework/src/Illuminate/Log/Logger.php
     * @return void
     */
    public function write($level, $message, array $context = [])
    {
        $this->writeLog($level, $message, $context);
    }
 
    /**
     * Write a message to the log.
     *
     * @param  string  $level
     * @param  string  $message
     * @param  array  $context
     * @return void
     */
    protected function writeLog($level, $message, $context)
    {
        $this->fireLogEvent($level, $message = $this->formatMessage($message), $context);
 
        $this->logger->{$level}($message, $context);
    }
 
    /**
     * Register a new callback handler for when a log event is triggered.
     *
     * @param  \Closure  $callback
     * @return void
     *
     * @throws \RuntimeException
     */
    public function listen(Closure $callback)
    {
        if (! isset($this->dispatcher)) {
            throw new RuntimeException('Events dispatcher has not been set.');
        }
 
        $this->dispatcher->listen(MessageLogged::class, $callback);
    }
 
    /**
Arguments
  1. "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
    
  2. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
        #code: 0
        #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
        #line: 122
        #severity: E_WARNING
      }
    ]
    
/home/rezabehr/vendor/laravel/framework/src/Illuminate/Log/Logger.php
     *
     * @param  string  $message
     * @param  array  $context
     * @return void
     */
    public function critical($message, array $context = [])
    {
        $this->writeLog(__FUNCTION__, $message, $context);
    }
 
    /**
     * Log an error message to the logs.
     *
     * @param  string  $message
     * @param  array  $context
     * @return void
     */
    public function error($message, array $context = [])
    {
        $this->writeLog(__FUNCTION__, $message, $context);
    }
 
    /**
     * Log a warning message to the logs.
     *
     * @param  string  $message
     * @param  array  $context
     * @return void
     */
    public function warning($message, array $context = [])
    {
        $this->writeLog(__FUNCTION__, $message, $context);
    }
 
    /**
     * Log a notice to the logs.
     *
     * @param  string  $message
     * @param  array  $context
     * @return void
Arguments
  1. "error"
    
  2. "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
    
  3. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
        #code: 0
        #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
        #line: 122
        #severity: E_WARNING
      }
    ]
    
/home/rezabehr/vendor/laravel/framework/src/Illuminate/Log/LogManager.php
     *
     * @return void
     */
    public function critical($message, array $context = [])
    {
        $this->driver()->critical($message, $context);
    }
 
    /**
     * Runtime errors that do not require immediate action but should typically
     * be logged and monitored.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function error($message, array $context = [])
    {
        $this->driver()->error($message, $context);
    }
 
    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things
     * that are not necessarily wrong.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function warning($message, array $context = [])
    {
        $this->driver()->warning($message, $context);
    }
 
    /**
     * Normal but significant events.
Arguments
  1. "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
    
  2. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
        #code: 0
        #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
        #line: 122
        #severity: E_WARNING
      }
    ]
    
/home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php
     */
    public function report(Exception $e)
    {
        if ($this->shouldntReport($e)) {
            return;
        }
 
        if (method_exists($e, 'report')) {
            return $e->report();
        }
 
        try {
            $logger = $this->container->make(LoggerInterface::class);
        } catch (Exception $ex) {
            throw $e;
        }
 
        $logger->error(
            $e->getMessage(),
            array_merge($this->context(), ['exception' => $e]
        ));
    }
 
    /**
     * Determine if the exception should be reported.
     *
     * @param  \Exception  $e
     * @return bool
     */
    public function shouldReport(Exception $e)
    {
        return ! $this->shouldntReport($e);
    }
 
    /**
     * Determine if the exception is in the "do not report" list.
     *
     * @param  \Exception  $e
     * @return bool
     */
Arguments
  1. "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
    
  2. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
        #code: 0
        #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
        #line: 122
        #severity: E_WARNING
      }
    ]
    
/home/rezabehr/app/Exceptions/Handler.php
 
    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];
 
    /**
     * Report or log an exception.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }
 
    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }
}
 
Arguments
  1. ErrorException {#146
      #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
      #code: 0
      #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
      #line: 122
      #severity: E_WARNING
    }
    
/home/rezabehr/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php
    }
 
    /**
     * Handle an uncaught exception from the application.
     *
     * Note: Most exceptions can be handled via the try / catch block in
     * the HTTP and Console kernels. But, fatal error exceptions must
     * be handled differently since they are not normal exceptions.
     *
     * @param  \Throwable  $e
     * @return void
     */
    public function handleException($e)
    {
        if (! $e instanceof Exception) {
            $e = new FatalThrowableError($e);
        }
 
        try {
            $this->getExceptionHandler()->report($e);
        } catch (Exception $e) {
            //
        }
 
        if ($this->app->runningInConsole()) {
            $this->renderForConsole($e);
        } else {
            $this->renderHttpResponse($e);
        }
    }
 
    /**
     * Render an exception to the console.
     *
     * @param  \Exception  $e
     * @return void
     */
    protected function renderForConsole(Exception $e)
    {
        $this->getExceptionHandler()->renderForConsole(new ConsoleOutput, $e);
Arguments
  1. ErrorException {#146
      #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
      #code: 0
      #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
      #line: 122
      #severity: E_WARNING
    }
    
[internal]
Arguments
  1. ErrorException {#146
      #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/HGsGDQ4IIiLccwhWJaaNOck4OjYOgKLHsLOVtdFf): failed to open stream: Disk quota exceeded"
      #code: 0
      #file: "/home/rezabehr/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
      #line: 122
      #severity: E_WARNING
    }
    

Environment & details:

Key Value
id
"26"
title
"کشف و تصحیح خطا مقاله شماره 2"
empty
empty
empty
empty
Key Value
PATH
"/usr/local/bin:/bin:/usr/bin"
HTTP_ACCEPT
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_ENCODING
"br,gzip"
HTTP_ACCEPT_LANGUAGE
"en-US,en;q=0.5"
HTTP_CONNECTION
"Keep-Alive"
HTTP_HOST
"rezabehrouzi.com"
HTTP_USER_AGENT
"CCBot/2.0 (https://commoncrawl.org/faq/)"
HTTP_IF_MODIFIED_SINCE
"Sat, 16 Oct 2021 02:00:23 GMT"
DOCUMENT_ROOT
"/home/rezabehr/public_html"
REMOTE_ADDR
"52.203.18.65"
REMOTE_PORT
"57274"
SERVER_ADDR
"46.4.45.211"
SERVER_NAME
"rezabehrouzi.com"
SERVER_ADMIN
"webmaster@rezabehrouzi.com"
SERVER_PORT
"443"
REQUEST_SCHEME
"https"
REQUEST_URI
"/article?id=26&title=%DA%A9%D8%B4%D9%81%20%D9%88%20%D8%AA%D8%B5%D8%AD%DB%8C%D8%AD%20%D8%AE%D8%B7%D8%A7%20%D9%85%D9%82%D8%A7%D9%84%D9%87%20%D8%B4%D9%85%D8%A7%D8%B1%D9%87%202"
REDIRECT_URL
"/article"
REDIRECT_QUERY_STRING
"id=26&title=%DA%A9%D8%B4%D9%81%20%D9%88%20%D8%AA%D8%B5%D8%AD%DB%8C%D8%AD%20%D8%AE%D8%B7%D8%A7%20%D9%85%D9%82%D8%A7%D9%84%D9%87%20%D8%B4%D9%85%D8%A7%D8%B1%D9%87%202"
HTTPS
"on"
REDIRECT_STATUS
"200"
SSL_PROTOCOL
"TLSv1.3"
SSL_CIPHER
"TLS_AES_256_GCM_SHA384"
SSL_CIPHER_USEKEYSIZE
"256"
SSL_CIPHER_ALGKEYSIZE
"256"
SCRIPT_FILENAME
"/home/rezabehr/public_html/index.php"
QUERY_STRING
"id=26&title=%DA%A9%D8%B4%D9%81%20%D9%88%20%D8%AA%D8%B5%D8%AD%DB%8C%D8%AD%20%D8%AE%D8%B7%D8%A7%20%D9%85%D9%82%D8%A7%D9%84%D9%87%20%D8%B4%D9%85%D8%A7%D8%B1%D9%87%202"
SCRIPT_URI
"https://rezabehrouzi.com/article"
SCRIPT_URL
"/article"
SCRIPT_NAME
"/index.php"
SERVER_PROTOCOL
"HTTP/1.1"
SERVER_SOFTWARE
"LiteSpeed"
REQUEST_METHOD
"GET"
X-LSCACHE
"on"
PHP_SELF
"/index.php"
REQUEST_TIME_FLOAT
1643095417.9247
REQUEST_TIME
1643095417
argv
array:1 [
  0 => "id=26&title=%DA%A9%D8%B4%D9%81%20%D9%88%20%D8%AA%D8%B5%D8%AD%DB%8C%D8%AD%20%D8%AE%D8%B7%D8%A7%20%D9%85%D9%82%D8%A7%D9%84%D9%87%20%D8%B4%D9%85%D8%A7%D8%B1%D9%87%202"
]
argc
1
APP_NAME
"Laravel"
APP_ENV
"local"
APP_KEY
"base64:rb9vf2b1y2CyDO7rL6noyDaiALdVJOKYNOJ9FCMGmQQ="
APP_DEBUG
"true"
APP_URL
"http://localhost"
LOG_CHANNEL
"stack"
DB_CONNECTION
"mysql"
DB_HOST
"localhost"
DB_PORT
"3306"
DB_DATABASE
"rezabehr_main"
DB_USERNAME
"rezabehr_milad"
DB_PASSWORD
"@passwordlx1"
BROADCAST_DRIVER
"log"
CACHE_DRIVER
"file"
QUEUE_CONNECTION
"sync"
SESSION_DRIVER
"file"
SESSION_LIFETIME
"120"
REDIS_HOST
"127.0.0.1"
REDIS_PASSWORD
"null"
REDIS_PORT
"6379"
MAIL_DRIVER
"smtp"
MAIL_HOST
"smtp.mailtrap.io"
MAIL_PORT
"2525"
MAIL_USERNAME
"null"
MAIL_PASSWORD
"null"
MAIL_ENCRYPTION
"null"
PUSHER_APP_ID
""
PUSHER_APP_KEY
""
PUSHER_APP_SECRET
""
PUSHER_APP_CLUSTER
"mt1"
MIX_PUSHER_APP_KEY
""
MIX_PUSHER_APP_CLUSTER
"mt1"
Key Value
APP_NAME
"Laravel"
APP_ENV
"local"
APP_KEY
"base64:rb9vf2b1y2CyDO7rL6noyDaiALdVJOKYNOJ9FCMGmQQ="
APP_DEBUG
"true"
APP_URL
"http://localhost"
LOG_CHANNEL
"stack"
DB_CONNECTION
"mysql"
DB_HOST
"localhost"
DB_PORT
"3306"
DB_DATABASE
"rezabehr_main"
DB_USERNAME
"rezabehr_milad"
DB_PASSWORD
"@passwordlx1"
BROADCAST_DRIVER
"log"
CACHE_DRIVER
"file"
QUEUE_CONNECTION
"sync"
SESSION_DRIVER
"file"
SESSION_LIFETIME
"120"
REDIS_HOST
"127.0.0.1"
REDIS_PASSWORD
"null"
REDIS_PORT
"6379"
MAIL_DRIVER
"smtp"
MAIL_HOST
"smtp.mailtrap.io"
MAIL_PORT
"2525"
MAIL_USERNAME
"null"
MAIL_PASSWORD
"null"
MAIL_ENCRYPTION
"null"
PUSHER_APP_ID
""
PUSHER_APP_KEY
""
PUSHER_APP_SECRET
""
PUSHER_APP_CLUSTER
"mt1"
MIX_PUSHER_APP_KEY
""
MIX_PUSHER_APP_CLUSTER
"mt1"
0. Whoops\Handler\PrettyPageHandler