Foros del Web » Programando para Internet » PHP »

se puede poner una pausa en un bucle ?

Estas en el tema de se puede poner una pausa en un bucle ? en el foro de PHP en Foros del Web. tengo un bucle while que lee de una base mysql, pero luego dentro del while hay muchos procesos, funciones, etc, la idea seria si se ...
  #1 (permalink)  
Antiguo 30/04/2008, 06:26
 
Fecha de Ingreso: marzo-2007
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta se puede poner una pausa en un bucle ?

tengo un bucle while que lee de una base mysql, pero luego dentro del while hay muchos procesos, funciones, etc, la idea seria si se puede poner como una pausa para que yo clickee un link o boton para continuar o algo asi.
porque sino se re cuelga y no hace nada
  #2 (permalink)  
Antiguo 30/04/2008, 07:02
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Re: se puede poner una pausa en un bucle ?

tal vez algo de codigo pa ver.... o tal vez con sleep???

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #3 (permalink)  
Antiguo 30/04/2008, 07:04
 
Fecha de Ingreso: marzo-2007
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: se puede poner una pausa en un bucle ?

pero sleep hace una pausa dentro del codigo sin intervencion mia, eso retrasa aun mas el time out ... o no ?
  #4 (permalink)  
Antiguo 30/04/2008, 07:21
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Re: se puede poner una pausa en un bucle ?

y por que no muestras tu codigo a ver???
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #5 (permalink)  
Antiguo 30/04/2008, 07:39
 
Fecha de Ingreso: marzo-2007
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: se puede poner una pausa en un bucle ?

en un php paso de un archivo .dict a una base de datos (lo separe en 2 pasos, o 2 archivos php) y luego ya todo en la base con este php lo quiero convertir a xml previos pasos por funciones para hacer correcciones, hay muchas funciones, replace, etc porque hay muchos codigos raros que estan en idioma indio, o caracteres raros como raiz cuadrada, etc.


Código PHP:
$link=conectar();

// Fin conexion


set_time_limit(0);


include ('decoder_utf8.php');

include ('sanskrita_export_functions.php');


$shtml='<?xml version="1.0" encoding="utf-8" ?><mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang="en">
  <siteinfo>
    <sitename>Sanskrita</sitename>
    <base></base>
    <generator>MediaWiki 1.10.0</generator>
    <case>case-sensitive</case>
      <namespaces>
      <namespace key="-2">Media</namespace>
      <namespace key="-1">Special</namespace>
      <namespace key="0"/>
      <namespace key="1">Talk</namespace>
      <namespace key="2">User</namespace>
      <namespace key="3">User talk</namespace>
      <namespace key="4">Sanskrita</namespace>
      <namespace key="5">Sanskrita talk</namespace>
      <namespace key="6">Image</namespace>
      <namespace key="7">Image talk</namespace>
      <namespace key="8">MediaWiki</namespace>
      <namespace key="9">MediaWiki talk</namespace>
      <namespace key="10">Template</namespace>
      <namespace key="11">Template talk</namespace>
      <namespace key="12">Help</namespace>
      <namespace key="13">Help talk</namespace>
      <namespace key="14">Category</namespace>
      <namespace key="15">Category talk</namespace>
    </namespaces>
  </siteinfo>';
 

