Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/01/2003, 08:37
Sandungas
 
Fecha de Ingreso: diciembre-2002
Mensajes: 23
Antigüedad: 21 años, 4 meses
Puntos: 0
Optimizar este script -- Ayuda Por Favor -

Hola. Hace tiempo postee un mensaje sobre un script para manejar enlaces recíprocos q estaba realizando en php. Tras la ayuda proporcionada por algunos de vosotros llegué a la actual composición, pero el script no puede manejar grandes cantidades de enlaces.

La idea es proporcionarle un listado de enlaces, que saque las url y el nombre de los enlaces, y q compruebe q en cada url proporcionada existe un enlace determinado. Esto lo hago abriendo la página y leyendo línea por línea hasta encontrar el enlace. El problema, como ya he mencionado es q no puede con más de 100 enlaces aprox.

Les posteo el código, para ver si pueden aconsejarme como optimizar el mismo. Gracias por su tiempo.

Código PHP:
<?php 
if (getenv('REQUEST_METHOD') == 'POST') { 
  
$url $_POST[url]; 
  
$reciproco $_POST[reciproco];
} else { 
  
$url $_GET[url]; 
  
$reciproco $_GET[reciproco];

?> 

<form action="<?= $PHP_SELF ?>" method="POST">
  <div align="center">
    <table width="75%" border="0" cellspacing="5" cellpadding="0">
<tr>
        <td width="12%">URL:</td>
        <td width="88%"> <input name="url" type="text" value="<?= $url ?>" size="80"/></td>
      </tr>
      <tr>
        <td>Texto:</td>
        <td><input name="reciproco" type="text" value="<?= $reciproco ?>" size="80"/></td>
      </tr>
    </table>
<input type="submit">
  </div>
</form> 

<?php

  set_time_limit
(0);  
  
// Función para comprobar si existe un determinado texto (enlace) en una url
function recip($surl,$reciproco){
    
$fd fopen ("$surl""r");
    while (!
feof ($fd)) 
    {
        
$buffer fgets($fd4096);
        if (
strstr($buffer,$reciproco))
            return 
true;
    }
    
fclose ($fd);
}

//Borramos de un array los elementos que tengan reciproco
function borrar(&$ahrefs,&$alinks,$reciproco){
    
$x=0;    
    while(
$x<sizeof($ahrefs))
    {
    if (
recip($ahrefs[$x],$reciproco) == true){
        
array_splice($ahrefs,$x,1);
        
array_splice($alinks,$x,1);}
    else
        
$x++; 
    }
}

  
// Separamos el código html (hrefs y links) 
  
if ($url) { 
  
$remote fopen($url'r'); 
  
$data fread($remote1048576); 
  
fclose($remote); }

  unset(
$location); 
  
$links = array();  // Array con la descripción de los links 
  
$hrefs = array();  // Array de urls
  
$pos 0
  while (!((
$pos strpos($data,"<",$pos)) === false)) { 
    
$pos++; 
    
$endpos strpos($data,">",$pos); 
    
$tag substr($data,$pos,$endpos-$pos); 
    
$tag trim($tag); 
    if (isset(
$location)) {  // Buscamos </A> 
      
if (!strcasecmp(strtok($tag," "),"/A")) { 
        
$link substr($data,$linkpos,$pos-1-$linkpos); 
        
$links[] = $link
        
$hrefs[] = $location
        unset(
$location); 
      } 
      
$pos $endpos+1
    } else {  
// Buscamos <A ...> 
      
if (!strcasecmp(strtok($tag," "),"A")) { 
        if (
eregi("HREF[ \t\n\r\v]*=[ \t\n\r\v]*\"([^\"]*)\"",$tag,$regs)); 
        else if (
eregi("HREF[ \t\n\r\v]*=[ \t\n\r\v]*([^ \t\n\r\v]*)",$tag,$regs)); 
        else 
$regs[1] = ""
        if (
$regs[1]) {  
          
$location $regs[1]; 
        } 
        
$pos $endpos+1
        
$linkpos $pos
      } else { 
        
$pos $endpos+1
      } 
    } 
  } 
  
borrar($hrefs,$links,$reciproco);
for (
$i=0$i<sizeof($links); $i++) { 
    echo 
"<A HREF=\"".$hrefs[$i]."\">".$links[$i]."</A><BR>\n"
  } 
?>