IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Page 504 -> lors de l'utilisation de WHILE


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2019
    Messages : 18
    Par défaut Page 504 -> lors de l'utilisation de WHILE
    Bonjour,

    Si quelqu'un peut m'aider
    J'ai un problème avec la boucle while
    Le code complet impossible a afficher ici
    Permet de télécharger un fichier csv, le couper, en plusieurs fichiers de 500 lignes foreach ($files as $file) { puis charge chaque ligne la nettoie et l'importe dans une base de donnée while (($line = array_shift($lines))) {Dans le whileil Il y a plusieurs appelle à d'autres fonctions, du coup ça bouffe les ressources serveur et arrive vers la ligne 300 j'ai une page 502 ce qui est logique.
    Mème avec et a l’intérieur d'un sleep(5); ça bug toujours comme si le sleep ne fonctionne pas.

    Avez une idée je suis perdu
    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    if (!empty($files)) {
    	$nb = 1;
    	$tfile = -1;
    	$total = 0;
    	foreach ($files as $file) {
    		$tfile++;
    		$this->flushbuffers();
    		$this->category_srv = new ToolCategory($this);
    		$this->manufacturer_srv = new ToolManufacturer($this);
    		$this->product_srv = new ToolProduct($this);
    		$this->level_srv = new ToolLevel($this);
    		$file = _PS_ROOT_DIR_.$this->config->_directory.$this->DefautSupplier.'_part'.$tfile.'.csv';
    		$filepart = $file;
    		try {
    			$lines = file($filepart);
    			$alllines = file(_PS_ROOT_DIR_.$this->config->_directory.$this->DefautSupplier.'.csv');
    		} catch (Exception $e) {
    			$lines = false;
    		}
    		//$_nbsend = (Configuration::get($this->DefautSupplier.'_nbsend') - 1);
    		if (Configuration::get($this->DefautSupplier.'_nbsend_check') == 2) {
    			$_nbsend = 100;
    		} else {
    			$_nbsend = (count($alllines) - 1);
    		}
     
    		if (is_array($lines)) {
    			$linebreak = "\r\n";
    			ob_start();
    			if (!empty(Tools::getValue('cron'))) {
    				$total = (count($alllines) - 1);
    			} else {
    				if (Configuration::get($this->DefautSupplier.'_nbsend_check') == 2) {
    					if ($_nbsend > count($alllines)) {
    						Configuration::updateValue(
    							$this->DefautSupplier.'_nbsend',
    							count($alllines)
    						);
    						$_nbsend = count($alllines);
    						$total = ($_nbsend - 1);
    					} else {
    						$total = (Configuration::get($this->DefautSupplier.'_nbsend') - 1);
    					}
    				} else {
    					$total = (count($alllines) - 1);
    				}
    			}
     
    			$data = '';
    			while (($line = array_shift($lines))) {
    				ob_start();
    				unset($data);
    				unset($fields);
    				unset($Categorye);
    				unset($categoryss);
    				unset($Category);

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 020
    Par défaut
    Il y a trop peu de code pour conclure (ou alors j'ai rater quelque chose), mais je me demande si ce ne serait pas plus léger de lire le csv original ligne par ligne et d'effectuer de cette manière les traitements et l'insertion en base au fur et à mesure? La consommation de mémoire serait bien moindre. D'autre part, tu utilises array_shift jusqu'à écoulement des 500 lignes des fichiers, c'est une très mauvaise idée, car il n'y a pas d'opération plus lente sur un tableau.

    Après identifie quels sont les traitements les plus longs ou les plus consommateurs de mémoire effectués sur les lignes. Aussi, si la quantité de données est trop importante, il est tout à fait possible que PHP ne soit pas le bon outil.

Discussions similaires

  1. Problème avec while
    Par dot-_-net dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 20/04/2008, 16h14
  2. [MySQL] problème avec while
    Par scastong dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/02/2008, 20h42
  3. [MySQL] problème avec while
    Par dudu134 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/11/2007, 08h51
  4. [MySQL] Problème avec while
    Par Whinze dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/06/2007, 17h33
  5. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo