PHPLiveX es una librerÃa PHP que facilita la llamada desde Ajax a funciones PHP. Genera código Javascript que implementa funciones con los mismos nombres y argumentos dados en una lista de funciones PHP. Cuando el código Javascript generado es llamado, empieza la petición Ajax que invoca a su respectiva función PHP en el servidor.
Actualmente está probado para los navegadores Mozilla, Firefox, Internet Explorer y Opera. Su uso parece muy sencillo En el código PHP debes indicar la función:
Hace bastante que no escribía, sobre todo por falta de tiempo, pero quería escribir sobre este pequeño truco de WordPress. Cuando añadimos una imagen destacada en un post de WordPress nos podemos encontrar con que la imagen ocupa todo el ancho (lo más normal) o que no ocupa tanto, con lo que nos encontramos que la imagen queda muy sola y el diseño queda feo.
Para solucionar esto, deberemos añadir un filtro, comprobar el tamaño de la imagen y el del ancho del contenido y en el caso de que creamos que es conveniente (por ejemplo la mitad del ancho del contenido) añadir una clase a la imagen:
function mi_post_thumbnail_html($html) {
// Se suele recomendar definir la variable $content_width para ocasiones como esta
global $content_width;
preg_match('#width="([^"]+)"#', $html, $s);
if (isset($s[1]) && $s[1] < $content_width/2) {
preg_match('#class="([^"]+)"#', $html, $c);
if (isset($c[1]) && strpos($c[1], "right") === FALSE) {
return str_replace('class="'.$c[1].'"', 'class="'.$c[1].' right"', $html);
}
}
return $html;
}
add_filter('post_thumbnail_html', 'mi_post_thumbnail_html');
Algo que nos pasa a los que aprendemos PHP por nuestra cuenta es coger fallos por malas costumbres, otras veces la gente tiene fallos por falta de conocimiento. Aquà os paso resumida una lista de los errores más comunes que se comenten a la hora de programar en PHP.
No escapar lo que nos llegar por parámetro: para evitar el cross-site scripting es necesario escapar las posibles entradas HTML que nos lleguen por parámetro. Si al introducir el usuario nos metieran:
<script>...$lt/script$gt;
serÃa necesario escapar las entidades HTML para evitar ataques. Para ello se usarÃa el siguiente código:
htmlspecialchars($_GET['username'], ENT_QUOTES)
No escapar las entradas de consultas SQL: para evitar SQL-injections es necesario escapar antes el contenido de las entradas que pasamos a nuestras consultas SQL. Por ejemplo, tendrÃamos que crearnos una función que escapara las comillas simples.
Uso incorrecto de las funciones para la cabecera HTTP (header(), session_start() y setcookie()): muchas veces cuando desarrollanos nos encontramos con un mensaje de error que dice que ya se ha mandado la cabecera y que no se puede añadir más información. Esto es debido a que las funciones de cabecera (header(), session_start(), setcookie()) se tienen que usar al principio del script, antes de mandar nada a la salida.
No controlar lo que añades mediante require o include: se trata de no comenter el error de incluir un fichero cuya ruta se pasa por parámetro, ya que aunque nosotros seamos quienes pongan ese valor en el parámetro, puede llegar alguien y cambiar la ruta y pasar otro fichero que no sea de fiar.
Errores de sintaxis: bueno, aquà el autor del artÃculo, se ha quedado un tanto agusto. Todo el mundo comete errores de sintaxis cuando programa, ya sea en PHP, C, .NET o cualquier otro lenguaje de programación. Yo si que comentaria un error que suelo cometer, que es el escribir mal una variable y que el script no falle (como ocurrirÃa en Java), pero que se obtengan datos incorrectos.
No usar la orientación a objetos: desde la versión 4 los objetos se admiten en PHP, en PHP5 se mejoró su utilización. Debemos aprovecharnos de esas posibilidades.
No usar frameworks: no reinventemos la rueda, si ya hay un framework que nos gestiona la base de datos, los errores y otras cosas, no pierdas el tiempo en implementarlo tu mismo.
Desconocer funcionalidades: PHP dispone de muchas funcionalidades en su core o en su librerÃas, cuantas más funcionalidades conozcas, menos tiempo perderas en el desarrollo.
Usar versiones antiguas de PHP: tiene dos inconvenientes, que desaprovechas nuevas funcionalidades y corres el peligro de no tener todos los bugs parcheados.
Doble escapado de comillas: es posible encontrar en código PHP algo asÃ: \’ o \”. Esto suele ocurrir cuando se desarrolla con magic_quotes off y se instala en un servidor con magic_quotes on.
Interesante librería que hace uso de Google Translator para traducir un texto en un idioma a otro. Aunque el API de Google está solo en Java o Javascript, el autor de la librería ha creado un wrapper para que esté disponible desde PHP.
require_once('googleTranslate.class.php');
/* Initialize the class translate class */
$gt = new GoogleTranslateWrapper();
$sampleText = "Bonjour de cette partie du monde";
/* translate(string, to_language, from_language) */
echo $gt->translate($sampleText , "en", "fr");
Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.
Para aquellos que no quieran sufrir lo que hemos sufrido con TwitterPoster (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.
Os paso un script sencillito que he realizado:
<?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=[usuario]&password=[contraseña]");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('//', $result, $match);
$authenticity_token = $match[1];
preg_match('//', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=[texto]');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?>
¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, …) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.