Laravel-excel: [BUG] حدث استيراد EXCEL استثناءً في PHP7.4 ، استجابة: محاولة الوصول إلى إزاحة المصفوفة على قيمة من النوع int

تم إنشاؤها على ٥ ديسمبر ٢٠١٩  ·  24تعليقات  ·  مصدر: Maatwebsite/Laravel-Excel

إصدارات

  • إصدار PHP: PHP7.4 (Centos7 yum مثبتة php74 شكل نسخة مستقرة remisrepo)
  • إصدار Laravel: Laravel Framework 5.8.35
  • إصدار الحزمة: maatwebsite / excel 3.1.17

وصف

استيراد EXCEL يحدث استثناء في PHP7.4 ،
استثناء-> الرسالة () هي:
محاولة الوصول إلى مجموعة الإزاحة على قيمة من النوع int.

خطوات التكاثر

سلوك متوقع:

استيراد ملف xlsx أثناء تشغيل الكود على php72w

السلوك الفعلي:
حدث ذلك بعد أن قمت بتحميل ظرف الخادم الخاص بي من php7.2 إلى php7.4 عندما أقوم باستيراد ملف Excel سوف يفشل كما هو مذكور أعلاه.

سيكون طبيعيًا مرة أخرى إذا قمت بالرجوع إلى إصدار أقدم من php7.4 إلى php7.2.

معلومة اضافية

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

وما هو موجود في فئة الاستيراد:

<?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

التعليق الأكثر فائدة

