Laravel-excel: [QUESTION] La tâche de lecture de blocs en file d'attente échoue

Créé le 17 oct. 2018  ·  21Commentaires  ·  Source: Maatwebsite/Laravel-Excel

VEUILLEZ LIRE : REMPLIR LE MODÈLE EST OBLIGATOIRE ! Les problèmes qui n'incluent pas suffisamment d'informations peuvent ne pas être détectés. Avez-vous lu les directives de contribution de Laravel-Excel (https://laravel-excel.maatwebsite.nl/docs/3.1/getting-started/contributing) et le code de conduite (https://github.com/Maatwebsite/Laravel-Excel/ blob/3.1/CODE_OF_CONDUCT.md) ? En déposant un problème, vous êtes tenu de vous y conformer, notamment en traitant tout le monde avec respect. Veuillez préfixer votre problème avec l'un des éléments suivants : [BOGUE] [PROPOSITION] [QUESTION].

Conditions préalables

Mettez un X entre les crochets si vous avez effectué les opérations suivantes :
  • [ ] Capable de reproduire le comportement en dehors de votre code, le problème est isolé à Laravel Excel.
  • [x] Vérifié que votre problème n'est pas déjà classé.
  • [x] Coché si aucun PR n'a été soumis pour résoudre ce problème.

Versions

Veuillez être aussi précis et complet que possible lors de la preuve des numéros de version
  • Version PHP : 7.1.23
  • Version Laravel : 5.6
  • Version du package : 3.1.2

La description

Lorsque j'essaie d'importer un fichier (peu importe s'il s'agit de .xlsx, .ods ou .csv) et de mettre en file d'attente la lecture du morceau, le travail échoue avec cette erreur dans ma table failed_jobs :
InvalidArgumentException: File "/tmp/SWQF2KfyI6BP0k1x" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

Étapes pour reproduire

Comment reproduire ce problème ? Fournissez un fichier Excel ou un référentiel de reproduction pour nous aider à reproduire le problème facilement.

Comportement prévisible:

Je m'attendais à ce que le travail soit fait sans échec. Si je ne mets pas le travail en file d'attente, cela fonctionne sans problème.

Comportement réel :
La trace de la pile dans la table failed_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}

Information additionnelle

D'après la trace de la pile, l'erreur semble provenir de PhpSpreadsheet , je pensais que c'était un problème de droits de lecture/écriture, mais mon dossier /tmp est 777, et mon fichier php.ini n'a pas changé depuis l'installation (sauf pour upload_max_filesize post_max_size).

Ma classe ContactsImport :

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

Commentaire le plus utile

Essayez de changer le temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) par exemple dans votre dossier de stockage. Peut-être résoudre le problème pour vous.

Tous les 21 commentaires

Salut @MLous ,

Peux-tu vérifier le code de ta manette ?
Vous utilisez le trait Importable, donc dans votre contrôleur, vous devez utiliser
(new ContactsImport)->queue('file.ext');

Veuillez vous référer à Importables

Si le problème n'est toujours pas résolu après cela, veuillez également publier le code de votre contrôleur.

Salut @GlennM , merci pour ta réponse !

Dans mon contrôleur, j'ai essayé les deux :

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

J'ai également essayé de stocker d'abord le fichier soumis par l'utilisateur avant de le transmettre à 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);

Mais j'obtiens toujours la même erreur InvalidArgumentException: File "/tmp/whatever" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

Mon ListController :

<?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');
    }
}

Malheureusement, je ne peux pas le reproduire.

Le code suivant devrait fonctionner dans le contrôleur :

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');
}

Pour info, j'utilise une version simplifiée, voici la méthode dans mon contrôleur :

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

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

Et ma classe 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;
    }
}

J'ai essayé d'ajouter/supprimer WithHeadingRow , WithBatchInserts , WithChunkReading , Importable , en utilisant ToCollection au lieu de ToModel sans succès . Cela ne fonctionne que lorsque je ne mets pas le travail en file d'attente.

Et je n'ai aucun problème à exporter une liste avec un travail en file d'attente, seules les importations échouent.

Peut-être que le problème vient d'une mauvaise configuration de mon serveur de développement ?

Peut-être que le problème vient d'une mauvaise configuration de mon serveur de développement ?

Cela pourrait être le cas en effet.
J'ai testé sur PHP 7.1 / Laravel 5.6 et PHP 7.2 / Laravel 5.7 et j'ai pu importer le fichier dans les deux cas, en utilisant T oModel , WithHeadingRow , WithBatchInserts , WithChunkReading et ShouldQueue et Importable

Si vous utilisez le logiciel dans le commerce et avez besoin d'une assistance élaborée ou en avez besoin de toute urgence, nous pouvons vous l'offrir sur une base commerciale. Veuillez vous référer à notre page d' assistance dans ce cas.

Je suis peut-être en avance : après avoir essayé une exportation en file d'attente de plus de 150 000 lignes, le travail a échoué en me donnant la même erreur, mais pas instantanément comme avec l'importation, après 20 AppendQueryToSheet travaux.
Cela pourrait donc être un problème avec mon dossier /tmp , comme une limite de taille. Je suis sur Debian 9, mais je n'ai que 3 partitions : / (contenant /tmp ), /home et swap , ce n'est pas une taille de partition limite.

Je vous donnerai des mises à jour si je trouve quelque chose ! :prier:

__Éditer__
Dois-je renommer ce problème en [QUESTION] au lieu de [BUG] ?

Essayez de changer le temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) par exemple dans votre dossier de stockage. Peut-être résoudre le problème pour vous.

Merci @patrickbrouwers , cela a résolu mon problème, je peux importer et exporter des fichiers volumineux sans aucune erreur !

@patrickbrouwers il n'y a pas de temp_path dans la configuration excel. peux-tu élaborer?

@sharjeelz si vous avez le fichier de configuration de la dernière version voir : https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L167 Actuellement, il existe une solution de repli sur temp_path pour les personnes utilisant l'ancien configuration.

Hé les gars, je sais que c'est un problème périmé. Mais j'ai l'impression d'avoir un problème très similaire. Mon collègue et moi utilisons la même base de code, où j'obtiens le "Fichier X n'existe pas" et lui non. On suppose que c'est un problème de configuration. Mais même lorsque je modifie le config/local_path, je ne parviens toujours pas à résoudre le problème.

Je suis vraiment à la recherche de problèmes connus qui pourraient être à l'origine de cela. Nous exécutons tous les deux nos projets Laravel localement sur des macbooks et utilisons la version lib 3.1.17

Le nom de fichier C:UsersAshimAppDataLocalTemplaravel-excel-K6OeXpSQuAARlI0UrSeOAkFZ0kELq0Ax.xls n'est pas reconnu comme un fichier OLE

Comment puis-je resoudre ceci

Bonjour, j'ai le même problème mais ma question est : pourquoi affiche-t-il un nom de fichier différent de celui que j'ai envoyé en fonction d'import ? Crée-t-il un fichier temporaire à partir duquel il lit les informations ?

````
[2020-04-17 15:15:26] local.ERROR : le fichier "/tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx" n'existe pas. {"exception":"[object] (InvalidArgumentException(code : 0) : le fichier "/tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx" n'existe pas. à /var/www/html/sites/dashboard-imprensa/vendor/ phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137)
[trace de la pile]

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

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

2 [fonction interne] : 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\{closure}()

5 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))

6 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application) , tableau, objet (fermeture))

7 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Container.php(592) : Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application) , tableau, tableau, 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\{closure}(Object( 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\{closure}(Object( Maatwebsite\Excel\Jobs\ReadChunk))

11 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98) : Illuminate\Pipeline\Pipeline->then (Object (Closure))

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), faux)

13 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128) : Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object( 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\{closure}(Object( Maatwebsite\Excel\Jobs\ReadChunk))

15 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(85) : Illuminate\Pipeline\Pipeline->then (Object (Closure))

16 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(59): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\ DatabaseJob), Objet (Maatwebsite\Excel\Jobs\ReadChunk))

17 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\ Jobs\DatabaseJob), tableau)

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\ File d'attente\Jobs\DatabaseJob), Objet (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), 'base de données', Objet (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', 'default ', Objet (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('database', 'défaut')

23 [fonction interne] : 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\{closure}()

26 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))

27 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application) , tableau, objet (fermeture))

28 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Container.php(592) : Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application) , tableau, tableau, 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->execute(Object(Symfony\Component\Console\Input\ArgvInput) , Objet (Illuminer\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\ Composant\Console\Input\ArgvInput), Objet (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), Objet (Symfony\Component\Console\Output\ConsoleOutput))

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

34 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(140): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput) , Objet(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->run(Object(Symfony\Component\ Console\Input\ArgvInput), Objet (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), Objet (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 \Sortie\SortieConsole))

38 {principal}

"}
````

C'est l'erreur que je reçois mais le fichier que j'ai envoyé était 'temp/12020-04.xlsx'. J'ai déjà vérifié s'il reçoit bien ce fichier. S'il crée un temp, pourquoi ne trouve-t-il pas le fichier ?

Essayez de définir un autre dossier temporaire https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L166

Bonjour @patrickbrouwers , merci beaucoup pour votre réponse rapide. J'ai essayé mais cela n'a pas résolu mon problème :(

$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);
}

C'est ma fonction d'import, c'est assez standard. Le fichier est enregistré dans le bon dossier. J'ai également essayé d'utiliser public_path($file). L'importation crée-t-elle un fichier temporaire ?

J'ai supprimé le projet, tout réinstallé et maintenant tout fonctionne hahah merci beaucoup pour votre aide :))

J'ai utilisé le travail de file d'attente pour l'exportation excel et le travail ne peut pas s'exécuter car il me montre une exception :
ErrorException : fopen(/var/www/html/biomaze.ir/storage/framework/laravel-excel/laravel-excel-85fvUcwqDwshFsD4o5PWwtamG83wnzG6) : échec de l'ouverture du flux : autorisation refusée dans /var/www/html/biomaze.ir/vendor /phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter. php:111

s'il vous plait aidez?

Essayez de changer le propriétaire et les autorisations sur storage
sudo chown -R www-data:<your_username> storage/ && sudo chmod -R g+w storage/

J'ai le même problème.

J'exécute mon dev env dans homestead, le fichier temporaire est bien créé (pour que l'application puisse voir le csv téléchargé), cependant phpspreadsheet semble avoir du mal à trouver le fichier lorsqu'il s'exécute dans une file d'attente :

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

La file d'attente ne dépassera pas la tâche ReadChunk initiale. Si j'utilise bricoler et fais un file_exists() sur ce chemin, le fichier est là.

Quelqu'un a-t-il fait face à cela et l'a-t-il résolu?

Ainsi, le problème était causé par la commande queue:listen exécutée EN DEHORS de vagrant.

Pour éliminer ce problème, vous DEVEZ exécuter le travailleur de file d'attente à partir de vagrant.

vagabond ssh
code cd
file d'attente des artisans php

fonctionne bien.

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

Comment puis-je définir un dossier différent @patrickbrouwers ?

Ceci est mon fichier de configuration

`<?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,
    ],
];

`

Cette page vous a été utile?
0 / 5 - 0 notes