recherche

Maison  >  Questions et réponses  >  le corps du texte

mysql - PHPExcel importe 10 000 éléments de délai d'expiration de connexion de données

Un débutant vient d'apprendre PHP. Actuellement, le développement doit utiliser phpexcel pour insérer 10 000 enregistrements dans la base de données (1 enregistrement avec 43 colonnes). Avant d'insérer chaque donnée, vérifiez si elle existe dans la base de données. n'existe pas, continuez à insérer et à mettre à jour les données d'origine. Définissez l'indicateur, sinon l'enregistrement sera ignoré.
La situation actuelle est qu'il faut plus de 20 secondes pour importer 2 000 éléments de données. Lors de l'importation de 10 000 éléments de données, une erreur 500 est signalée. L'importation échoue. Le fichier est introuvable dans le répertoire où le fichier téléchargé. est stocké. `$result=move_uploaded_file($_FILES'inputExcel',$uploadfile);

    if(!$result)
    {
        die('no file!');
    }
    
    $objReader = PHPExcel_IOFactory::createReader('CSV')
    ->setDelimiter(',')
    ->setInputEncoding('GBK')
    ->setEnclosure('"')
    ->setLineEnding("\r\n")
    ->setSheetIndex(0);
    $objPHPExcel = $objReader->load($uploadfile);        
    $sheet = $objPHPExcel->getSheet(0);        
    $highestRowNum = $sheet->getHighestRow();
    $highestColumn = $sheet->getHighestColumn();
    $highestColumnNum = PHPExcel_Cell::columnIndexFromString($highestColumn);
    echo $highestRowNum.'+'.$highest

Le nombre de lignes et de colonnes ne peut pas être obtenu ici. Set_time_limit=0 a été ajouté au code et la mémoire a été modifiée à 128 Mo. Demander des conseils

世界只因有你世界只因有你2756 Il y a quelques jours1025

répondre à tous(4)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:01:12

    Il faudrait que la mémoire soit pleine. Vous pouvez utiliser l'itération de rendement pour limiter le nombre d'éléments insérés à chaque fois. En fait, c'est une coroutine.

    répondre
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:01:12

    Une seule importation de 10 000 éléments de données expirera facilement et imposera une lourde charge au serveur. Vous pouvez envisager de diviser les 1 000 éléments de données en plusieurs importations. Ce type d'importation de données volumineuses peut être effectué de manière asynchrone. ne laissez pas les utilisateurs attendre. Vous pouvez également envisager d'utiliser des coroutines à la place.

    répondre
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:01:12

    Ajoutez le nom du fichier téléchargé à la file d'attente. Écrivez un script pour lire le nom du fichier dans la file d'attente et ouvrez le fichier pour l'importer. Ajoutez le script à une tâche planifiée crontab ou écrivez-le en tant que service

    .

    répondre
    0
  • 为情所困

    为情所困2017-05-16 13:01:12

    Comme il s'agit de csv, il n'est pas nécessaire d'utiliser PHPExcel. Cette bibliothèque open source consomme trop de mémoire. J'ai déjà utilisé cette bibliothèque, https://packagist.org/package... (elle semble ne prendre en charge que PHP7), Je n'écrirai pas la démo, je la chercherai moi-même dans la documentation, je peux importer des centaines de milliers d'éléments sans aucun stress, merci.
    En présentant un autre, https://packagist.org/package..., il n'y a aucune pression, je vous suggère d'abord de comprendre ce qu'est le csv. Nous pouvons même écrire nous-mêmes une classe d'importation csv, qui semble la plus efficace et la plus légère. .

    répondre
    0
  • Annulerrépondre