Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[Aporte] Trabajando con el contenido de directorios (WCD v0.1)

Estas en el tema de [Aporte] Trabajando con el contenido de directorios (WCD v0.1) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, he desarrollado un conjunto de clases para que sea más fácil enfocar el hecho de tener que trabajar con el contenido de directorios. La ...
  #1 (permalink)  
Antiguo 07/02/2009, 19:11
 
Fecha de Ingreso: junio-2007
Mensajes: 70
Antigüedad: 16 años, 10 meses
Puntos: 2
De acuerdo [Aporte] Trabajando con el contenido de directorios (WCD v0.1)

Buenas, he desarrollado un conjunto de clases para que sea más fácil enfocar el hecho de tener que trabajar con el contenido de directorios. La finalidad de este aporte es facilitar una forma de trabajar con el contenido de directorios bastante eficaz y muy parametrizable. A continuación expongo el archivo LEEME, los códigos y donde descargar los fuentes. Espero que sea de utilidad!

Versión 0.2

Trabajando con el contenido de directorios (Working with the Contents of directories, WCD) es un conjunto de clases que pretende ayudar en una tarea simple que se le presenta a todo programador php alguna vez, realizar sobre ciertos ficheros de un directorio una cierta tarea. La idea general de trabajo con estas clases es, sobre un cierto directorio, recorrer los ficheros del mismo aplicándoles un filtro, y realizar sobre los ficheros que pasen el filtro una determinada acción. Todo ello con un cierto nivel de abstracción.

Con este simple fin se presentan tres clases:

- Clase Directorios, que entre otras características implementa el recorrido de un directorio elemento a elemento, ejecutando sobre aquellos que pasen un filtro una determinada acción.

Código PHP:

<?php

    
/* Clase que implementa la posibilidad de ejecutar una cierta función sobre los elementos de un directorio
    *     que superen un determinado filtro.
    *    
    *    Desarrollada por: José Raúl Ruiz Sarmiento.    Versión: 0.1
    *    
    *    Esta clase es de libre utilización y modificación para cualquier proposito, siempre y cuando no se
    *    elimine este texto. De ninguna manera se asegura el correcto funcionamiento de esta clase.
    *
    *    Cualquier aportación o detección de errores puede notificarse a: [email protected]        
    */
    
    
class Directorio{
    
        
/* Atributos de la clase */
        
        
private $ruta;
        private 
$filtro;
        private 
$ejectutor;
        
        
/* Constructor de la clase */
        
        
function __construct($ruta,$filtro=null,$ejecutor=null){
            
$this->ruta $ruta;
            
$this->filtro $filtro;
            
$this->ejecutor $ejecutor;
        }
        
        
/* Métodos para consultar y editar atributos privados de la clase */        
        
        
public function set_ruta($ruta){
            
$this->ruta $ruta;
        }
        
        public function 
get_ruta(){
            return 
$this->ruta;
        }
        
        public function 
set_filtro($filtro){
            
$this->filtro $filtro;
        }
        
        public function 
get_filtro(){
            return 
$this->filtro;
        }
        
        public function 
set_ejecutor($ejecutor){
            
$this->filtro $ejecutor;
        }
        
        public function 
get_ejecutor(){
            return 
$this->ejecutor;
        }
        
        
/* Función que ejecuta sobre los elementos del directorio $ruta que superen el $filtro la función
            $ejecutor. Devuelve el número de elementos sobre los que ha ejecutado el ejecutor.
            
            Para su correcto funcionamiento $ruta ha de contener la dirección del directorio a explorar,
            por ejemplo: "./img".  $filtro ha de ser un objeto de la clase Filtro correctamente inicializado
            según las necesidades. $ejecutor ha de contener un objeto de la clase Ejecutor correctamente
            inicializado según las necesidades. */
        
        
public function ejecutar()
        {
            if(!(
is_null($this->filtro)||is_null($this->ejecutor)))
            {
                
// Comprobamos si el directorio existe
                
if(is_dir($this->ruta))
                {
                    
// Abrimos el directorio
                    
$dir opendir($this->ruta);
                    
// Inicializamos el contador de ficheros procesados
                    
$contador 0;
                    
// Para cada uno de los elementos del directorio
                    
while ($elemento readdir($dir))
                    {
                        
// Comprobamos que no se trata del directorio padre ni del propio directorio
                        
if(($elemento!=".")&&($elemento!=".."))
                        {
                            
// Comprobamos si se trata de un fichero que tenemos que procesar pasandole el filtro
                            
if($this->filtro->filtrar($elemento))
                            {
                                
// Si el elemento pasa el filtro ejecutamos el ejecutor
                                
$this->ejecutor->ejecutar($elemento);
                                
$contador++;
                            }
                        }
                    }
                    
// Cerramos el directorio
                    
closedir($dir);
                    
// Devolvemos el número de ficheros procesados
                    
return $contador;
                }
                else
                {
                    echo 
"[ERROR]: Ruta del directorio especificado incorrecta";
                    return -
1;
                }
            }
            else
            {
                echo 
"[ERROR]: El filtro o la función ejecutora no han sido definidos";
            }
        
        }
    }



?>
- Clase Filtro, encargada de proporcionar los distintos filtros aplicables en la clase Directorios. Estos son los posibles filtros que han de pasar los elementos del directorio para que se les realice la acción.

Código PHP:

<?php

    
/* Clase que implementa el uso de filtros que han de superar los elementos de un cierto directorio para
    *    ejecutar sobre ellos el ejecutor.
    *    
    *    Desarrollada por: José Raúl Ruiz Sarmiento.    Versión: 0.1
    *    
    *    Esta clase es de libre utilización y modificación para cualquier proposito, siempre y cuando no se
    *    elimine este texto. De ninguna manera se asegura el correcto funcionamiento de esta clase.
    *
    *    Cualquier aportación o detección de errores puede notificarse a: [email protected]        
    */
    
    
class Filtro{
    
        
/* Atributos de la clase */
    
        
private $ruta;
        private 
$nombre_filtro;
        private 
$params;
        private 
$params_aux;
        
        
/* Constructor de la clase */
        
        
function __construct($ruta,$nombre_filtro,$params=null,$params_aux=null){
            
$this->ruta $ruta;
            
$this->nombre_filtro $nombre_filtro;
            
$this->params $params;
            
$this->params_aux $params_aux;
        }
        
        
/* Métodos para consultar y editar atributos privados de la clase */
        
        
public function set_ruta($ruta){
            
$this->ruta $ruta;
        }
        
        public function 
get_ruta(){
            return 
$this->ruta;
        }
        
        public function 
set_nombre_filtro($nombre_filtro){
            
$this->nombre_filtro $nombre_filtro;
        }
        
        public function 
get_nombre_filtro(){
            return 
$this->nombre_filtro;
        }
        
        public function 
set_params($params){
            
$this->params $params;
        }
        
        public function 
get_params(){
            return 
$this->params;
        }
        
        public function 
set_params_aux($params_aux){
            
$this->params_aux $params_aux;
        }
        
        public function 
get_params_aux(){
            return 
$this->params_aux;
        }
        
        
/* Función que ejecuta el filtro guardado en el atributo nombre_filtro sobre el elemento pasado como argumento.
            La función devolverá true si el $elemento pasa el filtro, false en caso contrario    */
                
        
public function filtrar($elemento){
        
            
$nombre =$this->nombre_filtro;
            return 
$this->$nombre($elemento);
            
        }
        
        
/* Filtro que devuelve siempre true. Se utilizará cuando queramos que el ejecutor se ejecute sobre todos los 
            ficheros del directorio */
        
        
private function filtro_no_filtrar($elemento){
            return 
true;
        }
        
        
/* Filtro que comprueba si el $elemento pasado como argumento a la función es de un determinado tipo.
        
            Para su correcto funcionamiento el atributo params en su posición cero (por ser pensado como
            un array que puede contener múltiples parámetros) ha de contener un
            array con los tipos de los que ha de ser elemento para pasar el filtro  */
        
        
private function filtro_es_de_tipo($elemento){
        
            
$tipos $this->params[0];
            
$nombre_fichero explode(".",$elemento) ;
            
$extension  $nombre_fichero[1] ;
            if(
in_array($extension$tipos))
                return 
true;
            else
                return 
false;
            
        }
        
        
/* Filtro que comprueba si el $elemento pasado como argumento a la función esde  mayor o menor tamaño en kb 
            que un determinado número.
            
            Para su correcto funcionamiento en el atributo de la clase $ruta tiene que estar almacenada la ruta
            hasta el elemento, ej: "./home/images". El atributo params en su posición cero (por ser pensado como
            un array que puede contener múltiples parámetros) ha de contener el modo de comparar, es decir, si van a pasar
            el filtro aquellos elementos de tamaño menor que el umbral que se pasa en la posición uno del atributo params
            (para el cual este modo de comparar ha de valer -1), si lo van a pasar los elementos de mismo tamaño que el umbral
            (valor del modo = 0), o si lo van a pasar los elementos de mayor tamaño que el umbral (modo = 1).   */
            
        
private function filtro_tamano_de_fichero($elemento){
        
            
$modo $this->params[0];
            
$umbral $this->params[1];
            
$tamano filesize(($this->ruta)."/".$elemento)/1024;
            
            if(
$modo==-1)
            {
                if(
$tamano $umbral)
                    return 
true;
            }
            else if(
$modo==0)
            {
                if(
$tamano == $umbral)
                    return 
true;
            }
            else if(
$modo==1)
            {
                if(
$tamano $umbral)
                    return 
true;
            }
            return 
false;
        }
        
        
/* Filtro que comprueba si el fichero pasado por el argumento $elemento se corresponde con el fichero
            que estoy buscando, almacenado en la posición cero del array $params.    */
            
        
private function filtro_es_fichero_buscado($elemento){
        
            return (
$this->params[0]==$elemento);
        }
        

    
    }


