2017-09-15 1 views
1

Je tente d'importer un fichier csv à l'aide de PHPExcel dans mon application afin de pouvoir charger les données dans une table. Lorsque le fichier atteint 2 méga + le code échoue.Echec de la lecture du fichier CSV grand format PHPExcel

Je cours Laravel sur WAMP64. Le code qui échoue est:

$objPHPExcel = PHPExcel_IOFactory::load(Input::file('file')->getRealPath()); 

Le message d'erreur est:

ErrorException: file_get_contents(C:\wamp\www\imax\public): failed to open stream: Permission denied in  C:\wamp\www\imax\vendor\phpoffice\phpexcel\Classes\PHPExcel\Shared\OLERead.php:85 

Je sais qu'il est un problème de taille car le code est bien passé lorsque le fichier est 2048K. Je peux ajouter un caractère au fichier en le poussant à 2049K et il échoue. Ce n'est donc pas un problème d'autorisations.

La ligne qui échoue dans OLERead.php est:

// Get the file identifier 
// Don't bother reading the whole file until we know it's a valid OLE file 
$this->data = file_get_contents($sFileName, FALSE, NULL, 0, 8); 

Wampserver 3.0.6

PHP 7.0.10

+0

Avez-vous essayé uping la 'memory_limit' dans le php.ini fichier? Il y a aussi une ligne de timeout et d'autres que je voudrais 'up' mais je ne peux pas me souvenir d'un coup de main. Cela peut être utile: https://stackoverflow.com/questions/3829403/how-to-increase-the-execution-timeout-in-php – Radmation

+0

La limite de mémoire était de 512M. Doublé après avoir découvert l'erreur, pas de changement. – JEberlan

Répondre

0

Il semble que vous devez la mémoire allouée pour PHP. Vous pouvez le faire à l'exécution ou modifier votre fichier de configuration php.ini.

jusqu'à la limite de la mémoire lors de l'exécution:

ini_set('memory_limit','16M'); Ne hésitez pas à changer le 16M à ce que vous avez besoin.

Pour le modifier de façon permanente:

Ouvrez votre fichier php.ini et rechercher cette ligne upload_max_filesize = 2M; et changer 2M à ce que vous désirez. (je crois aussi WAMP vous permet d'éditer en cliquant droit sur l'icône et en choisissant une des options)

Note: Vous pouvez rechercher juste pour upload_max_filesize et laisser les = 2 M part que le vôtre peut être différent .

+0

La limite de mémoire était déjà fixée à 512M avant d'avoir l'erreur. Je l'ai augmenté sans amélioration avant que je connaisse le problème ici. – JEberlan

+0

a également changé le upload_max_filesize de 2M à 4M à 16M sans changement à l'erreur qui en résulte. – JEberlan

+0

@JEberlan pourrait être expiré ou une option php différente. – Radmation

0

Si le code utilise OLERead, alors vous ne lisez pas un fichier CSV de grande taille, mais un fichier xls au format BIFF ... ou vous permettez à PHPExcel d'essayer et d'identifier le type de fichier lui-même .... Vous savez qu'il s'agit d'un fichier CSV, puis instanciez le lecteur CSV manuellement plutôt que de laisser PHPExcel essayer et identifier le fichier.

// Tell PHPExcel that you want to load a CSV file 
$objReader = new PHPExcel_Reader_CSV(); 
// Load the $inputFileName to a PHPExcel Object 
$objPHPExcel = $objReader->load(Input::file('file')->getRealPath()); 

Cependant, si vous savez que vous travaillez avec des fichiers CSV, il est plus efficace d'utiliser la fonction de lecture CSV natif de PHP, fgetcsv()

+0

J'ai changé pour le PHPExcel_Reader_CSV mais cela s'est terminé par une erreur similaire.** ErrorException: fopen (C: \ wamp \ www \ imax \ public): échec de l'ouverture du flux: autorisation refusée dans C: \ wamp \ www \ imax \ fournisseur \ phpoffice \ phpexcel \ Classes \ PHPExcel \ Reader \ Abstract.php : 203 ** Donc morceau de code différent, échouant avec le même message trompeur. Je supprime 1 caractère du fichier et ça marche très bien. – JEberlan