Foros del Web » Programando para Internet » PHP »

optimizar codigo

Estas en el tema de optimizar codigo en el foro de PHP en Foros del Web. Hola tengo el siguiente codigo php: Código PHP: set_time_limit ( 0 ); ini_set ( 'memory_limit' ,  '30M' ); include  'PHT.php' ; $dbhost  =  "localhost" ; ...
  #1 (permalink)  
Antiguo 04/11/2008, 11:02
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
optimizar codigo

Hola tengo el siguiente codigo php:
Código PHP:
set_time_limit(0);
ini_set('memory_limit''30M');
include 
'PHT.php';
$dbhost "localhost";
$dbname "aseh";
$dbuser "root";
$dbpassword "";

$HT = new CHPPConnection('nukestats''3400''7CAEA600-B56B-49C0-9B4D-CADE3F34C5AD''');

$HT->connectUser('destor77','xxx');

$temporada=$HT->getWorldDetails()->getLeague(7)->getSeasonNumber();


if ( 
$link mysql_connect($dbhost,$dbuser,$dbpassword) )
{
    if ( 
mysql_select_db($dbname$link) ){
        
        
$sql="select id_temp from aseh_temporadas order by id_temp DESC limit 1";
        
$result=mysql_query($sql);
        
$temp=mysql_fetch_array($result);
        
        
//controlo la temporada
        
if ($temp['id_temp']<>$temporada){
            
$sql="insert into aseh_temporadas (id_temp,temp) values ('".$temporada."','Temporada ".$temporada."')";
            if(!
mysql_query($sql)){
                echo 
"error en agregar la temporada nueva".mysql_error()."<br>$sql";
            }
        }
        
        
$sql="SELECT ae.id_hattrick, nombre, ranking, posicion, estrellas, boot
                         FROM aseh_equipos as ae 
                         join aseh_ranking as ar on ar.id_hattrick=ae.id_hattrick
                         join aseh_posiciones as ap on ap.id_hattrick=ae.id_hattrick                          
                         join aseh_division as ad on ad.id_hattrick=ae.id_hattrick
                         join aseh_estrellas as aest on aest.id_hattrick=ae.id_hattrick 
                         where ad.id_temp='$temporada' group by id_hattrick
                         "
;
        
        
$result mysql_query($sql);
                echo
'   <div align="center">
                <table width="391" height="235" border="1" cellpadding="0" cellspacing="0">'
;
                echo 
'<tr>
                             <td colspan="4"><div align="center">id</div></td>
                           <td colspan="4"><div align="center">id_hattrick</div></td>
                           <td colspan="4"><div align="center">nombre</div></td>
                           <td colspan="4"><div align="center">estrellas</div></td>
                            <td colspan="4"><div align="center">ranking</div></td> 
                           <td colspan="4"><div align="center">boot</div></td>   
                           <td colspan="4"><div align="center">division</div></td>                                       
                           </tr>'
;
        while ( 
$row mysql_fetch_array$resultMYSQL_ASSOC ) ){
                      echo 
'<tr>
                             <td colspan="4"><div align="center">'
.$i.'</div></td>
                           <td colspan="4"><div align="center">'
.$row["id_hattrick"].'</div></td>
                           <td colspan="4"><div align="center">'
.$row["nombre"].'</div></td>
                           <td colspan="4"><div align="center">'
.$row["estrellas"].'</div></td>
                            <td colspan="4"><div align="center">'
.$row["ranking"].'</div></td> 
                           <td colspan="4"><div align="center">'
.$row["boot"].'</div></td>   
                           <td colspan="4"><div align="center">'
.$row["division"].'</div></td>                                       
                           </tr>'
;
                      
$i++;
        }
// fin while $row = mysql_fetch_array( $result1, MYSQL_ASSOC )
        
        
mysql_free_result($result);
                echo 
'</table></div> <br />'
continua en la respuesta porque no me deja poner todo el codigo junto

Última edición por destor77; 04/11/2008 a las 11:08
  #2 (permalink)  
Antiguo 04/11/2008, 11:07
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: optimizar codigo

el resto del codigo es:
Código PHP:
echo '<div align="center">
                     <table width="391" height="235" border="1" cellpadding="0" cellspacing="0">
                     <tr>
                     <td><div align="center">n</div></td>
                     <td><div align="center">Id</div></td>
                     <td><div align="center">nombre</div></td>
                     <td><div align="center">Liga ID</div></td>
                     <td><div align="center">Liga Nombre</div></td>
                     <td><div align="center">Level</div></td>
                     <td><div align="center">estrellas</div></td>                                                          
                     <td><div align="center">ranking</div></td>
                     <td><div align="center">estado</div></td>  
                     <td><div align="center">fecha</div></td>                                     
                     <td><div align="center">puesto</div></td>
                     </tr>'
;
                
//actualiza
       
$query "SELECT id_hattrick FROM aseh_equipos where boot='false'";
       if ( 
$result mysql_query($query) )
        {
            
$i 0;
            while ( 
$row mysql_fetch_array$result) ){                
                
$teamID $row["id_hattrick"];
                
$i++;
               
// for ( $i =0; $i < count($teamID); $i++ )
                //{
                    
$team=$HT->getTeam($teamID);
                    
$matches=$HT->getSeniorTeamMatches($teamID);
                    
                    if(
$team->isBot()==1){
                        
$boot="true";
                    }
                    else{
                        
$boot="false";
                    }
                    
//echo "boot: $boot<br/>";
                    
$liganombre=$team->getLeagueLevelName();
                    
//echo "liga nombre: $liganombre<br/>";
                    
$id_liga=$team->getLeagueLevelId();
                    
//echo "id liga: $id_liga<br/>";
                    
$ligalevel=$team->getLeagueLevel();
                    
//echo "ligalevel: $ligalevel<br/>";
                    
$ranking=$team->getTeamRank();
                    
//echo "ranking: $ranking<br/>";
                    
                    //actualizo la liga y la temporada
                    
$sql="select id_temp from aseh_division where id_hattrick=$teamID order by id_temp DESC limit 1 ";
                    
$division=mysql_fetch_array(mysql_query($sql));
                    if (
$division['id_temp']!=$temporada){
                        
$sql="insert into aseh_division (id_hattrick, id_temp, id_division, division) 
                              values ('$teamID','$temporada','$id_liga','$liganombre')"
;
                        
mysql_query($sql);
                    }
                    
                    
//actualizo los datos del equipo
                    
$datos="update aseh_equipos set dueño='".$team->getLoginName()."', nombre='".$team->getTeamName()."', id_estadio='".$team->getArenaId()."', id_liga='$id_liga', 
                          liga='$liganombre', boot='$boot'  where
                          id_hattrick=$teamID"
;
                    
mysql_query($datos);
                    
                    
$matchID 0;
                        
$stars 0;
                        
$liga=$HT->getLeague($id_liga);
                        
                        
//posiciones 
                        
$fecha=$HT->getWorldDetails()->getLeague(7)->getMatchRound()-1;
                        
//echo "fecha: $fecha <br>";
                        
for ($j=1;$j<=8;$j++){                        
                            if(
$row["id_hattrick"]==$liga->getTeam($j)->getTeamId()){
                                
$pos=$liga->getTeam($j)->getPosition();                            
                            }
                        }
                    
                    
//estrellas
                    //obtengo el id del partido
                            
                        
$total=$matches->getNumberMatches();                    
                        for(
$m=1;$m <= $total;$m++){                        
                            if(
$matches->getMatch($m)->getType()==&& $matches->getMatch($m)->getStatus()=="FINISHED"){
                                
$matchID=$matches->getMatch($m)->getId();
                                
                            }
                        }
                    
                    if(
$matchID){
                        
/*$alineacion=$nt->getSeniorLineup($matchID,$teamID);
                        var_dump($alineacion);
                        for($i=1; $i<=$alineacion->getPlayersNumber(); $i++){
                            $player=$alineacion->getPlayer($i);
                            $stars+=$player->getRatingStars(); 
                            echo "jugador id:".$player->getId()."<br/> estrellas:".$player->getRatingStars()." <br/>";
                        }*/
                        
$stars=$HT->getSeniorLineup($matchID,$teamID)->getTotalStars();    

                    }
                    
                    echo 
'<tr>
                          <td><div align="center">'
.$i.'</div></td>
                          <td><div align="center">'
.$team->getTeamId().'</div></td>
                          <td><div align="center">'
.$team->getTeamName().'</div></td>
                          <td><div align="center">'
.$id_liga.'</div></td>
                           <td><div align="center">'
.$liganombre.'</div></td>
                          <td><div align="center">'
.$ligalevel.'</div></td>
                          <td><div align="center">'
.$stars.'</div></td>
                          <td><div align="center">'
.$ranking.'</div></td>    
                          <td><div align="center">'
.$boot.'</div></td>                          
                          <td><div align="center">'
.$fecha.'</div></td>
                          <td><div align="center">'
.$pos.'</div></td>                       
                          </tr>'
;
                    
                    switch (
$fecha){
                        case 
0:
                            
//actualizo el rankgin
                            
$query="insert into aseh_ranking (id_hattrick,ranking,id_temp,id_fecha) values ('$teamID','$ranking','$temporada','14')";
                            if(!
mysql_query($query)){
                                echo 
"error en la consulta<br>".mysql_error()."<br>".$query."<br>";
                            }                            
                            
//actualizo el estrellas
                            
$query="insert into aseh_estrellas (id_hattrick,estrellas,id_temp,id_fecha) values ('$teamID','$stars', '$temporada', '14')";
                            if(!
mysql_query($query)){
                                echo 
"error en la consulta<br>".mysql_error()."<br>".$query."<br>";
                            }
                            
//actualizo el posiciones
                            
$query="insert into aseh_posiciones (id_hattrick,posicion,id_temp,id_fecha) values ('$teamID','$pos', '$temporada', '14')";
                            if(!
mysql_query($query)){
                                echo 
"error en la consulta<br>".mysql_error()."<br>".$query."<br>";
                            }
                                                        
                        break;
                        case 
1:
                            
//actualizo el rankgin
                            
$query="insert into aseh_ranking (id_hattrick,ranking,id_temp,id_fecha) values ('$teamID','$ranking','$temporada','$fecha')";
                    if(!
mysql_query($query)){
                                echo 
"error en la consulta<br>".mysql_error()."<br>".$query."<br>";
                            }
                            
//actualizo el estrellas
                            
$query="insert into aseh_estrellas (id_hattrick,estrellas,id_temp,id_fecha) values ('$teamID','$stars', '$temporada', '$fecha')";
                    if(!
mysql_query($query)){
                                echo 
"error en la consulta<br>".mysql_error()."<br>".$query."<br>";
                            }
                            
//actualizo el posiciones
                            
$query="insert into aseh_posiciones (id_hattrick,posicion,id_temp,id_fecha) values ('$teamID','$pos', '$temporada', '$fecha')";
                    if(!
mysql_query($query)){
                                echo 
"error en la consulta<br>".mysql_error()."<br>".$query."<br>";
                            }                                                        
                        break;
                        
// el case se hace por 14 valores del 0 al 14 que son las fechas
                    
}        
                            
                
//}// fin for ( $i = 0; $i < count($teamID); $i++ )
                
            
}
            
            echo 
'</table></div> ';
          }
// fin if ( $result = mysql_query($query) )
          //mysql_free_result($result);
          
    
}// fin if ( mysql_select_db($dbname, $link) )
    
}// fin if $link = mysql_connect($dbhost,$dbuser,$dbpassword)
mysql_close($link);
echo 
"<br />";
echo 
"Total equipos:$i";


echo 
"<br />"
la cuestion es que traigo unos 400 registros y ultimamente me salta un error por el registro 333 y me dice que no hay mas memoria, por eso queria saber si se puede optimizar el codigo, los datos los obtengos de una pagina de internet, es decir de mi db obtengo el id y con eso obtengo los datos que quiere de la pagina de internet.
Espero que se haya entendido y me puedan dar una mano.
  #3 (permalink)  
Antiguo 04/11/2008, 11:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: optimizar codigo

Cambia el límite de memoria usando ini_set() y cambia el tiempo máximo de ejecución, por otro lado usa cache, guarda los datos del equipo en una tabla en memoria y solo refrescalos por ejemplo 1 vez al día.

Saludos.
  #4 (permalink)  
Antiguo 04/11/2008, 11:13
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: optimizar codigo

No embibas html en php!!!

Presenta html puro, no hagas que php lo "imprima", el server se está utilizando para presentar html embebido, te parece óptimo??
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 05/11/2008, 11:26
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: optimizar codigo

