martes, enero 24, 2012

CSS Inquebrantable

Hola, cumpliendo lo antes dicho aquí me encuentro escribiendo, gracias a que estoy de vacaciones en la espera de mi primer hija, ojala que ya nazca que me tiene con ansias.
En fin, el tema de hoy esta basado en crear una maquetación lo más estable posible para todos los navegadores. La suma de los mismo da la dimensión total real del objeto en navegadores estandar (Firefox, Chrome, Safari) con una cierta variación en IE6, o IE7+ variación no estandar, esto lo comentaremos en el uso de padding y margin.

Un objeto tiene Padding, Margen y Borde, así como ancho y alto, elementales para poder mantener todo en su lugar. Como se muestra en la siguiente imagen.

Fig1. Distribución de un objeto en CSS
Uso de Margen

Descripción: es el espacio que separa a un objeto de otro.
propiedad CSS: margin
Formas de Uso:
margin: arriba derecha abajo izquierda;
ejem: margin:5px 2px 3px 6px;

margin: arriba izquierda abajo. ejem: margin:3px 2px 5px; margen superior 3px, margen izquierdo 2px y margen inferior 5px.
margin: arribaabajo izqder; ejem: margin:5px 7px; Esto indica que el margin superior e inferior sera de 5px mientras que el izquierdo y derecho de 7px.

margin: todos; ejem; 5px; Indica que el margen en todos lados será de 5px; 
Además se puede manipular de manera independiente.
margin-left, margin-right, margin-top. margin-bottom. izquierdo, derecho, superior e inferior respectivamente.
Comportamiento: Se suma al Ancho ó Alto del objeto en todos los navegadores.

Notas. El margen es tomado doble por IE6 ó IE7+ con variacion no estandar, así que se debe tener mucho cuidado pues el margen es tomado doble, por lo cual existen varios metodos para contrarestar este comportamiento, en lo personal hago uso de las siguientes:

Suponiendo un margen izquierdo de 6px;

display:inline-block;
margin-left:6px;

En el ejemplo anterior, agrego un display:inline-block; indica el comportamiento del objeto, en su mayoría esto siempre funciona, pero si acaso falla existe el siguiente:


display:inline-block;
margin-left:6px;
_margin-left:3px;


Además de incluir el display: Se agrega el _margin-left. esto indica que solo en IE6 será leida dicha regla, así que ahí ajustamos para que se vea de la misma manera que en Firefox.


Uso de Padding

Descripcion: Es el espacio que existe entre el limite del objeto y donde inicia el contenido del mismo.
Propiedad CSS: padding
Formas de Uso:
margin: arriba derecha abajo izquierda;
ejem: margin:5px 2px 3px 6px;

padding: arriba izquierda abajo. ejem: padding:3px 2px 5px; margen superior 3px, margen izquierdo 2px y margen inferior 5px.
padding: arribaabajo izqder; ejem: padding:5px 7px; Esto indica que el margin superior e inferior sera de 5px mientras que el izquierdo y derecho de 7px.
padding: todos; ejem; 5px; Indica que el margen en todos lados será de 5px; 
Además se puede manipular de manera independiente.
padding-left, padding-right, padding-top. padding-bottom. izquierdo, derecho, superior e inferior respectivamente.

Comportamiento: Se suma en Ancho ó Alto en navegadores estandar (Firefox, Chrome y Safari, IE7+), y se Resta en IE6 y IE7+ variacion no estandar. 

Notas: El padding resulta ser un poco más estable, son objetos de bloque o de línea, no así con tablas, Expliquemos su uso en los diferentes navegadores. supongamos que necesitamos un div de 350 x 220 px, con 10px de padding en cada lado.


Para Navegadores Estandar:
width:330px;
height:200px;
display:inline-block;
padding:10px;


Para IE6 ó IE7+ variación no estandar:
width:330px;
_width:350px;
height:200px;
_height:220px;
display:inline-block;
padding:10px;


Uso de Bordes 

Descripción: Muestra una franja visible al rededor del objeto.   
Propiedad CCS: border
Formas de uso
border: ancho tipo color;
ejem: border:5px solid #FF0000;
El resultado es un borde de 5px con el estilo solido en color rojo.
A diferencia de los margenes y paddings; los bordes se definen solamente de dos formas: todos o uno especifico, así como sus propiedades por separado.
border-left: 5px solid #FF0000; borde izquierdo
border-right: 5px solid #FF0000; borde derecho
border-top: 5px solid #FF0000; borde superior.
border-bottom: 5px solid #FF0000: borde inferior.
border-top-style: solid; estilo del borde superior.
border-bottom-style: solid; estilo del borde inferior.
border-left-style:solid; estilo del borde izquierdo.
border-right-style:solid; estilo del borde derecho.
border-top-color: #FF0000; color del borde superior.
border-bottom-color: #FF0000; color del borde inferior.
border-left-color: #FF0000; color del borde izquierdo
border-right-color: #FF0000; color del borde derecho.
Los diferentes estilos de borde que son aceptados en todos los navegadores son:

  • solid
  • dotted
  • double
  • dashed
  • groove
  • ridge
  • inset
  • outset

Comportamiento: inestable con tablas pero muy estable en todos los navegadores en objetos de bloque como los divs.


Notas. Recuerda que el borde se suma al tamaño definido en width y height del objeto.


Si queremos que un objeto mida 750px por 580px, ancho alto respectivamente, y es necesario un padding izquierdo de 10px y un borde de 3px, además de un margen derecho de 2px, y padding general de 5px. Como se hará el CSS. Tomando en cuenta las notas anteriores esto se definiría así:


Para Navegadores estándar:
ancho=ancho total - padding izquierdo - padding derecho - borde izquierdo - borde derecho- margen izquierdo - margen derecho.
width=750px-10px - 5px -3px - 3px - 0px -2px;
width:727px;


Para IE6 ó IE7+ variación no estándar.
ancho= 750 - borde-izquierdo - borde - derecho - margen izquierdo - margen derecho.
width=750px - 3px - 3px - 0px - 2px;
width:742px;


Mientras que el alto estará de la siguiente manera para navegadores estandar:
alto= alto total - borde superior - borde inferior - margen superior - margen inferior - padding superior - padding inferior;
height=580px - 3px - 3px - 0px  - 0px - 5px - 5px;
height:564px;


En tanto que en IE6 ó IE7+ variación no estándar:
alto=alto total - alto total - borde superior - borde inferior - margen superior - margen inferior;
height=580px - 3px - 3px - 0px - 0px;
height:574px;


Una vez calculado el ancho y alto aremos el css general.


Navegadores estándar:
div.contenido { 
 width:727px; _width:742px;
 height:564px; _height_574px;
 display:inline-block;
 overflow:hidden;
 padding:5px; padding-left:10px;
 margin: 0px; margin-right:2px;
 border:3px solid #FF0000;
}
En esta ocasión el overflow: hidden; nos sirve para mantener el contenido dentro, y que si este excede el tamaño definido en ancho y alto no se muestra, es optimo para evitar desbordamientos.


Uso de Overflow
El overflow indica el comportamiento que tendrá el objeto contenedor respecto al contenido del mismo, si se fuerza y solo se muestra en un ancho y alto establecido, o si mostrará barra de desplazamiento, también ayuda a contener a objetos flotantes (aquellos con propiedad float). Los tipos de comportamiento son:


visible. El contenido se sale del contenido si este excede el tamaño, valor default.
hidden: El contenido solo se muestra dentro del contenedor, sin exceder el tamaño, también ayuda a contener a elementos flotantes.
scroll: Siempre se muestran las barras de desplazamiento.
auto: Muestra las barras según sea necesario; es decir si el contenido no se excede se muestra normal, si se excede en ancho se muestra la barra inferior. Y si se excede en alto se muestra la barra derecha de desplazamiento. Finalmente si se excede en ancho y alto se muestran ambas barras de desplazamiento.


Uso de float
La propiedad float permite, flotar elementos, hacia la derecha o hacia la izquierda o quizás eliminar un float que esta por herencia.
float: left;  /*Flota el elemento a la izquierda*/
float:right; /*flota el elemento a la derecha*/
float:none; /*Elimina el float*/


Nota: Esto puede ser útil cuando tenemos varios objetos seguidos uno de otro.
digamos que tenemos un espacio de 750px y queremos dos objetos seguidos uno de 400px y otro de 300px, con una separación de 50px. Esto lo podemos resolver de dos formas.



objeto uno


objeto dos


Forma 1.
div.contenedor { width:750px; overflow:hidden; }
div.contenedor .uno { width:400px; float:left; oveflow:hidden; }
div.contenedor .dos { width:300px; float:left; oveflow:hidden; display:inline-block; margin-left:50px; }


Forma 2

div.contenedor { width:750px; overflow:hidden; }
div.contenedor .uno { width:400px; float:left; oveflow:hidden; }
div.contenedor .dos { width:300px; float:right; oveflow:hidden; }



Ambas formas dan el mismo resultado, depende del acomodo que tenga el encargado de la maquetación, ahora veremos el clear, esté nos permite trabajar en casos más específicos combinando el float


Uso de clear
El clear como su traducción literal lo dice sirve para limpiar. Pero, ¿Qué limpia?. Limpia los objetos flotantes, supongamos que en el ejemplo anterior no importa que sobre los 50px, y queremos un objeto de 50px en la parte inferior junto con otro de 650px, Los objetos flotantes por si solos mientras que haya espacio tienden a colocar uno tras otro los objetos, solo hay salto de línea cuando ya no alcance el tamaño. Para resolver dicho problema usaremos una de las siguientes tres opciones que nos presenta el clear.
left. limpia el flotante en izquierda.
right. limpia el flotante en derecha
both. limpia el flotantes en ambos lados.
none. no limpia nada, esto en caso de eliminar la propiedad por herencia.


Entonces tendremos una estructura de la siguiente manera:




objeto uno


objeto dos


objeto dos


objeto dos







div.contenedor { width:750px; overflow:hidden; }
div.contenedor .uno { width:400px; float:left; oveflow:hidden; }
div.contenedor .dos { width:300px; float:left; oveflow:hidden; }
div.contenedor .dos { width:50px; float:left; oveflow:hidden; clear:left; }
div.contenedor .dos { width:700px; float:left; oveflow:hidden; }




Uso de display
El display indica como se comporta el objeto a la hora de mostrarse. Los distintos valores son:

  • inline
  • block
  • list-item
  • run-in
  • inline-block
  • table
  • inline-table
  • table-row-group
  • table-header-group
  • table-footer-group
  • table-row
  • table-column-group
  • table-column
  • table-cell
  • table-caption
  • none
  • inherit












Sin embargo las más usadas son:
none. no se muestra el objeto.
inline. para listas
block. para que objetos que se comportan como objeto de línea, se comporten como un blouqe, tales como las a, p, span, label, etc.
inline-bloque. Objetos que tienen un comportamiento de bloque, en listas, además sirve para igualar el margen en todos los navegadores.


Uso de position
La propiedad position ayuda a establecer el enfoque del objeto, como sera su posición, por default estatica. Estas son las diferentes posiciones.
Fig2. Posiciones. Elemento tomado de www.cssblog.es. click a imagen para mayor referencia.
Bien tomando en cuenta esta tabla, debo mencionar que los objetos que están en relative sirven de base para un objeto que esta en absolute. Además que las posiciones deben establecerse con las propiedades left, top, botttom o right.





hey




Veamos que pasa con estas dos versiones de CSS
Forma 1
div.contenedor { width:750px; height:350px;  }
div.contenedor .absoluto { width:50px; height:50px; background:red; color:#FFF; line-height:50px; font-size:14px; font-family:Arial, Verdana, "Times New Roman", font-weight:bold; position:absolute: left:10px; top:10px;  }


Forma 2

Forma 1
div.contenedor { width:750px; height:350px; position:relative;  }
div.contenedor .absoluto { width:50px; height:50px; background:red; color:#FFF; line-height:50px; font-size:14px; font-family:Arial, Verdana, "Times New Roman", font-weight:bold; position:absolute: left:10px; top:10px;  }



Como veras el comportamiento deseado se encuentra en la forma dos, y es la correcta.


Notas Finales. Recuerda todos estos tips, son muy valiosos y si tienes dudas, pregunta y con gusto te respondo, no olvides agregarme.


Por ultimo estas propiedades utiles.
font-size. tamaño de la fuente
font-family. estilo de la fuente (verdana, arial u otra)
font-weight. Estable si estará negrita (wight), normal u 700, 300 la fuente en grosor.
line-height. El tamaño del interlineado.
text-align. la alineación del contenido. left, right, center o justify.
background. relleno del objeto
background: color imagen repetir-imagen posición-horizontal posición-vertical;
background: #FFF img(../img/fondo.png) no-repeat left top;
background-position. posición del fondo si es imagen
background-color. color de fondo
background-image. fondo de imagen
background-repeat. comportamiento al repetir imagen


Si deseas alinear un objeto te recomiendo esta forma.



hola mundo



div.contenedor { width:1200px; overflow:hidden; text-align:center; font-size:12px; font-family:Arial, Verdana, Tahoma; }
div.contenedor centrar { margin:0px auto; width:960px; height:800px; background:red; }


Saludos.


Sigueme: @dzipiri
o en http://www.facebook.com/JulianTunKu
http://www.linkedin.com/in/juliantun

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

domingo, enero 15, 2012

Herramientas indispensables para el desarrollo Web

Hola Amigos, que puedo decir después de tanto tiempo ausente. Les contaré que llevo 2 años en desarrollo Web basado en HTML, JS y CSS, he adquirido grandes conocimientos los cuales aprovechando estoy de vacaciones me gustaría compartir.

Herramientas generales.

Color Cop

Esta herramienta es muy útil para selección de colores, ya que es una pequeña ventana sobrepuesta, solo basta con arrastrar la pipeta para seleccionar el color de cualquier ventana y automaticamente lo copiara, la desventaja es que es solo para Windows, la recomiendo ya que agiliza esta tarea, que generalmente se hacia con ColorZilla para Firefox.

Notepad++

El Id para desarrollo queda a gusto de cada quien, sin embargo uno de mis favoritos es Notepad++, Fácil de instalar, ligero y rápido, colorea sintaxis de HTML, JS, CSS y más, lo recomiendo altamente. 

Herramientas de desarrollo web para Firefox

Firebug

Esta herramienta es muy completa para desarrolladores, muy completa, con inspeccionador de CSS, JS, HTML, RED entre otros. La recomiendo pues ayuda a verificar la maquetación. insertar css, así como JS.

Measure It

Esta funje como regla, ayuda a medir, para alinear objetos es útil, sin embargo, en lo particular casi no lo utilizo, pero lo comento por si alguien lo necesita.


Screen Capture Elite

Ayuda a Capturar pantalla, muy útil para esos pantallazos que aveces se necesitan en juntas, además de que lo acabo de descubir pues yo usaba Sreen Grab, sin embargo con las nuevas versiones de Firefox este dejo de funcionar.

Bien estas son las que considero más utiles para lo que desarrollo hasta el momento, si tienes otra no dudes en comentar y recomendar, hagamos una comunidad de conocimientos.


Herramientas de desarrollo Web para Internet Explorer

Internet Explorer trae herramientas para desarrolladores Web ya incluidas, sin embargo no son tan buenas como el Firebug, basta con presionar F12 para que se muestre la barra de desarrollo. tiene explorador DOM, manipulación de HTML, CSS y JS, sin embargo he aquí algunas herramientas que me han servido.


CompanionJS

Esta herramienta indica donde hay un error en JS, en lo particular me gusta utilizar y probar los scripts en IE, ya que la conbinación de IE (suceptible a errores de JS) y CompanionJs (buena en indicar el error línea y posible falla) hacen mejor el ambiente de pruebas.

DebugBar

Complementa la selección del explorador DOM de IE.

IETester

Ayuda a dar una idea del renderizado de diversas versiones de IE.

Notas.
-Mi recomendación para verificar estilos y maquetación que se genera al vuelo con JavaScript o JQuery, es realizar los cambios requeridos hasta el punto que se desea revisar, luego activar la barra de IE (F12).
-Recuerda que tanto IE Tester como las diversar combinaciones de Renderizar con la barra de IE no es exacto a como se vería el render en la versión original.
-Revisa todas las combinaciones de renderización IE8 IE8, IE8 no estandar.


No comento sobre más herramientas ya que es muy probable que si funciona en IE y Firefox funciona en todo lo demás, pero también hay que revisar en chrome y si se ve bien el es seguro que estará bien en Safari y Opera.


El siguiente tema será. Creando CSS inquebrantable.


Y te recuerdo cometa y comparte, 


Sigueme: @dzipiri
o en http://www.facebook.com/JulianTunKu
http://www.linkedin.com/in/juliantun


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

domingo, octubre 09, 2011

Desarrollo Web

Actualmente estoy desarrollando para sitios web, pido una disculpa por los enlaces de código rotos, se encontraban alojados en un servidor el cual perdí; así mismo los archivos en el host.

La tecnología esta enfocada actualmente a un ambiente web, los sistemas de escritorio se van rezagando cada vez más, el futuro esta en las interconexiones y servicios web. Sin embargo es claro que no dejará de existir una terminal y el software de configuración.

Tecnologías como .Net de Microsoft, PHP, PERL, Java, entre otros se perfilan como base para el futuro del desarrollo Web en servidores.

Sin embargo no son menos importantes los lenguajes interpretados o aquellos que son de lado de cliente. Tales como JavaScript, y los poderosos FrameWorks badados en este lenguaje.

En lo personal utilizo jQuery; este poderoso Framework permite realizar acciones de una manera muy sencilla, mediante selectores y acciones.

Solo basta con cargarlo y hacer uso de el en el sitio web.



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

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.