?>

Última edición por TiempoMuerto; 08/02/2009 a las 09:49
  #2 (permalink)  
Antiguo 07/02/2009, 19:21
 
Fecha de Ingreso: junio-2007
Mensajes: 70
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: [Aporte] Trabajando con el contenido de directorios (WCD v0.1)

- Clase Ejecutor, que implementa las acciones, llamadas ejecutores, a realizar sobre los elementos del directorio que pasen el filtro deseado.

Código PHP:


<?php

    
/* Clase que implementa el uso de ejecutores que ejecutarán una cierta función sobre los elementos
    *    que pasan el filtro.
    *    
    *    Desarrollada por: José Raúl Ruiz Sarmiento.    Versión: 0.1
    *    
    *    Esta clase es de libre utilización y modificación para cualquier proposito, siempre y cuando no se
    *    elimine este texto. De ninguna manera se asegura el correcto funcionamiento de esta clase.
    *
    *    Cualquier aportación o detección de errores puede notificarse a: [email protected]        
    */
    
    
class Ejecutor{
    
        
/* Atributos de la clase */
        
        
private $ruta;
        private 
$nombre_ejecutor;
        private 
$params;
        private 
$params_aux;
        
        
/* Constructor de la clase*/ 
        
        
function __construct($ruta,$nombre_ejecutor,$params=null,$params_aux=null){
            
$this->ruta $ruta;
            
$this->nombre_ejecutor $nombre_ejecutor;
            
$this->params $params;
            
$this->params_aux $params_aux;
        }
        
        
/* Métodos para consultar y editar atributos privados de la clase */
        
        
public function set_ruta($ruta){
            
$this->ruta $ruta;
        }
        
        public function 
get_ruta(){
            return 
$this->ruta;
        }
        
        public function 
set_nombre_ejecutor($nombre_ejecutor){
            
$this->nombre_ejecutor $nombre_ejecutor;
        }
        
        public function 
get_nombre_ejecutor(){
            return 
$this->nombre_ejecutor;
        }
        
        public function 
set_params($params){
            
$this->params $params;
        }
        
        public function 
get_params(){
            return 
$this->params;
        }
        
        public function 
set_params_aux($params_aux){
            
$this->params_aux $params_aux;
        }
        
        public function 
get_params_aux(){
            return 
$this->params_aux;
        }
        
        
/* Ejecutar ejecuta el ejecutor contenido en $nombre_ejecutor sobre el elemento pasado como argumento.
            Para su correcto funcionamiento el nombre del ejecutor ha de ser correcto */
        
        
public function ejecutar($elemento){
            
$nombre $this->nombre_ejecutor;    
            
$this->$nombre($elemento);
        }
        
        
/* Ejecutor que muestra por pantalla el elemento pasado como argumento */
        
        
private function ejecutor_mostrar($elemento){
            echo 
$elemento."<br />";
        }
        
        
/* Ejecutor que guarda en el array $params_aux el argumento $elemento en una posición correcta.
            Posteriormente se podrá recuperar este array con el método público get_params_aux()  */
        
        
private function ejecutor_devolver_array($elemento){
            static 
$indice=0;
            
$this->params_aux[$indice] = $elemento;
            
$indice++;
        }
        
        
/* Ejecutor que se ha de ejecutar tras comprobar que el elemento es de tipo jpg. Crea una thumb (miniatura)
            de la imagen y la guarda en la misma carpeta, si esta no existe ya.
            
            Para su correcto funcionamiento el array $params ha de tener en la posición 0 la escala a la que queremos
            crear el thumb (número de cero a uno) y en la posición uno la calidad de la compresión (número de cero a cien). */
            
        
private function ejecutor_crear_thumb($elemento){
        
            
// Comprobamos que la imagen no es ya una miniatura
            
if (!substr_count($elemento'_thumb'))  // Esta comprobación se podría sacar a un filtro en un futuro
            
{
                
$ruta$this->ruta;
                
$escala $this->params[0];
                
$compresion $this->params[1];
                
$ruta_completa $ruta."/".$elemento;
                
                
$file_name explode('.',$elemento);
                
$name $file_name[0];
                    
                
$ruta_a_comprobar $ruta."/".$name."_thumb.jpg";
                    
                
// Comprobamos que no existe ya el thumb
                
if(!@GetImageSize($ruta_a_comprobar))
                {
                    
// Cargamos la imagen original
                    
$original imagecreatefromjpeg($ruta_completa);
                    
                    
$ancho imagesx($original);
                    
$alto imagesy($original);
                
                    
$ancho_thumb $ancho*$escala;
                    
$alto_thumb $alto*$escala;
                    
                    
// Creamos la imagen thumb
                    
$thumb imagecreatetruecolor($ancho_thumb,$alto_thumb);
                    
                    
// Se copia la imagen
                    
imagecopyresampled($thumb,$original,0,0,0,0,$ancho_thumb,$alto_thumb,$ancho,$alto);
                    
                    
// Se guarda la imagen
                    
imagejpeg($thumb,$ruta_a_comprobar,$compresion);
                        
                }
            }
        }
        
        
/* Ejecutor que se encarga de eliminar del directorio especificado en $this->ruta el $elemento pasado como argumento.  
        
            Guarda en el array $params_aux la respuesta de la función unlink para el elemento, por si se quiere hacer una 
            comprobación posterior de que el borrado se ha hecho correctamente*/

        
private function ejecutor_eliminador($elemento){
            static 
$indice 0;
            
$ruta_completa $this->ruta."/".$elemento;
            if(
unlink($ruta_completa))
                
$this->params_aux[$indice] = $elemento." borrado OK";
            else
                
$this->params_aux[$indice] = $elemento." borrado ERROR";

        }

    
    }


?>
Anexo a estas clases se presenta un script de ejemplo de utilización de estas, además de un directorio llamado img cuyo contenido es usado en las pruebas.

Código PHP:


<?php

    
/* Script que muestra varios ejemplos de utilización de la clases directorio, filtro y ejecutor.
    *    
    *    Desarrollada por: José Raúl Ruiz Sarmiento.    Versión: 0.1
    *    
    *    Esta clase es de libre utilización y modificación para cualquier proposito, siempre y cuando no se
    *    elimine este texto. De ninguna manera se asegura el correcto funcionamiento de este script.
    *
    *    Cualquier aportación o detección de errores puede notificarse a: [email protected]        
    */
    
    // Incluimos las clases que vamos a utilizar
    
    
include_once('filtro.php');
    include_once(
'ejecutor.php');
    include_once(
'directorio.php');
    
    echo 
"<br /><b> EJEMPLO DE RESULTADOS OBTENIDOS </b><br /><br />";
    
    
/* PRIMER CASO DE PRUEBA */
    
    // En este caso de prueba vamos a usar el filtro más simple, que deja pasar todos los elementos, y el ejecutor más simple, 
    // que imprime por pantalla  el elemento que recibe
    
    
echo "<br /> PRIMER CASO DE PRUEBA <br />";

    
// Inicializamos las variables que vamos a necesitar pasar como argumentos a los constructores
    
    // Ruta del directorio con el que vamos a trabajar, en este caso img
    
