Saya memiliki 2 pertanyaan serupa sebelumnya, namun setelah lebih banyak debugging saya sampai pada kesimpulan masalahnya (mungkin) tidak dalam kode saya sendiri.

Dalam kode saya, saya mencoba untuk membuka zip file gzip, untuk ini saya menulis metode kecil;

<?php

namespace App\Helpers;

class Gzip
{

    public static function unzip($filePath)
    {
        $outFilePath = str_replace('.gz', '', $filePath);

        // Open our files (in binary mode)
        $file = gzopen($filePath, 'rb');
        $outFile = fopen($outFilePath, 'wb');

        // Keep repeating until the end of the input file
        while (!gzeof($file)) {
            // Read buffer-size bytes
            // Both fwrite and gzread and binary-safe
            fwrite($outFile, gzread($file, 4096));
        }

        // Files are done, close files
        fclose($outFile);
        gzclose($file);
    }
}

Ini akan menghasilkan file yang tidak di-zip;

Gzip::unzip('path/to/file.csv.gz');

Di sinilah menjadi rumit, kadang-kadang akan membuka zip file dan kadang-kadang akan membuang pengecualian ini; (perlu diingat bahwa ini tidak ada hubungannya dengan StreamHandler itu sendiri, ini adalah masalah kesalahan input/output murni) exception fwritegunzip error

Aplikasi ini ditulis dalam Laravel 8.0, PHP7.4 berjalan di lingkungan Homestead (Ubuntu 18.04.5 LTS) laptop dasar saya berjalan di Windows 10.

Bagi saya itu sangat aneh bahwa pengecualian/kesalahan ini terjadi secara acak dan juga secara acak entah dari mana "memperbaiki" itu sendiri, jadi pertanyaan saya adalah: bagaimana ini terjadi, mengapa ini terjadi dan pada akhirnya bagaimana saya bisa memperbaikinya.

3
frogeyedman 4 Januari 2021, 23:51

3 jawaban

Jawaban Terbaik

Masalahnya bergantung pada saya menggunakan Homestead (kotak Vagrant) dengan NFS dihidupkan, Vagrant + NFS + Windows = masalah. Ada banyak kemungkinan solusi untuk masalah ini, sebagian besar pengecualian terkait errno5 turun ke NFS + Vagrant.

Solusi bagi saya adalah berhenti menggunakan NFS, untuk saat ini ini akan menjadi jawaban yang diterima karena ini memperbaiki masalah saya. Namun jika seseorang berhasil menemukan solusi aktual untuk kesalahan ini, saya akan menerimanya.

0
frogeyedman 15 Januari 2021, 07:33

errno=5 Input/output error adalah kegagalan untuk membaca/menulis sistem file Linux.

Server nyata, Anda perlu memeriksa disk dengan fsck, dll ...

Homestead berjalan di Windows, saya pikir kita harus mencari masalah windows 10 homestead errno -5.

Winnfsd - https://github.com/winnfsd/vagrant-winnfsd/ issue/96#issuecomment-336105685

3
Been Kyung-yoon 7 Januari 2021, 08:29

Jika Vagrant Anda di Windows menggunakan VirtualBox, HyperV dapat melakukan ini.

Coba nonaktifkan HyperV untuk VirtualBox di PowerShell, dan reboot Windows

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor

Salam

2
Maetti79 13 Januari 2021, 13:58