Laravel-excel: [سؤال] فشلت مهمة قراءة مقطع في قائمة الانتظار

تم إنشاؤها على ١٧ أكتوبر ٢٠١٨  ·  21تعليقات  ·  مصدر: Maatwebsite/Laravel-Excel

يرجى القراءة: يجب ملء النموذج! قد لا يتم انتقاء المشكلات التي لا تتضمن معلومات كافية. هل قرأت إرشادات مساهمة Laravel-Excel (https://laravel-excel.maatwebsite.nl/docs/3.1/getting-started/contributing) ومدونة قواعد السلوك (https://github.com/Maatwebsite/Laravel-Excel/ blob / 3.1 / CODE_OF_CONDUCT.md)؟ من خلال تقديم مشكلة ، يُتوقع منك الامتثال لها ، بما في ذلك معاملة الجميع باحترام. الرجاء إنشاء بادئة بين مشكلتك بواحد مما يلي: [BUG] [اقتراح] [سؤال].

المتطلبات الأساسية

ضع علامة X بين القوسين إذا قمت بما يلي:
  • [] قادر على إعادة إنتاج السلوك خارج التعليمات البرمجية الخاصة بك ، يتم عزل المشكلة في Laravel Excel.
  • [x] تم التحقق من عدم تقديم مشكلتك بالفعل.
  • [x] تم التحقق مما إذا لم يتم تقديم العلاقات العامة التي تعمل على حل هذه المشكلة.

إصدارات

يرجى أن تكون دقيقًا وكاملاً قدر الإمكان عند إثبات أرقام الإصدارات
  • إصدار PHP: 7.1.23
  • إصدار Laravel: 5.6
  • إصدار الحزمة: 3.1.2

وصف

عندما أحاول استيراد ملف (بغض النظر عما إذا كان .xlsx أو .ods أو .csv) وقراءة المقطع في قائمة الانتظار ، تفشل المهمة مع ظهور هذا الخطأ في جدول الوظائف الفاشلة:
InvalidArgumentException: File "/tmp/SWQF2KfyI6BP0k1x" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

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

كيف يمكن إعادة إنتاج هذه المشكلة؟ قم بتوفير ملف Excel أو مستودع نسخ لمساعدتنا على إعادة إظهار المشكلة بسهولة.

سلوك متوقع:

كنت أتوقع أن يتم إنجاز المهمة دون فشل. إذا لم أضع الوظيفة في قائمة الانتظار ، فستعمل بلا مشكلة.

السلوك الفعلي:
تتبع المكدس في جدول failure_jobs:

InvalidArgumentException: File "/tmp/SWQF2KfyI6BP0k1x" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137
Stack trace:
#0 /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php(389): PhpOffice\PhpSpreadsheet\Shared\File::assertFile('/tmp/SWQF2KfyI6...')
#1 /home/miguel/www/html/proliste/vendor/maatwebsite/excel/src/Jobs/ReadChunk.php(82): PhpOffice\PhpSpreadsheet\Reader\Xlsx->load('/tmp/SWQF2KfyI6...')
#2 [internal function]: Maatwebsite\Excel\Jobs\ReadChunk->handle()
#3 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#4 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#5 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#6 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#7 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#8 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Maatwebsite\Excel\Jobs\ReadChunk))
#9 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Maatwebsite\Excel\Jobs\ReadChunk))
#10 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#11 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(Maatwebsite\Excel\Jobs\ReadChunk), false)
#12 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(83): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\DatabaseJob), Array)
#13 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(326): Illuminate\Queue\Jobs\Job->fire()
#14 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(276): Illuminate\Queue\Worker->process('database', Object(Illuminate\Queue\Jobs\DatabaseJob), Object(Illuminate\Queue\WorkerOptions))
#15 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(118): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\DatabaseJob), 'database', Object(Illuminate\Queue\WorkerOptions))
#16 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): Illuminate\Queue\Worker->daemon('database', 'default', Object(Illuminate\Queue\WorkerOptions))
#17 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85): Illuminate\Queue\Console\WorkCommand->runWorker('database', 'default')
#18 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()
#19 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#20 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#21 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#22 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#23 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Console/Command.php(179): Illuminate\Container\Container->call(Array)
#24 /home/miguel/www/html/proliste/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#25 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Console/Command.php(166): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#26 /home/miguel/www/html/proliste/vendor/symfony/console/Application.php(886): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#27 /home/miguel/www/html/proliste/vendor/symfony/console/Application.php(262): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#28 /home/miguel/www/html/proliste/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#29 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Console/Application.php(89): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /home/miguel/www/html/proliste/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#32 {main}

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

من تتبع المكدس ، يبدو أن الخطأ يأتي من PhpSpreadsheet ، اعتقدت أنها مشكلة تتعلق بحقوق القراءة / الكتابة ، لكن مجلد /tmp هو 777 ، ولم يتغير ملف php.ini منذ التثبيت (باستثناء upload_max_filesize post_max_size).

فئة جهات الاتصال الخاصة بي:

<?php

namespace App\Imports;

use App\Contact;
use App\Rubric;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class ContactsImport implements ToModel, WithBatchInserts, WithChunkReading, WithHeadingRow, ShouldQueue
{
    use Importable;

    /**
    * <strong i="10">@param</strong> array $row
    *
    * <strong i="11">@return</strong> \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        if (isset($row['rubrique'])) {
            $rubric = Rubric::firstOrCreate(['name' => $row['rubrique']]);
        } else {
            $rubric = Rubric::where('name', 'AUTRE')->first();
        }

        $area_id = intval(substr($row['code_postal'], 0, 2)) !== 0 ? intval(substr($row['code_postal'], 0, 2)) : 1;

        return new Contact([
            'name' => $row['nom'],
            'address' => $row['adresse'],
            'postal_code' => $row['code_postal'],
            'city' => $row['ville'],
            'phone_number' => $row['telephone'],
            'fax_number' => $row['fax'],
            'email' => $row['email'],
            'rubric_id' => $rubric->id,
            'area_id' => $area_id
        ]);
    }

    public function batchSize(): int
    {
        return 1000;
    }

    public function chunkSize(): int
    {
        return 1000;
    }
}
cannot-reproduce

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

حاول تغيير temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) إلى مجلد التخزين على سبيل المثال. قد يصلح المشكلة لك.

ال 21 كومينتر

مرحبًا MLouis ،

هل يمكنك التحقق من رمز وحدة التحكم الخاصة بك؟
أنت تستخدم السمة القابلة للاستيراد ، لذا يجب عليك استخدامها في وحدة التحكم
(new ContactsImport)->queue('file.ext');

يرجى الرجوع إلى المواد القابلة للاستيراد

إذا لم يتم حل المشكلة بعد ذلك ، فيرجى نشر رمز وحدة التحكم الخاصة بك أيضًا.

مرحبًا GlennM ، شكرًا على ردك!

في وحدة التحكم الخاصة بي ، جربت كلاً من:

Excel::import(new ContactsImport, $request->file('liste'));
// and
(new ContactsImport)->queue($request->file('liste'));

حاولت أيضًا تخزين الملف الذي أرسله المستخدم أولاً قبل تمريره إلى ContactsImport:

$fileName = Str::uuid() . '.' . $request->file('liste')->getClientOriginalExtension();
$request->file('liste')->storeAs('listes', $fileName);
Excel::import(new ContactsImport, 'listes/' . $fileName);
// also tried with
(new ContactsImport)->queue('listes/' . $fileName);

لكن ما زلت أحصل على نفس الخطأ InvalidArgumentException: File "/tmp/whatever" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

وحدة التحكم الخاصة بي:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\ContactsImport;
use App\Exports\ContactsExport;
use App\Contact;
use App\Rubric;
use App\Area;
use App\Cart;
use Excel;
use DB;
use App\Http\Requests\ListRequest;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;

class ListController extends Controller
{
    public function import(Request $request)
    {
        $request->validate([
            'liste' => 'required'
        ]);

        $fileName = Str::uuid() . '.' . $request->file('liste')->getClientOriginalExtension();
        $request->file('liste')->storeAs('listes', $fileName);

        (new ContactsImport)->queue('listes/' . $fileName);

        return back()->with('status', 'Liste ajoutée avec succès');
    }
}

لسوء الحظ ، لا يمكنني إعادة إنتاجه.

يجب أن يعمل الكود التالي في وحدة التحكم:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

public function import(Request $request)
{
    (new ContactsImport)->queue($request->file('liste'));

    return back()->with('status', 'Liste ajoutée avec succès');
}

لمعلوماتك ، أنا أستخدم نسخة مبسطة ، هذه هي الطريقة في وحدة التحكم الخاصة بي:

public function process(Request $request)
{
    (new UsersImport)->queue($request->file('dataset'));

    return back()->with('success', 'All good!');
}

وفئة UsersImport الخاصة بي:

<?php

namespace App\Imports;

use App\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class UsersImport implements ToModel, WithHeadingRow, WithBatchInserts, WithChunkReading, ShouldQueue
{
    use Importable;

    /**
    * <strong i="13">@param</strong> array $row
    *
    * <strong i="14">@return</strong> \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name' => $row['name'],
            'email' => $row['email'],
            'password' => $row['id'],
        ]);
    }

    /**
     * <strong i="15">@return</strong> int
     */
    public function batchSize(): int
    {
        return 1000;
    }

    /**
     * <strong i="16">@return</strong> int
     */
    public function chunkSize(): int
    {
        return 1000;
    }
}

لقد حاولت إضافة / إزالة WithHeadingRow ، WithBatchInserts ، WithChunkReading ، Importable ، باستخدام ToCollection بدلاً من ToModel دون نجاح . إنه يعمل فقط عندما لا أكون في قائمة انتظار الوظيفة.

وليس لدي أي مشكلة في تصدير قائمة بوظيفة في قائمة الانتظار ، فقط عمليات الاستيراد تفشل.

ربما تأتي المشكلة من خطأ في تهيئة خادم التطوير الخاص بي؟

ربما تأتي المشكلة من خطأ في تهيئة خادم التطوير الخاص بي؟

قد يكون هذا هو الحال بالفعل.
اختبرت على PHP 7.1 / Laravel 5.6 و PHP 7.2 / Laravel 5.7 وتمكنت من استيراد الملف في كلتا الحالتين ، باستخدام T oModel ، WithHeadingRow ، WithBatchInserts ، WithChunkReading و ShouldQueue و Importable

إذا كنت تستخدم البرنامج تجاريًا وتحتاج إلى دعم تفصيلي أو تحتاج إليه بشكل عاجل ، فيمكننا تقديم ذلك على أساس تجاري. يرجى الرجوع إلى صفحة الدعم الخاصة بنا في هذه الحالة.

قد أكون في زمام المبادرة: بعد محاولة تصدير 150 ألف صف في قائمة الانتظار ، فشلت المهمة في إعطائي نفس الخطأ ، ولكن ليس على الفور كما هو الحال مع الاستيراد ، بعد 20 AppendQueryToSheet .
لذلك قد تكون مشكلة في مجلد /tmp ، مثل حد الحجم. أنا على Debian 9 ، لكن لدي 3 أقسام فقط: / (تحتوي على /tmp ) ، /home و swap ، هذا ليس حجم قسم حد.

سأعطيك تحديثات إذا وجدت شيئًا! :صلى:

__يحرر__
هل يجب إعادة تسمية هذه المشكلة باسم [سؤال] بدلاً من [BUG]؟

حاول تغيير temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) إلى مجلد التخزين على سبيل المثال. قد يصلح المشكلة لك.

شكرًا patrickbrouwers ، لقد أصلحت مشكلتي ، يمكنني استيراد وتصدير الملفات الكبيرة دون أي خطأ!

patrickbrouwers لا يوجد temp_path في config excel. هل يمكنك التفصيل؟

sharjeelz إذا كان لديك ملف التكوين الخاص بالإصدار الأحدث ، فراجع: https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L167 حاليًا هناك احتياطي على temp_path للأشخاص الذين يستخدمون الإصدار القديم التكوين.

مرحبًا يا رفاق ، أعلم أن هذه مشكلة قديمة. لكن يبدو أن لدي مشكلة مشابهة جدًا. أنا وزميلي في العمل نقوم بتشغيل نفس مصدر الشفرة ، حيث أحصل على "الملف X غير موجود" وهو غير موجود. نحن نخمن أنها مشكلة في التكوين. ولكن حتى عندما أقوم بتغيير config / local_path ، ما زلت غير قادر على تجاوز المشكلة.

أنا حقًا أبحث فقط عن المشكلات المعروفة التي يمكن أن تسبب هذا. نقوم بتشغيل مشاريع Laravel الخاصة بنا محليًا على أجهزة macbook ونستخدم إصدار lib 3.1.17

اسم الملف C: UsersAshimAppDataLocalTemplaravel-excel-K6OeXpSQuAARlI0UrSeOAkFZ0kELq0Ax.xls لم يتم التعرف عليه كملف OLE

كيف يمكنني حل هذا

مرحبًا ، لدي نفس المشكلة ولكن سؤالي هو: لماذا يظهر اسم ملف مختلف عن الاسم الذي أرسلته في وظيفة الاستيراد؟ هل ينشئ ملفًا مؤقتًا يقرأ منه المعلومات؟

""
[2020-04-17 15:15:26] local.ERROR: الملف "/tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx" غير موجود. {"استثناء": "[كائن] (InvalidArgumentException (كود: 0): ملف" /tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx "غير موجود. في / var / www / html / sites / dashboard-Imprensa / vendor / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Shared / File.php: 137)
[تتبع المكدس]

0 /var/www/html/sites/dashboard-imprensa/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php(327): PhpOffice \ PhpSpreadsheet \ Shared \ File :: assertFile ('/ tmp / laravel- السابق...')

1 /var/www/html/sites/dashboard-imprensa/vendor/maatwebsite/excel/src/Jobs/ReadChunk.php (118): PhpOffice \ PhpSpreadsheet \ Reader \ Xlsx-> load ('/ tmp / laravel-ex. .. ')

2 [وظيفة داخلية]: Maatwebsite \ Excel \ Jobs \ ReadChunk-> handle (Object (Maatwebsite \ Excel \ Transactions \ DbTransactionHandler))

3 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array (Array ، Array)

4 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate \ Container \ BoundMethod :: Illuminate \ Container \ {close} ()

5 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate \ Container \ Util :: unsrapIfClosure (كائن (إغلاق))

6 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate \ Container \ BoundMethod :: callBoundMethod (كائن (Illuminate \ Foundation \ Application) ، صفيف ، كائن (إغلاق))

7 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Container.php (592): Illuminate \ Container \ BoundMethod :: call (Object (Illuminate \ Foundation \ Application) ، صفيف ، صفيف ، NULL)

8 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php (94): Illuminate \ Container \ Container-> call (Array)

9 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate \ Bus \ Dispatcher-> Illuminate \ Bus \ {close} (كائن ( موقع Maatwebsite \ Excel \ Jobs \ ReadChunk))

10 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate \ Pipeline \ Pipeline-> Illuminate \ Pipeline \ {close} (كائن ( موقع Maatwebsite \ Excel \ Jobs \ ReadChunk))

11 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php (98): Illuminate \ Pipeline \ Pipeline-> ثم (كائن (إغلاق))

12 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(83): Illuminate \ Bus \ Dispatcher-> dispatchNow (Object (Maatwebsite \ Excel \ Jobs \ ReadChunk) ، خطأ)

13 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate \ Queue \ CallQueuedHandler-> Illuminate \ Queue \ {close} (كائن ( موقع Maatwebsite \ Excel \ Jobs \ ReadChunk))

14 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate \ Pipeline \ Pipeline-> Illuminate \ Pipeline \ {close} (كائن ( موقع Maatwebsite \ Excel \ Jobs \ ReadChunk))

15 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(85): Illuminate \ Pipeline \ Pipeline-> ثم (كائن (إغلاق))

16 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php (59): Illuminate \ Queue \ CallQueuedHandler-> dispatchThroughMiddleware (كائن (Illuminate \ Queue \ DatabaseJob) ، كائن (Maatwebsite \ Excel \ Jobs \ ReadChunk))

17 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate \ Queue \ CallQueuedHandler-> استدعاء (كائن (Illuminate \ Queue \ وظائف \ DatabaseJob) ، صفيف)

18 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Worker.php (356): Illuminate \ Queue \ Jobs \ Job-> fire ()

19 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(306): Illuminate \ Queue \ Worker-> process ('database' ، Object (Illuminate \ Queue \ Jobs \ DatabaseJob) ، كائن (Illuminate \ Queue \ WorkerOptions))

20 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Worker.php (132): Illuminate \ Queue \ Worker-> runJob (Object (Illuminate \ Queue \ Jobs \ DatabaseJob) ، "قاعدة بيانات" ، كائن (Illuminate \ Queue \ WorkerOptions))

21 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(112): Illuminate \ Queue \ Worker-> daemon ('database'، 'افتراضي '، كائن (Illuminate \ Queue \ WorkerOptions))

22 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(96): Illuminate \ Queue \ Console \ WorkCommand-> runWorker ("قاعدة البيانات" ، 'إفتراضي')

23 [وظيفة داخلية]: Illuminate \ Queue \ Console \ WorkCommand-> handle ()

24 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array (Array ، Array)

25 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate \ Container \ BoundMethod :: Illuminate \ Container \ {close} ()

26 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate \ Container \ Util :: unsrapIfClosure (كائن (إغلاق))

27 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate \ Container \ BoundMethod :: callBoundMethod (كائن (Illuminate \ Foundation \ Application) ، صفيف ، كائن (إغلاق))

28 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Container.php (592): Illuminate \ Container \ BoundMethod :: call (Object (Illuminate \ Foundation \ Application) ، صفيف ، صفيف ، NULL)

29 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Console/Command.php (134): Illuminate \ Container \ Container-> call (Array)

30 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Command/Command.php(255): Illuminate \ Console \ Command-> تنفيذ (كائن (Symfony \ Component \ Console \ Input \ ArgvInput) ، كائن (Illuminate \ Console \ OutputStyle))

31 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Console/Command.php (121): Symfony \ Component \ Console \ Command \ Command-> run (Object (Symfony \ Component \ Console \ Input \ ArgvInput) ، كائن (Illuminate \ Console \ OutputStyle))

32 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(912): Illuminate \ Console \ Command-> run (Object (Symfony \ Component \ Console \ Input \ ArgvInput) ، كائن (Symfony \ Component \ Console \ Output \ ConsoleOutput))

33 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(264): Symfony \ Component \ Console \ Application-> doRunCommand (كائن (Illuminate \ Queue \ Console \ WorkCommand) ، كائن (Symfony \ Component \ Console \ Input \ ArgvInput) ، كائن (Symfony \ Component \ Console \ Output \ ConsoleOutput))

34 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php (140): Symfony \ Component \ Console \ Application-> doRun (كائن (Symfony \ Component \ Console \ Input \ ArgvInput) ، كائن (Symfony \ Component \ Console \ Output \ ConsoleOutput))

35 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Console/Application.php (93): Symfony \ Component \ Console \ Application-> تشغيل (كائن (Symfony \ Component \ Console \ Input \ ArgvInput) ، كائن (Symfony \ Component \ Console \ Output \ ConsoleOutput))

36 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(130): Illuminate \ Console \ Application-> run (Object (Symfony \ Component \ Console \ Input \ ArgvInput) ، كائن (Symfony \ Component \ Console \ Output \ ConsoleOutput))

37 / var / www / html / sites / dashboard-Imprensa / artisan (37): Illuminate \ Foundation \ Console \ Kernel-> handle (Object (Symfony \ Component \ Console \ Input \ ArgvInput)، Object (Symfony \ Component \ Console \ Output \ ConsoleOutput))

38 {main}

"}
""

هذا هو الخطأ الذي أتلقاه ولكن الملف الذي أرسلته كان "temp / 12020-04.xlsx". لقد تحققت بالفعل مما إذا كان يتلقى هذا الملف بالفعل. إذا كان ينشئ مؤقتًا ، فلماذا لا يمكنه العثور على الملف؟

حاول تعيين مجلد مؤقت مختلف https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L166

مرحبًا patrickbrouwers ، شكرًا جزيلاً على استجابتك السريعة. لقد حاولت ذلك ولكنه لم يحل مشكلتي :(

$header = (new HeadingRowImport)->toArray($request->file('arquivo'))[0][0];

$file = Storage::putFileAs(
    'temp',
    $request->file('arquivo'),
    $request->input('dashboard_id') . str_replace("/", "-", $request->input('ano_mes')) . '.' . pathinfo($request->file('arquivo')->getClientOriginalName())['extension']
);

if ($request->input('acao') == "import") {
    Excel::import((new DadosImport($request->input('ano_mes'), $request->input('dashboard_id'), $header, $file, true)), $file);
} else {
    Excel::import((new DadosImport($request->input('ano_mes'), $request->input('dashboard_id'), $header, $file)), $file);
}

هذه هي وظيفة الاستيراد الخاصة بي ، إنها قياسية جدًا. يتم حفظ الملف في المجلد الصحيح. حاولت أيضًا استخدام public_path (ملف $). هل الاستيراد يخلق ملف مؤقت؟

لقد حذفت المشروع وأعدت تثبيت كل شيء والآن كل شيء يعمل ههههه شكرًا جزيلاً على مساعدتك :))

لقد استخدمت وظيفة قائمة الانتظار لتصدير Excel anfd ، ولا يمكن تشغيل الوظيفة لأنها تظهر لي استثناء:
ErrorException: fopen (/var/www/html/biomaze.ir/storage/framework/laravel-excel/laravel-excel-85fvUcwqDwshFsD4o5PWwtamG83wnzG6): فشل فتح الدفق: تم رفض الإذن في /var/www/html/biomaze. / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Writer / BaseWriter. فب: 111

الرجاء المساعدة؟ من فضلك

حاول تغيير المالك والأذونات على storage
sudo chown -R www-data:<your_username> storage/ && sudo chmod -R g+w storage/

أحصل على نفس المشكلة.

أنا أقوم بتشغيل بيئة التطوير الخاصة بي داخل homestead ، يتم إنشاء ملف temp بشكل جيد (حتى يتمكن التطبيق من رؤية ملف csv الذي تم تحميله) ، ولكن يبدو أن جدول بيانات phps يواجه مشكلة في العثور على الملف عند التشغيل داخل قائمة انتظار:

InvalidArgumentException {#1344 #message: "File "/home/vagrant/code/storage/app/data-imports/laravel-excel-YNpPHnBtKZXaXKIbR68goCYM5qLlzUxt.csv" does not exist." #code: 0 #file: "./vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php" #line: 135

لن تتجاوز قائمة الانتظار مهمة ReadChunk الأولية. إذا استخدمت tinker وقمت بعمل file_exists () على هذا المسار ، فسيكون الملف موجودًا.

أي شخص واجه هذا وحلها؟

لذلك ، كانت المشكلة ناتجة عن قائمة الانتظار: يتم تشغيل أمر

للقضاء على هذه المشكلة ، يجب عليك تشغيل قائمة الانتظار من داخل المتشرد.

المتشرد ssh
كود القرص المضغوط
قائمة انتظار الحرفيين php

يعمل حلو.

https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L166

كيف يمكنني تعيين مجلد مختلف patrickbrouwers ؟

هذا هو ملف التكوين الخاص بي

`<?php

use Maatwebsite\Excel\Excel;

return [
    'exports' => [

    /*
    |--------------------------------------------------------------------------
    | Chunk size
    |--------------------------------------------------------------------------
    |
    | When using FromQuery, the query is automatically chunked.
    | Here you can specify how big the chunk should be.
    |
    */
    'chunk_size'             => 1000,

    /*
    |--------------------------------------------------------------------------
    | Pre-calculate formulas during export
    |--------------------------------------------------------------------------
    */
    'pre_calculate_formulas' => false,

    /*
    |--------------------------------------------------------------------------
    | Enable strict null comparison
    |--------------------------------------------------------------------------
    |
    | When enabling strict null comparison empty cells ('') will
    | be added to the sheet.
    */
    'strict_null_comparison' => false,

    /*
    |--------------------------------------------------------------------------
    | CSV Settings
    |--------------------------------------------------------------------------
    |
    | Configure e.g. delimiter, enclosure and line ending for CSV exports.
    |
    */
    'csv'                    => [
        'delimiter'              => ',',
        'enclosure'              => '"',
        'line_ending'            => PHP_EOL,
        'use_bom'                => false,
        'include_separator_line' => false,
        'excel_compatibility'    => false,
    ],

    /*
    |--------------------------------------------------------------------------
    | Worksheet properties
    |--------------------------------------------------------------------------
    |
    | Configure e.g. default title, creator, subject,...
    |
    */
    'properties'             => [
        'creator'        => '',
        'lastModifiedBy' => '',
        'title'          => '',
        'description'    => '',
        'subject'        => '',
        'keywords'       => '',
        'category'       => '',
        'manager'        => '',
        'company'        => '',
    ],
],

'imports'            => [

    /*
    |--------------------------------------------------------------------------
    | Read Only
    |--------------------------------------------------------------------------
    |
    | When dealing with imports, you might only be interested in the
    | data that the sheet exists. By default we ignore all styles,
    | however if you want to do some logic based on style data
    | you can enable it by setting read_only to false.
    |
    */
    'read_only' => true,

    /*
    |--------------------------------------------------------------------------
    | Ignore Empty
    |--------------------------------------------------------------------------
    |
    | When dealing with imports, you might be interested in ignoring
    | rows that have null values or empty strings. By default rows
    | containing empty strings or empty values are not ignored but can be
    | ignored by enabling the setting ignore_empty to true.
    |
    */
    'ignore_empty' => false,

    /*
    |--------------------------------------------------------------------------
    | Heading Row Formatter
    |--------------------------------------------------------------------------
    |
    | Configure the heading row formatter.
    | Available options: none|slug|custom
    |
    */
    'heading_row' => [
        'formatter' => 'slug',
    ],

    /*
    |--------------------------------------------------------------------------
    | CSV Settings
    |--------------------------------------------------------------------------
    |
    | Configure e.g. delimiter, enclosure and line ending for CSV imports.
    |
    */
    'csv'         => [
        'delimiter'        => ',',
        'enclosure'        => '"',
        'escape_character' => '\\',
        'contiguous'       => false,
        'input_encoding'   => 'UTF-8',
    ],

    /*
    |--------------------------------------------------------------------------
    | Worksheet properties
    |--------------------------------------------------------------------------
    |
    | Configure e.g. default title, creator, subject,...
    |
    */
    'properties'  => [
        'creator'        => '',
        'lastModifiedBy' => '',
        'title'          => '',
        'description'    => '',
        'subject'        => '',
        'keywords'       => '',
        'category'       => '',
        'manager'        => '',
        'company'        => '',
    ],

],

/*
|--------------------------------------------------------------------------
| Extension detector
|--------------------------------------------------------------------------
|
| Configure here which writer/reader type should be used when the package
| needs to guess the correct type based on the extension alone.
|
*/
'extension_detector' => [
    'xlsx'     => Excel::XLSX,
    'xlsm'     => Excel::XLSX,
    'xltx'     => Excel::XLSX,
    'xltm'     => Excel::XLSX,
    'xls'      => Excel::XLS,
    'xlt'      => Excel::XLS,
    'ods'      => Excel::ODS,
    'ots'      => Excel::ODS,
    'slk'      => Excel::SLK,
    'xml'      => Excel::XML,
    'gnumeric' => Excel::GNUMERIC,
    'htm'      => Excel::HTML,
    'html'     => Excel::HTML,
    'csv'      => Excel::CSV,
    'tsv'      => Excel::TSV,

    /*
    |--------------------------------------------------------------------------
    | PDF Extension
    |--------------------------------------------------------------------------
    |
    | Configure here which Pdf driver should be used by default.
    | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
    |
    */
    'pdf'      => Excel::DOMPDF,
],

/*
|--------------------------------------------------------------------------
| Value Binder
|--------------------------------------------------------------------------
|
| PhpSpreadsheet offers a way to hook into the process of a value being
| written to a cell. In there some assumptions are made on how the
| value should be formatted. If you want to change those defaults,
| you can implement your own default value binder.
|
| Possible value binders:
|
| [x] Maatwebsite\Excel\DefaultValueBinder::class
| [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class
| [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class
|
*/
'value_binder' => [
    'default' => Maatwebsite\Excel\DefaultValueBinder::class,
],

'cache' => [
    /*
    |--------------------------------------------------------------------------
    | Default cell caching driver
    |--------------------------------------------------------------------------
    |
    | By default PhpSpreadsheet keeps all cell values in memory, however when
    | dealing with large files, this might result into memory issues. If you
    | want to mitigate that, you can configure a cell caching driver here.
    | When using the illuminate driver, it will store each value in a the
    | cache store. This can slow down the process, because it needs to
    | store each value. You can use the "batch" store if you want to
    | only persist to the store when the memory limit is reached.
    |
    | Drivers: memory|illuminate|batch
    |
    */
    'driver'     => 'memory',

    /*
    |--------------------------------------------------------------------------
    | Batch memory caching
    |--------------------------------------------------------------------------
    |
    | When dealing with the "batch" caching driver, it will only
    | persist to the store when the memory limit is reached.
    | Here you can tweak the memory limit to your liking.
    |
    */
    'batch'     => [
        'memory_limit' => 60000,
    ],

    /*
    |--------------------------------------------------------------------------
    | Illuminate cache
    |--------------------------------------------------------------------------
    |
    | When using the "illuminate" caching driver, it will automatically use
    | your default cache store. However if you prefer to have the cell
    | cache on a separate store, you can configure the store name here.
    | You can use any store defined in your cache config. When leaving
    | at "null" it will use the default store.
    |
    */
    'illuminate' => [
        'store' => null,
    ],
],

/*
|--------------------------------------------------------------------------
| Transaction Handler
|--------------------------------------------------------------------------
|
| By default the import is wrapped in a transaction. This is useful
| for when an import may fail and you want to retry it. With the
| transactions, the previous import gets rolled-back.
|
| You can disable the transaction handler by setting this to null.
| Or you can choose a custom made transaction handler here.
|
| Supported handlers: null|db
|
*/
'transactions' => [
    'handler' => 'db',
],

'temporary_files' => [

    /*
    |--------------------------------------------------------------------------
    | Local Temporary Path
    |--------------------------------------------------------------------------
    |
    | When exporting and importing files, we use a temporary file, before
    | storing reading or downloading. Here you can customize that path.
    |
    */
    'local_path'          => storage_path('framework/laravel-excel'),

    /*
    |--------------------------------------------------------------------------
    | Remote Temporary Disk
    |--------------------------------------------------------------------------
    |
    | When dealing with a multi server setup with queues in which you
    | cannot rely on having a shared local temporary path, you might
    | want to store the temporary file on a shared disk. During the
    | queue executing, we'll retrieve the temporary file from that
    | location instead. When left to null, it will always use
    | the local path. This setting only has effect when using
    | in conjunction with queued imports and exports.
    |
    */
    'remote_disk'         => null,
    'remote_prefix'       => null,

    /*
    |--------------------------------------------------------------------------
    | Force Resync
    |--------------------------------------------------------------------------
    |
    | When dealing with a multi server setup as above, it's possible
    | for the clean up that occurs after entire queue has been run to only
    | cleanup the server that the last AfterImportJob runs on. The rest of the server
    | would still have the local temporary file stored on it. In this case your
    | local storage limits can be exceeded and future imports won't be processed.
    | To mitigate this you can set this config value to be true, so that after every
    | queued chunk is processed the local temporary file is deleted on the server that
    | processed it.
    |
    */
    'force_resync_remote' => null,
    ],
];

"

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