$ruta "./img";
    
    
// Nombre del primer filtro que vamos a utilizar
    
$nombre_filtro "filtro_no_filtrar";
    
    
// Nombre del primer ejecutor que vamos a utilizar
    
$nombre_ejecutor "ejecutor_mostrar";
    
    
// Creamos los objetos necesarios como instancias de las clases
    
    
$filtro = new Filtro($ruta,$nombre_filtro);
    
$ejecutor = new Ejecutor($ruta,$nombre_ejecutor);
    
$dir = new Directorio($ruta,$filtro,$ejecutor);
    
    
// Ejecutamos el método ejecutar, que lanzará el recorrido sobre el directorio aplicando a los elementos del mismo que pasen el filtro el ejecutor
    
    
$dir->ejecutar();
    
    
// El ejecutor mostrar ya muestra el mismo los resultados, por lo que no necesitamos mostrarlos aquí.
    
    
    /* SEGUNDO CASO DE PRUEBA */
    
    // En este segundo caso de prueba se va a utilizar un filtro que nos dice si un fichero es mayor que un número umbral, y un ejecutor que almacena
    // el elemento en su array $params_aux, del cual podremos extraer el resultado tras ejecutarlo.
    
    
echo "<br /> SEGUNDO CASO DE PRUEBA <br />";
    
    
// Editamos los nombres del filtro y el ejecutor que vamos a utilizar    
    
$filtro->set_nombre_filtro("filtro_tamano_de_fichero");
    
$ejecutor->set_nombre_ejecutor("ejecutor_devolver_array");
    
    
// Editamos los parámetros que va a tener almacenado el filtro
    
$params[0] = 1;
    
$params[1] = 200;    
    
    
$filtro->set_params($params);
    
    
// Ejecutamos de nuevo el proceso sobre el directorio
    
$dir->ejecutar();
    
    
// Obtenemos los resultados del array $params_aux del ejecutor
    
$res $ejecutor->get_params_aux();
    
    
// Mostramos los resultados por pantalla
    
$i 0;
    while( 
$res[$i] )
    {
        echo 
"<br />Elemento ".$i." : ".$res[$i];
        
$i++;
    }
    
    
    
/* TERCER CASO DE PRUEBA */
    
    // En este segundo caso de prueba se va a utilizar un filtro que nos dice si un fichero es mayor que un número umbral, y un ejecutor que almacena
    // el elemento en su array $params_aux, del cual podremos extraer el resultado tras ejecutarlo.
    
    
echo "<br /><br /> TERCER CASO DE PRUEBA <br />";
    
    
// Editamos los nombres del filtro y el ejecutor que vamos a utilizar    
    
$filtro->set_nombre_filtro("filtro_es_de_tipo");
    
$ejecutor->set_nombre_ejecutor("ejecutor_crear_thumb");
    
    
// Editamos los parámetros de los objetos filtro y ejecutor
    
$params[0] = array ("jpg","JPG");
    
$filtro->set_params($params);    
    
    
$params[0]=0.2;
    
$params[1]=90;    
    
$ejecutor->set_params($params);
    
    
// Ejecutamos de nuevo el proceso sobre el directorio y mostramos por pantalla el número de imágenes a las que habría que crear un thumb, si no existiera
    // ya la miniatura de la misma
    
echo "<br /> Imagenes a las que crear una miniatura: ".$dir->ejecutar();
    

?>

TODO
Aumentar el número de filtros y ejecutadores aplicables a los elementos de un directorio.
Dotar al método ejecutar de la clase directorios de la posibilidad de examinar también el contenido de subdirectorios.
Aumentar la documentación de las clases.


Desarrollada por: José Raúl Ruiz Sarmiento. Versión: 0.1

Los filtros y ejecutores aquí mostrados son simples ejemplos, se pueden crear muchos más y muy potentes. ¡Animo a todo aquel que tenga en mente alguno lo exponga!

Descargable desde aquí v0.1

Descargable desde aquí v0.2

Última edición por TiempoMuerto; 08/02/2009 a las 09:53
  #3 (permalink)  
Antiguo 07/02/2009, 20:14
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [Aporte] Trabajando con el contenido de directorios (WCD v0.1)

Interesante aporte. Gracias.

Sólo vi el código, no lo probé.