في ملف PHPExcel "DefaultValueBinder.php" ، استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {
سيؤدي هذا إلى إصلاح الخطأ "محاولة الوصول إلى إزاحة الصفيف على قيمة النوع int". ولكنك ستحتاج أيضًا إلى إجراء بحث واستبدال للأقواس المتعرجة في جميع أنحاء كود PHPExcel لمعالجة الخطأ "تم إهمال بناء جملة وصول الصفيف والسلسلة مع الأقواس المتعرجة" والذي يؤثر أيضًا على قيم PHP إلى 7.4. أنا ببساطة استبدلتهم بـ "[" و "]" في كل مكان وكل شيء يسير على ما يرام مرة أخرى.

ال 24 كومينتر

شكرا لتقديم التذكرة. للأسف المعلومات التي قدمتها غير كاملة. نحتاج إلى معرفة الإصدار الذي تستخدمه وكيفية إعادة إنتاجه. الرجاء تضمين أمثلة التعليمات البرمجية. قبل أن نتمكن من استلامه ، يرجى مراجعة (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/.github/ISSUE_TEMPLATE.md) وإضافة المعلومات المفقودة. لتسهيل معالجة هذه التذكرة كثيرًا ، يرجى التأكد من التحقق من (https://laravel-excel.maatwebsite.nl/3.1/getting-started/contributing.html) وتحقق جيدًا مما إذا كنت قد ملأت نموذج المشكلة بشكل صحيح. سيسمح لنا ذلك باستلام تذكرتك بكفاءة أكبر. المشكلات التي تتبع الإرشادات بشكل صحيح ستحظى بالأولوية على المشكلات الأخرى.

هل يمكنك إظهار المزيد من stacktrace ، لا يمكنني تأكيد الخطأ عند استخدام الحزمة على PHP7.4. ربما هو شيء في التعليمات البرمجية الخاصة بك؟

مرحبًا patrickbrouwers شكرًا على الحزمة ، أنا من

لقد تلقيت خطأً مماثلاً بعد الترقية ، على الرغم من أنه يحدث أثناء التصدير ، ويشير Stacktrace إلى أن المشكلة تكمن في جدول البيانات ، وليس Laravel-Excel ، ولكن Google جلبتني إلى هنا.

هنا هو تتبع المكدس:

#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()

ثابت في PhpSpreadsheet ، راجع https://github.com/PHPOffice/PhpSpreadsheet/issues/1300

في ملف PHPExcel "DefaultValueBinder.php" ، استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {
سيؤدي هذا إلى إصلاح الخطأ "محاولة الوصول إلى إزاحة الصفيف على قيمة النوع int". ولكنك ستحتاج أيضًا إلى إجراء بحث واستبدال للأقواس المتعرجة في جميع أنحاء كود PHPExcel لمعالجة الخطأ "تم إهمال بناء جملة وصول الصفيف والسلسلة مع الأقواس المتعرجة" والذي يؤثر أيضًا على قيم PHP إلى 7.4. أنا ببساطة استبدلتهم بـ "[" و "]" في كل مكان وكل شيء يسير على ما يرام مرة أخرى.

DefaultValueBinder.php داخل مجلد البائع؟ او اين هي نفس المشكلة هنا.

DefaultValueBinder.php داخل مجلد البائع؟ او اين هي نفس المشكلة هنا.

اعتذاري. كان يجب أن أكون أكثر تحديدا. في التثبيت الخاص بي ، كان موجودًا في مجلد PHPExcel في هذا الموقع: PHPExcel \ Cell \ DefaultValueBinder.php
قد يختلف عن التثبيت الخاص بك. ولكن يجب أن تكون قادرًا على إجراء بحث عنه على نظامك.

أعتقد أن الخط هو 62 وليس 82 يا صديقي! وآمل أن ينجح الأمر لأنني أشعر بالضغوط. لا يمكنني العثور على حل للخطأ في مشروعي: خطأ خطأ: محاولة الوصول إلى إزاحة الصفيف على قيمة من النوع int '/ Cell / DefaultValueBinder. php: 56 '. لدي آمال كبيرة!

هذا هو المسار: Third_party / PHPExcel / Classes / PHPExcel / Cell / DefaultValueBinder.php
هنا 3rd_party يعني المكان الذي احتفظت فيه بمجلد PHPExcel

ابحث الآن عن === '=' وتحقق مما إذا كان هناك سطر مطابق ثم استبدل ذلك بـ
0 === strpos ($ pValue ، '=')
الباقي سيكون هو نفسه. في حالتي كان كذلك
$ pValue [0] === '='

في ملف PHPExcel "DefaultValueBinder.php" ، استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {
سيؤدي هذا إلى إصلاح الخطأ "محاولة الوصول إلى إزاحة الصفيف على قيمة النوع int". ولكنك ستحتاج أيضًا إلى إجراء بحث واستبدال للأقواس المتعرجة في جميع أنحاء كود PHPExcel لمعالجة الخطأ "تم إهمال بناء جملة وصول الصفيف والسلسلة مع الأقواس المتعرجة" والذي يؤثر أيضًا على قيم PHP إلى 7.4. أنا ببساطة استبدلتهم بـ "[" و "]" في كل مكان وكل شيء يسير على ما يرام مرة أخرى.

إنها تعمل! احبك!

في ملف PHPExcel "DefaultValueBinder.php" ، استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {
سيؤدي هذا إلى إصلاح الخطأ "محاولة الوصول إلى إزاحة الصفيف على قيمة النوع int". ولكنك ستحتاج أيضًا إلى إجراء بحث واستبدال للأقواس المتعرجة في جميع أنحاء كود PHPExcel لمعالجة الخطأ "تم إهمال بناء جملة وصول الصفيف والسلسلة مع الأقواس المتعرجة" والذي يؤثر أيضًا على قيم PHP إلى 7.4. أنا ببساطة استبدلتهم بـ "[" و "]" في كل مكان وكل شيء يسير على ما يرام مرة أخرى.

عندما كنت على وشك الرجوع إلى إصدار PHP 7.3 ، ساعدني ذلك بفضل هذا الرجل

أي فكرة لحل هذه المشكلة مع PHP 7.4.3 & maatwebsite / excel version 2.1؟

سيكون عليك تفرع حزمة phpexcel التي تم إهمالها والحفاظ على الشوكة بنفسك.

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

strpos من منطقي ، rly؟

فقط ضع هذا الرمز بعد التحقق من is_bool و is_float

الكود ليس جزءًا من هذه الحزمة ، ولكنه جزء من PhpExcel القديم

في ملف PHPExcel "DefaultValueBinder.php" ، استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {
سيؤدي هذا إلى إصلاح الخطأ "محاولة الوصول إلى إزاحة الصفيف على قيمة النوع int". ولكنك ستحتاج أيضًا إلى إجراء بحث واستبدال للأقواس المتعرجة في جميع أنحاء كود PHPExcel لمعالجة الخطأ "تم إهمال بناء جملة وصول الصفيف والسلسلة مع الأقواس المتعرجة" والذي يؤثر أيضًا على قيم PHP إلى 7.4. أنا ببساطة استبدلتهم بـ "[" و "]" في كل مكان وكل شيء يسير على ما يرام مرة أخرى.

شكرا يا رجل. احببته. شكراً @ بوريلو <3

أفضل ما يمكنك فعله هو تحديث PHPOffice/PhpSpreadsheet أعلى من 1.10 في مشروعك - لأنه بعد ذلك سيتم إصلاح هذا الخطأ دون الحاجة إلى تحرير قاعدة بيانات الحزمة يدويًا. لذلك بالنسبة لي

composer require phpoffice/phpspreadsheet "^1.10"

أصلح المشكلة.

لدي هذا الخطأ أيضا

جاهل بالفعل

في ملف PHPExcel "DefaultValueBinder.php" ، استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {
سيؤدي هذا إلى إصلاح الخطأ "محاولة الوصول إلى إزاحة الصفيف على قيمة النوع int". ولكنك ستحتاج أيضًا إلى إجراء بحث واستبدال للأقواس المتعرجة في جميع أنحاء كود PHPExcel لمعالجة الخطأ "تم إهمال بناء جملة وصول الصفيف والسلسلة مع الأقواس المتعرجة" والذي يؤثر أيضًا على قيم PHP إلى 7.4. أنا ببساطة استبدلتهم بـ "[" و "]" في كل مكان وكل شيء يسير على ما يرام مرة أخرى.

شكرا لعملك لي !! orderimportexport.ocmod opencart 3x

في ملف PHPExcel "DefaultValueBinder.php" ، استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {
سيؤدي هذا إلى إصلاح الخطأ "محاولة الوصول إلى إزاحة الصفيف على قيمة النوع int". ولكنك ستحتاج أيضًا إلى إجراء بحث واستبدال للأقواس المتعرجة في جميع أنحاء كود PHPExcel لمعالجة الخطأ "تم إهمال بناء جملة وصول الصفيف والسلسلة مع الأقواس المتعرجة" والذي يؤثر أيضًا على قيم PHP إلى 7.4. أنا ببساطة استبدلتهم بـ "[" و "]" في كل مكان وكل شيء يسير على ما يرام مرة أخرى.

مدهش ، لقد أنقذتني يا أخي ، شكرًا جزيلاً لك

استبدل هذا السطر 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
كالآتي:
} elseif (0 === strpos ($ pValue، '=') && strlen ($ pValue)> 1) {

اعمل لدي ...

image

الرجاء الإبلاغ عن الأخطاء في PhpSpreadsheet إلى PhpSpreadsheet.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات