Foros del Web » Programando para Internet » PHP »

FAQ's de PHP

Estas en el tema de FAQ's de PHP en el foro de PHP en Foros del Web. SECCION: IMAGEN SCRIPT: CORTAR IMAGENES EN MASA Objetivo: Script de tipo educacional para entender que manejar Imagenes en PHP es lo mismo que usar un ...

  #31 (permalink)  
Antiguo 12/12/2002, 17:03
Avatar de AngelRoyo  
Fecha de Ingreso: marzo-2002
Ubicación: Santiago de Chile
Mensajes: 207
Antigüedad: 22 años, 9 meses
Puntos: 5
MODIFICAR IMAGENES (Educacional)


SECCION: IMAGEN
SCRIPT: CORTAR IMAGENES EN MASA


Objetivo: Script de tipo educacional para entender que manejar Imagenes en PHP es lo mismo que usar un editor como FireWork, la diferencia esta en que PHP es escrito.
- Quita Sección rectangular Inferior



Código PHP:
  /*
    CORTAR "$cutpx" DE UNA IMAGEN
    ANGEL ROYO 2002
   */

function tiempo(){

 list(
$ms,$s)=explode(" ",microtime());
 
$t=($ms $s);
 return 
$t/* Retorna el Tiempo en Segundos */

}/* Esta funcion se la agrege más nada para ver lo que se demora la PC */

function image_cut($src,$destino,$cutpx){

  
$size getimagesize($src);/* Propiedades de la imagen */
  
$im=imagecreatefromjpeg($src); /*Tomo la imagen origen */
$img=imagecreate($size[0],$size[1]-$cutpx);/*[0] ANCHO, [1] ALTO, me creo una CANVAS, algo similar que en Firework*/
  
imagecopyresized($img$im0000$size[0],$size[1]-$cutpx$size[0], $size[1]-$cutpx); /* Copio en mi CANVAS la imagen $im en la dimensión que deseo */
  
ImageJPEG($img,$destino,85); /*Exporto la CANVAS a JPG con 85% */
  
ImageDestroy($img); /* La Borro de la Cache */

/* El procedimiento es similar a usar un editor de imagenes */
}

 
$d=dir("empresa/"); /*Directorio con las imagenes de origen*/
 
$t0=tiempo();/* Opcional */
  
echo "Handle: ".$d->handle."<br/>\n";/* Opcional */
  
echo "Path: ".$d->path."<br/>\n";/* Opcional */

  
while($archivo=$d->read()) {/* Comienzo a leer la carpeta definida en dir */

          
if (eregi(".+.jpe?g$",$archivo)){
              
/* ES JPG o JPEG, por lo tanto aplicamos la funcion image_cut */

    
$img_fuente=$d->path.'/'.$archivo;
    
$img_destino='cortadas/'.$archivo;
 
image_cut($img_fuente,$img_destino,30); /*30 signifca 30 pixeles de corte, eso es lo que mide mas menos el rectangulo */

 
}

      echo 
$archivo."<br/>\n"/* Muestra el nombre de los archivos */

      
}

      
$d->close(); /* Cierro */  

      
$total=tiempo()-$t0;

      echo 
"<br/>EL PROCESO TARDO: $total (s)"
Pues ahi esta.
Se demoro aprox entre 80 y 90 s, en mi PC de 350 Mhz - 196 RAM.
173 Imagenes un total de 6.78 Megas inicial y 5.41 Megas final.
Me ahorre algunos Bytes :)
__________________
Hacerlo Bien Haciendo el Bien.
Jaso ezazu agur bero bat.
(c) 2002. Made in Chile.
Mi sistema es:
Win(98);Apache(1.3.x);PHP(4.1.1);mySQL(3.23.x)
!Califica este POSTEO¡
  #32 (permalink)  
Antiguo 19/12/2002, 00:41
Avatar de BVis  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 104
Antigüedad: 22 años, 1 mes
Puntos: 0
Evitar que una imágen quede en la Caché del navegador.

Para evitar que una imágen quede en la caché de un navegador, sencillamente usar desde una página cualquiera:

<img src="ver_imagen.php?imagen=nombre_imagen.jpg">

Claro que nos hace falta tener el script "ver_imagen.php", debería contener esto:

Código PHP:
<?php

// Directorio donde buscaremos la imagen
$camino "./";

// Cabecera de imagen
header("Content-Type: image/jpeg"); // En este caso es jpeg, 
// pero se podría cambiar por la que nos interese.

// Cabeceras de NO CACHE
header"Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
header"Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT" );
header"Cache-Control: no-cache, must-revalidate" );
header"Pragma: no-cache" );

// Leemos la imágen
@readfile($camino.$_GET['imagen']);

?>
Creo que eso es todo.
__________________
"Yo opino lo mismo que BVis, el de 'forosdelweb' " - Bill Gates

Última edición por BVis; 21/12/2002 a las 21:04
  #33 (permalink)  
Antiguo 19/12/2002, 12:36
Avatar de AngelRoyo  
Fecha de Ingreso: marzo-2002
Ubicación: Santiago de Chile
Mensajes: 207
Antigüedad: 22 años, 9 meses
Puntos: 5
mysql_fetch_assoc Menos recursos

mysql_fetch_assoc una alternativa a mysql_fetch_array.

Genera un array más pequeño, bastante util si queremos reducir consumo de recursos.

$mifila=mysql_fetch_assoc($resultado);
echo $mifila['campo'];

Solo llama por nombre de campo y no por numero de campo, he ahi su beneficio.
Saludos.
__________________
Hacerlo Bien Haciendo el Bien.
Jaso ezazu agur bero bat.
(c) 2002. Made in Chile.
Mi sistema es:
Win(98);Apache(1.3.x);PHP(4.1.1);mySQL(3.23.x)
!Califica este POSTEO¡
  #34 (permalink)  
Antiguo 20/12/2002, 10:25
Avatar de e-miliox  
Fecha de Ingreso: noviembre-2002
Ubicación: San Antonio - Chile
Mensajes: 223
Antigüedad: 22 años, 1 mes
Puntos: 7
Capitalizador

Tema: Manejo de Strings

Pregunta: como puedo hacer para que las primeras letras de un nombre sean puestas en mayusculas?

Respuesta:

la funcion ucwords() sirve para llevar el primer caracter de un cada palabra de un string a mayuscula (capitalizar). La puedes complementar con un strtolower() anidado para que siempre salga la primera letra en mayuscula y las demas de la palabras en minuscula

asi
Código PHP:
<?php

$varStringConFormato 
ucwords(strtolower($varStringSinFormato));

?>
si usas el nombre luis miguel MONTES BurruCHAga

saldra como resultado Luis Miguel Montes Burruchaga

(este ejemplo sale en la ayuda de php, pero lo explique un pokito mas pa que la entendieran mejor)

tambien se me ocurre otra forma utilizando ucfirst() (primer caracter de un string a mayuscula), combinado tambien con strtolower(), este ultimo metodo te podria servir mas en el caso de tratar con apellidos compuestos (de las Mercedes, del Carmen, de la Fuente , etc)... el idea consiste en separar mediante un explode() la cadena que contiene el nombre o lo que quiereas tratar...luego a cada elemento aplicas la funcion ucfirst(strtolower($elementoArray)), SI y SOLO SI no es un 'articulo' (la, las, de...)...

mas menos asi

la hice a modo de funcion :)

Código PHP:
<?
function Capitalizar($nombre)
{
    
// aca definimos un array de articulos (en minuscula)
    // aunque lo puedes definir afuera y declararlo global aca
    
$articulos = array(
    
'0' => 'a',
    
'1' => 'de',
    
'2' => 'del',
    
'3' => 'la',
    
'4' => 'los',
    
'5' => 'las',
    );

    
// explotamos el nombre
    
$palabras explode(' '$nombre);

    
// creamos la variable que contendra el nombre
    // formateado
    
$nuevoNombre '';

    
// parseamos cada palabra
    
foreach($palabras as $elemento)
    {
        
// si la palabra es un articulo
        
if(in_array(trim(strtolower($elemento)), $articulos))
            {
            
// concatenamos seguido de un espacio
            
$nuevoNombre .= strtolower($elemento)." ";
            } else {
            
// sino, es un nombre propio, por lo tanto aplicamos
            // las funciones y concatenamos seguido de un espacio
            
$nuevoNombre .= ucfirst(strtolower($elemento))." ";
            }
    }

    return 
trim($nuevoNombre);
}
?>
__________________
=PoWeReD By MySeLf!=
  #35 (permalink)  
Antiguo 23/12/2002, 21:24
Avatar de cvander
Moderador
 
Fecha de Ingreso: abril-2001
Ubicación: Ciudadano del mundo
Mensajes: 13.638
Antigüedad: 23 años, 8 meses
Puntos: 1792
Un par de funciones que me han sido muy útiles...

Tema Leyendo desde una base de datos.

Pregunta Cómo puedo mostrar los parrafos de un texto almacenado en la base de datos?

Respuesta

Código PHP:
echo nl2br($row['contenido']); 

Tema Leyendo desde una base de datos.

Pregunta Cómo puedo mostrar únicamente el primer parrafo del texto almacenado en la base de datos? (Muy útil para resumenes de artículos)
Respuesta

Código PHP:
function parrafin($string) {
$article explode("\n"$string);
$parrafo $article[0];
 return( 
$parrafo ); 
 } 

echo 
parrafin($row['contenido']); 
__________________
- Christian Van Der Henst
Platzi
  #36 (permalink)  
Antiguo 28/12/2002, 12:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Tema: Uso de rand() (numeros aleatorios) - ejemplo práctico.

Pregunta: Como puedo mostrar una imagen aleatoria de una lista.?

Respuesta:

Usando la función rand() podemos hacer que PHP seleccione aleatoriamente un mumero entre un rango. Ese número lo podemos usar como indice para leer un array donde tengamos las URL's de las imagenes. Seguidamente generamos las cabeceras HTTP correspondientes y se lo enviamos al navegador.

imagen_aleatoria.php
Código PHP:
<?php
//**************************************
//*                                    *
//*        Imagenes Aleatorias         *
//*    By Cluster ([email protected])    *
//*   28/12/2002 - Versión 1.0         *
//*                                    *
//*  Uso:                              *
//*  <img src="imagen_aleatoria.php">  *
//*                                    *
//**************************************

// Array con las imagenes (URL fisico en el servidor).
// El indice es autonumerico .. tan solo añadir o quitar entradas segun se necesite.
$imagenes[]="imagen1.jpg";
$imagenes[]="imagen2.gif";
$imagenes[]="imagen3.jpg";

// Seleccion aleatoria imagen.
$aleatoria=rand(0,count($imagenes)-1);

// Buscar la extension de la imagen
$tipo_ext=explode(".",$imagenes[$aleatoria]);
$tipo=$tipo_ext[1];

// Formar la cabecera HTTP para imagen segun su extensión

// Enviamos cabecera al navegador para avisar q va una imagen de $tipo
header("Content-type: image/$tipo");
// Le ponemos el nombre de la imagen .. Al dar a descargar aparecera con este nombre. Puede dejarse uno fijo.
header("Content-Disposition: inline; filename=".$imagenes[$aleatoria]);

// Leer la imagen de su URL y entregarla al buffer de salida
readfile ($imagenes[$aleatoria]);

?>
Su uso es bien sencillo:

1) El array $imagenes[] contiene los URL's de las imagenes (si fuera necesario usar imagenes/imagen.php o como corresponda la ruta .. indicarla). El array usa indices autonumericos .. así que no hay q preocuparse del mismo .. tan solo borren o añadan las entradas de imagenes que necesiten.

2) Su uso: <img scr="nombre_que_le_den_al_script.php"> (y ruta si fuera necesario obviamente) .. Cada vez que carge la página se seleccionará una imagen de la lista que contiene el array $imagenes.

En teoría funciona con todo tipo de imagenes (.jpg, .png, .gif ..) No así con .swf (de Flash) pues se usan otras cabeceras HTTP ..

Un saludo,

PD: Desde PHP 4.2.0 no es necesario iniciar el generador de números aleatorios. Más info en www.php.net/rand

Última edición por Cluster; 03/11/2003 a las 08:36
  #37 (permalink)  
Antiguo 29/12/2002, 19:07
Avatar de BVis  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 104
Antigüedad: 22 años, 1 mes
Puntos: 0
Sonrisa Como generar un Thumbnail (imagen pequeña) en PHP usando GD

Antes que nada avisar que se requieren las librerías GD para poder realizar los thumbnails. Y en función de la versión de GD, podremos usar una u otra función

Primero pegaré el código de una función con la que generaremos directamente un thumbnail de alta calidad.

Código PHP:
function thumbjpeg($imagen,$altura) {
     
// Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
     
$dir_thumb "thumbs/";
     
// Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
     // el thumbnail se llamaría "tn_imagen1.jpg"
     
$prefijo_thumb "tn_";

     
// Aquí tendremos el nombre de la imagen.
     
$nombre=basename($imagen);
     
// Aquí la ruta especificada para buscar la imagen.
     
$camino=dirname($imagen)."/";

     
// Intentamos crear el directorio de thumbnails, si no existiera previamente.
     
if (!file_exists($camino.$dir_thumb))
          @
mkdir ($camino.$dir_thumb0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb);

     
// Aquí comprovamos que la imagen que queremos crear no exista previamente
     
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
          echo 
$camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n";
          
$img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");

          
// miramos el tamaño de la imagen original...
          
$datos getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");

          
// intentamos escalar la imagen original a la medida que nos interesa
          
$ratio = ($datos[1] / $altura);
          
$anchura round($datos[0] / $ratio);

          
// esta será la nueva imagen reescalada
          
$thumb imagecreatetruecolor($anchura,$altura);

          
// con esta función la reescalamos
          
imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);

          
// voilà la salvamos con el nombre y en el lugar que nos interesa.
          
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
     }

Para llamar a la función sencillamente hacer:

Código PHP:
thumbjpeg($imagen125); 
En este caso, '$imagen', es la imagen que queremos reducir, y '125', es la altura en píxeles que queremos que tenga la imagen reducida, de modo que el ancho quede proporcionado respecto a la imagen original.

Con la instrucción “or die()” se mostrará en pantalla el mensaje entrecomillado solo en el caso de que fallara la primera sentencia de la línea.

NOTAS:

Si en lugar de GD2 disponemos de GD1, no podremos utilizar la función imagecopyresampled() y deberíamos conformarnos con la función imagecopyresized() , que utiliza los mismos parámetros, lo malo es que ésta última da como resultado una imagen de calidad más pobre. A cambio, es mucho más rápida que la anterior.

Así si tenemos GD2, podemos usar la que más nos interese, si queremos CALIDAD y no nos importa el número de ciclos consumidos en el servidor,

imagecopyresampled();

en caso contrario:

imagecopyresized();

Si lo que queremos es crear imágenes "al vuelo", sin guardarlas en ningún archivo (cosa poco recomendable si usamos la función de más calidad), el segundo parámetro de la función imagejpeg() no se debe de poner, quedando la llamada en el scritp que hay más arriba:

Código PHP:
imagejpeg($thumb); 
Bueno, démonos cuenta que este script solo sirve para reducir imágenes de tipo JPEG, no de otro, para otros formatos, tan solo habría que cambiar un par de funciones por las correspondientes en los formatos que nos interesen.

Ejemplo:

imagecreatefromjpeg() por imagecreatefrompng() o imagecreatefromwbmp() o etc.

y

imagejpeg() por imagepng() o imagewbmp() o etc.

Basilio Vera.
Cualquier pregunta: [email protected]
__________________
"Yo opino lo mismo que BVis, el de 'forosdelweb' " - Bill Gates

Última edición por BVis; 09/07/2003 a las 15:16
  #38 (permalink)  
Antiguo 10/01/2003, 19:54
Avatar de BooMeranGz  
Fecha de Ingreso: febrero-2001
Mensajes: 350
Antigüedad: 23 años, 9 meses
Puntos: 0
De acuerdo Creando VirtualHost(s) y Dominios Virtuales en mi PC

Tema:
VirtualHost y Dominio Virtual

Pregunta:
¿Como trabajo con VirtualHost(s) y Dominios Virtuales en mi PC?

Respuesta:
Podemos tranquilamente usar dominios virtuales para llamar a nuestros proyectos directamente como http://miproyecto.com/ y no como http://127.0.0.22/ (o cualquier otra IP asignada).

Vamos a ver como:

Creando servidores virtuales con dominios virtuales para poder llamarlos desde nuestra misma PC:

Requisitos:
* Windows 98/ME/2000/NT/XP
* Tener Apache instalado como servidor
* Tener al menos PHP para trabajar (y probar)

Supongamos que vamos a trabajar con un nuevo web site en PHP cuyo dominio real es sitio.com y que tenemos el htdocs en el disco C:


Primer paso:

Creamos en nuestra carpeta C:\htdocs un directorio sitio1.com
Nos quedará esto: C:\htdocs\sitio1.com

En ese directorio debemos colocar los files que usemos para hacer el web site (todos).

En este ejemplo, abrimos el Block de notas y escribimos:

Código PHP:
<?
phpinfo
();
?>


Lo salvamos con el nombre de prueba.php en el directorio ..\sitio1.com\


Segundo Paso:

Ahora configuramos un VirtualHost para Apache:

Buscamos el file httpd.conf en dónde tenemos instalado Apache (dentro de la carpeta de Apache hay una que se llama "conf", este file está dentro de ella)

Lo abrimos con el Block de notas y nos vamos al final del mismo

Nos encontraremos con algo así:

Código:
#
# Use name-based virtual hosting.
#
#NameVirtualHost *

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *>
#    ServerAdmin [email protected]
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
Nosotros agregaremos nuestro VirtualHost aqui debajo y de esta manera:

Código:
## agregamos sitio1.com ###################
<VirtualHost 127.0.0.2>
 ServerAdmin [email protected]
 DocumentRoot C:/htdocs/sitio1.com
 ServerName sitio1.com
 ErrorLog logs/sitio1.com-error_log
 TransferLog logs/sitio1.com-access_log
</VirtualHost>


Salvamos el file httpd.conf y reiniciamos Apache.

Hasta aqui, si cargamos el navegador y ponemos:
http://127.0.0.2/prueba.php (enter), veremos la info de php en el mismo.

Ya tenemos configurado el VirtualHost con la IP deseada.


Tercer paso:

Vamos a configurar el dominio virtual para esa IP:

Vamos al directorio: C:\WINDOWS\SYSTEM32\DRIVERS\ETC, allí encontramos varios files, pero nos interesan los siguientes:
HOSTS y LMHOSTS.SAM

Renombramos HOSTS como HOSTS.SAM

Abrimos el Block de notas y escribimos:

127.0.0.1 localhost
127.0.0.2 sitio1.com


Lo salvamos en ese mismo directorio como HOSTS (sin extensión)

Nuevamente abrimos el Block de notas y escribimos:

127.0.0.1 localhost #PRE
127.0.0.2 sitio1.com #PRE


Lo salvamos en ese mismo directorio como LMHOSTS (sin extensión)

Copiamos HOSTS y LMHOSTS de C:\WINDOWS\SYSTEM32\DRIVERS\ETC\ a C:\WINDOWS\

Listo, hemos configurado el dominio virtual sitio1.com

Para probarlo, cargamos el navegador y ponemos:
http://sitio1.com/prueba.php (enter), veremos nuevamente la info de php en el mismo.

Nota final:

De esta manera podemos llamar a nuestros proyectos en php/cgi/etc. con un nombre de dominio virtual o con un subdominio (podria ser mi.sitio.com) y no complicarnos
con las IP que si tenemos varios proyectos se nos olvidan.

De igual manera recuerden que si agregan mas proyectos (por ejemplo otrositio.com) deberán agregar otro VirtualHost en el file \Apache\conf\httpd.conf, al final del que ya tenemos con otra IP (por ej.: 127.0.0.3) y luego agregar estos datos en los files HOSTS y LMHOST que tenemos en C:\WINDOWS\

Por último: Recuerden NO configurar un dominio virtual con un nombre verdadero que ya esté ruteado en internet, ya que si lo hacen cuando naveguen y quieran
ir al sitio real, no podrán, a menos que estopeen Apache y renombren los files HOSTS y LMHOST.
Recomiendo en esos casos que creen subdominios virtuales, por ejemplo si trabajan con yahoo.com (ja ja por un decir...), hagan un dominio virtual como miweb.yaoho.com.

Salu2.
  #39 (permalink)  
Antiguo 13/01/2003, 12:03
Avatar de BooMeranGz  
Fecha de Ingreso: febrero-2001
Mensajes: 350
Antigüedad: 23 años, 9 meses
Puntos: 0
De acuerdo PHP como Módulo de Apache bajo Windows

Tema:
PHP como Módulo de Apache bajo Windows y no como un CGI.

Pregunta:
¿Como instalo PHP como Módulo de Apache en Windows?

Respuesta:
Trataré de explicar brevemente como configurar PHP4 como módulo del servidor Apache bajo Windows:

En mi caso, he instalado:

Apache 1.3.26
PHP 4.1.2


en los siguientes directorios, Uds. deberán guiarse por sus instalaciones:

c:\www\inetpub\Apache
c:\www\inetpub\php


y el htdocs lo tengo en otro disco:

D:\www\htdocs

¡¡¡OJO!!!:
Para que cada cambio funcione, deben hacer un Restart de Apache.

Pasos a seguir:

-Editar el file \Apache\conf\httpd.conf

-Buscar #ServerName y modificarla así:
ServerName http://

-Buscar DocumentRoot y modificarla así:
DocumentRoot "D:/www/htdocs"

-Buscar ScriptAlias /cgi-bin/ y modificarla así:
ScriptAlias /cgi-bin/ "C:/www/inetpub/Apache/cgi-bin/"

-Debajo de esa línea agregar:
ScriptAlias /php/ "C:/www/inetpub/php/"

-Buscar la sección Addtype application/ y modificarla o agregarle estas líneas:
Addtype application/x-httpd-php .php
Addtype application/x-httpd-php .php3
Addtype application/x-httpd-php .php4
Addtype application/x-httpd-php .phtml


-Buscar la sección Actions y agregar:
Action application/x-httpd-php "/www/inetpub/php/php.exe"


- Buscar DirectoryIndex index.html y modificarla así:
DirectoryIndex index.html index.htm index.php index.php3 index.shtml

Este paso lo hacen solo si Apache les da error al testearlo, algunas versiones lo necesitan
-----------------------------------------------------------------------
-Buscar la sección LoadModule y agregar:
LoadModule php4_module c:/www/inetpub/php/sapi/php4apache.dll
-Buscar la sección AddModule y agregar al final:
AddModule mod_php4.c
-----------------------------------------------------------------------


-Guardar el file \Apache\conf\httpd.conf

-> En win9x/Me, copiar el file: \php\php4ts.dll al directorio x:\windows\system
-> En win NT/2k/XP, copiar el file: \php\php4ts.dll al directorio x:\windows\system32

-En el directorio \php\, buscar el file \php\php.ini-dist, renombrarlo como php.ini
y moverlo así:
-> En win9x/Me, al directorio x:\windows\system
-> En win NT/2k/XP, al directorio x:\windows\system32


Testeamos la configuración de Apache:

Ahora, vamos a menu inicio -> Apache HTTP Server -> Configure Apache Server -> Test Configuration
Si la ventana que se abre nos da:
bla, bla, Syntax OK, ya podemos probar PHP con Apache,
sinó, deberán revisar otra vez los pasos y hacer las modificaciones necesarias.

* Para probar Apache:
-Vamos a menu inicio -> Apache HTTP Server -> Control Apache Server -> Start

-Ejecutamos el navegador y escribimos esta URL: http://localhost/ <enter>
Si aparece la página de bienvenida de Apache, está bien configurado.

* Para probar PHP4:
-Vamos a menu inicio -> Apache HTTP Server -> Control Apache Server -> Start

-Con el Block de notas escribimos:

Código PHP:
<? echo "Hola, mi primera página PHP"?>
-Y lo guardamos como mi_prog.php en el directorio: /htdocs/. (En texto plano. Todos
los programas deben guardarse aqui o en subdirectorios dentro de este).

-Ejecutamos el navegador y escribimos esta URL: http://localhost/mi_prog.php <enter>

-Si aparece el texto Hola, mi primera página PHP, ¡PHP4 está funcionando!


* Para saber si PHP4 funciona como Módulo de Apache o como CGI:

-Vamos a menu inicio -> Apache HTTP Server -> Control Apache Server -> Start

-Con el Block de notas escribimos:

Código PHP:
<? phpinfo(); ?>
-Y lo guardamos como info.php en el directorio: /htdocs/

-Ejecutamos el navegador y escribimos esta URL: http://localhost/info.php <enter>

-Debe aparecer un resúmen de la configuración de PHP4 bajo Apache, en el primer recuadro buscamos Server API

-> Si a la derecha dice CGI, PHP4 está funcionando como un CGI-BIN (add-on)
-> Si dice Apache, está funcionando como módulo directo del servidor Apache


Este ejemplo utiliza variables globales y solo funciona si PHP4 es un módulo de Apache:

-Con el Block de notas, escribimos este programa y lo guardamos como: /Apache/htdocs/prueba.php

Código PHP:
<?
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="ACCESO RESTRINGIDO: Ingrese sus datos."');
header('HTTP/1.0 401 Unauthorized');
echo 
'AUTORIZACION REQUERIDA.';
exit;
}
else {
echo 
"Su nombre de usuario es: $PHP_AUTH_USER","<br>";
echo 
"Su contraseña es: $PHP_AUTH_PW","<br>";
}
?>
-En el navegador probamos: http://localhost/prueba.php <enter>

-Tambien pueden utilizar en vez de http://localhost, http://127.0.0.1


Esto es un agregado para los que tienen Windows XP:

* Resolver el problema de las sessions si no funcionan correctamente:

Lo único que tiene que hacer es crear un dir tmp en la raíz del HD primario (o sea, por ej:
C:\tmp ) y modificar en el php.ini la linea (en el root de c:\windows):

session.save_path= C:\tmp

@J@:
Sólo funciona si el TMP es creado en el directorio raiz del disco de arranque.

Salu2.
  #40 (permalink)  
Antiguo 14/01/2003, 14:33
Avatar de BooMeranGz  
Fecha de Ingreso: febrero-2001
Mensajes: 350
Antigüedad: 23 años, 9 meses
Puntos: 0
De acuerdo Tools para aprovechar PHP bajo Apache en windows

Tema: Tools para aprovechar PHP bajo Apache en windows
Pregunta: ¿Donde consigo buenas utilidades para Apache/PHP?
Respuesta: Aquí, sigue estos links :)

Algunos recursos para trabajar con PHP:

A continuación, listaré algunos recursos (tools) que nos sirven para hacernos cada vez más
fácil la tarea de trabajar bajo Apache en windows con PHP (mysql, perl y otros)

A medida que encuentre otros útiles, los iré agregando con fecha. De igual manera si alguien encuentra algun tool que crea puede ir aqui, que me avise a [email protected] y lo vemos.

PHP Coder R2 Final Prerelease 3 (Agregado el 15-01-2003)
* Excelente editor de programas PHP con ejecución de los mismos teniendo instalado solo PHP4
home: www.phpide.de/programs.php

Beautify PHP v0.4.6, 02.10.2002
* Para limpiar y reorganizar el código PHP (saca lineas en blanco también)
home: http://www.bierkandt.org/beautify/
demo online: http://www.bierkandt.org/beautify/beautify_php.php
descarga: http://twtelecom.dl.sourceforge.net/..._php_0.4.6.zip

PHPConfig (GUI)
* Configura PHP desde win de la manrea más fácil, mediante una ventana :)
home: http://www.analogx.com/contents/down...rk/phpconf.htm
descarga: http://www.analogx.com/files/phpconfi.exe

PHP Debugger (DBG)
* ¿Necesitan revisar el código mientras se ejecuta y ver los posibles errores?
home: http://dd.cron.ru/dbg/

Turck MMCache for PHP 2.3.1 2003-01-12
* Acelerador de caché de ejecución de scripts PHP
home: http://www.turcksoft.com/en/e_mmc.htm
descarga: http://easynews.dl.sourceforge.net/s...e-2.3.1.tar.gz

Salu2.

Última edición por jam1138; 17/10/2005 a las 06:53
  #41 (permalink)  
Antiguo 17/01/2003, 16:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Tema: Errores / configuración

Pregunta: Al intentar ejecutar PHP me da este error: "Security Alert! The PHP CGI cannot be accessed directly."

Respuesta:

En instalaciones de PHP como CGI, caso de PHP bajo PWS, IIS, OmniHTTPd y varios mas incluido Apache si es como CGI .. Suele presentar este error de configuración:

Security Alert! The PHP CGI cannot be accessed directly.
This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.


La solución está en configurar php.ini con la siguiente directiva:

Directiva php.ini:
; cgi.force_redirect = 1

dejarlo a:
cgi.force_redirect = 0

Reiniciar el servidor HTTP q se use y listo.

Un saludo,
  #42 (permalink)  
Antiguo 18/01/2003, 14:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Tema: Funciones encriptación/desencriptación para PHP.

Pregunta: ¿Como puedo usar las funciones de 'mcrypt' para PHP bajo Windows?

Respuesta:

Su instalación:

* Sustituir la libreria php_mcrypt.dll original de php-4.3.0-Win\extensions por la que incluye este .zip

* Copiar libmcrypt.dll hacia el c:\windows\system

* php.ini editarlo:
; extensions=php_mcrypt.dll

dejarlo en (para activarla):
extensions=php_mcrypt.dll

Una vez instalado .. ejecutar el servidor HTTP que usemos (o reiniciarlo si lo teniamos en marcha) .. Hacer un <? phpinfo(); ?> para comprobar q este todo correcto ..

Para testearlo con ejemplos de código:
http://www.php.net/manual/en/ref.mcrypt.php


Testeado en PHP 4.3.0 bajo Windows98 como Módulo de Apache.

Un saludo,

Última edición por Cluster; 22/03/2005 a las 14:50 Razón: Link roto .. ya no corresponde para versiones actuales de PHP.
  #43 (permalink)  
Antiguo 22/01/2003, 10:48
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
Tema: Usuarios activos
Pregunta: ¿Cómo sé los usuarios activos que hay en mi web?
Respuesta:

Tu servidor debe admitir funciones de lectura y escritura en archivos de texto.
Empezamos creando un archivo usuarios.txt EN BLANCO.
A continuación creamos otro archivo activos.php cuyo contenido sea:
Código PHP:
<? $archivo="usuarios.txt"//archivo donde almacenarán los usuarios activos
$inactivo=600//tiempo en segundos en que un usuario estará inactivo
$contar=0;
$fp=fopen($archivo,"r");
$tiempo=time();
$contenido=fread($fp,filesize($archivo));
fclose($fp);
$lineas=split("\n",$contenido);
$filas=file($archivo);
for (
$a=0$a sizeof($filas); $a++) {
$datos=split(':',$lineas[$a]);
$descontar=$tiempo-$inactivo;
if (
$datos[0] != $REMOTE_ADDR && $datos[1] > ($descontar)) {
$res.= $datos[0].":".$datos[1]."\n";
$contar++;
}}
$res.="$REMOTE_ADDR:$tiempo\n";
$contar++; // Ya tenemos el total de usuarios activos
$fp=fopen($archivo,"w");
fwrite ($fp,$res);
fclose($fp);
//Ahora damos formato a la salida, modifica esto a tu gusto
//Ten en cuenta que la variable $contar contiene el nº de usuarios activos
if ($contar==1){$contar="1 usuario activo";}else{$contar="$contar usuarios activos";}
echo 
$contar//Lo mostramos por pantalla
?>
Finalmente subes el activos.php y el usuarios.txt a tu server. Y luego en el lugar de tu página donde quieras ver los usuarios activos pones:
Código PHP:
<? include "activos.php"?>
Como puedes observar, puedes cambiar la ruta del archivo usuarios.txt (p. ej.: "../../usuarios.txt"); en este caso he supuesto que la aplicación y el archivo auxiliar están en la misma carpeta.

¡¡¡Espero que les sea de ayuda!!!
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #44 (permalink)  
Antiguo 22/01/2003, 12:39
Avatar de luigivirgo  
Fecha de Ingreso: enero-2003
Ubicación: Toluka mejiko
Mensajes: 150
Antigüedad: 21 años, 11 meses
Puntos: 0
Manejo de fechas

Tema: Manejo de fechas.

Pregunta: Conversión formato fecha tipo Año-Semana-Dia semana a formato standar dd/mm/aaaa

Respuesta:

Tengo fechas en el siguiente formato: AAAASSD
donde:
AAAA = año 2003
SS = semana 04
D = dia de la semana 3 (miercoles)

Necesito convertirlas a formato común:
2003043 --> 22/01/2003

Código PHP:
$fecha="2003043";
$anio=substr($fecha,0,4);
$sem=substr($fecha,4,2);
$dia=substr($fecha,6,1)+1;
$diaanio=date("w",mktime(0,0,0,1,1,$anio));
echo 
date("d/m/Y",mktime(0,0,0,1,($sem-1)*7+$dia-$diaanio,$anio)); 

Última edición por Cluster; 22/01/2003 a las 20:25
  #45 (permalink)  
Antiguo 28/01/2003, 13:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Tema: Descargas - Downloads de archivos.

Pregunta: ¿Como puedo hacer descargas con opción 'Resume'?

Créditos: MartinAcevedo

Respuesta:

Nota: Solo funciona bajo PHP como Módulo de Apache ..

Código PHP:
<?
$headers 
$_SERVER['HTTP_RANGE'];
// Si usas PHP inferior a 4.1.x usar $headers=$HTTP_RANGE; (y register_globlas a ON)

$filename="archivo.exe"

//aca se obtiene la cabecera que nos dice desde que byte tenemos que enviar
//lo guardamos en $bytes.

if ($headers[Range]){
$pos=strpos ($headers[Range], "bytes=");
$pos2=strpos($headers[Range],"-");
$bytes=substr ($headers[Range], $pos+strlen("bytes="),$pos2-($pos+strlen("bytes="))); 
}else{
$bytes=0;
}
settype ($bytes"integer");

$tarchivo=filesize($filename)-$bytes;
$ttotal=filesize($filename);

error_reporting(0);

header("Last-Modified: " gmdate("D, d M Y H:i:s T"filemtime($filename)));
header("Accept-Ranges: bytes");
header("Content-Length: " $tarchivo);
header("Content-Disposition: attachment; filename="."archivo.exe");
//indicamos al cliente que bytes del archivo vamos a transferir
//en este caso es desde $bytes hasta el final del archivo
//que es lo que nos pide el get right normalmente
//se puede modifcar tomando el ultimo byte del rango
//para hacer mirroring tipo kazaa (seria una version mas avanzada)
header("Content-Range: bytes ".$bytes."-".($ttotal-1)."/".$ttotal);

header("Content-Type: application/octet-stream");

//abrimos el archvo
$fp fopen($filename,'rb');

if (!
$fp) {
echo 
"error de apertura";
exit();
}
//nos movemos hasta el byte donde debemos empezar a mandar informacion
rewind ($fp);
fseek ($fp$bytes);

//mandamos el pedazo de archivo correspondiente
// la funcion fpassthru() es similar a readfile() en que manda el archivo por la salida estandar (mejor que usar un ciclo con fread adentro), 
// la diferencia con readfile es que debe ser abierto con fopen, esta funcion devuelve todos los bytes por la salida estandar
//  desde la posicion actual del puntero hasta el final del archivo
if(!fpassthru($fp)) {
echo 
"error de salida";
exit();
}

header("Connection: close");

exit();
?>

Última edición por Cluster; 10/02/2003 a las 22:15
  #46 (permalink)  
Antiguo 30/01/2003, 15:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Tema: Manejo de Fechas y formularios HTML.

Pregunta: Como obener la fecha actual en listas desplegables HTML con la fecha de hoy seleccionada.

Respuesta:
Código PHP:
<?php
// etiqueta <form .... > y resto de campos necesarios ..

// obtener la fecha en formato numérico dia . mes y año.
$fecha_dia date ("d");
$fecha_mes date ("m");
$fecha_year date ("Y");

// ya puestos .. generaremos el mes en formato "legible" y en castellano.
// para eso usaremos un array con los nombres de los messes . indice comienzo en 1
$meses_nombres=Array(1=>"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");

// Ahora un bucle para generar dinamicamente los Options de un Select (de cada uno de dia mes y año).
// Si el nº de dia (mes, año) coincide con el actual .. poner el tag "selected" ...

// selección dia
echo "<select name=\"dia\">\n";
for (
$contador=1$contador <=31$contador++){
   if (
$fecha_dia==$contador){
     echo 
"<option value=\"".$contador."\" selected>".$contador."\n";
   }else{
     echo 
"<option value=\"".$contador."\">".$contador."\n";
   }
}
echo 
"</select>\n";

// Selección mes
echo "<select name=\"mes\">\n";
for (
$contador=1$contador <=12$contador++){
   if (
$fecha_mes==$contador){
     echo 
"<option value=\"".$contador."\" selected>".$meses_nombres[$contador]."\n";
   }else{
     echo 
"<option value=\"".$contador."\">".$meses_nombres[$contador]."\n";
   }
}
echo 
"</select>\n";

// Selección año
echo "<select name=\"year\">\n";
for (
$contador=1995$contador <=2004$contador++){
   if (
$fecha_year==$contador){
     echo 
"<option value=\"".$contador."\" selected>".$contador."\n";
   }else{
     echo 
"<option value=\"".$contador."\">".$contador."\n";
   }
}
echo 
"</select>\n";
// resto de etiquetas (tag) de formulario .. incluido botones y 
?>
Un saludo,

Última edición por Cluster; 30/01/2003 a las 16:38
  #47 (permalink)  
Antiguo 04/02/2003, 14:16
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años, 1 mes
Puntos: 1
Tema: Consultas SQL

Pregunta: Como se cuantos registros tengo en una tabla?

Respuesta:

Facil utilizando mysql_num_rows();

Código PHP:
//conexion a la BD

$sql="SELECT * FROM tabla";
$result=mysql_query($sql);
$num=mysql_num_rows($result);

echo 
"Total ".$num
Eso muestra como resultado Total 10 o el numero de registros de tu BD

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #48 (permalink)  
Antiguo 04/02/2003, 14:28
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años, 1 mes
Puntos: 1
Tema: Cookies

Pregunta: Como creo, leo y destruyo una cookie?

Repuesta:


Para crear una cookie usar setcookie("nombre","valor","tiempo");
Para leertla $HTTP_COOKIE_VARS["nombre_cookie"]

Para destuirla setcookie("nombre","valor",time()-3600);

Código PHP:
$fecha =date("d/mY | H:i:s");
setcookie("fecha",$fecha,time()+172800);// esta cookie dura 2 dias, tiene por nombre fecha y como valor la variable $fecha

if(isset($HTTP_COOKIE_VARS["fecha"]))//si la cookie existe
{
echo 
"Tu ultima visia fue el ".$HTTP_COOKIE_VARS["fecha"]; 
}
else
{
echo 
"Es la primera ves que me visitas";

Para destruir la cookie que acabamos de crear

Código PHP:
setcookie("fecha","x",time()-3600);//especificamos el nombre de la cookie, el valor no importa por eso "x" y la destruccion 
Mas info http://www.php.net/manual/es/function.setcookie.php


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por Cluster; 06/05/2003 a las 20:06
  #49 (permalink)  
Antiguo 15/02/2003, 13:20
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años, 1 mes
Puntos: 1
Tema: SESSIONS

Pregunta: Como manejo el SID de una session en la url?

Repuesta:

Para no tener que programar manualmente el PHPSESID en nuestros script y no preocuparnos por que el cliente no acepte las cookies de nuesta session deberemos tener en nuestro php.ini las siguientes directivas activadas (1) o descativadas (0)

session.use_cookies=0
session.use_trans_sid=1

Si no es asi o no tenemos acceso al php.ini deberemos poner en todos nuestros script que usen sessiones lo siguiente:

Código PHP:
ini_set("session.use_cookies","0");//descativamos el uso de cookies para nuestras sessions
ini_set("session.use_trans_sid","1");//activamos el uso de la url para enviar el SID de nuestra session 
Mas info http://www.php.net/........./function.ini-set.php
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #50 (permalink)  
Antiguo 04/03/2003, 21:23
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años, 1 mes
Puntos: 1
Otra para mail

Tema: Seguridad -Mail


Pregunta: Como puedo comprobar si un email es valido?

Respuesta:

Con una sencilla funcion donde reviso el email usando expresiones regulares, en case de no cumplirse devuelve FALSE si se cumple devuelve TRUE

Código PHP:
function comprobar_mail($mail){
  if (!
ereg("^([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})$",$mail)){
      return 
FALSE;
  } else {
       return 
TRUE;
  }


Como usar?
simple, solo debo pasar por la funcion el email que quiero revisar y comprobar que es lo que esta funcion devuelve con un simple if como se muestra a continuacion

Código PHP:

$email
="[email protected]";
if(
comprobar_mail($email)){/*Si la funcion devuelve TRUE, osea que si esta correcto muestro un mensaje o lo que quiera mostrar*/
        
echo "Sintax Mail Correcto";
}else{
        echo 
"Sintax Mail Erroneo";/*Si devolivio False osea que esta mal muestro un mensaje o lo que quiera mostrar*/

Y para verificar la existencia de una direccion se puede utilizar la funcion

getmxrr() , pero solo en servidores *.nix

El uso de esta funcion para la verificacion de existencia de una direccion de mail se explica Aqui


Saludos

__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 07/09/2003 a las 18:35
  #51 (permalink)  
Antiguo 04/03/2003, 21:36
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años, 1 mes
Puntos: 1
Tema: Seguridad - URL´s

Pregunta: Como compruebo si una url existe o no

Respuesta:

Utilizando la siguiente funcion

Código PHP:
function url($url)//Se le pasa la url
{
$fp=@fopen($url,"r");//Utilizamos fopen para abrir esa url

 
if($fp){//Si fopen abre la url

     
return true;

 }else{
//si no devuelve false

     
return false;
 }

@
fclose($fp);//Cerramos la conexion

Para usarla

Código PHP:
$existe=url("http://La_url.com");//Con [url]http://[/url]
if($existe){
    echo 
"Si existe";
}else{
    echo 
"No existe";


Espero les sirva


Saludos

Última edición por Cluster; 06/03/2003 a las 22:00
  #52 (permalink)  
Antiguo 20/03/2003, 10:40
Avatar de BVis  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 104
Antigüedad: 22 años, 1 mes
Puntos: 0
Como conocer el tamaño en bytes de una Base de Datos MySQL

La consulta:

SHOW TABLE STATUS

Te muestra información sobre las tablas de una base de datos. Entre los campos que te muestra, hay uno que es 'Data_length', bueno, pues eso es lo que ocupan los datos de cada tabla.

Lo que ocurre es que además de los datos, también puede representar bastante espacio lo asignado para cada índice. Y esto lo indica en el campo 'Index_length'

Para obtener el valor total de la base de datos, se me ocurre emplear, por ejemplo, PHP para recuperar todos los valores y sumarlos posteriormente.

Sería algo como:
Código PHP:
mysql_connect(Datos de conexion) or die(mysql_error());
mysql_select_db("base_de_datos") or die(mysql_error());

$sql "SHOW TABLE STATUS";
$resultado mysql_query($sql) or die(mysql_error());

$total 0;
while (
$tabla mysql_fetch_assoc($resultado))
 
$total += ($tabla['Data_length']+$tabla['Index_length']);
 
echo 
$total
Es decir, en la variable $total tenemos cuanto ocupa la base de datos "base_de_datos" (en bytes).

Si queremos mostrar ese valor en KB, es muy sencillo...
Código PHP:
$total_temp $total 1024;
$total_kb number_format($total_temp0","".")+1;

// despues...
echo $total_kb
1 Saludo.
__________________
"Yo opino lo mismo que BVis, el de 'forosdelweb' " - Bill Gates
  #53 (permalink)  
Antiguo 31/03/2003, 15:09
Avatar de mdk
mdk
 
Fecha de Ingreso: noviembre-2002
Mensajes: 531
Antigüedad: 22 años, 1 mes
Puntos: 11
¿como exportar mi base de datos a un archivo 'archivo.sql'?

Créditos: Cluster
Tema: Bases de datos
Pregunta: ¿Como exportar mi base de datos en MySQL a un archivo fichero.sql?
Respuesta:

Para guardar una base de datos, sin ningún gestor como podría ser phpMyAdmin. Se podría usar el siguiente código. Tal cual está .. envia a descargar el "dump" (volcado de datos y estructura) de la Base de datos seleccinada, incluido todas sus tablas.


Código PHP:
<?
// Nombre del archivo de con el cual queremos que se guarde la base de datos
$filename "fichero.sql"
// Cabezeras para forzar al navegador a guardar el archivo
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$filename");

$usuario="usuario";  // Usuario de la base de datos, un ejemplo podria ser 'root'
$passwd="contraseña";  // Contraseña asignada al usuario
$bd="base_de_datos";  // Nombre de la Base de Datos a exportar

// Funciones para exportar la base de datos
$executa "c:\\mysql\\bin\\mysqldump.exe -u $usuario --password=$passwd --opt $bd";
system($executa$resultado);

// Comprobar si se a realizado bien, si no es asi, mostrará un mensaje de error
if ($resultado) { echo "<H1>Error ejecutando comando: $executa</H1>\n"; }

?>
Nota: Este código es valido si PHP se esta ejecutando en Windows. En caso de ejecutarse en Linux sustituir:
Código PHP:
$executa "c:\\mysql\\bin\\mysqldump.exe -u $usuario --password=$passwd --opt $bd"
por:
Código PHP:
$executa "/mysql/bin/mysqldump -u $usuario --password=$passwd --opt $bd"
**Las rutas indicadas son hacia la correspondiente ubicación física de mysqldump (o mysqldump.exe) en sus sistemas ...

Si se desea que el archivo generenado ($fichero.sql) lo queremos dejar en el propio servidor (por ejemplo para hacer backups de esa BD Mysql automaticos lanzados por algun script nuestro ...) usar (en lugar de la anterior $executa): (notese el > $fichero )

Código PHP:
$executa "c:\\mysql\\bin\\mysqldump.exe -u $usuario --password=$passwd --opt $bd > $fichero"
Y .. quitar las cabeceras header() q se usan (todas).
__________________
SoY Lo Ke VeS iNKLuSo KuAnDo No Me VeS ;)

Última edición por Cluster; 31/03/2003 a las 15:48
  #54 (permalink)  
Antiguo 05/04/2003, 21:15
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 10 meses
Puntos: 5
Tema: Numeros
Pregunta: ¿Como convierto un número a una cadena de texto que lo represente (p.e.- 2,115 = Dos mil ciento quince)?
Respuesta: Utiliza el siguiente código (instrucciones para usarlo al final del post)


1.- Guarda esta función en un archivo, por ejemplo numeros.inc
Código PHP:
<?

function numerotexto ($numero) {
    
// Primero tomamos el numero y le quitamos los caracteres especiales y extras
    // Dejando solamente el punto "." que separa los decimales
    // Si encuentra mas de un punto, devuelve error.
    // NOTA: Para los paises en que el punto y la coma se usan de forma
    // inversa, solo hay que cambiar la coma por punto en el array de "extras"
    // y el punto por coma en el explode de $partes
    
    
$extras= array("/[\$]/","/ /","/,/","/-/");
    
$limpio=preg_replace($extras,"",$numero);
    
$partes=explode(".",$limpio);
    if (
count($partes)>2) {
        return 
"Error, el n&uacute;mero no es correcto";
        exit();
    }
    
    
// Ahora explotamos la parte del numero en elementos de un array que
    // llamaremos $digitos, y contamos los grupos de tres digitos
    // resultantes
    
    
$digitos_piezas=chunk_split ($partes[0],1,"#");
    
$digitos_piezas=substr($digitos_piezas,0,strlen($digitos_piezas)-1);
    
$digitos=explode("#",$digitos_piezas);
    
$todos=count($digitos);
    
$grupos=ceil (count($digitos)/3);
    
    
// comenzamos a dar formato a cada grupo
    
    
$unidad = array   ('un','dos','tres','cuatro','cinco','seis','siete','ocho','nueve');
    
$decenas = array ('diez','once','doce''trece','catorce','quince');
    
$decena = array   ('dieci','veinti','treinta','cuarenta','cincuenta','sesenta','setenta','ochenta','noventa');
    
$centena = array   ('ciento','doscientos','trescientos','cuatrocientos','quinientos','seiscientos','setecientos','ochocientos','novecientos');
    
$resto=$todos;
    
    for (
$i=1$i<=$grupos$i++) {
        
        
// Hacemos el grupo
        
if ($resto>=3) {
            
$corte=3; } else {
            
$corte=$resto;
        }
            
$offset=(($i*3)-3)+$corte;
            
$offset=$offset*(-1);
        
        
// la siguiente seccion es una adaptacion de la contribucion de cofyman y JavierB
        
        
$num=implode("",array_slice ($digitos,$offset,$corte));
        
$resultado[$i] = "";
        
$cen = (int) ($num 100);              //Cifra de las centenas
        
$doble $num - ($cen*100);             //Cifras de las decenas y unidades
        
$dec = (int)($num 10) - ($cen*10);    //Cifra de las decenas
        
$uni $num - ($dec*10) - ($cen*100);   //Cifra de las unidades
        
if ($cen 0) {
           if (
$num == 100$resultado[$i] = "cien";
           else 
$resultado[$i] = $centena[$cen-1].' ';
        }
//end if
        
if ($doble>0) {
           if (
$doble == 20) {
              
$resultado[$i] .= " veinte";
           }elseif ((
$doble 16) and ($doble>9)) {
              
$resultado[$i] .= $decenas[$doble-10];
           }else {
              
$resultado[$i] .=' '$decena[$dec-1];
           }
//end if
           
if ($dec>and $uni<>0$resultado[$i] .=' y ';
           if ((
$uni>0) and ($doble>15) or ($dec==0)) {
              if (
$i==&& $uni == 1$resultado[$i].="uno";
              elseif (
$i==&& $num == 1$resultado[$i].="";
              else 
$resultado[$i].=$unidad[$uni-1];
           }
        }

        
// Le agregamos la terminacion del grupo
        
switch ($i) {
            case 
2:
            
$resultado[$i].= ($resultado[$i]=="") ? "" " mil ";
            break;
            case 
3:
            
$resultado[$i].= ($num==1) ? " mill&oacute;n " " millones ";
            break;
        }
        
$resto-=$corte;
    }
    
    
// Sacamos el resultado (primero invertimos el array)
    
$resultado_invarray_reverse($resultadoTRUE);
    
$final="";
    foreach (
$resultado_inv as $parte){
        
$final.=$parte;
    }
    return 
$final;
}

?>

Para llamarlo, solo incluye el archivo y llama a la función con el numero que quieres convertir. Puede venir en formato numerico (12345.67) o como cadena ("$ 4,127.87")

Código PHP:
<?
include ("numeros.inc");
$ejemplo1=56424.21;
$ejemplo2="$ 6,125,652.11"

echo numerotexto($ejemplo1);
echo 
"<br>"
echo numerotexto($ejemplo2);

?>
NOTA: La parte de los decimales no esta siendo usada, pero esta disponible (dentro de la funcion) como $partes[1], sera muy sencillo tomarla y utilizarla si a alguien le sirve de algo

Saludos!
__________________
Manoloweb
  #55 (permalink)  
Antiguo 08/04/2003, 05:17
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 22 años, 4 meses
Puntos: 8
Pregunta: ¿Como puedo mejorar el editor Maguma Studio usando PHP?

Requisitos: conexion a internet, php local.

Respuesta: utilizando quickref.txt de cvs.php.net y parseando el manual de php version html.

Ulilizando PHP con sus funciones para expresiones regulares es posible mejorar el editor para PHP Maguma Studio, de manera que:[list=1][*]El highlight (coloreado de texto) reconozca todas las funciones de PHP.[*]Que la ayuda contextual con los parametros para las funciones, y las "Funciones Nativas de PHP" (ToolBox>Class Browser) aparezcan en español! (la mayoria P)[/list=1]

Para realizar el punto 1 debemos tener en cuenta que Maguma utiliza un archivo llamando php-funcs.dat (por defecto se encuentra en C:\Archivos de programa\Maguma Studio\Data\php-funcs.dat) para almacenar todas la funciones que serán coloreadas; entonces lo que haremos es "actualizar" este fichero con uno nuestro mas completo siguiendo estos pasos:[list=a][*] Guargar en nuestro disco el archivo http://cvs.php.net/cvs.php/phpdoc/quickref.txt?login=2 , que es la lista oficial de las funciones php con su descripcion.[*] Utilizar el siguiente código para crear un nuevo php-funcs.dat
Código PHP:
$quickrefdecvs "c:\\windows\\escritorio\\quickref.txt";  //Aqui hay que poner el path al quickref que bajamos de cvs.php.net
$nuevophp_funcs "c:\\windows\escritorio\\php-funcs.dat";  // Aqui se creara el nuevo php-funcs.dat
$lineas file($quickrefdecvs);

$fp fopen($nuevophp_funcs"w");
$patronascii "[0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5];";  // esta es mi primera expresion regular que funciona bien (creo)
foreach( $lineas as $linea ) {
    
$linea trim($linea);
    
$linea substr($linea0strpos($linea" - "));
    if (
ereg("&#(".$patronascii.");"$linea$reg)) {
        
$linea str_replace($reg[0], chr(intval($reg[1])), $linea);
    }
    if (
next($lineas)) {
        
fputs($fp$linea."\n");
    } else {
        
fputs($fp$linea);
    }
}
fclose($fp);
echo 
"<big>Tu $nuevophp_funcs ahora tiene <b>".count($lineas)."</b> funciones :-P</big>"
[*] Reemplazar el archivo php-funcs.dat original por el que se acaba de crear.[/list=a]

Para realizar el punto 2 Maguma utiliza otro archivo llamado php-insight.dat (por defecto se encuentra en C:\Archivos de programa\Maguma Studio\Data\php-insight.dat) y en este caso lo actualizaremos a partir del manual oficial de PHP version single HTML en español. Para ello:[list=a][*] Bajar el manual de http://www.php.net/distributions/ma...ual_es.html.bz2 (esta comprimido con bz2 y si no sabes como abrirlo debes leer esto http://www.php.net/manual/en/faq.misc.php#faq.misc.bz2)[*] Aplicarle este codigo que parseará el HTML usando expresiones regulares y devolverá un nuevo php-insight.dat:
Código PHP:
$manualphp "C:\\windows\\escritorio\\php_manual_es.html"//path al manual de php
$maguma_php_insight "c:\\windows\\escritorio\\php-insight.dat"// lugar donde se creara el nuevo php-insight.dat

$ini time();

$fpm fopen($manualphp"r");
$lineas fread($fpmfilesize($manualphp));
$lineas str_replace("\n"""$lineas);

$fpi fopen($maguma_php_insight"w");

$patron '<H2>(Descripción|Description)</H2>([^<>]+)<(B CLASS|BCLASS)="methodname">([^<>]+)</B>([^<>]+)<';
$patronascii "[0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5];";  // esta es mi primera expresion regular que funciona bien (creo)
while (ereg($patron$lineas$reg)){
    
$a++;
    
$lineas strstr($lineas$reg[0]);
    
$lineas substr($lineasstrlen($reg[0]));
    
$nuevaslineas[trim($reg[4])] = trim($reg[5]);
    
//echo nl2br("<b>$a: </b> $reg[2]<b>$reg[4]</b>$reg[5]\n");  //probar descomentar esta linea
    // if ($a >= 1000) break;                      // para test
}

uksort($nuevaslineas'strcasecmp');
foreach( 
$nuevaslineas as $clave => $valor ) {
    
$linea $clave.$valor;
    if (
ereg("&#(".$patronascii.");"$linea$reg)) {
        
$linea str_replace($reg[0], chr(intval($reg[1])), $linea);
    }
    if (
next($nuevaslineas)) {
        
fputs($fpi$linea."\n");
    } else {
        
fputs($fpi$linea);
    }
}
$fin time();
echo 
"<big>Despues de <b>";
echo 
date("i:s"$fin-$ini);
echo 
" minutos</b> se ordenaron y guardaron las $a referencias de funciones PHP en el archivo <b>$maguma_php_insight</b> !!</big>"
Debemos tener presente que, debido a que se utilizan expresione regulares y el manual es "pesado" (5 Mb aprox.) el proceso para lograr el punto 2 puede toman alrededor de 20 minutos con un procesador de 500Mhz.[*] Reemplazar el archivo php-insight.dat original por el que se acaba de crear.[/list=a]

Explicaciones para las expresiones regulares utilizadas:
  • El que esta definido en $patronascii casa con cualquier numero que esta dentro del rango 0 a 255 pues hay 4 opciones (las opciones se diferencian con la barra vertical |)
    Cualquier numero del 0 al 99:
    Código:
    [0-9]{1,2}
    
    Cualquier numero del 100 al 199:
    Código:
    1[0-9]{1,2}
    
    Cualquier numero del 200 al 249:
    Código:
    2[0-4][0-9]
    
    Cualquier numero del 250 al 255:
    Código:
    25[0-5]
    
  • El que esta definido en $patron se utiliza especificamente para recorrer el Manual HTML de PHP, por lo que para interpretarlo basta con ver el codigo fuente del mismo y compararlo con la ER.

Una version actualizada del php-funcs.dat se puede bajar de:
http://www.forosdelweb.com/attachment.php?postid=358063

Una version actualizada del php-insight.dat se puede bajar de:
http://www.forosdelweb.com/attachment.php?postid=373755

Saludos!

Última edición por Cluster; 26/04/2003 a las 22:24
  #56 (permalink)  
Antiguo 08/04/2003, 11:49
Avatar de lubetpic  
Fecha de Ingreso: enero-2002
Ubicación: San Jose
Mensajes: 679
Antigüedad: 22 años, 10 meses
Puntos: 0
Pregunta: Como generar una versión imprimible de una página html en PHP?

Requisitos: php4 o sup

Respuesta: aquí esta, esta en ingles pero es muy simple de entender, solo crea un archivo phpprint.php y pon el código adentro, lee las instrucciones y modifica lo que hay que modificar en tu página y listo

Código PHP:
<?php 

/*PHPrint - This file is phprint.php
Make any Page Printer Friendly! Version 2.0 - With error handling
Copyright by MikeNew.Net, Notice must stay intact
Any improvements to this script are welcome: [url]www.mikenew.net/contact.asp[/url] 
************
Legal: MikeNew.Net is not responsible for any damages caused
by use of this script. (Not likely that it will. Hasn't yet.)
This script will make your pages printer friendly. 
Optionally, it will strip images as well. (Instructions for that below)

// After installation, you can remove text from here down to the next: 8< ---->
// Back up/copy this file first.

1. Save this script in the root of the site for simplicity.
2. Place <!-- startprint --> somewhere in your HTML page where you consider 
it to be the start of printer friendly content, and <!-- stopprint --> goes at the end
of that same content.
3. You place a link to phprint.php anywhere on the HTML page (preferably outside the printed content,
like this: <a href="/phprint.php">Print this page</a>
- or however you like, just as long as you link to this script. */

// If you've already tested, you can remove the text from here up to the other: 8< ---->

//Do you want to strip images from the printable output?
// If no, change to "no". Otherwise, images are stripped by default.
$stripImages "yes";

//what's the base domain name of your site, without trailing slash? 
// Just the domain itself, so we can fix any relative image and link problems.
$baseURL="http://www.yoursite.com"

// That's it! No need to go below here. Upload it and test by going to yoursite.com/page.php
// (The page containing the two tags and a link to this script)
// -----------------------------------------------------

$startingpoint "<!-- startprint -->";
$endingpoint "<!-- stopprint -->";
// let's turn off any ugly errors for a sec so we can use our own if necessary...
error_reporting(0);
// $read = fopen($HTTP_REFERER, "rb") ... this line may work better if you're using NT, or even FreeBSD
$read fopen($HTTP_REFERER"r") or die("<br /><font face=\"Verdana\">Sorry! There is no access to this file directly. You must follow a link. <br /><br />Please click your browser's back button. </font><br><br><a href=\"http://miracle2.net/\"><img src=\"http://miracle2.net/i.gif\" alt=\"miracle 2\" border=\"0\"></a>");
// let's turn errors back on so we can debug if necessary
error_reporting(1);

$value "";
while(!
feof($read)){
$value .= fread($read10000); // reduce number to save server load
}
fclose($read);
$startstrpos($value"$startingpoint"); 
$finishstrpos($value"$endingpoint"); 
$length$finish-$start;
$value=substr($value$start$length);

function 
i_denude($variable) {
return(
eregi_replace("<img src=[^>]*>"""$variable));
}
function 
i_denudef($variable) {
return(
eregi_replace("<font[^>]*>"""$variable));
}

$PHPrint = ("$value");
if (
$stripImages == "yes") {
$PHPrint i_denude("$PHPrint");
}

$PHPrint i_denudef("$PHPrint");
$PHPrint str_replace"</font>"""$PHPrint );
$PHPrint stripslashes("$PHPrint"); 

echo 
"<base href=\"$baseURL\">";

echo 
$PHPrint
// Next line is invisible except to SE crawlers, please don't remove. Thanks! :)
echo "<br><a href=\"http://miracle2.net/\"><img src=\"http://miracle2.net/i.gif\" ";
echo 
"alt=\"miracle 2\" border=\"0\"></a>";
echo 
"<br/><br/>This page printed from: $HTTP_REFERER";
flush (); 
?>
  #57 (permalink)  
Antiguo 09/04/2003, 03:31
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 11 meses
Puntos: 17
Tema: Formato de texto

Pregunta: ¿Como puedo pasar un texto a mayúsculas/minúsculas?

Respuesta:

En el manual nos dirá que usemos strtoupper()/strtolower():

Código PHP:
<?
echo strtoupper("hola"); # HOLA
echo strtoupper("HOLA"); # hola
?>
Sin embargo:

Código PHP:
<?
echo strtoupper("hola tío"); # HOLA TíO
echo strtolower("HOLA TÍO"); # hola tÍo
?>
¿Como cambiamos la caja de los "carácteres extraños"?

Usando strtr()

Código PHP:
<?php
echo strtoupper("hola tío"); # HOLA TíO
echo strtolower("hola TÍO"); # hola tÍo

echo strtr(strtoupper("hola tío"), "àáâãäåæçèéêëìíîïðñòóôõöøùüú""ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ"); # HOLA TÍO
echo strtr(strtolower("HOLA TÍO"), "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ""àáâãäåæçèéêëìíîïðñòóôõöøùüú"); # hola tío

?>
Si sólo queremos poner la primera letra en mayúsculas, usaremos ucfirst():

Código PHP:
<?
echo ucfirst(strtolower("HOLA TÍO")); # Hola tÍo
echo ucfirst(strtr(strtolower("HOLA TÍO"), "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ""àáâãäåæçèéêëìíîïðñòóôõöøùüú")); # Hola tío
?>
__________________
M a l d i t o F r i k i

Última edición por Cain; 09/04/2003 a las 11:48
  #58 (permalink)  
Antiguo 10/04/2003, 10:50
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 23 años
Puntos: 1
Tema: Formularios

Pregunta: ¿Como paso valores entre varios formularios?

Respuesta:

Notas importantes: Usar array Super globales y el atributo method de la etiqueta form debe ser "post" aunque si cambiamos $_GET y el atributo "get" en la etiqueta form tabien debe funcionar.

Veamos un ejemplo:

Formulario1:


Código PHP:
         <form name="formEmpresa" method="post" action="registro3.php">        
        <
table width="60%" border="0" align="center" cellpadding="0" cellspacing="0">
          <
tr
            <
td width="32%"><font size="2" face="Arial, Helvetica, sans-serif">Puesto:</font></td>
            <
td width="68%"><font size="2" face="Arial, Helvetica, sans-serif"
              <
input name="puesto" type="text" id="puesto" size="40" maxlength="40">
              </
font></td>
          </
tr>
          <
tr>
            <
td><font size="2" face="Arial, Helvetica, sans-serif">Email oficina:</font></td>
            <
td><font size="2" face="Arial, Helvetica, sans-serif">
              <
input name="emailOficina" type="text" id="fax" size="40" maxlength="60">
              </
font></td>
          </
tr>
        </
table>
            <
p align="center">
              <
input name="continuarEmpresa" type="submit" id="registrar" value="Continuar">
            </
p>
        </
form

2do formulario:

Código PHP:
         <form name="formEmpresa" method="post" action="registro4.php">
        <?
            
foreach( $_POST as $key => $value ) {
                echo 
"<input type='hidden' name='".$key."' value='".$value."'>";
            }
        
?>
        <table width="60%" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr> 
            <td width="34%"><font size="2" face="Arial, Helvetica, sans-serif">Productos 
              que ofreces:</font></td>
            <td width="66%"><font size="2" face="Arial, Helvetica, sans-serif"> 
              <input type="text" name="nombre">
              </font></td>
          </tr>

        </table>
        <p align="center">
              <input name="continuarEmpresa" type="submit" id="registrar" value="Continuar">
            </p>
        </form>

Con lo anterior se iran creando campos hidden con todos los valores pasados del formulario 1 al 2. Y por ultimo en la ultima envio podemos recoger todos los valores con un simple $_POST["nombreCampo"]

Bueno es algo sencillo pero util, acabo de hacer esto para un portal y funciona muy bien

Saludos

Última edición por urjose; 10/04/2003 a las 12:30
  #59 (permalink)  
Antiguo 13/04/2003, 12:28
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 4 meses
Puntos: 2
Convertir el formato de las fechas en campos DATE en dia/mes/año

Tema: Bases de datos

Pregunta: ¿Como convertir el formato de las fechas en campos DATE a dia-mes-año?

Tenemos una tabla X, esa tabla contiene un campo DATE. Ese campo almacena una fecha mediante la función CURDATE. Esa función trabaja con el formato: año-mes-dia.

¿Cómo convierto el formato a: dia-mes-año cuando hago el echo()?

Respuesta: Sencillo. Simplemente hacemos un explode de la fecha y la dividimos justo por los guiones. De esa forma almacenamos cada una de las partes de la fecha en un array:

$var = explode('-',$variabledefecha);

Donde $variabledefecha corresponde a tu variable que contiene la fecha que queremos cambiar. Y luego, volvemos a unir el array en el orden dia-mes-año asi:

echo "$var[2]-$var[1]-$var[0]";

Y listo. El código completo queda asi:

$var = explode('-',$variabledefecha);
echo "$var[2]-$var[1]-$var[0]";

Otra forma sería usando una función propia de MySQL. Deberás crear un alias a tu campo y luego llamarlo por su alias. De esta forma:

$ssql = "SELECT DATE_FORMAT(campofecha,'%d/%m/%Y') as fechaok FROM tabla";
$result = mysql_query($ssql);

Donde fechaok es el alias de tu campofecha. Cuando vayas a hacer el echo() debes hacerlo por el alias ya formateada:

echo $row['fechaok'];
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)

Última edición por drcyber; 14/04/2003 a las 20:27
  #60 (permalink)  
Antiguo 14/04/2003, 09:50
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 4 meses
Puntos: 2
Insertar fecha actual en una tabla

Tema: Bases de datos

Pregunta: ¿Cómo inserto la fecha actual en uno de mis campos de mi BD?

Respuesta: Sencillo. Solo debes usar la función now(). Te quedaría asi:

$ssql = "INSERT INTO tabla (campo) VALUES (now())";
$rs = mysql_query($ssql);

__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
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.
Tema Cerrado

SíEste tema le ha gustado a 106 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 16:48.