Algunas cosas que vi. Primero, no veo razón para crear un setter y getter de la ruta en los filtros y ejecutor, ya que en teoría este parpametro debe ser el mismo que el de Directorio.

Luego, usa file_exists() para verificar si el thumb existe, y ya no será necesario poner el @ que tienes ahí.

Tercero, aunque es algo menor. Si DIrectorio no funciona sin el filtro y el ejecutor, entonces sería mejor colocar las tres clases en el mismo archivo. O si no que Directorio tenga la capacidad de ejecutarse sin la necesidad de establecer el filtro y/o ejecutor. Tendría que asignar comportamientos "por defecto".

Para extraer la extensión, usa array_pop()luego de "explotar" el nombre de archivo.

Saludos,
  #4 (permalink)  
Antiguo 08/02/2009, 03:48
 
Fecha de Ingreso: junio-2007
Mensajes: 70
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: [Aporte] Trabajando con el contenido de directorios (WCD v0.1)

Buenas Okram!

Muy interesantes tus comentarios sobre el código.

Cita:
Algunas cosas que vi. Primero, no veo razón para crear un setter y getter de la ruta en los filtros y ejecutor, ya que en teoría este parpametro debe ser el mismo que el de Directorio.
La razón de esto es que algunos filtros y ejecutores necesitan la ruta del directorio para realizar sus comprobaciones/acciones. Esta ruta también se podría especificar en el atributo $parametros de la clase, o ser pasada como argumento al ejecutor, pero así me pareció más elegante. aunque no me terminaba de convencer tener la misma ruta como atributo en tres clases.

Cita:
Luego, usa file_exists() para verificar si el thumb existe, y ya no será necesario poner el @ que tienes ahí.
Cierto =)

Cita:
Tercero, aunque es algo menor. Si DIrectorio no funciona sin el filtro y el ejecutor, entonces sería mejor colocar las tres clases en el mismo archivo. O si no que Directorio tenga la capacidad de ejecutarse sin la necesidad de establecer el filtro y/o ejecutor. Tendría que asignar comportamientos "por defecto".
Cierto también, analizaré cual de las dos opciones a ver cual es más ventajosa.

Cita:
Para extraer la extensión, usa array_pop()luego de "explotar" el nombre de archivo.
Esta si que es buena y de paso arregla un posible bug de ficheros que tengan más de un punto en su nombre.

Analizaré esto y otras cosas que tengo en mente para la siguiente versión. ¡Gracias!

PD: ¡Cuál sería la mejor forma de ir poniendo las nuevas versiones?

Última edición por TiempoMuerto; 08/02/2009 a las 03:55
  #5 (permalink)  
Antiguo 08/02/2009, 09:53
 
Fecha de Ingreso: junio-2007
Mensajes: 70
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: [Aporte] Trabajando con el contenido de directorios (WCD v0.1)

Versión 0.2 disponible

Versión 0.2
-------------------

- Añadido el ejecutor_eliminador.
- Eliminado el atributo inecesario $elemento de la clase Ejecutor.
- Añadida la posibilidad de editar y solicitar el filtro y el ejecutor usado en la clase Directorio.
- Añadido el filtro_es_fichero_buscado.
- Añadido nuevo ejemplo para el uso del filtro_es_fichero_buscado junto al ejecutor_eliminador.
- Corregidos errores en la documentación.

PD: Me quedan pendientes añadir tus comentarios okram ;)

Última edición por TiempoMuerto; 08/02/2009 a las 10:00
  #6 (permalink)  
Antiguo 08/02/2009, 10:31
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: [Aporte] Trabajando con el contenido de directorios (WCD v0.1)

Estimado, no sé si es acorde que envíes actualizaciones de un producto a la lista que no fue solicitado en ninguna consulta.

Lo mejor es que te crees tu propio sitio para el proyecto y posteriormente el que quiera seguirlo que entre.

PD: sugerencia, corrige la codificación y sigue el estándar de Zend.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 11/02/2009, 08:39
 
Fecha de Ingreso: junio-2007
Mensajes: 70
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: [Aporte] Trabajando con el contenido de directorios (WCD v0.1)

Tenía pensado hacer eso, una web con este project y alguna que otra idea más que tengo, como unos ejemplos simples de patrones de POO con php y demás.

Pondré por aquí la dirección para el que le quiera echar un vistazo.

Un saludO!
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 08:22.