Foros del Web » Programando para Internet » PHP »

Problema de ejecución en un bucle

Estas en el tema de Problema de ejecución en un bucle en el foro de PHP en Foros del Web. Hola, tengo un problemilla con uno de mis códigos y lo cierto es que llevo peleándome varios días con él y nada... no consigo sacar ...
  #1 (permalink)  
Antiguo 11/09/2009, 04:18
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 2 meses
Puntos: 0
Problema de ejecución en un bucle

Hola, tengo un problemilla con uno de mis códigos y lo cierto es que llevo peleándome varios días con él y nada... no consigo sacar nada en claro.

Para poneros en situación:

Tengo un array con muchas ids, aproximadamente unas 10.000.

Tengo la suerte además, de tener una carpeta con unos 10.000 archivos, cuyos nombres lo forman id+extension (ejemplo: 100002020202030304.html)

Y por último tengo un código, que para cada id del array:

- saca el texto
- busca la parte que nos interesa
- la adorna y deja bonita
- y guarda lo que nos interesa en el fichero X

De tal forma que en X tenemos el trozo que nos interesa de los 10.000 archivos.


(No sé si me he explicado)

El problema:


No me falla el código de sacar, ni de guardar, ni de adornar y dejar bonito. En principio todo funciona bien.

Si lo hago con una id va de lujo, si lo hago con un grupo de 50 lo mismo, con uno de 100 perfecto... pero cuando pongo todas las ids... es como si se me quedara pillado.

De hecho, me crea el archivo que quiero X.txt, y en un par de segundos me mete 288 lineas de 288 archivos. Pero ahí es como si se parase, por mucho más tiempo que lo dejo no avanza.

He probado por si fuera un error del archivo 289, pero si lo pongo a empezar desde ahí lo hace sin problemas.


Puede ser alguna opción de cuando instalé el PhP? Hay alguna opción que diga que sólo ejecute en un bucle X iteraciones???


Estoy perdido T.T

He configurado por si acaso, todos los máximos del php.ini pero no he conseguido nada.

Ayuda por favorr :(
  #2 (permalink)  
Antiguo 11/09/2009, 06:07
 
Fecha de Ingreso: julio-2009
Ubicación: En mi casa
Mensajes: 48
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema de ejecución en un bucle

tienes un for que repita el proceso? hasta que termine ej:
for($final = count($array); $id < $final ; $inicio++)
{
sacar, guardar, adornar y dejar bonito
}

por que si lo tienes no deberia pararse, hasta que termine...
  #3 (permalink)  
Antiguo 11/09/2009, 06:40
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 6 meses
Puntos: 71
Respuesta: Problema de ejecución en un bucle

por que no pruebas ha debugear el bucle, es decir, si tienes el tipico for (o while) donde haces lo de leer, poner bonitos.... en lugar de hacer eso, pones un simple echo "nombre del fichero que le tocaria procesar"; para ver si pasa por todos los ficheros

con eso lo que pretendo es saber si en algun fichero hay algun tipo de codigo (tipo eval() o similar) que haga que salte el bucle o entre en un loop infinito.

cuentanos como avanza el tema :)
  #4 (permalink)  
Antiguo 11/09/2009, 18:16
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema de ejecución en un bucle

De hecho antes hacía un echo en cada iteración, pero sólo veía aparecer los resultados de 100 en 100 más o menos. Así que ahora probé a guardarlo en un fichero, y me ejecuta más líneas, pero muy pocas más...

El código sería algo así en plan resumido:

Código PHP:
$ides=array(221001,.............,320000);

$archivof="datos.txt";
$ff=fopen($archivof,"a");
foreach (
$ides as $j => $value) {
    
$idobj=$ides[$j];
$archivo ="carpeta/".$idobj.".html";
$fp=fopen($archivo,"r");
$string=fread($fp,filesize($archivo));
$cambio=$string;
$pos1=strpos($cambio,"yyy:"); 
$palabra=",xxx:";
$palabra2=substr($cambio,$pos1,6);
for(
$i=$pos1;(strcmp($palabra,$palabra2)!=0);$i=$i+1){ $palabra2=substr($cambio,$i,6); }

$cambio=substr($cambio,$pos1,($i-1)-$pos1);

$que=array("[","]","yyy: ","id:");
$por=array("","","","ID:".$idobj.",");

$strg=str_replace($que,$por,$cambio);
$write=fputs($ff,$strg);


fclose($fp);
}
fclose($ff);
echo 
'FIN'
Gracias de antemano a todos... que sé que siempre es pesado leer códigos ajenos jejeje. Ójala yo pueda ayudar a alguien así en un futuro cuando tenga más nivel XD
  #5 (permalink)  
Antiguo 12/09/2009, 02:48
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 6 meses
Puntos: 71
Respuesta: Problema de ejecución en un bucle

Cita:
Iniciado por drazick Ver Mensaje
De hecho antes hacía un echo en cada iteración, pero sólo veía aparecer los resultados de 100 en 100 más o menos. Así que ahora probé a guardarlo en un fichero, y me ejecuta más líneas, pero muy pocas más...

El código sería algo así en plan resumido:

Código PHP:
$ides=array(221001,.............,320000);

$archivof="datos.txt";
$ff=fopen($archivof,"a");
foreach (
$ides as $j => $value) {
    
$idobj=$ides[$j];
$archivo ="carpeta/".$idobj.".html";
$fp=fopen($archivo,"r");
$string=fread($fp,filesize($archivo));
$cambio=$string;
$pos1=strpos($cambio,"yyy:"); 
$palabra=",xxx:";
$palabra2=substr($cambio,$pos1,6);
for(
$i=$pos1;(strcmp($palabra,$palabra2)!=0);$i=$i+1){ $palabra2=substr($cambio,$i,6); }

$cambio=substr($cambio,$pos1,($i-1)-$pos1);

$que=array("[","]","yyy: ","id:");
$por=array("","","","ID:".$idobj.",");

$strg=str_replace($que,$por,$cambio);
$write=fputs($ff,$strg);

// Añade esta linea para saber si falla en la escritura de alguno de los ficheros.
if(!$write) die('Fichero que falla: '.$archivo);

fclose($fp);
}
fclose($ff);
echo 
'FIN'
Gracias de antemano a todos... que sé que siempre es pesado leer códigos ajenos jejeje. Ójala yo pueda ayudar a alguien así en un futuro cuando tenga más nivel XD
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:29.