Laravel-excel: [BUG] Impor EXCEL terjadi pengecualian pada PHP7.4, tanggapan: Mencoba mengakses offset array pada nilai tipe int

Dibuat pada 5 Des 2019  ·  24Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

Versi

  • Versi PHP: PHP7.4 (Centos7 yum menginstal php74 bentuk versi stabil remisrepo)
  • Versi Laravel: Laravel Framework 5.8.35
  • Versi paket: maatwebsite / excel 3.1.17

Deskripsi

Impor EXCEL terjadi pengecualian di PHP7.4,
Pengecualian-> pesan () adalah:
Mencoba mengakses array offset pada nilai tipe int.

Langkah-langkah untuk Mereproduksi

Perilaku yang diharapkan:

impor file xlsx saat saya menjalankan kode di php72w

Perilaku sebenarnya:
terjadi setelah saya mengunggah keadaan server saya dari php7.2 ke php7.4 ketika saya mengimpor Excel akan gagal seperti di atas.

akan normal kembali jika saya downgrade dari php7.4 ke php7.2.

informasi tambahan

$extension=$request->file()['file']->getClientOriginalExtension();
$extension[0] = strtoupper($extension[0]);
Excel::import(new RejectedImport(), $request->file()['file']->path(),null,$extension);

Dan apa yang ada di Kelas Impor:

<?php

namespace App\Imports;

use App\Commodity;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class CommodityImport implements ToCollection, WithHeadingRow
{
    protected $isOverride=false;
    public function __construct($isOverride)
    {
        if($isOverride=='1')
            $this->isOverride=true;
    }

    /**
     * <strong i="26">@param</strong> Collection $collections
     */
    public function collection(Collection $collections)
    {
        foreach ($collections as $row)
        {
            $barcode = $row['barcode'] ?? $row['BARCODE'] ?? $row['Barcode'];
            if(!$barcode)continue;
            $name = $row['name'] ?? $row['NAME'] ?? $row['Name'] ?? '';
            $sku = $row['sku'] ?? $row['SKU'] ?? $row['Sku'] ?? '';
            $owner = $row['owner'] ?? $row['owner_name'] ?? $row['OWNER'] ?? $row['Owner'] ?? '';
            $commodity=Commodity::where('barcode',$row['barcode'])->first();
            if($commodity){
                if($this->isOverride){
                    $name?$commodity['name']= $name:false;
                    $sku?$commodity['sku']= $sku:false;
                    $owner?$commodity['owner_name']= $owner:false;
                    $commodity->update();
                }
            }else{
                Commodity::create([
                    'name' => $name,
                    'sku' => $sku,
                    'owner_name' => $owner,
                    'barcode' => $barcode,
                ]);
            }
        }
    }
}
bug

Komentar yang paling membantu

Di file PHPExcel "DefaultValueBinder.php", ganti baris 82 ini:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Ini akan memperbaiki kesalahan "Mencoba mengakses array offset pada nilai tipe int". Tetapi Anda juga perlu melakukan pencarian dan penggantian untuk kurung kurawal di seluruh kode PHPExcel untuk mengatasi kesalahan "Array dan string akses offset sintaks dengan kurung kurawal tidak berlaku lagi" yang juga mempengaruhi PHP ugrades ke 7.4. Saya hanya menggantinya dengan "[" dan "]" di mana-mana dan semuanya berfungsi dengan baik lagi.

Semua 24 komentar

Terima kasih telah mengirimkan tiketnya. Sayangnya informasi yang Anda berikan tidak lengkap. Kami perlu mengetahui versi mana yang Anda gunakan dan bagaimana mereproduksinya. Harap sertakan contoh kode. Sebelum kami dapat mengambilnya, harap periksa (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/.github/ISSUE_TEMPLATE.md) dan tambahkan informasi yang kurang. Untuk membuat pemrosesan tiket ini jauh lebih mudah, pastikan untuk memeriksa (https://laravel-excel.maatwebsite.nl/3.1/getting-started/contributing.html) dan periksa kembali apakah Anda telah mengisi template terbitan benar. Ini akan memungkinkan kami mengambil tiket Anda dengan lebih efisien. Masalah yang mengikuti pedoman dengan benar akan mendapatkan prioritas di atas masalah lainnya.

Dapatkah Anda menampilkan lebih banyak stacktrace, saya tidak dapat mengonfirmasi bug saat menggunakan paket di PHP7.4. Mungkin itu sesuatu di kode Anda sendiri?

Hai @patrickbrouwers terima kasih atas paketnya, saya penggemar beratnya!

Saya mendapatkan kesalahan serupa setelah memutakhirkan, meskipun selama ekspor, dan stacktrace menunjukkan masalahnya ada pada phpsreadsheet, bukan Laravel-Excel, tetapi Google membawa saya ke sini.

Inilah stacktrace:

#0 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php(56): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
#1 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php(34): PhpOffice\\PhpSpreadsheet\\Cell\\DefaultValueBinder::dataTypeForValue()
#2 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php(184): PhpOffice\\PhpSpreadsheet\\Cell\\DefaultValueBinder->bindValue()
#3 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php(2510): PhpOffice\\PhpSpreadsheet\\Cell\\Cell->setValue()
#4 /vendor/maatwebsite/excel/src/Sheet.php(402): PhpOffice\\PhpSpreadsheet\\Worksheet\\Worksheet->fromArray()
#5 /vendor/maatwebsite/excel/src/Sheet.php(502): Maatwebsite\\Excel\\Sheet->append()
#6 /vendor/maatwebsite/excel/src/Sheet.php(368): Maatwebsite\\Excel\\Sheet->appendRows()
#7 /vendor/maatwebsite/excel/src/Sheet.php(195): Maatwebsite\\Excel\\Sheet->fromCollection()
#8 /vendor/maatwebsite/excel/src/Writer.php(73): Maatwebsite\\Excel\\Sheet->export()
#9 /vendor/maatwebsite/excel/src/Excel.php(176): Maatwebsite\\Excel\\Writer->export()
#10 /vendor/maatwebsite/excel/src/Excel.php(97): Maatwebsite\\Excel\\Excel->export()
#11 /app/Console/Commands/EmailCardRequestList.php(89): Maatwebsite\\Excel\\Excel->store()

Diperbaiki di PhpSpreadsheet, lihat https://github.com/PHPOffice/PhpSpreadsheet/issues/1300

Di file PHPExcel "DefaultValueBinder.php", ganti baris 82 ini:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Ini akan memperbaiki kesalahan "Mencoba mengakses array offset pada nilai tipe int". Tetapi Anda juga perlu melakukan pencarian dan penggantian untuk kurung kurawal di seluruh kode PHPExcel untuk mengatasi kesalahan "Array dan string akses offset sintaks dengan kurung kurawal tidak berlaku lagi" yang juga mempengaruhi PHP ugrades ke 7.4. Saya hanya menggantinya dengan "[" dan "]" di mana-mana dan semuanya berfungsi dengan baik lagi.

DefaultValueBinder.php di dalam folder vendor? atau dimana itu? Masalah yang sama disini.

DefaultValueBinder.php di dalam folder vendor? atau dimana itu? Masalah yang sama disini.

Permintaan maaf saya. Saya seharusnya lebih spesifik. Dalam instalasi saya, itu terletak di folder PHPExcel di lokasi ini: PHPExcel \ Cell \ DefaultValueBinder.php
Ini mungkin berbeda dari instalasi Anda. Tetapi Anda harus dapat menjalankan pencariannya di sistem Anda.

baris yang menurut saya adalah 62, bukan 82 teman saya! dan saya berharap itu akan berhasil karena saya stres. Saya tidak dapat menemukan solusi untuk kesalahan dalam proyek saya: Kesalahan ERROR: Mencoba mengakses array offset pada nilai tipe int '/ Cell / DefaultValueBinder. php: 56 '. Saya memiliki harapan yang tinggi!

Ini adalah jalurnya: third_party / PHPExcel / Classes / PHPExcel / Cell / DefaultValueBinder.php
Di sini third_party berarti tempat Anda menyimpan folder PHPExcel Anda

Sekarang cari === '=' dan periksa apakah ada baris yang cocok kemudian ganti dengan yang khusus itu
0 === strpos ($ pValue, '=')
Istirahat akan sama. Dalam kasus saya itu
$ pValue [0] === '='

Di file PHPExcel "DefaultValueBinder.php", ganti baris 82 ini:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Ini akan memperbaiki kesalahan "Mencoba mengakses array offset pada nilai tipe int". Tetapi Anda juga perlu melakukan pencarian dan penggantian untuk kurung kurawal di seluruh kode PHPExcel untuk mengatasi kesalahan "Array dan string akses offset sintaks dengan kurung kurawal tidak berlaku lagi" yang juga mempengaruhi PHP ugrades ke 7.4. Saya hanya menggantinya dengan "[" dan "]" di mana-mana dan semuanya berfungsi dengan baik lagi.

berhasil! cinta kamu!

Di file PHPExcel "DefaultValueBinder.php", ganti baris 82 ini:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Ini akan memperbaiki kesalahan "Mencoba mengakses array offset pada nilai tipe int". Tetapi Anda juga perlu melakukan pencarian dan penggantian untuk kurung kurawal di seluruh kode PHPExcel untuk mengatasi kesalahan "Array dan string akses offset sintaks dengan kurung kurawal tidak berlaku lagi" yang juga mempengaruhi PHP ugrades ke 7.4. Saya hanya menggantinya dengan "[" dan "]" di mana-mana dan semuanya berfungsi dengan baik lagi.

Ketika saya hampir menurunkan versi ke PHP 7.3, terima kasih, ini membantu saya

Adakah ide untuk menyelesaikan masalah ini dengan PHP 7.4.3 & maatwebsite / excel versi 2.1?

Anda harus membayar paket phpexcel yang sudah tidak digunakan lagi dan mengelola sendiri garpu tersebut.

} elseif (0 === strpos($pValue, '=') && strlen($pValue) > 1) {

strpos of bool, rly?

Letakkan saja kode ini setelah dicentang ke is_bool dan is_float

Kode bukan bagian dari paket ini, tetapi dari PhpExcel lama

Di file PHPExcel "DefaultValueBinder.php", ganti baris 82 ini:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Ini akan memperbaiki kesalahan "Mencoba mengakses array offset pada nilai tipe int". Tetapi Anda juga perlu melakukan pencarian dan penggantian untuk kurung kurawal di seluruh kode PHPExcel untuk mengatasi kesalahan "Array dan string akses offset sintaks dengan kurung kurawal tidak berlaku lagi" yang juga mempengaruhi PHP ugrades ke 7.4. Saya hanya menggantinya dengan "[" dan "]" di mana-mana dan semuanya berfungsi dengan baik lagi.

Terima kasih kawan. Menyukainya. Thankx @burello <3

Hal terbaik yang harus dilakukan adalah memperbarui PHPOffice/PhpSpreadsheet atas 1,10 dalam proyek Anda - karena Kesalahan ini akan diperbaiki tanpa harus mengedit basis kode paket secara manual. Jadi bagi saya

composer require phpoffice/phpspreadsheet "^1.10"

memperbaiki masalah.

Saya juga mengalami kesalahan ini

sudah tidak mengerti

Di file PHPExcel "DefaultValueBinder.php", ganti baris 82 ini:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Ini akan memperbaiki kesalahan "Mencoba mengakses array offset pada nilai tipe int". Tetapi Anda juga perlu melakukan pencarian dan penggantian untuk kurung kurawal di seluruh kode PHPExcel untuk mengatasi kesalahan "Array dan string akses offset sintaks dengan kurung kurawal tidak berlaku lagi" yang juga mempengaruhi PHP ugrades ke 7.4. Saya hanya menggantinya dengan "[" dan "]" di mana-mana dan semuanya berfungsi dengan baik lagi.

Terima kasih bekerja untuk saya !! orderimportexport.ocmod opencart 3x

Di file PHPExcel "DefaultValueBinder.php", ganti baris 82 ini:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Ini akan memperbaiki kesalahan "Mencoba mengakses array offset pada nilai tipe int". Tetapi Anda juga perlu melakukan pencarian dan penggantian untuk kurung kurawal di seluruh kode PHPExcel untuk mengatasi kesalahan "Array dan string akses offset sintaks dengan kurung kurawal tidak berlaku lagi" yang juga mempengaruhi PHP ugrades ke 7.4. Saya hanya menggantinya dengan "[" dan "]" di mana-mana dan semuanya berfungsi dengan baik lagi.

Luar biasa, Anda menyelamatkan saya bro, terima kasih banyak

ganti baris ini 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
dengan berikut ini:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {

bekerja untukku ...

image

Laporkan kesalahan dalam PhpSpreadsheet ke PhpSpreadsheet.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat