/tmp/laravel-excel 不存在

问题描述 投票:0回答:2

所以我使用laravel excel导入.csv文件,因为.csv文件包含大量数据,所以我使用laravel队列和redis驱动程序运行导入

使用 valet 在我的 mac 本地服务器上一切正常

但是当我在使用 runcloud 管理的 vps 的生产服务器上尝试相同的代码时,问题就出现了

只有当我在 snyc 旁边使用队列驱动程序时才会发生这种情况。因此,如果我将其更改为使用数据库驱动程序或 Redis 驱动程序,则会出现错误。

经过多次调试后,我发现错误是因为它无法为此插件创建 mp\ 文件以进行导入

帮助找到这里的关键问题是我的配置

"php": ">=7.1.3",
"maatwebsite/excel": "^3.1",
"laravel/framework": "5.6.*",
"predis/predis": "^1.1", 

这是来自 laravel.log 的堆栈跟踪

[2022-01-06 14:57:14] local.ERROR: File "/tmp/laravel-excel-kzUS1G2AIXnig0Z1VKs5AegK3ar98WRS.csv" does not exist. {"exception":"[object] (InvalidArgumentException(code: 0): File \"/tmp/laravel-excel-kzUS1G2AIXnig0Z1VKs5AegK3ar98WRS.csv\" does not exist. at /home/runcloud/webapps/puskopcuina/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137)
[stacktrace]
#0 /home/runcloud/webapps/puskopcuina/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/BaseReader.php(152): PhpOffice\\PhpSpreadsheet\\Shared\\File::assertFile()
#1 /home/runcloud/webapps/puskopcuina/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php(540): PhpOffice\\PhpSpreadsheet\\Reader\\BaseReader->openFile()
#2 /home/runcloud/webapps/puskopcuina/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php(349): PhpOffice\\PhpSpreadsheet\\Reader\\Csv->canRead()
#3 /home/runcloud/webapps/puskopcuina/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php(330): PhpOffice\\PhpSpreadsheet\\Reader\\Csv->loadIntoExisting()
#4 /home/runcloud/webapps/puskopcuina/vendor/maatwebsite/excel/src/Jobs/ReadChunk.php(118): PhpOffice\\PhpSpreadsheet\\Reader\\Csv->load()
#5 [internal function]: Maatwebsite\\Excel\\Jobs\\ReadChunk->handle()
#6 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array()
#7 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#8 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\\Container\\BoundMethod::callBoundMethod()
#9 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\\Container\\BoundMethod::call()
#10 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\\Container\\Container->call()
#11 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Bus\\Dispatcher->Illuminate\\Bus\\{closure}()
#12 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#13 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\\Pipeline\\Pipeline->then()
#14 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\\Bus\\Dispatcher->dispatchNow()
#15 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(83): Illuminate\\Queue\\CallQueuedHandler->call()
#16 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(326): Illuminate\\Queue\\Jobs\\Job->fire()
#17 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(276): Illuminate\\Queue\\Worker->process()
#18 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(118): Illuminate\\Queue\\Worker->runJob()
#19 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): Illuminate\\Queue\\Worker->daemon()
#20 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85): Illuminate\\Queue\\Console\\WorkCommand->runWorker()
#21 [internal function]: Illuminate\\Queue\\Console\\WorkCommand->handle()
#22 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array()
#23 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#24 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\\Container\\BoundMethod::callBoundMethod()
#25 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\\Container\\BoundMethod::call()
#26 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Console/Command.php(179): Illuminate\\Container\\Container->call()
#27 /home/runcloud/webapps/puskopcuina/vendor/symfony/console/Command/Command.php(255): Illuminate\\Console\\Command->execute()
#28 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Console/Command.php(166): Symfony\\Component\\Console\\Command\\Command->run()
#29 /home/runcloud/webapps/puskopcuina/vendor/symfony/console/Application.php(1009): Illuminate\\Console\\Command->run()
#30 /home/runcloud/webapps/puskopcuina/vendor/symfony/console/Application.php(273): Symfony\\Component\\Console\\Application->doRunCommand()
#31 /home/runcloud/webapps/puskopcuina/vendor/symfony/console/Application.php(149): Symfony\\Component\\Console\\Application->doRun()
#32 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Console/Application.php(89): Symfony\\Component\\Console\\Application->run()
#33 /home/runcloud/webapps/puskopcuina/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Illuminate\\Console\\Application->run()
#34 /home/runcloud/webapps/puskopcuina/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#35 {main}"} 

更新

这是我的config/excel.php

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

        /*
        |--------------------------------------------------------------------------
        | Temporary path
        |--------------------------------------------------------------------------
        |
        | When exporting files, we use a temporary file, before storing
        | or downloading. Here you can customize that path.
        |
        */
        'temp_path'  => sys_get_temp_dir(),

        /*
        |--------------------------------------------------------------------------
        | 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,
        ],
    ],

    'imports' => [

        'heading_row' => [

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

        'csv' => [
            'delimiter'              => '|',
            'enclosure'              => '"',
            'line_ending'            => PHP_EOL,
            'use_bom'                => false,
            'include_separator_line' => false,
            'excel_compatibility'    => false,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Extension detector
    |--------------------------------------------------------------------------
    |
    | Configure here which writer 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,
    ],
];
php laravel laravel-5 laravel-excel
2个回答
2
投票

It working!

Please edit file config/excel.php
PHP higher version (>=7.1.3)

// 'local_path'  => sys_get_temp_dir(),
'local_path'  => storage_path('framework/cache/laravel-excel'),

PHP lower version (<=7.1.3)

// 'temp_path'  => sys_get_temp_dir(),
    'temp_path'  => storage_path('framework/cache/laravel-excel'),

Edit 'temp_path' or 'local_path' to folder storage in your project.

// And run cmd in your project directory:
php artisan cache:clear
php artisan config:clear

Good luck! @@


0
投票

如果有人修复了 live/C_Panel/Hosting 使用中的问题

“'temp_path' => storage_path('框架/缓存/laravel-excel'),”

并且必须将类添加到顶部

使用 Maatwebsite\Excel\Excel 作为 ExcelExcel;

并且在控制器中必须确保这一点:

返回Excel::download(new BookingExport($data),'booking-report.xlsx',ExcelExcel::XLSX);

© www.soinside.com 2019 - 2024. All rights reserved.