Cita:
Iniciado por GatorV Ver Mensaje
Cambia el límite de memoria usando ini_set() y cambia el tiempo máximo de ejecución, por otro lado usa cache, guarda los datos del equipo en una tabla en memoria y solo refrescalos por ejemplo 1 vez al día.

Saludos.
GatorV:
el set_time_limit(0) lo tuve que porque sino me saltaba error de exceso de tiempo, el ini_set(); porque pense que asi se solucionaba el tema del exceso de mermoria jeje.
No te entendi muy bien lo de la tabla en memoria, me podrias explayar un poco mas ese tema.

salu2
  #6 (permalink)  
Antiguo 05/11/2008, 11:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: optimizar codigo

Me refiero a que una vez que obtengas todos los datos los insertas en una base de datos MySQL, así al mostrar jalas los datos de ahí, y con un cron script actualizas la base de datos por ejemplo cada 2 horas.

Saludos.
  #7 (permalink)  
Antiguo 05/11/2008, 12:13
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: optimizar codigo

Como me gustan estos threads :D

A ver...

1- Usá cahce como dice GatoV, pero no contra la db (pierde gracia) sino contra un archivo (con las funciones de buffer tomas la salida y la escribís en un archivo el cual re escribís durante X segundos).
A: Para tener la salida:
Código PHP:
<?
ob_start
();
echo 
"Hola"?>
<br />Más texto
<?
$output 
ob_get_contents(); ob_clean();
#$output  tendrá: hola<br />Más texto
?>
Con esto y teniendo PHP5 podés hacer un file_put_contents. Ahora bien, antes de todo esto lo que harás será ver si existe el archivo (is_file() ) de cache y ver:

Código PHP:
if( filemtime($file) > date('U')-$segundos){
... 
Entonces, si entrás harás un file_get_contents, sino harás el proceso del buffer.

2- Lo que dice Carxl es lo correcto, no hagas:
Código PHP:
<?
echo "<b>$foo</b>"
?>
Haz:
Código PHP:
<b><?=$foo?></b>
3- Por último, revisa las funciones que usas. Me parece que se pueden agregar mysql_free_result, y por ejemplo no uses mysql_fetch_array, con un mysql_fecth_assoc te sobra para el uso que le estás dando.

Saludos...si con esto no te anda podemos hilar más fino...

Nota: Obviamente son todas ideas, no copies y pegues nada sin antes comprenderlo y adaptarlo a tu script; cualquier cosa preguntá.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 05/11/2008, 12:40
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: optimizar codigo

gracias lo intentare implementar a ver si funca
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 07:08.