Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/04/2008, 08:33
anibal_cdf
 
Fecha de Ingreso: marzo-2007
Mensajes: 180
Antigüedad: 17 años, 1 mes
Puntos: 0
Exclamación Re: tengo un script con bucles y funciones que tarda mucho, como puedo hacer ?

el tema es asi, lenguajes se solamente php, y c, y algo de visual basic, pero php es lo que mas me gusta.

el archivo es un .DICT, hay que leer linea por linea porque estan relacionadas
es un diccionario, y lo que separa palabra de palabra es una linea con varios ====== , que a veces cambia el largo.
ademas la 5 linea despues de esos === empieza o con 1[ o con 2[ o con 3[ , si es 1 o 2 es una "pagina nueva" y si es 3 depende del que esta arriba, es algo muy complejo.


ahi probe dejar solo este texto que puse aca y funciono bien, pero al poner el otro codigo es cuando mas se cuelga, que ahi es cuando pasa por varias funciones mas que hacen buscar y reemplazar, convertir textos, etc.
Fatal error: Maximum execution time of 360 seconds exceeded in...


esta seria la 2da parte del archivo que ejecuto:
Código 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>';
 
$page=0;
for ($x=1;$x<$newentry;$x++)
{
    $page=${'matriz'.$x}[0];
    
    if ($page) // Esto se imprime una vez por cada pagina
    {
        $pagedict=$page;
        ${dictorig.$page}.=rtrim(str_replace("---> ","->",${'matriz'.($x)}[6]));
        $key[$page]=keywordshk(${'matriz'.$x}[1]);
        if ($x>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=$shtml. "\n<page>\n<title>".${'matriz'.$x}[1];
        $hkraiz=${'matriz'.$x}[5];
        $hkprevraiz=trim(${'matriz'.$x}[4]); // previo hasta raiz
        $hkprevraiz=str_replace("'","",$hkprevraiz);
        $hksimbol=$hkprevraiz.$hkraiz;
        $hk=${'matriz'.$x}[1];
        $def=str_replace('&','&amp;',${'matriz'.$x}[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("---> ","->",${'matriz'.($x)}[6]));
        $key[$page].=", ".keywordshk(${'matriz'.$x}[1]);
        $hkraiz=${'matriz'.$x}[5];
        $hkprevraiz=trim(${'matriz'.$x}[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=${'matriz'.$x}[1];
        $def=str_replace('&','&amp;',${'matriz'.$x}[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>";