Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Alexmartinez4 en 25 Marzo 2018, 12:47 pm



Título: .
Publicado por: Alexmartinez4 en 25 Marzo 2018, 12:47 pm
.


Título: Re: Problema con PHP (error de memoria)
Publicado por: animanegra en 25 Marzo 2018, 13:38 pm
Primero, te comento mi punto de vista. Para hacer lo que deseas deberías de plantearte hacerlo de otro modo, no tiene sentido (aunque la codificacion sea mas fácil de ese modo) el meter todo el archivo en memoria para hacer una busqueda secuencial. Deberias usar funciones que abran el fichero y permita leer linea a linea, como fopen, fscanf y fclose e ir comparando las lecturas que hagas con los emails que buscas. Una vez encontrado, salirte de todos los bucles.
Además tal y como tienes el código solo dejas de leer el archivo en curso y seguirias leyendo los demás archivos, cuando igual lo lógico seria salirte de todos los bucles.

La lectura con fopen y fscanf va tal que asi (mira la api, porque voy de memoria y sin probarlo):

$fd = fopen('nombre','r');
$linea=fscanf($fd,"%[^\n]");
while($linea){

$linea=fscanf($fd,"%[^\n]");

}
fclose($fd);

Si lo haces abriendo el descriptor y leyendo con fscanf puedes utilizar archivos del tamaño que desees.

Por otro lado, la cantidad de memoria no solo dependerá del tamaño del archivo, probablemente dependerá del numero de lineas de este. Mira a ver si cambiando el nombre del archivo numero 16 por el numero 1 te da error en la primera lectura, porque entiendo que igual tiene que ver con la estructura de array que se guarda php con el file y el numero de lineas que tengas en dicho archivo.

Además, no tengo claro si te estaras dejando los desciptores de todos los ficheros abiertos, digo no lo tengo claro porque en principìo deberia de suponer que la funcion file ya que lee todo el archivo y lo mete en memoria deberia cerrar el descriptor. Asi que no tengo claro si deberias o no utilizar un fclose. Miralo, no vaya a ser eso.


Título: Re: Problema con PHP (error de memoria)
Publicado por: Alexmartinez4 en 25 Marzo 2018, 15:24 pm
.


Título: Re: Problema con PHP (error de memoria)
Publicado por: Alexmartinez4 en 25 Marzo 2018, 19:02 pm
.


Título: Re: Problema con PHP (error de memoria)
Publicado por: animanegra en 26 Marzo 2018, 08:13 am
Un par de errores y una pregunta,

El primero es error:

con el primer fscanf lees la linea y antes de tratarla lees la siguiente, eso quiere decir que si la password está en la primera linea no la vas a ver.

El segundo no se si es error:

Si encuentras las password en un archivo, dejas de leer en ese archivo, pero sigues leyendo el resto de archivos. ¿Ese es el comportamiento que quieres tener? El break te sale del primer bucle pero no de todos los bucles.

Por último el problema de que se pare:

¿Estas ejecutando el script en local (ejecutando php programa.php) o en un servidor web (desde un navegador)? El "<br>" da a entender que las pruebas las estas haciendo en un servidor web (o bien un hosting remoto o algo tipo wamp o lamp). Si es así, ten en cuenta que los servidores web tienen un tiempo maximo de ejecucion, para evitar que comportamientos erroneos dejen scripts en ejecucion por un tiempo aleatorio. Si te pasas de ese tiempo el script se para. Echa un vistazo a http://php.net/manual/es/function.set-time-limit.php (http://php.net/manual/es/function.set-time-limit.php). El tiempo por defecto suele estar en 30 segundos. De ahí podria venir el problema de que se te pare a veces en un archivo y otras veces en otro. Se puede definir tambien una variable en el php.ini que modifica dicho tiempo.

Saludos.