Foros del Web » Programando para Internet » PHP »

Directorios +readdir +file... ayuda

Estas en el tema de Directorios +readdir +file... ayuda en el foro de PHP en Foros del Web. ya tengo una semana que no puedo resolver el siguiente caso; Tengo una carpeta de la que tengo que filtrar ciertos archivos para que sean ...
  #1 (permalink)  
Antiguo 28/05/2003, 17:36
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
Directorios +readdir +file... ayuda

ya tengo una semana que no puedo resolver el siguiente caso;

Tengo una carpeta de la que tengo que filtrar ciertos archivos para que sean vistos por ejemplo imagenes... seria algo asi:

Código PHP:
$path = ("fotos");
$permitido = array ("gif","jpeg","jpg","png","pcx");
while (
$dirreaddir($path))
 {
     
$extencion explode($dir);
     
$extencion end($extencion);
     if (
in_array("$extencion","$permitido")
           {
                   
$imagenes[] = $dir;      
            }
                else
           {
                  if ((
$dir == ".") || ($dir == "..") and (is_dir($dir))
                 {
                       
$carpetas[] = $dir;
                 }
           }
 }

foreach (
$carpetas as $value)
{
    echo 
$value;
}
foreach (
$imagenes as $value2)
{
    echo 
$value2;

bueno digamos que me pone en dos arreglos el primero las imagenes y el segundo los directorios pero que pasa si tengo un directorio llamado carpeta.gif el script lo reconoce como imagen ya que la funcion is_dir discrimina los archivos en base a si tiene o no extencion asi pues si le cambio el nombre a una imagen de miimagen.jpe a --> miimagen (sin la extencion) me la clasifica como fichero, he descubierto que lo ficheros con la funcion filesize simpre miden 0 bytes de esta maneram lo discrimno mas o menos pero si tengo una imagen de 0 bytes??

como los discrimino de forma coherente... sugerencias

A ver que me encanta este foro
__________________
Siempre hay algo nuevo que aprender
  #2 (permalink)  
Antiguo 28/05/2003, 21:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo miraria primero si es un directorio o no (con tu if (($dir == ".") || ($dir == "..") and (is_dir($dir)) ...) y luego si es un archivo (caso del "else" de ese if) .. miraría la extensión ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 29/05/2003, 02:16
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Con is_file() averiguas si es un archivo.
http://www.php.net/is_file

Tambien fijate esto: la descripcion de in_array de manual.
in_array ( mixed aguja, array pajar)
y si pasas la variable $permitido entre comillas lo pasas como un string. y te tendria que dar un error ¿?.

Un saludo!
  #4 (permalink)  
Antiguo 29/05/2003, 17:43
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
Desacuerdo Bueno casi pegan

Lo de is_dir("$variable", "$arreglo"); no importa si tiene comillas la primera la segunda si, ademas con la funcion is_file pasa lo mismo con is_dir se basa en la extencion ideas??
__________________
Siempre hay algo nuevo que aprender
  #5 (permalink)  
Antiguo 29/05/2003, 18:03
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
is_dir acepta solamente un parámetro, (porque pusiste is_dir("$variable", "$arreglo"); ).

La solucion estaría en identificar las imagenes no por su extencion, sino por su MIME (que no se exactamente que quiere decir) que es algo asi como la cabecera de un archivo que lo identifica. Esto lo haces con mime_content_type();
http://www.php.net/mime_content_type

Código PHP:
$path = ("fotos");
$mimepermitido = array ("image/jpeg","image/png","image/gif","image/pcx");
while (
$dirreaddir($path))
 {
     if (
is_file($dir)) {
         if (
in_array(mime_content_type($path.$dir), $mimepermitido)) {
            
$imagenes[] = $dir;
        }
     }
     if ((
$dir == ".") || ($dir == "..") and (is_dir($dir)) {
         
$carpetas[] = $dir;
     }
 } 
Lo que no estoy muy seguro es el MIME content type de las imagenes pcx, deberia buscar por google.

Ha! otra cosa, mime_content_type() requiere una librería (segun la version). fijate en el link que te dejé.

Un saludo.
  #6 (permalink)  
Antiguo 29/05/2003, 18:32
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
??

lo de is_dir taba malo era in_array, ya voy a probar lo ded los tipos mime pero, conoces alguna pagian dondee encontrar los tipos mime de los documentos office:
word, powerpoint, acces, excel, etc.. mas los zips, rar etc??
__________________
Siempre hay algo nuevo que aprender
  #7 (permalink)  
Antiguo 29/05/2003, 19:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Una lista extensa de tipos MIME:
http://www.w3schools.com/media/media_mimeref.asp

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 31/05/2003, 13:29
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
Información Tipo mime

Revisando el manual de php dice q

Revisando el manual de php dice que la funcion: mime_content_type solo esta dusponible desde la versioon 4.30 ademas debe ser puesta en on en php.ini (por default esta en off), por lo que no la considero muy util si estas trabajando en un servidor que puede no tenerla, resolvi parcialmente el problema asi:

Código PHP:
$path = ("fotos");
$permitido = array ("image/jpeg","image/png","image/gif","image/pcx");
while (
$dirreaddir($path))
 {
     if (
filetype($dir) <> "dir"){
         if (
in_array($dir$permitido)) {
            
$imagenes[] = $dir;
        }
     }
     if ((
$dir == ".") || ($dir == "..") and (filetype($dir) == "dir" ) {
         
$carpetas[] = $dir;
     }
 } 
es una solucion parcial pero por el momento no ha fallado, quien sabe que es "block", que hay veces esta funcion me regresa este valor y no se que es.

Otra cosa si por ejemplo quiero valir la siguinete sentencia javascript con php como haria:

Código PHP:
$script "
<script>
var repetido =confirm(\"la imagen esta repetida, deseas actualizarla\")
if (repetido == true)
{
$actualizar = true;
} else
{
$actualizar = false;
}
</script>"

ahora el problema no es la funcion en si si no que este sript esta dentro de otra variable por lo que no puedo definir valores de otras variables dentro de esta este codigo DEBE estar llamado pr unecho o algo ya que esta dentro del bucle while(read dir){...}
como ahria para saber que valor me regresa el conform de javascript y poderlo usar como referencioa en php??
__________________
Siempre hay algo nuevo que aprender
  #9 (permalink)  
Antiguo 31/05/2003, 17:35
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
block no se que es, pero si las imagenes son archivos:¿porque no usas directamente is_file()?

mime_content_type() esta disponible a partir de 4.3 como parte del módulo estandar, en versiones anteriores esta disponible como una libreria. Y la mayoria de los servidores la traen habilitada.
En todo caso otra mejor alternativa es usar GetImageSize(), que obtiene el tamaño de las imágenes. Y si es >0 entonces es válida.

Para lo segundo haces un document.location.herf = "pagina.php?actualizar=true"
jejeje, mi javascript es pesimo, mejor pregunta en el foro corrspondiente.
La cuestion es que luego recojes esa variable con un if($_GET[actualizar] == true) al principio del script.

saludos.



Saludos!
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 13:13.