miércoles, octubre 28, 2009

Redimencionar imagenes con PHP

Pues un problema más fue que al utilizar div en lugar de la etiqueta img, debia redimencionar una imagen, pues tuve que crear una imagen y aquí les dejo la función

function RedimensionarJPG($origen,$destino,$NewWidth,$NewHeight,$calidad)
{
list($width, $height) = getimagesize($origen);
$thumb = ImageCreateTrueColor($NewWidth, $NewHeight);
imagecopyresampled($thumb, imagecreatefromjpeg($origen), 0, 0, 0, 0, $NewWidth, $NewHeight, $width, $height);
imagejpeg($thumb,$destino,$calidad);
imagedestroy($thumb);
}



Donde:
$Origen es el lugar donde se encuntra tu imagen original
$destino es la carpeta donde se guardara tu imagen
$NewWidth ancho al cual quieres redimensionar
$NewHeight alto al que quieres redimensionar
$calidad calidad de la imagen de 0 a 100, recomiendo 100

ejemplo:
$archivo = "imgs/original/imagen1.jpg;";
$miniatura="imgs/destino/imagen2.jpg";
RedimensionarJPG($archivo,$miniatura,"250px","130px",100);


Espero sea de ayuda
Gracias por su lectura, agradecere tu comentario,
atte The Dzip.

Subiendo Archivo por FTP en PHP

Partiendo del Post anterior aquí les tengo uno más comleto, solo que este sube por FTP

// Primero creamos un ID de conexión a nuestro servidor
$cid = ftp_connect("127.0.0.1");
// Luego creamos un login al mismo con nuestro usuario y contraseña
$resultado = ftp_login($cid, "Prueba","pelos08");
// Comprobamos que se creo el Id de conexión y se pudo hacer el login
if ((!$cid) || (!$resultado)) {
echo "Fallo en la conexión"; die;
} else {
echo "Conectado.";
}
// Cambiamos a modo pasivo, esto es importante porque, de esta manera le decimos al
//servidor que seremos nosotros quienes comenzaremos la transmisión de datos.
ftp_pasv ($cid, false) ;
echo "
Cambio a modo pasivo
";
// Nos cambiamos al directorio, donde queremos subir los archivos, si se van a subir a la raíz
echo "Cambiado al directorio necesario";
// Tomamos el nombre del archivo a transmitir, pero en lugar de usar $_POST, usamos $_FILES que le indica a PHP
// Que estamos transmitiendo un archivo, esto es en realidad un matriz, el segundo argumento de la matriz, indica
// el nombre del archivo
$local = $_FILES['Archivo']["name"];
// Este es el nombre temporal del archivo mientras dura la transmisión
$remoto = $_FILES['Archivo']["tmp_name"];
// El tamaño del archivo
$tama = $_FILES['Archivo']["size"];
$type= $_FILES['Archivo']["type"];
echo "
$local
";
echo "$remoto
";
echo "subiendo el archivo...
";
// Juntamos la ruta del servidor con el nombre real del archivo
$ruta = "../img-vista/Original/" . $local;
$ruta1 = "../img-vista/Miniatura/".$local;
// Verificamos si no hemos excedido el tamaño del archivo
if ( ($tama > $_POST["MAX_FILE_SIZE"])){
echo "Este archivo excede el limite de tamaño
";
} else
{
if (!($type=="image/jpeg" or $type=="image/png" or $type=="image/gif" ))
{
echo "No es una imagen";
// Verificamos si ya se subio el archivo temporal
}
else
{
if (is_uploaded_file($remoto))
{
// copiamos el archivo temporal, del directorio de temporales de nuestro servidor a la ruta que creamos
copy($remoto, $ruta);
ConvierteJpeg($ruta,$type)
}
// Sino se pudo subir el temporal
else
{
echo "No se pudo subir el archivo " . $local;
}
}

}
echo "\nRuta: " . $ruta;
echo "\n".$nuevo;
//cerramos la conexión FTP
ftp_close($cid);
Header("Location: ../Formulario_Subida.php");


function ConvierteJpeg($ruta,$type)
{
if (!($type=="image/jpeg" or $type=="image/png" or $type=="image/gif" or $type=="image/x-png" or $type=="image/pjpeg"))
{
unlink($ruta);
return("er");
}
else
{
if ($type=="image/gif"){
$nuevo = str_replace("gif","jpg",$ruta);
$im=imagecreatefromgif($ruta);
$im=imagejpeg($im,$nuevo);
unlink($ruta);
return($nuevo);
}

if ($type=="image/jpeg" or $type=="image/pjpeg"){
$nuevo=$ruta;
$im=imagecreatefromjpeg($nuevo);
$im=imagejpeg($im,$nuevo);
return($nuevo);
}


if ($type=="image/png" or $type=="image/x-png"){
$nuevo = str_replace("png","jpg",$ruta);
$im=imagecreatefrompng($ruta);
$im=imagejpeg($im,$nuevo);
unlink($ruta);
return($nuevo);
}
}

}


Gracias por su lectura, agradecere tu comentario,
atte The Dzip.

Covertir imagenes GIF, JPEG o PNG en JPG

Pues me vi en la necesidad de poder convertir una imagen del indole que sea a JPG, debido a que necesitaba ahorrar espacion en el servidor, en este caso, cree una función que la realiza, he aquí en el código

y como siempre el magestuoso IE me da problemas, jajaja por lo cual tuve que hacer un echo de prueba, por lo cual les doy los siguientes datos

Tipo de Archivo IE Firefox
GIF image/gif image/gif
PNG image/x-png image/png
JPG image/pjpeg image/jpeg

con lo cual se crea esta función, donde necesitamos la ruta donde se encuntra la imagen y el formato de la misma, más adelante explicare como usarlo

function ConvierteJpeg($ruta,$type)
{
if (!($type=="image/jpeg" or $type=="image/png" or $type=="image/gif" or $type=="image/x-png" or $type=="image/pjpeg"))
{
unlink($ruta);
return("er");
}
else
{
if ($type=="image/gif"){
$nuevo = str_replace("gif","jpg",$ruta);
$im=imagecreatefromgif($ruta);
$im=imagejpeg($im,$nuevo);
unlink($ruta);
return($nuevo);
}

if ($type=="image/jpeg" or $type=="image/pjpeg"){
$nuevo=$ruta;
$im=imagecreatefromjpeg($nuevo);
$im=imagejpeg($im,$nuevo);
return($nuevo);
}


if ($type=="image/png" or $type=="image/x-png"){
$nuevo = str_replace("png","jpg",$ruta);
$im=imagecreatefrompng($ruta);
$im=imagejpeg($im,$nuevo);
unlink($ruta);
return($nuevo);
}
}

}


Modo de USO.
En este caso lo usaremos desde un formulario, y con un campo tipo FILE, por lo cual aremos


if($_FILES['field_13']['name']!=''){
$field_13_filename = "file_13_".date("sihdmY").substr($_FILES['field_13']['name'],strlen($_FILES['field_13']['name'])-4);
//con la siguiente linea se sube al servidor
if(move_uploaded_file($_FILES['field_13']['tmp_name'], "../../recibos/".$field_13_filename)){
//Se obtiene el formato o tipo de archivo
$type=$_FILES['field_13']["type"];
//se define la ruta donde se guardara la imagen, y que es donde se subio
$ruta="../../recibos/".$field_13_filename;
//usamos la funcion
$nuevo=ConvierteJpeg($ruta,$type);
}




Mucha suerte, espero les ayude,
Gracias por su lectura, agradecere tu comentario,
atte The Dzip.

Variables Globales en PHP

Hola Pues resulta que me pase la mañana peliando con PHP y el magestuoso IE6 jajajaja, pues si, resulta que en Firefox corria a la perfección por lo cual estuve pensando por que es que no se gaurdaba mi información al mandar el formulario con IE6, y la respuesta esta en las variables globales.

Resulta que cuando declaramos una variable fuera de cualquier función, pues es una variable global, más sin embargo no funciona igual que en otro lenguaje, pues hay que hacer referencia a dicha variable de la siguiente manera

$GLOBALS["Variable"]

realmente no lo crei necesario, pero usenlo para IE6, es una recomendación, ahora veran este codigo, en azul se encuentra la variable que es necesaria utilizar como global, repito que este problema solo sucedio en IE6, ya que en Firefox funciono a la perfección

include("subida/CovierteJpeg.php");
$where_form_is="http://".$_SERVER['SERVER_NAME'].strrev(strstr(strrev($_SERVER['PHP_SELF']),"/"));
$InMail;
$InMail1;
$InDB;
$InDB1;
session_start();
if( ($_SESSION['security_code']==$_POST['security_code']) && (!empty($_POST['security_code'])) ) {
// File upload handling
if($_FILES['field_13']['name']!=''){
$field_13_filename = "file_13_".date("sihdmY").substr($_FILES['field_13']['name'],strlen($_FILES['field_13']['name'])-4);
if(move_uploaded_file($_FILES['field_13']['tmp_name'], "../../recibos/".$field_13_filename)){
$type=$_FILES['field_13']["type"];
$ruta="../../recibos/".$field_13_filename;
$nuevo=ConvierteJpeg($ruta,$type);
$GLOBALS["InMail"]=$where_form_is."".$nuevo;
$GLOBALS["inDB"] = str_replace("../../","",$nuevo);
}else{die("File " . $_FILES['field_13']['name'] . " was not uploaded."); }
if ($nuevo=="er")
{
header("Location: error-subida.html");
exit;
}
}

// File upload handling
if($_FILES['field_22']['name']!=''){
$field_22_filename = "file_22_".date("sihdmY").substr($_FILES['field_22']['name'],strlen($_FILES['field_22']['name'])-4);
if(move_uploaded_file($_FILES['field_22']['tmp_name'], "../../cedulas/".$field_22_filename)){
$type1=$_FILES['field_22']["type"];
$ruta1="../../cedulas/".$field_22_filename;
$nuevo1=ConvierteJpeg($ruta1,$type1);
$GLOBALS["InMail1"]=$where_form_is."".$nuevo1;
$GLOBALS["inDB1"] = str_replace("../../","",$nuevo1);
}else{die("File " . $_FILES['field_22']['name'] . " was not uploaded."); }
if ($nuevo1=="er")
{
header("Location: error-subida.html");
exit;
}
}
include("configuration/config.inc.php");
$link = mysql_connect($db_host,$db_user,$db_pass);
if(!$link) die ('Could not connect to database: '.mysql_error());
mysql_select_db($db_name,$link);
/*
utf8_encode($string):Permite mostrar el contenido de la BD para un html
utf8_decode($string):Permite guardar los acentos en la BD
*/
$campo1=utf8_decode($_POST['field_1']);
$campo2=utf8_decode($_POST['field_2']);
$campo3=utf8_decode($_POST['field_3']);
$campo4=utf8_decode($_POST['field_4']);
$campo5=utf8_decode($_POST['field_5']);
$campo6=utf8_decode($_POST['field_6']);
$campo7=utf8_decode($_POST['field_7']);
$campo8=utf8_decode($_POST['field_8']);
$campo9=utf8_decode($_POST['field_9']);
$campo10=utf8_decode($_POST['field_10']);
$campo12=utf8_decode($_POST['field_12']);
$campo14=utf8_decode($_POST['field_14']);
$campo15=utf8_decode($_POST['field_15']);
$campo16=utf8_decode($_POST['field_16']);
$campo17=utf8_decode($_POST['field_17']);
$campo18=utf8_decode($_POST['field_18']);
$campo19=utf8_decode($_POST['field_19']);
$campo20=utf8_decode($_POST['field_20']);
$campo21=utf8_decode($_POST['field_21']);
$query = "INSERT into `".$db_table."` (field_1,field_2,field_3,field_4,field_5,field_6,field_7,field_8,field_9,field_10,field_11,field_12,field_13,field_14,field_15,field_16,field_17,field_18,field_19,field_20,field_21,field_22) VALUES ('" . $campo1 . "','" . $campo2 . "','" . $campo3 . "','" . $campo4 . "','" . $campo5 . "','" . $campo6 . "','" . $campo7 . "','" . $campo8 . "','" . $campo9 . "','" . $campo10 . "','" . $_POST['field_11'] . "','" . $campo12 . "','" . $GLOBALS["inDB"] . "','" . $campo14 . "','" . $campo15 . "','" . $campo16 . "','" . $campo17 . "','" . $campo18 . "','" . $campo19 . "','" . $campo20 . "','" . $campo21 . "','" . $GLOBALS["inDB1"]. "')";
mysql_query($query);
mysql_close($link);

mail("dzipiri@gmail.com","Información de registro","Estos son tus datos de registro:

Apellido Paterno: " . $_POST['field_1'] . "
Apellido Materno: " . $_POST['field_2'] . "
Nombre(s): " . $_POST['field_3'] . "
Correo Electronico: " . $_POST['field_4'] . "
Organización: " . $_POST['field_5'] . "
Teléfono: " . $_POST['field_6'] . "
Estudios: " . $_POST['field_7'] . "
Tipo de Asistente: " . $_POST['field_8'] . "
Estado: " . $_POST['field_9'] . "
Ciudad: " . $_POST['field_10'] . "
Fecha de Nacimiento: " . $_POST['field_11'] . "
No. Recibo: " . $_POST['field_12'] . "
Recibo Bancario: ".
$GLOBALS["InMail"] . ")
Razón Social: " . $_POST['field_14'] . "
Dirección Fiscal: " . $_POST['field_15'] . "
Código Postal: " . $_POST['field_16'] . "
RFC: " . $_POST['field_17'] . "
Télefono: " . $_POST['field_18'] . "
Fax: " . $_POST['field_19'] . "
Ciudad: " . $_POST['field_20'] . "
Estado: " . $_POST['field_21'] . "
Cédula Fiscal: ".
$GLOBALS["InMail"] . ")


");

header("Location: ../../confirm.html");
}
else {
header("Location: error-codigo.html");
}


Gracias por su lectura, agradecere tu comentario,
atte The Dzip.

Guardar acentos en una base de datos con PHP

Hola que tal, esta ves se me presento un problema, resulta que mi intensión era poder guardar la información desde un formulario en un Base de datos, todo iba perfecto hasta que nos dimos cuenta que los acentos no se guardaban, en este caso encontre una solución, de la cual espero les sirva, y si conocen una mejor posteen, gracias

utf8_encode($string):Permite mostrar el contenido de la BD para un html
utf8_decode($string):Permite guardar los acentos en la BD

Por tanto, lo que es necesario hacer es:

$campoX=utf8_decode($_POST['campoX']);

$query = "INSERT into `".$db_table."` (field_1) VALUES ('" . $campoX . "')";

realmente muy sencillo, pero funciona.

Gracias por su lectura, agradecere tu comentario,
atte The Dzip.

lunes, octubre 26, 2009

Servidor FTP en Fedora 10

Servidor FTP Fedora Core 10













































Instalar un servidor FTP en Fedora es de lo más sencillo, sin embargo vamos hacerlo de la mejor manera para que los usuarios solo tengan acceso a la carpeta especifica, para ello se ha escrito esta pequeña guiá de referencia, siga los pasos y éxito.

1.- Debe abrir una ventana de consola, podrá encontrarla de las siguientes dos formas:
a)Escriba la combinación de teclas Alt + F2, se abrirá la ventana de ejecución, escriba como en la imagen y de Ejecutar

b) Con el uso del modo gráfico, siguiendo esta ruta: Menú Inicio --> Herramientas del Sistema-->Terminal.

Entonces inicia la terminal, con la cual vamos a trabajar


2.- El paso siguiente es Loguearse como SuperUsuario, esto para poder realizar instalaciones o configuraciones, es muy sencillo, lo único que debes hacer poner los comandos como se muestra en la imagen, al poner su darás Intro o Enter, aparecerá la leyenda Contraseña: aquí debes escribir la contraseña de root o Administrador y luego dar Enter.

3. Ahora si se procede a ejecutar el comando de instalación, recuerde que el parámetro -y indica que aceptamos las condiciones, sea esta descarga e instalación. El comando es completo es el siguiente: yum install -y vsftpd

Ya que ha quedado instalado el servidor FTP, realizaremos unas configuraciones muy útiles planteando lo siguiente.



Usuario: Prueba
Acceso a su directorio: /var/www/html/Prueba
Sin shell en el sistema y en un entorno chroot
Pass: sxb34H.-

Usuario: CancunProjects
Acceso a su directorio: /var/www/html/CancunProjects
Sin shell en el sistema y en un entorno chroot
Pass:rh0+.Tj

Usuario: Administrador
Acceso a su directorio: /var/www/html
Sin shell en el sistema y en un entorno chroot
Pass:J&j.87k+L




4. Primero se va crear un grupo al cual se le pondrá el nombre FTP, puede ser cualquiera

5. Se crean los usuarios con las características antes mencionadas, esto se realiza con el comando useradd, usando los siguiente parametros -g que indica el grupo, -d el directorio y -c se utiliza para especificar el archivo de comentario de campo para la nueva cuenta.


6. Bien, para que funcione debemos crear contraseña a cada usuario, por lo cual usaremos el comando passwd

7.- Ahora crearemos un Shel Fantasma, vamos a crear el directorio /bin/ftp

8. A continuación se debe editar el archivo shells que se encuentra en la carpeta etc y agregar el directorio, de la siguiente manera.

Aparecerá el Gedit con el archivo shells ya cargado agregá la linea que se muestra, guarde y cierre par continuar


9. Ahora se debe configurar el archivo que se encuentra en /etc/passwd, buscar donde se haya agregado nuestros usuarios y agregar la carpeta como se muestra a continuación.

10. Ahora a configurar el programa, para ello debemos abrir el archivo de configuración de vsftpd que se encuentra en /etc/vsftpd/vsfypd.conf
Aquí esta lo que debe ir en el archivo:


# Example config file /etc/vsftpd/vsftpd.conf
#Escuchando
listen=YES
# conexiones anonimas
anonymous_enable=NO
#
# Acceso Local
local_enable=YES
#
# Escritura Local
write_enable=YES
#
#Configuracion UMASK
local_umask=003
#
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
#
# Se descomenta esto para crear una jaula
chroot_local_user=YES
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
#
# Debian customization
# secure_chroot_dir=/var/run/vsftpd
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
#rsa_cert_file=/etc/ssl/certs/vsftpd.pem
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=NO

11. A continuación creamos el fichero vsftpd.chroot_list el cual tendrá la lista de usuarios que no tendrán acceso al servidor:



12. Volcamos los datos a este fichero desde etc/password con el comando.
cat /etc/passwd | awk -F: '{ print $1 }' > /etc/vsftpd.chroot_list



Esto nos genera un fichero con los login de usuarios del sistema del cual quitamos los que si queremos que tengan acceso y los ponemos en el fichero /etc/vsftpd.user_list.

Esto con Gedit, abra ambos archivos y elimine los usuario de chroot_list ya que aquí no podrán tener acceso y paselos a user_list. Con esto queda configurado su servidor FTP

jueves, octubre 01, 2009

Instalar HTTP (Apache) en Fedora 10

Servidor HTTP
Fedora Core 10

A continuación se muestra como instalar el http en Fedora Core 10, es un manual muy sencillo, sin embargo va de la mano con el FTP.

Generalmente el servidor Apache que provee el servicio de Web ya viene instalado en el Fedora Core 10, sin embargo en caso de no ser así, debe seguir los siguientes pasos.

1.- Debe abrir una ventana de consola, podrá encontrarla de las siguientes dos formas:
a)Escriba la combinación de teclas Alt + F2, se abrirá la ventana de ejecución, escriba como en la imagen y de Ejecutar


b) Con el uso del modo gráfico, siguiendo esta ruta: Menú Inicio --> Herramientas del Sistema-->Terminal.

Entonces inicia la terminal, con la cual vamos a trabajar

2.- El paso siguiente es Loguearse como SuperUsuario, esto para poder realizar instalaciones o configuraciones, es muy sencillo, lo único que debes hacer poner los comandos como se muestra en la imagen, al poner su darás Intro o Enter, aparecerá la leyenda Contraseña: aquí debes escribir la contraseña de root o Administrador y luego dar Enter.

3. Primero vamos a probar si ya esta instalado el HTTP en el sistema, por lo cual para activarlo se pondrá el siguiente comando: chkconfig –level 2345 httpd on de marcar un error realiza el paso siguiente, sino pasa al numero 5.

4. En caso de que no se haya marcado un error el paso anterior, deberas instalar el servicio, por lo cual basta con escribir el comando yum install -y httpd con esto quedará instalado

5.- Muy bien ahora vamos a iniciar el servicio, claro hay que mencionar que existen tres comandos para usar este servicio start=Iniciar, stop:parar y restart=reiniciar; el comando es el siguiente: service httpd start

6. Si todo a resultado correcto es hora de probar el resultado en tu navegador preferido, en este caso usamos Firefox, debes escribir la dirección http://localhost o http://127.0.0.1 ya que es la que tiene por defecto el archivo de configuración

Para concluir, mencionaremos lo siguiente, el archivo de configuración del apache se encuentra en /ect/httpd/conf/httpd.conf en dicho archivo usted puede modificar las siguientes directivas:

ServerRoot. Define el directorio donde se encuntran los archivos de configuración, no lo mueva
DocumentRoot. Define la carpeta donde se alojaran los archivos que se van a mostrar, la carpeta por defecto es /var/www/html, sin embargo la puede cambiar.
Maxclients. Numero maximo de conexiones simultaneas
Listen. Permite enlazar Apache a determinadas IP o puertos, generalmente escucha en el 80

El problema lo encontraremos al intentar escribir información en la carpeta /var/www/html por consiguiente hay que poner permisos de usuario, para ello podemos usar el comando chmod como se explica a continuación:

u usuario al que pertenece el archivo
o otros usuarios

+ agregar permisos
- quitar permisos
= igualar permisos

x permisos de ejecución
w permisos de escritura
r permisos de lectura

Ahora bien en que cada directorio puede ser un dominio y pensando en que sobre esa carpeta se va trabajar y enviar información mediante FTP, entonces es mejor crear una nueva carpeta por cada dominio, como se muestra en las siguientes imagenes.
Para hacerlo debe estar como SuperUsuario, y acceder a la carpeta /var/www/html mediante el comando cd, luego crear el directorio con mkdir, puede verificar que se a creado la carpeta con el comando dir y finalmente establezca que otros usuarios a parte del propietario que es root puedan tener acceso a esa carpeta.


Nota: Recuerde que el archivo que se debe poner para que se ejecute por defecto debe llevar por nombre index y debe ser de extensión htm, html o php.



Gracias por su lectura, agradecere tu comentario,
atte The Dzip.