$query = "SELECT pagina, hk, hksimbol, definicion, prevraiz, raiz, dictorig, id FROM textos ORDER BY id ASC ";
$result = mysql_query($query); 
if (mysql_error()) echo mysql_error()."<br>";
while ($rows = mysql_fetch_array($result))
{
    $xid =$rows['id'];
    $page=$rows[0];
    //echo "$page - $xid <br>";
    if ($page!='0') // Esto se imprime una vez por cada pagina
    {
        $pagedict=$page;
        ${dictorig.$page}.=rtrim(str_replace("---> ","->",$rows[6]));
        $key[$page]=keywordshk($rows[1]);
        if ($xid>1)
        {
            $pagedicttemp=($page-1);
            $shtml.=htmlspecialchars('<!-- <mw page="'.(($page-1)*10).'"> -->');
            $shtml.=htmlspecialchars('<!-- <keywords>'.$key[$page-1].'</keywords> -->');
            $shtml.=htmlspecialchars('<!-- <link></link> -->');
            $shtml.=htmlspecialchars('<!-- <progress en="" es=""> -->');
            $shtml.="\n\n".htmlspecialchars('<!-- *** START DICT ORIGINAL ***'.${dictorig.$pagedicttemp}."\n\n".'*** END DICT ORIGINAL *** -->');
            $shtml.='</text>
    </revision>
  </page>';
        }
        $shtml.= "\n<page>\n<title>".$rows[1];
        $hkraiz=$rows[5];
        $hkprevraiz=trim($rows[4]); // previo hasta raiz
        $hkprevraiz=str_replace("'","",$hkprevraiz);
        $hksimbol=$hkprevraiz.$hkraiz;
        $hk=$rows[1];
        $def=str_replace('&','&amp;',$rows[3]);
        $def=search_and_replace($def);
        $shtml.='</title>
    <id></id>
    <revision>
      <id></id>
      <timestamp></timestamp>
      <contributor>
        <username></username>
        <id></id>
      </contributor>
      <minor/>
      <text xml:space="preserve">';
        $shtml=$shtml.impmodule($hk,$hkraiz);
        $shtml=$shtml. "\n\n";
        $shtml=$shtml. "\n" . htmlspecialchars('<html><div id="santitle"><santitle>');
        $shtml=$shtml. $hk;
        $shtml=$shtml. htmlspecialchars("</santitle></div></html>")."\n\n";
        $shtml=$shtml. htmlspecialchars('==<html><div id="sanskrita"><sanskrita>');
        $shtml=$shtml. $hk;
        $shtml=$shtml. htmlspecialchars('</sanskrita></div></html>');
        $shtml=$shtml. htmlspecialchars("&nbsp;''").htmlspecialchars($hkprevraiz).raizlink($hkraiz).htmlspecialchars("'' ");
        $shtml=$shtml. htmlspecialchars('<font color="#616E33">[ ');
        $shtml=$shtml. $hk;
        $shtml=$shtml. htmlspecialchars(' ]</font><!--<html><a href="/wiki/images/');
        $shtml=$shtml. substr($hk,0,1)."/".$hk.".wav";
        $shtml=$shtml. htmlspecialchars('"><img src="/wiki/images/audio.gif" width="19" height="18" border="0" /></a></html>-->==')."\n";
        $shtml=$shtml. "\n\n";
        $shtml=$shtml. htmlspecialchars('<multilang>')."\n";
        $shtml=$shtml. "\n\n";
        $shtml=$shtml. htmlspecialchars('@es|')."\n";
        $shtml=$shtml. htmlspecialchars('<!-- *** AQUI COMIENZA LA VERSION EN ESPANOL *** -->');
        $shtml=$shtml. ltrim($def)."\n";
        $shtml=$shtml. htmlspecialchars('<!-- *** AQUI TERMINA LA VERSION EN ESPANOL *** -->')."\n";
        $shtml=$shtml. htmlspecialchars('@en|')."\n";
        $shtml=$shtml. htmlspecialchars('<!-- *** ENGLISH VERSION STARTS HERE *** -->');
        $shtml=$shtml. ltrim($def)."\n";
        $shtml=$shtml. htmlspecialchars('<!-- *** ENGLISH VERSION ENDS HERE *** -->')."\n";
        $shtml=$shtml. htmlspecialchars('</multilang>')."\n";
    }
    else
    {
        ${dictorig.$pagedict}.=rtrim(str_replace("---> ","->",$rows[6]));
        $key[$page].=", ".keywordshk($rows[1]);
        $hkraiz=$rows[5];
        $hkprevraiz=trim($rows[4]); // previo hasta raiz
        $hkprevraiz=str_replace("'","",$hkprevraiz);
        $palabras=split("&radic;",$hkraiz); // cortamos la raiz por si hay mas de una en la misma palabra
        $hkraiz1='';
        for($i=0;$palabras[$i];$i++)
        {
            if ($i>0)
                $hkraiz1.="&radic;";
            $hkraiz1.= raizlink($palabras[$i]);
        }
        $hk=$rows[1];
        $def=str_replace('&','&amp;',$rows[3]);
        $def=search_and_replace($def);
        $hksimbol=$hkprevraiz.$hkraiz1;
        if (strlen($hkraiz)<1)
            $hksimbol=simbols($hksimbol);        
        $shtml=$shtml. "\n\n";
        //echo htmlspecialchars("==''").rtrim(ltrim($hksimbol)).htmlspecialchars("'' ");
        $shtml=$shtml. htmlspecialchars("==''").htmlspecialchars($hksimbol).htmlspecialchars("'' ");
        $shtml=$shtml. htmlspecialchars('<font color="#616E33">[ ');
        $shtml=$shtml. $hk;
        $shtml=$shtml. htmlspecialchars(' ]</font><!--<html><a href="/wiki/images/');
        $shtml=$shtml. substr($hk,0,1)."/".$hk.".wav";
        $shtml=$shtml. htmlspecialchars('"><img src="/wiki/images/audio.gif" width="19" height="18" border="0" /></a></html>-->==')."\n";
        $shtml=$shtml. "\n\n";
        $shtml=$shtml. htmlspecialchars('<multilang>')."\n";
        $shtml=$shtml. "\n\n";
        $shtml=$shtml. htmlspecialchars('@es|')."\n";
        $shtml=$shtml. rtrim(ltrim(htmlspecialchars('<!-- *** AQUI COMIENZA LA VERSION EN ESPANOL *** -->')));
        $shtml=$shtml. ltrim($def)."\n";
        $shtml=$shtml. htmlspecialchars('<!-- *** AQUI TERMINA LA VERSION EN ESPANOL *** -->')."\n";
        $shtml=$shtml. htmlspecialchars('@en|')."\n";
        $shtml=$shtml. rtrim(ltrim(htmlspecialchars('<!-- *** ENGLISH VERSION STARTS HERE *** -->')));
        $shtml=$shtml. ltrim($def)."\n";
        $shtml=$shtml. htmlspecialchars('<!-- *** ENGLISH VERSION ENDS HERE *** -->')."\n";
        $shtml=$shtml. htmlspecialchars('</multilang>')."\n";
    }
    


}

$shtml.=htmlspecialchars('<!-- <mw page="'.($page*10).'"> -->');
$shtml.=htmlspecialchars('<!-- <keywords>'.$key[$page].'</keywords> -->');
$shtml.=htmlspecialchars('<!-- <link> </link> -->');
$shtml.=htmlspecialchars('<!-- <progress en="" es=""> -->');
$shtml.=htmlspecialchars('<!-- *** START DICT ORIGINAL ***'.${dictorig.$pagedict}.'*** END DICT ORIGINAL *** -->');
$shtml.='</text>
</revision>
</page>
</mediawiki>';
$shtml=str_replace("&gt; ","&gt;",$shtml);

$sfile="test.xml"; //ruta del archivo a generar
$fp=fopen($sfile,"w+");
fwrite($fp,$shtml);
fclose($fp);
echo "<a href='".$sfile."'>Haz click aqui para bajarlo</a>"; 

?>
  #6 (permalink)  
Antiguo 30/04/2008, 07:41
 
Fecha de Ingreso: marzo-2007
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: se puede poner una pausa en un bucle ?

por eso el sleep hara solo que me alentice mas la carga ...

yo pensaba hacer algo como que muestre en pantalla algo, y despues siga , como para que no cuelgue el proceso quizas
  #7 (permalink)  
