Dividir un bucle foreach
hypo
-
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención -
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención -
Hola,
Un pequeño problema en el desarrollo de una herramienta de sincronización web-to-store.
Entonces mi pregunta es si podemos dividir este tratamiento en paquetes de 50, por ejemplo.
Configuración: Windows / Firefox 69.0
Un pequeño problema en el desarrollo de una herramienta de sincronización web-to-store.
<?php //Aquí hay una tabla con más de 3000 filas function get_ean() { //recupera todos los eans de un archivo excel de stock gracias a PHPExcel ... } // Aquí hay un bucle de tratamiento de los eans function eandata($ean) { // Aquí es donde se hace pesado, recuperación de diferentes informaciones en diferentes archivos excel (título, precio, descripción ....) recuperación de datos de proveedores (disponibilidades, metadatos (peso, tamaño, etc.) escritura de logs en archivos de texto ... en fin, ¡realmente exige muchos recursos! ... } // Y aquí un problema function traitement() { foreach ( get_ean() as $val) { $sortie = eandata($val); echo $sortie; } $exceltab = traitement(); // De hecho, la línea de arriba envía los 3000 ean al tratamiento y después solo una centena (varía entre 80 y 100) su servidor interrumpe el script. Entonces mi pregunta es si podemos dividir este tratamiento en paquetes de 50, por ejemplo.
Configuración: Windows / Firefox 69.0
4 respuestas
yg_be
Mensajes publicados
23437
Fecha de registro
Estado
Colaborador
Última intervención
Ambassadeur
1 588
Hola, tus explicaciones, a medio camino en tus comentarios, no son muy claras.
¿Crees que la función get_ean dura demasiado tiempo y que el primer echo llega demasiado tarde?
Cuando escribes: "De hecho, la línea de arriba envía los 3000 ean al procesamiento y luego solo una centena (varía entre 80 y 100, su servidor interrumpe el script", ¿de cuál hablas? Todas están por encima. "su servidor", ¿de qué se trata? ¿Cuál es el script que se interrumpe? ¿Por qué se interrumpe? ¿Es porque no hace echo?
¿Crees que la función get_ean dura demasiado tiempo y que el primer echo llega demasiado tarde?
Cuando escribes: "De hecho, la línea de arriba envía los 3000 ean al procesamiento y luego solo una centena (varía entre 80 y 100, su servidor interrumpe el script", ¿de cuál hablas? Todas están por encima. "su servidor", ¿de qué se trata? ¿Cuál es el script que se interrumpe? ¿Por qué se interrumpe? ¿Es porque no hace echo?
Hola,
Pffuiioouuuu... tuve que leer toda la discusión completa 20 veces para entender de qué se trata...
En fin..
Varias cosas...
- PhpExcel ya no se usa/mantiene. Ahora hay que pasar a PhpSpreadsheet
- En lugar de leer celda por celda su contenido para ponerlo en un array... hay una función toArray
ya sea en phpexcel $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
o en phpSpreahSheet: https://phpspreadsheet.readthedocs.io/en/latest/topics/accessing-cells/#retrieving-a-range-of-cell-values-to-an-array
También existen Iteradores para recorrer las celdas en lugar de usar for/foreach
Eso es todo..
Con esto.. deberías tener un código un poco más eficiente...
--
Atentamente,
Jordane
Pffuiioouuuu... tuve que leer toda la discusión completa 20 veces para entender de qué se trata...
En fin..
Varias cosas...
- PhpExcel ya no se usa/mantiene. Ahora hay que pasar a PhpSpreadsheet
- En lugar de leer celda por celda su contenido para ponerlo en un array... hay una función toArray
ya sea en phpexcel $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
o en phpSpreahSheet: https://phpspreadsheet.readthedocs.io/en/latest/topics/accessing-cells/#retrieving-a-range-of-cell-values-to-an-array
También existen Iteradores para recorrer las celdas en lugar de usar for/foreach
Eso es todo..
Con esto.. deberías tener un código un poco más eficiente...
--
Atentamente,
Jordane
Entonces instalé PhpSpreadsheet con el plugin "Php SpreadSheet Library WordPress Plugin" porque en realidad tengo un CAP de albañilería, jaja.
En fin, ahora he intentado la función toArray, pero hace algo raro, en lugar de poner todas las filas en un solo array, crea un array por cada fila:
Ah, y de paso, no encontré la sintaxis para decir que tome toda la columna a partir de C2. He intentado cosas al azar ya que no encontré en la doc, como "C2:C*/C+/C++/++" pero sin éxito, jaja.
De todos modos, es cierto que se ve más claro y se ve más elegante, sobre todo porque me costó un montón pasar mi sitio a PHP7, al menos sirvió para algo.
En fin, ahora he intentado la función toArray, pero hace algo raro, en lugar de poner todas las filas en un solo array, crea un array por cada fila:
function get_ean() { if ( defined('CBXPHPSPREADSHEET_PLUGIN_NAME') && file_exists( CBXPHPSPREADSHEET_ROOT_PATH . 'lib/vendor/autoload.php' ) ) { //Incluir PHPExcel require_once( CBXPHPSPREADSHEET_ROOT_PATH . 'lib/vendor/autoload.php' ); //ahora tomar instancia try { $xls_STOCK = plugin_dir_path( __FILE__ ) . 'files/STOCK.XLS'; $inputFileName = $xls_STOCK; $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls(); $spreadsheet = $reader->load($inputFileName); $dataArray = $spreadsheet->getActiveSheet() ->rangeToArray( 'C2:C5', // El rango de la hoja de cálculo que queremos recuperar NULL, // Valor que debe devolver para celdas vacías TRUE, // ¿Se deben calcular las fórmulas? (el equivalente de getCalculatedValue() para cada celda) TRUE, // ¿Se deben formatear los valores? (el equivalente de getFormattedValue() para cada celda) TRUE // ¿Se debe indexar el array por fila y columna de celda? ); }catch(Exception $e) { die('Error al cargar el archivo "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage()); } return $dataArray; } } Ah, y de paso, no encontré la sintaxis para decir que tome toda la columna a partir de C2. He intentado cosas al azar ya que no encontré en la doc, como "C2:C*/C+/C++/++" pero sin éxito, jaja.
De todos modos, es cierto que se ve más claro y se ve más elegante, sobre todo porque me costó un montón pasar mi sitio a PHP7, al menos sirvió para algo.
Si miras bien la documentación del enlace que te di... encontrarás líneas como
Así que... con eso... puedes saber cómo definir la última de tu columna...
Algo así
Y si lees los comentarios que se encuentran en el código
Deberías encontrar cómo devolver UN array como deseas...
En fin... solo hay que leer :-)
// Obtener el número más alto de fila y columna referenciado en la hoja de cálculo $highestRow = $worksheet->getHighestRow(); // p.ej. 10 $highestColumn = $worksheet->getHighestColumn(); // p.ej. 'F'
Así que... con eso... puedes saber cómo definir la última de tu columna...
Algo así
$worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); $dataArray = $spreadsheet->getActiveSheet() ->rangeToArray( 'C2:C'.$highestRow, // El rango de la hoja de cálculo que queremos recuperar NULL, // Valor que debe ser devuelto para celdas vacías TRUE, // ¿Deberían calcularse las fórmulas (el equivalente a getCalculatedValue() para cada celda) TRUE, // ¿Deberían formatearse los valores (el equivalente a getFormattedValue() para cada celda) TRUE // ¿Debería el array estar indexado por fila y columna de celda );
Y si lees los comentarios que se encuentran en el código
TRUE // ¿Debería el array estar indexado por fila y columna de celda?
Deberías encontrar cómo devolver UN array como deseas...
En fin... solo hay que leer :-)
Ah, sí, pero la verdad es que estoy perdido. En Google Trad me dijo "¿La tabla debe ser indexada por fila de celda y columna de celda?", a lo que, por supuesto, respondí "¡kamoulox!". Y respecto a "highest row", estaba convencido de que se refería a la primera fila no nula, así que realmente debo dejar de interpretar, evidentemente no tengo la lógica correcta x).
¡Perfecto para el highestRow!
Solo hay que recordar declarar la hoja antes
Sin embargo, no cambia el resultado poner NULL o FALSE en "¿Deben ser el array indexado por fila y columna de celda?", me pregunto si no es un parámetro que solo se utiliza cuando llamamos a varias columnas. De todos modos, voy a ver si no puedo simplemente aprovechar el resultado tal cual. ¡De todas formas, gracias!
Solo hay que recordar declarar la hoja antes
$worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); $dataArray = $worksheet ->rangeToArray( 'C2:C'.$highestRow, // El rango de la hoja que queremos recuperar NULL, // Valor que debe ser devuelto para celdas vacías TRUE, // ¿Deben calcularse las fórmulas (equivalente a getCalculatedValue() para cada celda) TRUE, // ¿Deben formatearse los valores (equivalente a getFormattedValue() para cada celda) NULL // ¿Deben ser el array indexado por fila y columna de celda? ); return $dataArray;
Sin embargo, no cambia el resultado poner NULL o FALSE en "¿Deben ser el array indexado por fila y columna de celda?", me pregunto si no es un parámetro que solo se utiliza cuando llamamos a varias columnas. De todos modos, voy a ver si no puedo simplemente aprovechar el resultado tal cual. ¡De todas formas, gracias!
Hola,
Aquí estoy de nuevo :p
Entonces, después de haber implementado todo esto, esto es lo que sucede todo el tiempo:
Aquí estoy de nuevo :p
Entonces, después de haber implementado todo esto, esto es lo que sucede todo el tiempo:
logs: 9782950460103 tratado con un stock de: 11! Número de productos restantes a tratar: 2907 memoria: 58754640 9782813808240 tratado con un stock de: 8! Número de productos restantes a tratar: 2906 memoria: 58847168 9782956325635 tratado con un stock de: 3! Número de productos restantes a tratar: 2905 memoria: 58832656 3700126703829 tratado con un stock de: 2! Número de productos restantes a tratar: 2904 memoria: 58832656 3700126717925 tratado con un stock de: 2! Número de productos restantes a tratar: 2903 memoria: 58879424 3700126705588 tratado con un stock de: 2! Número de productos restantes a tratar: 2902 memoria: 58856544 3700126707490 tratado con un stock de: 2! Número de productos restantes a tratar: 2901 memoria: 58856544 3700126717420 tratado con un stock de: 2! Número de productos restantes a tratar: 2900 memoria: 58856544 3700126707469 tratado con un stock de: 2! Número de productos restantes a tratar: 2899 memoria: 58856544 3700126705618 tratado con un stock de: 2! Número de productos restantes a tratar: 2898 memoria: 58856544 3700126707520 tratado con un stock de: 2! Número de productos restantes a tratar: 2897 memoria: 58856544 3700126707544 tratado con un stock de: 2! Número de productos restantes a tratar: 2896 memoria: 58856544 3700126708435 tratado con un stock de: 2! Número de productos restantes a tratar: 2895 memoria: 58903344 3700126708961 tratado con un stock de: 2! Número de productos restantes a tratar: 2894 memoria: 58880464 3700126708978 tratado con un stock de: 2! Número de productos restantes a tratar: 2893 memoria: 58880464 3700126709081 tratado con un stock de: 2! Número de productos restantes a tratar: 2892 memoria: 58880464 3700126710575 tratado con un stock de: 2! Número de productos restantes a tratar: 2891 memoria: 58880464 3700126718113 tratado con un stock de: 2! Número de productos restantes a tratar: 2890 memoria: 58880464 3700126710049 tratado con un stock de: 2! Número de productos restantes a tratar: 2889 memoria: 58880464 3700126710056 tratado con un stock de: 2! Número de productos restantes a tratar: 2888 memoria: 58880464 3700126710124 tratado con un stock de: 2! Número de productos restantes a tratar: 2887 memoria: 58880464 3700126710650 tratado con un stock de: 2! Número de productos restantes a tratar: 2886 memoria: 58880464 3700126746284 tratado con un stock de: 2! Número de productos restantes a tratar: 2885 memoria: 58880464 3700126718168 tratado con un stock de: 2! Número de productos restantes a tratar: 2884 memoria: 58880464 3700126718243 tratado con un stock de: 2! Número de productos restantes a tratar: 2883 memoria: 58880464 3700126716010 tratado con un stock de: 2! Número de productos restantes a tratar: 2882 memoria: 58880464 3700126716041 tratado con un stock de: 2! Número de productos restantes a tratar: 2881 memoria: 58880464 3700126746789 tratado con un stock de: 2! Número de productos restantes a tratar: 2880 memoria: 58927216 3700126705014 tratado con un stock de: 2! Número de productos restantes a tratar: 2879 memoria: 58951392 3700126711633 tratado con un stock de: 2! Número de productos restantes a tratar: 2878 memoria: 58975248 3100000005986 tratado con un stock de: 2! Número de productos restantes a tratar: 2877 memoria: 58952368 4250888109029 tratado con un stock de: 1! Número de productos restantes a tratar: 2876 memoria: 58952368 X000KITGTV tratado con un stock de: 4! Número de productos restantes a tratar: 2875 memoria: 58952368 1298560 tratado con un stock de: 2! Número de productos restantes a tratar: 2874 memoria: 58952368 3700126704918 tratado con un stock de: 2! Número de productos restantes a tratar: 2873 memoria: 58952368 3100000005993 tratado con un stock de: 2! Número de productos restantes a tratar: 2872 memoria: 58952368 X000XLEWSZ tratado con un stock de: 2! Número de productos restantes a tratar: 2871 memoria: 58952368 3329680151602 tratado con un stock de: 3! Número de productos restantes a tratar: 2870 memoria: 58952368 3329681144634 tratado con un stock de: 6! Número de productos restantes a tratar: 2869 memoria: 58952368 3329689495622 tratado con un stock de: 3! Número de productos restantes a tratar: 2868 memoria: 58952368 3329681133232 tratado con un stock de: 12! Número de productos restantes a tratar: 2867 memoria: 58952368 3130630138068 tratado con un stock de: 6! Número de productos restantes a tratar: 2866 memoria: 58952368 3130632044206 tratado con un stock de: 3! Número de productos restantes a tratar: 2865 memoria: 58952368 3130630580676 tratado con un stock de: 3! Número de productos restantes a tratar: 2864 memoria: 58952368 3427140344837 tratado con un stock de: 15! Número de productos restantes a tratar: 2863 memoria: 58952368 3100000005498 tratado con un stock de: 21! Número de productos restantes a tratar: 2862 memoria: 58952368 3100000005481 tratado con un stock de: 27! Número de productos restantes a tratar: 2861 memoria: 58952368 3661362134863 tratado con un stock de: 3! Número de productos restantes a tratar: 2860 memoria: 58952368 4016795360447 tratado con un stock de: 3! Número de productos restantes a tratar: 2859 memoria: 58952368 5414307091336 tratado con un stock de: 3! Número de productos restantes a tratar: 2858 memoria: 58952368 3700761402385 tratado con un stock de: 36! Número de productos restantes a tratar: 2857 memoria: 58952368 3553231594024 tratado con un stock de: 3! Número de productos restantes a tratar: 2856 memoria: 58952368 3020122350200 tratado con un stock de: 23! Número de productos restantes a tratar: 2855 memoria: 58952368 3329680472103 tratado con un stock de: 29! Número de productos restantes a tratar: 2854 memoria: 58952368 3329680173109 tratado con un stock de: 30! Número de productos restantes a tratar: 2853 memoria: 58952368 3329680175103 tratado con un stock de: 13! Número de productos restantes a tratar: 2852 memoria: 58983208 3560239382751 tratado con un stock de: 6! Número de productos restantes a tratar: 2851 memoria: 58968696 3250650066520 tratado con un stock de: 5! Número de productos restantes a tratar: 2850 memoria: 58968696 3086120017248 tratado con un stock de: 9! Número de productos restantes a tratar: 2849 memoria: 59001208 3100000005856 tratado con un stock de: 3! Número de productos restantes a tratar: 2848 memoria: 58986168 3250650219841 tratado con un stock de: 3! Número de productos restantes a tratar: 2847 memoria: 58986168 3553231128496 tratado con un stock de: 21! Número de productos restantes a tratar: 2846 memoria: 58986168 3660942000246 tratado con un stock de: 3! Número de productos restantes a tratar: 2845 memoria: 59019520 3660942060370 tratado con un stock de: 24! Número de productos restantes a tratar: 2844 memoria: 59036888 3660942016186 tratado con un stock de: 11! Número de productos restantes a tratar: 2843 memoria: 59054704 3154143244054 tratado con un stock de: 30! Número de productos restantes a tratar: 2842 memoria: 59040192 3154144402101 tratado con un stock de: 6! Número de productos restantes a tratar: 2841 memoria: 59040192 5014702026478 tratado con un stock de: 18! Número de productos restantes a tratar: 2840 memoria: 59040192 3086123329263 tratado con un stock de: 11! Número de productos restantes a tratar: 2839 memoria: 59040192 3100000005627 tratado con un stock de: 180! Número de productos restantes a tratar: 2838 memoria: 59040192 3037921820094 tratado con un stock de: 15! Número de productos restantes a tratar: 2837 memoria: 59040192 3037920182001 tratado con un stock de: 6! Número de productos restantes a tratar: 2836 memoria: 59040192 3037920122007 tratado con un stock de: 19! Número de productos restantes a tratar: 2835 memoria: 59040192 3037920132006 tratado con un stock de: 17! Número de productos restantes a tratar: 2834 memoria: 59040192 3037920162003 tratado con un stock de: 21! Número de productos restantes a tratar: 2833 memoria: 59040192 3437016000200 tratado con un stock de: 24! Número de productos restantes a tratar: 2832 memoria: 59040192 3329683031611 tratado con un stock de: 26! Número de productos restantes a tratar: 2831 memoria: 59040192 3592930012514 tratado con un stock de: 3! Número de productos restantes a tratar: 2830 memoria: 59040192 1133296811515 tratado con un stock de: 24! Número de productos restantes a tratar: 2829 memoria: 59040192 8852641522562 tratado con un stock de: 14! Número de productos restantes a tratar: 2828 memoria: 59040192 3329681154138 tratado con un stock de: 96! Número de productos restantes a tratar: 2827 memoria: 59040192 3329680185706 tratado con un stock de: 6! Número de productos restantes a tratar: 2826 memoria: 59040192 3255460193893 tratado con un stock de: 8! Número de productos restantes a tratar: 2825 memoria: 59040192 3329680147117 tratado con un stock de: 9! Número de productos restantes a tratar: 2824 memoria: 59040192 3329680471106 tratado con un stock de: 12! Número de productos restantes a tratar: 2823 memoria: 59071016 3503167140000 tratado con un stock de: 6! Número de productos restantes a tratar: 2822 memoria: 59056504 3154142441201 tratado con un stock de: 3! Número de productos restantes a tratar: 2821 memoria: 59088984 3130630851004 tratado con un stock de: 24! Número de productos restantes a tratar: 2820 memoria: 59073944 3130630085409 tratado con un stock de: 27! Número de productos restantes a tratar: 2819 memoria: 59073944 3086123154766 tratado con un stock de: 69! Número de productos restantes a tratar: 2818 memoria: 59073944 3086123154506 tratado con un stock de: 63! Número de productos restantes a tratar: 2817 memoria: 59073944 8000825654404 tratado con un stock de: 10! Número de productos restantes a tratar: 2816 memoria: 59073944 3086123466012 tratado con un stock de: 9! Número de productos restantes a tratar: 2815 memoria: 59105568 3760032831894 tratado con un stock de: 171! Número de productos restantes a tratar: 2814 memoria: 59091056 3503167210000 tratado con un stock de: 5! Número de productos restantes a tratar: 2813 memoria: 59091056 3154141961014 tratado con un stock de: 12! Número de productos restantes a tratar: 2812 memoria: 59091056 3329683033622 tratado con un stock de: 2! Número de productos restantes a tratar: 2811 memoria: 59091056 3503167190005 tratado con un stock de: 99! Número de productos restantes a tratar: 2810 memoria: 59091056 9781439744475 tratado con un stock de: 3! Número de productos restantes a tratar: 2809 memoria: 59091056 9781439744536 tratado con un stock de: 6! Número de productos restantes a tratar: 2808 memoria: 59091056 9781439735640 tratado con un stock de: 6! Número de productos restantes a tratar: 2807 memoria: 59091056 3329680961775 tratado con un stock de: 8! Número de productos restantes a tratar: 2806 memoria: 59091056 3561865703095 tratado con un stock de: 12! Número de productos restantes a tratar: 2805 memoria: 59091056 3501179531847 tratado con un stock de: 3! Número de productos restantes a tratar: 2804 memoria: 59091056 7638900202410 tratado con un stock de: 6! Número de productos restantes a tratar: 2803 memoria: 59091056 4008496810321 tratado con un stock de: 3! Número de productos restantes a tratar: 2802 memoria: 59091056 4902505163180 tratado con un stock de: 32! Número de productos restantes a tratar: 2801 memoria: 59123872 3329680142044 tratado con un stock de: 3! Número de productos restantes a tratar: 2800 memoria: 59108832 3134375231626 tratado con un stock de: 6! Número de productos restantes a tratar: 2799 memoria: 59108832 8858741700947 tratado con un stock de: 27! Número de productos restantes a tratar: 2798 memoria: 59108832 3020123872046 tratado con un stock de: 12! Número de productos restantes a tratar: 2797 memoria: 59108832 3134375261418 tratado con un stock de: 108! Número de productos restantes a tratar: 2796 memoria: 59141600 3329681151595 tratado con un stock de: 3! Número de productos restantes a tratar: 2795 memoria: 59126560 3329681151540 tratado con un stock de: 13! Número de productos restantes a tratar: 2794 memoria: 59126560 3661075177119 tratado con un stock de: 15! Número de productos restantes a tratar: 2793 memoria: 59126560 3086123395787
Supongo que lo que nos muestras no se encuentra en la función de recuperación de los EAN, sino en tu otra función eandata ...
Como no sabemos lo que contiene.. nos será difícil responderte.
Pero dada los comentarios que colocaste en tu primera pregunta sobre esta función.. creo que hay que revisar un poco su "lógica".
Personalmente... almacenaría los diferentes datos en una base de datos en lugar de trabajar directamente con los archivos de Excel
Entonces será muy fácil recuperar la información deseada a través de consultas SQL y algunas uniones...
También puedes reducir el número de EAN a tratar cada vez, ya que ahora tienes el código necesario para elegir el "rango" de celdas a leer.
Como no sabemos lo que contiene.. nos será difícil responderte.
Pero dada los comentarios que colocaste en tu primera pregunta sobre esta función.. creo que hay que revisar un poco su "lógica".
Personalmente... almacenaría los diferentes datos en una base de datos en lugar de trabajar directamente con los archivos de Excel
Entonces será muy fácil recuperar la información deseada a través de consultas SQL y algunas uniones...
También puedes reducir el número de EAN a tratar cada vez, ya que ahora tienes el código necesario para elegir el "rango" de celdas a leer.
¿Qué desencadena la ejecución de tu script? Si quieres cortarlo en partes, tendrás que llamar a cada una de esas partes.
La memoria no aumenta casi nada, ¿por qué crees que esa es la causa de la detención del script? Podrías añadir pausas para verificar que no es el tiempo transcurrido el que causa el problema.
¿Cuánto tiempo transcurre aproximadamente antes de que se interrumpa?
La memoria no aumenta casi nada, ¿por qué crees que esa es la causa de la detención del script? Podrías añadir pausas para verificar que no es el tiempo transcurrido el que causa el problema.
¿Cuánto tiempo transcurre aproximadamente antes de que se interrumpa?
Así que sí, cuando digo la línea de arriba me refiero a $exceltab y dado que incluye la función "tratamiento", implícitamente se trata de todas las líneas del código ^^. "su servidor", perdona, es un error tipográfico, es "el servidor", en este caso un VPS de ovh.
La función get_ean retorna un array() con los eans.
La función eandata procesa 1 ean para transformarlo en una ficha de producto.
La función tratamiento envía los eans uno por uno a eandata.
Pero más simplemente, lo que me gustaría es agregar una función que venga a crear, digamos, etapas de 50 tratamientos, del tipo:
1. cuento las líneas de la tabla
2. cuento el número de paquetes de 50 a tratar
3. envío 1 paquete de 50 a tratamiento y devuelvo un valor para alimentar una barra de progreso
... en ese sentido.
Pero en realidad no sé si eso cambiaría algo, es más una pregunta abierta sobre cómo descomponer un gran tratamiento en muchos pequeños, si hay ejemplos de código (no he encontrado, por eso estoy aquí ^^).
Gracias de todos modos.
function get_ean(){ //incluimos la biblioteca PHPExcel para leer nuestros archivos .xls require_once plugin_dir_path( __FILE__ ) . 'PHPExcel1/Classes/PHPExcel.php'; require_once plugin_dir_path( __FILE__ ) . 'PHPExcel1/Classes/PHPExcel/IOFactory.php'; $xls_STOCK = plugin_dir_path( __FILE__ ) . 'files/STOCK.XLS'; $inputFileType = 'Excel5'; $inputFileName = $xls_STOCK; // pasamos por un try porque es muy problemático try { $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); $sheetData = $objPHPExcel->getActiveSheet(); $highestRow = $sheetData->getHighestRow(); $highestColumn = $sheetData->getHighestColumn(); $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); for ($row = 2; $row <= $highestRow; ++$row) { for ($col = 2; $col <= $highestColumnIndex; $col += 10 ) { $eans[] = $sheetData->getCellByColumnAndRow($col, $row)->getValue(); } } return $eans; } catch(Exception $e) { die('Error al cargar el archivo "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage()); } }devuelve