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

    Parity فرد بهتر است یا زوج؟ 
اینكه كدام یك از دو حالت Parity موثرتر هستند كاملا بستگی به شرایط دارد. یكی از خطاهای رایج به نام Burst Error یا All-Bits Error وجود دارد . در این نوع خطا همه بیت ها یا 1 می شوند و یا 0 می شوند . در صورتی كه از Parity زوج استفاده شود آنگاه خطای همه 0 (All-0'S) قابل تشخیص نیست. ولی با انتخاب Parity فرد این خطا تشخیص داده می شود . پس اگر احتمال خطای همه 0 بیشتر است بهتر است كه از Parity فرد استفاده شود. اگر احتمال خطای همه 1 بیشتر است، آنگاه دو حالت وجود دارد اگر تعداد كل بیت ها ( همراه با Parity ، N+1) زوج باشد باید از Parity فرد و اگر تعداد كل بیت ها فرد باشد از Parity زوج استفاده كرد .

می توانیم بجای آنكه به كل بیت ها یك Parity اختصاص دهیم به هر گروه از آنها، مثلا هر یک بایت، یك Parity اختصاص دهیم. در این حالت بدیهی است كه میزان Overhead از 1/N به M/N افزایش خواهد یافت. (M تعداد گروه یا بایت ها است) در این حالت حد اكثر M خطا قابل تشخیص است، البته به شرطی كه خطا ها در بایت های مختلف باشند. اگر هر دو نوع خطای همه 0 و همه 1 ممكن است اتفاق بیفتد می توانید از پریتى Parity برای یك بایت و از Parity فرد برای بایت بعدی استفاده كنید

2-1-2 کد همینگ
در اصل کد همینگ یک نوع کدگذاری از خانواده ی کدگذاری پریتی است . در روش همینگ از سه بیت توازن برای آشکارسازی و اصلاح خطا استفاده میشود. همانطور که در شکل مشخص است چهار بیت d1 الی d4 به عنوان داده ورودی در نظر گرفته میشوند. سپس با ترتیب نشان داده شده بیتهای توازن p1 تا p3 از XOR کردن بیت ها محاسبه می شوند و در نهایت داده هفت بیتی بدست آمده ارسال می گردد.



                                                              
                                           نحوه محاسبه بیتهای توازن در کد همینگ


                             
نمایش گرافیکی از 4 بیت اطلاعات و 3 بیت پریتی که نشان می دهد کدام بیت داده در کدام بیت پریتی اثر گذار است.

در مقصد بیت توازن با بیتهای گروه خود XOR میشود مثلا بیتهای p1 و d1 و d2 و d4 با هم XOR می شوند و نتیجه به عنوان بیت اول نشانه s1 در نظر گرفته میشود به همین ترتیب بیتهای دوم و سوم نشانه هم بدست می آیند. هرگاه هر سه بیت نشانه صفر باشد داده درست منتقل شده است. اما در صورت یک بودن هر یک از بیت های خطا رخ داده است. اگر سه بیت نشانه را از کوچک به بزرگ در کنار هم قرار دهیم یک عدد سه بیتی بدست می آید که مقدار آن نشان دهنده محل وقوع خطاست . با عوض کردن بیت مورد نظر داده اولیه بدست می آید. باید توجه داشت که این روش همینگ امکان اصلاح یک خطا را دارد و در صورت بروز دو خطا فقط امکان آشکار سازی وجود دارد.

                   
                                                خطا در بیت ششم رخ داده است

برای آنكه بدانیم به چند بیت برای Parity نیاز داریم ، باید طبق رابطه زیر عمل كنیم : اگر تعداد بیت های داده برابر D باشد و تعداد بیت های Parity برابر R باشد. در آن صورت جمعا" D+R بیت داریم كه هر كدام از آنها می تواند دچار خطا شود یعنی با فرض اینكه خطا های ما تك بیتی هستند، D+R حالت مختلف خطا داریم. علاوه بر حالت های خطا یك حالت درست هم داریم كه در آن هیچ بیتی دچار اشكال نشده است. پس جمعا D+R+1 حالت ممكن وجود دارد كه باید توسط Parity نمایش داده شود.
پس با توجه به اینكه R بیت Parity وجود دارد می توانیم 2R حالت مختلف داشته باشیم كه شامل حالت های خطا و درست می شود. پس اگر داشته باشیم :


                                                                        2R >= R+D+1       


آنگاه می توانیم مطمئن باشیم كه تعداد بیت های Parity كافى است.


2-1-3
جمع کنترلی ( Checksum )
این روش در اصل برای سیستمهای انتقال اطلاعات استفاده می شود. ایده اصلی آن این است كه بایت های یك بلوك از داده ها با یك دیگر جمع شوند و حاصل جمع نیز ارسال شود. گیرنده نیز داده ها را جمع می كند و اگر با حاصل جمع دریافتی یكی نباشد، می فهمد كه خطا روى داده است. گونه های مختلفی برای Checkcum وجود دارد كه در اینجا آنها را بررسی می كنیم: (فرض كنیم كه هر كلمه از داده ها داراى طول D باشد).
2-1-3-1 Single-Percision (
تک دقتی):
در این روش جمع به پیمانه (Modulo) 2D انجام می شود. یعنی حاصل جمع به 2D تقسیم می شود و باقیمانده آن فقط در نظر گرفته می شود. یا به عبارتی تنها D رقم سمت راست حاصل جمع در نظر گرفته می شود.

2-1-3-2 Double-Percision (
دقت مضاعف):
كاملا شبیه Single است ولی بجای 2D از 22D استفاده می شود كه در نتیجه این روش خطاهای بیشتری را می تواند كشف كند.


2-1-3-3 Residue Checksum (
باقیمانده):
 
در این روش بیت هاى اضافی بعد از D اُمین بیت كه در روش Single دور ریخته می شد، مجددا با خود داده اصلی جمع می شود كه در نتیجه قابلیت اطمینان سیستم بالاتر می رود. زیرا وجود خطا در آن بیت هاى اضافی نیز تاثیر گذار هستند

2-1-3-4 Honeywell Checksum :

در این روش هر دو كلمه را به هم می چسبانند و سپس كل این مجموعه های دوتایی را با هم جمع میكنند و نتیجه را به پیمانه 22D در نظر می گیرند. حسن این روش این است كه اگر یك خطا همواره روی یكی از بیت هاى هر كلمه (مثلا بیت سوم) اتفاق بیفتد، در گونه های قبلى ممكن بود تشخیص داده نشود، ولی در این روش جلوى این نوع خطا ها نیز گرفته می شود

   
نکته : روشهای Checksum فقط می توانند وجود خطا را تشخیص دهند ولی نمی توانند آن را تصحیح كنند. به همین خاطر اگر خطایی روى دهد، كل بلوك باید مجددا ارسال شود



2-1-4
کد برگر (Berger Code )
کد بِرگر یك روش جداپذیر (Separable) است. این روش به این شكل عمل می كند كه ابتدا تعداد یك های درون داده را می شمارد، سپس از عدد به دست آمده مكمل می گیرد و سپس این عدد به دست آمده را در كنار عدد اصلی قرار میدهد
برای مثال فرض كنید عدد 11101 را داریم. درون این عدد چهار 1 وجود دارد كه فرم باینرى آن 100 می شود و مكمل آن 011 است. حالا اگر این عدد را در كنار عدد اصلی قرار دهیم، داریم 11101011 . این روش می تواند هر نوع خطای Unidirectional را تشخیص دهد، چه خطا از 0 به 1 باشد یا برعكس آن. اما اگر هم زمان بعضی 0 ها به 1 تبدیل شوند، و همان تعداد 1 نیز به 0 تبدیل شوند، نمی تواند خطا را تشخیص دهد




2-1-5
کد افزونگی چرخشی CRC
یک کد افزونگی چرخشی (به انگلیسی: Cyclic redundancy code) (سی‌آرسی) تابع درهم‌سازی غیرایمنی است که جهت تشخیص تغییرات تصادفی رو داده‌های خام طراحی شده‌است. این تابع عموما در شبکه‌های مخابراتی دیجیتال و وسایل ذخیره‌سازی داده‌ها از جمله دیسک سخت مورد استفاده قرار می‌گیرد. یک دستگاه دارای قابلیت سی‌آرسی، یک توالی کوتاه و با طول ثابت را، به نام کد سی‌آرسی (یا فقط سی‌آرسی)، برای هر بلاک از داده‌ها محاسبه نموده و آن را همراه با داده‌ها ذخیره یا ارسال می‌کند. زمانی که یک بلاک دریافت یا خوانده می‌شود دستگاه محاسبه را تکرار می‌کند؛ در صورت مغایرت با کد محاسبه شده قبلی مشخص می‌شود که این بلاک دارای خطای داده است و در این حالت دستگاه ممکن است عملی را جهت اصلاح خطا از جمله خواندن یا درخواست ارسال مجدد بلاک انجام دهد. اصطلاح سی‌آرسی می‌تواند به کد اعتبارسنج یا تابع تولید کد اطلاق شود. سی‌آرسی‌ها به جهت پیاده‌سازی ساده در سخت‌افزار دودویی، سادگی تحلیل ریاضی آن‌ها و عملکرد خوب در تشخیص خطاهای معمول حاصل از اختلال در کانال‌های انتقال دارای محبوبیت زیادی هستند. سی‌آرسی توسط W. Wesley Peterson اختراع و در مقاله ۱۹۶۱ وی منتشر شد . سی‌آرسی 32 بیتی پیشنهادی موسسه مهندسین الکتریک و الکترونیک (IEEE)، که در اترنت و سایر جاها استفاده شده‌است، در کنفرانس مخابراتی سال 1975 ظاهر شد.
سی‌آرسی یک کد تشخیص خطا است. محاسبه آن شبیه عمل تقسیم اعشاری است که خارج قسمت حذف می‌شود و باقیمانده به عنوان نتیجه در نظر گرفته می‌شود، با این تفاوت مهم که محاسبات آن محاسبات بدون رقم نقلی از یک میدان محدود است. اعلام یک سی‌آرسی خاص با مشخص کردن مقسم و سایر مشخصات آن انجام می‌شود.
اگرچه سی‌آرسی‌ها می‌توانند با استفاده از هر میدان محدودی ساخته شوند، همه سی‌آرسی‌های پرکاربرد از میدان محدود GF(2) بهره می‌برند. این میدانی از دو عنصر، عموما به نام ۰ و ۱، است که به راحتی با معماری کامپیوتر سازگار است. یک دلیل مهم برای محبوبیت سی‌آرسی‌ها برای تشخیص تغییرات تصادفی داده‌ها اطمینان از کیفیت آن‌ها است. نوعا"، یک سی‌آرسی nبیتی، که برای یک بلاک داده با طول دلخواه محاسبه شده‌است، هر حوزه خطای با طول کمتر از n بیت (به عبارت دیگر، هر تغییری که محدوده آن بیش از n بیت مجاور از داده‌ها نباشد) و 1-2^(-n) تعداد از سایر حوزه‌های با طول بیش از n بیت را تشخیص می‌دهد. خطاها در هیچ‌یک از کانال‌های انتقال و رسانه‌های ذخیره‌سازی مغناطیسی دارای توزیع تصادفی نیستند و در نتیجه فایده خواص سی‌آرسی‌ها را نسبت به سایر روش‌های تشخیص خطا از جمله کدهای چندگانه زوجیت بیشتر می‌کنند. ساده‌ترین سامانه تشخیص خطا، بیت زوجیت، در واقع یک سی‌آرسی عادی است که از مقسم دوبیتی ۱۱ استفاده می‌کند.


2-1-5-1
سی‌آرسی‌ها و تمامیت داده‌ها
سی‌آرسی‌ها، به خودی خود، راهکار مناسبی برای حفاظت در مقابل تغییرات عمدی روی داده نیستند (مثلا در برنامه‌های اعتبارسنجی)، چون مبانی ساده ریاضیات آن‌ها باعث می‌شود که بتوان هر تغییر دلخواه را روی داده‌ها طوری اعمال کرد که سی‌آرسی داده‌ها تغییر نکند. اغلب این فرض غلط وجود دارد که وقتی پیامی به همراه سی‌آرسی آن از یک کانال آزاد دریافت می‌شود و سی‌آرسی دریافتی با سی‌آرسی محاسبه شده مطابقت می‌کند پس پیام ممکن نیست در حین دریافت تغییر کرده باشد. این درست نیست چون هر دوی آن‌ها می‌توانند تغییر کرده باشند، به طوری که سی‌آرسی جدید با پیام جدید مطابقت کند. بنابراین سی‌آرسی‌ها می‌توانند جهت بررسی درستی داده‌ها استفاده شوند ولی نه برای اطمینان از تمامیت آن. ایجاد پیام‌های دیگری که همان سی‌آرسی را ایجاد کنند کار ساده‌ای است، خصوصا پیام‌هایی که بسیار شبیه پیام اصلی هستند. طبق طراحی پیامی که بسیار شبیه پیام اصلی است (و تفاوت آن تنها در یک الگوی تداخل تصادفی است) سی‌آرسی کاملا متفاوتی خواهد داشت و بنابراین تشخیص داده خواهد شد. در مقابل، یک راه موثر برای محافظت پیام‌ها در برابر تغییرات عمدی استفاده از کدهای اعتبار سنجی پیام همچون HMAC است.

2-1-5-2
محاسبه سی‌آرسی

ادامه در مقاله بعدی




ارائه شده توسط تیم 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
      "context" => array:1 [
        "exception" => ErrorException {#146
          #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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 @1643100301 {#363
        date: 2022-01-25 12:15:01.257568 Asia/Tehran (+03:30)
      }
      "extra" => []
      "formatted" => """
        [2022-01-25 12:15:01] local.ERROR: file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded {"exception":"[object] (ErrorException(code: 0): file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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('RjiaS1AdiMDPo6e...', '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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
      "context" => array:1 [
        "exception" => ErrorException {#146
          #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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 @1643100301 {#363
        date: 2022-01-25 12:15:01.257568 Asia/Tehran (+03:30)
      }
      "extra" => []
      "formatted" => """
        [2022-01-25 12:15:01] local.ERROR: file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded {"exception":"[object] (ErrorException(code: 0): file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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('RjiaS1AdiMDPo6e...', '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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
      "context" => array:1 [
        "exception" => ErrorException {#146
          #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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 @1643100301 {#363
        date: 2022-01-25 12:15:01.257568 Asia/Tehran (+03:30)
      }
      "extra" => []
      "formatted" => """
        [2022-01-25 12:15:01] local.ERROR: file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded {"exception":"[object] (ErrorException(code: 0): file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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('RjiaS1AdiMDPo6e...', '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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
    
  3. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
    
  2. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
    
  3. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
    
  2. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): failed to open stream: Disk quota exceeded"
    
  2. array:1 [
      "exception" => ErrorException {#146
        #message: "file_put_contents(/home/rezabehr/storage/framework/sessions/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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/RjiaS1AdiMDPo6egcM7VaCkPAUzYh5a9junsCmAx): 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
"27"
title
"کشف و تصحیح خطا مقاله شماره 3"
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 03:36:10 GMT"
DOCUMENT_ROOT
"/home/rezabehr/public_html"
REMOTE_ADDR
"52.203.18.65"
REMOTE_PORT
"42866"
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=27&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%203"
REDIRECT_URL
"/article"
REDIRECT_QUERY_STRING
"id=27&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%203"
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=27&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%203"
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
1643100301.1473
REQUEST_TIME
1643100301
argv
array:1 [
  0 => "id=27&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%203"
]
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