Antiguo 30/04/2008, 08:05
 
Fecha de Ingreso: junio-2007
Ubicación: Mérida, Yucatán, México
Mensajes: 94
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: se puede poner una pausa en un bucle ?

No puedes pausar un script de PHP, en espera de lo que pida el usuario, cada vez que el usuario actualiza la página, el interprete abre el archivo lo procesa, se lo devuelve al navegador y con esto finaliza el script.

Puedes usar LIMIT para realizar tu proceso por secciones... y utilizar ajax para ejecutar el script por cada bloque...

El siguiente JavaScript ejecuta un archivo despues del otro, puedes modificarlo para que el usuario oprima pausar...


Cita:
var Archivos = new Array(
{text: "Seccion 1",url: "script.php?start=0&end=10", DoEvents: false, completed: false},
{text: "Seccion 2", url: "script.php?start=11&end=20", DoEvents: false, completed: false},
{text: "Seccion 3", url: "script.php?start=21&end=30", DoEvents: false, completed: false}
);

function EjecutarArchivos() {


//document.getElementById("lblstatus").innerHTML = "Iniciando instalacion...";


if (Archivos.length == 0) {
alert("Hey");
return false;
}

//document.getElementById("lblstatus").innerHTML = "";

for (i=0; i<Archivos.length; i++) {
if (Archivos[i].url != "") {
Ejecutar(Archivos[i].url, i, Archivos[i].text, Archivos[i].DoEvents);
}
}


}

function Ejecutar(file, objectid, text, openmode) {
var returnvalue;


<!-- Initialize the XMLHttpRequest Object -->

var xmlhttp=false;

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

<!-- End XMLHttpRequest Initialization -->

try {
xmlhttp.open("GET", file, openmode);
}
catch(e) // El navegador no permite las peticiones externas.
{
alert("Su navegador no permite realizar peticiones via XML, por favor contacte con su administrador");
return false;
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if (xmlhttp.status != 200) {
alert("No se pudo hallar " + systemURL + " Por favor contacte con el administrador");
returnvalue = false;
}else{
if ( xmlhttp.responseText == "" ) {
//nothing value
} else {
ajaxResponse = xmlhttp.responseText;
if (ajaxResponse == "ok") {
returnvalue = true;
Archivos[objectid].completed = true;
//Archivo ejecutado, imprime ok si todo salio bien...
if ((Archivos.length-1) == objectid) {

//Este es el último archivo a cargar de la lista
alert("Se ha finalizado la ejecución de las rutinas");

}

} else {
//algun error en el scrpt?
returnvalue = false;

}
}
}
}else{

}
};
xmlhttp.send(null);
return returnvalue;
}

Última edición por carloshuchim; 30/04/2008 a las 08:17 Razón: Agregué código
  #8 (permalink)  
Antiguo 30/04/2008, 08:10
 
Fecha de Ingreso: marzo-2007
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: se puede poner una pausa en un bucle ?

mmm
a ver, si yo no pongo el set_time_limit me aparece el mensaje de error de limite excedido.
pero si le pongo en 0 , o sea sin limite esta un tiempo cargando y despues queda la pantalla en blanco sin nada y no me hizo nada.

por eso pensaba algo como para que pause, y despues seguir pero no te entendi como hacerlo.

ahora estoy probando poniendo algo asi con un contador, y despues lo reseteo , pero no se si esto me borrara las variables que tengo en memoria como shtml

if ($cont==100)
{
ob_flush();
flush();
$cont=0;
sleep(20);
}
  #9 (permalink)  
Antiguo 30/04/2008, 08:26
 
Fecha de Ingreso: marzo-2007
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: se puede poner una pausa en un bucle ?

ahi vi tu codigo, puedo darle limite de comienzo y fin para la lectura del mysql ? tendria que cambiar el select y ahi ponerle el where con el id o algo asi supongo.
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 12:18.