11 Essential Reads for Photographers for the New Year

Category:Wikipedia requested photographs of ph...
Image via Wikipedia

11 Essential Reads for Photographers for the New Year.

Error 404 personalizado – Apache Tips, PHP Tips

Deutsch: Bildschirmfoto eines 404-Fehlers bei ...
Image via Wikipedia

Una de las maneras de obtener información del servidor donde tenemos alojada nuestra web es solicitando una pagina que no exista y así nos devuelva la pagina
que tiene el servidor por defecto de pagina no encontrada en la cual suele venir el modelo versión y demás detalles. Una solución rápida para esto es crear
nuestra pagina de error 404. Para ello tendremos que editar el fichero .htaccess en la raíz de nuestra pagina web y poner lo siguiente:
Nota: Consideramos que el servidor web es apache

ErrorDocument 404 /404.php

Con esto le estamos diciendo que cuando se produzca un error 404 nos muestre la pagina 404.php
Dicha pagina la podemos poner como queramos y el mensaje que queramos.
Otra opción que tenemos, por si no queremos hacer una pagina de error es pasarle directamente el mensaje a la configuración

ErrorDocument 404 "Lo sentimos la pagina web solicitada no existe"

Lo mismo que con el 404 ( pagina no encontrada ) lo podemos hacer con otros codigos como el 403 y demás.

Ahora bien, hay un caso, que tenemos que tener cuidado, pongamos que hacemos la típica aplicación en la cual tenemos que estar registrados para acceder a las secciones y queremos evitar
que nos accedan directamente a las paginas. La programación de la cabecera de los ficheros podría ser

if ( session_id != null ) {
    session_regenerate_id();
} else {
    session_start();
}
if (!$_SESSION['auth']) { 
// Redirección a la pagina
    header("Location:404.php"); // Redirigimos a la pagina de error o a la que queramos
    exit(0);
}

Imaginemos que queremos crear una función para no tener que escribir todo esto en cada cabecera, y lanzamos esa función en cada pagina, y pensamos que tenemos que cambiar la ruta del
header para cada sección. A la vez pensamos que hemos hecho la redirección 404 en el .htaccess como a continuacion:

header("HTTP/1.0 404 Not Found"); // Esta manera
header("Status: 404 Not Found"); // O esta manera

Y decimos mira mando un header de 404, este me lo interpreta el .htaccess y me manda a la pagina
seleccionada… ERROR eso no funciona, y para colmo decir que no necesitaríamos hacer nada mas ya que esta funcionaria dentro de las carpetas, siempre y cuando no existiera la pagina 404.php, y si no ahí va un truco, que el header apunte a notfound.html, esta va a ser una pagina que no crearemos en ningún sitio, el header la llamara, como no existe hará que el .htaccess lance la pagina 404.php que tenemos en la raíz

+ Info

Solucionar error session_start – header already sent – PHP:MySQL Tips

The PHP logo displaying the Handel Gothic font.

Os suena este error:

warning: session_start()[function.session-start]:cannot send session cache limiter – header already sent (output started at ….

De primeras tenemos que el session_start hay que ponerlo al principio de todo, fuera de la sección html, a veces el error viene por otro lado, la otra posibilidad

suele suceder cuando escribimos el session_start() en un fichero en el cual ya se ha iniciado la sesión en otro punto, como por ejemplo tenemos un fichero con funciones

el cual incluimos en otro fichero en el cual hemos puesto en la cabecera el session_start() y para proteger el fichero de funciones ponemos también el session_start(), tenemos

que ponerlo en los dos sitios si o si. Pues bien para solucionar esto me he creado una pequeña función, la cual pongo en el principio de mis ficheros php que chequea si se ha iniciado la sesión, si es asi regenera el id y si no pues la inicia.

function checkSession() {
if ( session_id() != null ){
session_regenerate_id();
} else {
session_start();
}

Llamo a la función en las cabeceras, si el session_id no es nulo se regenera, es decir la sesión esta iniciada, si no se inicia.

Saneando inputs – PHP:MySQL Tips

Como bien dice el mantra filter input – escape output
Una de las maneras que tenemos para filtrar los valores que nos llegan antes de usarlos, por ejemplo en una consulta mysql es por medio de la función mysql_real_escape_string($string, $link).
He desarrollado una pequeña función la cual si le pasamos un array o un string nos lo filtra. Esta función me es muy útil cuando envió a una pagina o bien vía $_GET o bien $_POST.

function sanitize( &$vars ) {
    global $con; // identificador de la conexion mysql
    if ( is_array( $vars ) ) {
        foreach ( $vars as &$var ) {
            mysql_real_escape_string( $var, $con );
        }
    } elseif ( is_string( $vars ) ) {
        mysql_real_escape_string( $vars, $con );
    }
}
// Aquí llamamos a la función - ejemplo
if( isset( $_GET ) ) {
    sanitize( $_GET );
}
if ( isset( $_POST ) ) {
    sanitize( $_POST );
}

De esta manera si tenemos un fichero con funciones ponemos esta y llamamos a la función en las cabeceras de los ficheros donde recibamos datos y cuando los tratemos ya los tendremos saneados para trabajar con ellos.
+Info: http://es2.php.net/manual/en/function.mysql-real-escape-string.php

Solución al error Asigment in condition – PHP:MySQL Tips

Los que desarrollamos con Zend Studio o con Eclipse y nos da por abrir proyectos antiguos, vemos que se nos empieza a quejar de errores en nuestro codigo antiguo. Uno de estos errores es el de ‘Asigment in condition’que viene a decir que estamos asignando un valor en una condicional.
Veamos el ejemplo.
Los que somos de la vieja escuela de PHP realizabamos las consultas a MySQL como nos las habian explicado, por lo menos en mi caso era de esta manera:

$sql = "Select * from `tabla`";
$consulta = mysql_db_query($dbname, $sql, $con);
while ( $resultado = mysql_fetch_array($consulta)) {
echo $resultado[0],$resultado[1];// presentábamos los datos 
}

Bien esta sintaxis la cual nos aprendimos de memoria ahora nos tirara dos errores. El primero lo explique en una entrada anterior y es el mysql_db_query, el cual ha pasado a deprecated y hay que usar el mysql_query($sql, $con), y la base de datos pasa a establecerse con la funcion mysql_select_db($dbname)
El segundo error que nos dará, es en el while el cual es debido a que estamos asignando valor a $resultado dentro de una estructura condicional. Para solucionarlo rápidamente añadiremos true == delante o detrás de la estructura.
La estructura corregida quedara de la siguiente manera

mysql_select_db($dbname); // Seleccionamos la base de datos para trabajar
$sql = "Select * from `tabla`";
$consulta = mysql_query($sql, $con);
while ( true == ($resultado = mysql_fetch_array($consulta))) {
echo $resultado[0],$resultado[1];// presentábamos los datos 
}

Si analizamos la sentencia de la condicional ahora dice mientras la asignacion de valor a resultado sea verdadero hara el echo.
+Info: Aquí

Acortando if-else. El operador ternario

A la hora de programar muchas veces escribimos los típicos si es esto escribe esto si no escribe lo otro.
Este codigo podia ser el siguiente:
Supongamos que $valor puede tener el valor true o false

if ($valor ) {
$resultado = 'El resultado es correcto';
} else {
$resultado = 'El resultado es falso';
}

Pues bien, una manera de acortarlo y dejarlo en una sola linea es con el operador ternario ‘?:’ y quedaria de la siguiente manera:

$resultado = ($valor) ? 'El resultado es correcto':'El resultado es falso';

How To Develop Using HTML5 « » Van SEO Design

Buenos tutoriales de como desarrollar paginas con html5
Primera Parte

Segunda Parte

UTF-8 Por defecto en nuestras conexiones PHP:MySQL Tips

Conexión a MySQL clasica

$con = mysql_connect ("localhost","user","password") or die (mysql_error()); // establecemos la conexion
mysql_set_charset('utf8', $con); // establecemos el Charset
$dbname = "midb"; 
mysql_select_db($dbname, $con); // establecemos la base de datos por defecto
// Consulta de ejemplo
$sql = "Select * from mitabla";
// como mysql_db_query esta deprecated tenemos que acostumbrarnos a usar el mysql_query
$consulta = mysql_query($sql,$con); // asi ya no es necesario usar el $dbname en todas las consultas

Conexion a MySQL con Zend_Dd

require_once 'Zend/Loader/Autoloader.php'; // Para que me haga la autocarga de Zend
Zend_Loader_Autoloader::getInstance(); // Establece la autocarga
$pdoParams = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$this->db = Zend_Db::factory('Pdo_Mysql',array(
    'host'  =>  'localhost',
    'username'  =>  'user',
    'password'  =>  'password',
    'dbname'    =>  'midb',
    'driver_options' => $pdoParams
));

La apertura del diafragma

Gran articulo acerca de la apertura del diafragma para poder entenderlo bien
La apertura del diafragma

La península Ibérica iluminada

Impresionante fotografía tomada desde el espacio la noche del 4 de Diciembre en la cual se ve la contaminación lumínica que produce la península ibérica.

La península ibérica vista desde el espacio la noche del 4 de Diciembre

+Info Iberian Peninsula at Night.