Archive for the ‘Web’ category

Escribir en un archivo usando cURL

Septiembre 3rd, 2008

Existe una librería llamada libcurl en PHP la cual te permite usar sesiones cURL para realizar conexiones por HTTP, FTP y demás.

Esta librería se usar normalmente para acceder a una página web donde hay un formulario (realizar una conexión HTTP y mandar datos por le método POST). Por ejemplo, usando cURL puedes comentar en statuesque.es sin estar navegando por ella. Por eso se ponen los famosos captcha. Para que una máquina no pueda poner un comentario, por ejemplo.

Pues bien, hace poco me hicieron programar una función que pudiera escribir una cadena de texto en un archivo .xml pero me pusieron como condición no usar la función que tiene PHP para ello (fwrite()). Empecé a documentarme sobre cURL y aparte de abrírseme un mundo de posibilidades encontré una manera de hacerlo. Probablemente existan mejores formas para escribir en un archivo con cURL pero a mi solo se me ha ocurrido esta, si tienes alguna mejora puedes comentar que ten por seguro que la tendré en cuenta.

Ahora vamos al tema. Para usar la función hacen falta dos archivos: el archivo save.php que es el que tiene la función escrita y el archivo temp.php que es un archivo que usa la función.

En el archivo save.php escribiremos lo siguiente:

function curl_write($filename, $content) {
$path = 'http://' . $_SERVER['SERVER_NAME'] . substr($_SERVER['PHP_SELF'], 0, strlen($_SERVER['PHP_SELF']) - strlen(’save.php’)) . ‘temp.php’; //Para que reconozca solo la ruta. SIEMPRE que el .htaccess no haga de las suyas


$fp = fopen('./' . $filename, "w");
chmod('./' . $filename, 0777); //Aquí dale los permisos que quieras que tenga el archivo. Ahora todo el mundo puede cambiar su información.
$curl = curl_init(); //Inicializo la sesión cURL
curl_setopt($curl, CURLOPT_URL, $path); //Descargo el archivo con el contenido a escribir
curl_setopt($curl, CURLOPT_FILE, $fp); //Configuro la salida por defecto al archivo $fp
curl_setopt($curl, CURLOPT_HEADER, false); //Que no devuelva las cabeceras
curl_setopt($curl, CURLOPT_POST, true); //Para realizar una petición HTTP con el método POST
curl_setopt($curl, CURLOPT_POSTFIELDS, 'text=' . urlencode($content)); //Contenido de POST

if(curl_exec($curl)) //Ejecuto la conexión
$exito = true;

else
$exito = false;

curl_close($curl); //Cierro la conexión
fclose($fp); //Cierro el archivo

return $exito;
}

Y en el archivo temp.php escribiremos lo siguiente:
$texto = $_POST['text'];

echo $texto;

La función lo que hace es aprovecharse de que tú puedes poner como salida por defecto de una conexión un archivo de texto. Entonces realizamos una conexión a nuestro archivo temp.php y le pasamos por POST la variable text. El archivo temp.php lo que hace es sacar como contenido el valor de la variable text que le pasen por POST.

Una vez realizada la conexión a temp.php y devuelto el valor de la variable text se escribe en el archivo que le hayamos pasado y cerramos tanto la sesión cURL como el archivo que hemos abierto para escribir.

Un dato importante es que temp.php y save.php tienen que estar en el mismo directorio (o si cambias el directorio cambia también la variable $path para indicar donde se encontrará el archivo temp.php)

Un ejemplo de uso podría ser:

curl_write('diario.txt', 'Querido diario. He estado pensando y... ');

Puedes conseguir curl_write.rar aquí [rar].

Espero que os sea útil! Un saludo a todos!

float: left/right

Junio 5th, 2007

Yo creo que todos conocemos la propiedad de CSS de float. Que sirve para dejar “flotando” a la derecha o a la izquierda de la págína un bloque de información. La putada de esta propiedad es que si por ejemplo pones una capa flotando a la izquierda (left) el contenido que pongas a continuación se queda en la misma línea donde empezó a flotar la capa. Mejor lo explico con ejemplos.

Imaginemos el siguiente código:

<div style="width: 50%; float: left;">Soy una capa flotando a la izquierda</div>
<div>Yo soy una que se supone que está abajo</div>

Según el HTML una está debería de estar debajo de otra (prueba quitando la propiedad float y verás) pero como tiene la propiedad CSS de flotar a la izquierda pues hace eso. Flota. De manera que la siguiente capa que debería de estar abajo pero como está flotando empieza a la misma altura que la otra.

Esto es muy útil, por ejemplo para poner una imagen y que su descripción en vez de estar abajo esté a la misma altura. Por ejemplo. Como podeis ver en el ejemplo la imagen del curso está a la derecha de la descripción pero a la misma altura (en vez de float: left; se pone float: right;)

Sino existiera esta propiedad las imagenes quedarían así como en este ejemplo. Que como podeis ver todos los manuales están a diferentes alturas.

Esta es la ventaja que tiene lo de usar el float. Pero también tiene sus inconvenientes. Imagínate que quieres hacer un diseño con dos columnas en la misma altura y un pie de página esté abajo.

Pongamos el siguiente código, por ejemplo:

<div style="width: 30%; float: left; background-color:#666666;">Soy el menu de la izquierda</div>
<div style=”width:69%; float: right; background-color:#CCCCCC;”>Yo soy el contenido de la derecha </div>
<div style=”width: 100%; background-color:#333333;”>Soy el pie de página</div>

Según esto debería de estar el pie de página abajo y ocupando toda la pantalla. Pero no lo hace por lo mismo que antes el texto se ponía al lado de la imagen. Para arreglar estos problemitas existe la propiedad poco conocida pero infinitamente útil de clear.

Prueba esto ahora:

<div style="width: 30%; float: left; background-color:#666666;">Soy el menu de la izquierda</div>
<div style=”width:69%; float: right; background-color:#CCCCCC;”>Yo soy el contenido de la derecha </div>
<div style=”clear: both;”></div>
<div style=”width: 100%;
background-color:#333333;">Soy el pie de página</div>

Como ves la cosa cambia y la cosa queda exactamente como queriamos. La explicación es que la propiedad clear hace que se tome la altura del div más largo de los que están flotando (el que llega más abajo) como altura inicial para nuevas capas.

Espero que os sea útil para vuestros diseños!

Para probar todos los ejemplos métete en este editor html online 

Menús de navegación CSS

Febrero 22nd, 2007

He estado mirando algo de información para hacer menús de navegación en CSS. Estos menús son bastante prácticos para organizar las secciones (parecidos al menú de Inicio de Windows). Aquí teneis!

37 técnicas por un lado

Menús un poco raros

1 vertical y otro horizontal

Usar listas para cualquier menú

Varios tutoriales sobre menús básicos y más avanzados

Y luego, he encontrado este programita desarrollado por OverZone Software que es genial. Puedes agregar secciones y elegir entre muchos tipos de menús para luego exportar el código HTML. Está realmente bien. Por lo menos para tener la base y luego ya si eso toqueteas algo para personalizarlo.

En fin, con esto yo he tenido suficiente para ideas y para saber hacerlos bastante a mi bola. Espero que os sea útil!

¿Qué necesita un programador de PHP?

Mayo 9th, 2006

Cuando yo me pongo frente a la pantalla a trabajar necesito una serie de programas indispensables y unos cuantos links que me hacen la vida mucho más fácil a la hora de solucionar problemas o mejorar aspectos de mi programa.

En mi caso (si, soy un pijo) necesito que la síntaxis del código esté coloreada y también necesito que cuando escribo una función salga una ayuda que me indique el orden de los argumentos de dicha función. Para ello he encontrado este pedazo de programa (Gracias Vicente!). El programa se llama PHP Expert Editor y cumple todo lo que cualquier programador necesita. Si además le sumas que es GNU hace que sea una pedazo de elección.

Otra opción que me han comentado mucho es Notepad++ que parece un editor sencillo, ligero y que cumple las dos funciones que a mi me chiflan. Que autocomplete funciones y que coloree la síntaxis. Además la web está curiosa. Yo no he probado este programa pero según han comentado es el mejor en cuanto a sencillez de interfaz. Además este si que es GNU :P

Para los linuxeros está el vim que tanto comentan pero si quereis algo más gráfico podeis encontrarlo en Quanta o Bluefish.
MySQL Front también es una muy buena herramienta para gestionar las bases de datos. Muy intuitiva y rápida.

Luego está el programa para diseñar bases de datos más o menos complicadas que se llama DB Designer. Este programa está muy bien porque puedes crear bases de datos “visualmente”, cruzarlas, combinar claves primarias, etc. Además el propio programa sincroniza la base de datos que tienes diseñada con la base de datos del servidor. No he encontrado el sitio oficial pero se puede descargar desde aquí.

También está el plugin para Firefox por excelencia para los programadores/diseñadores web. IE Tab consiste en un pequeño icono al lado del de GMail Notifier con el cual puedes ver las webs tal y como se verían en Internet Explorer pero sin tener que cambiar de navegador (solo para Windows). Muy útil para darnos cuenta de todos los errores que el señor Internet Explorer nos da en nuestros diseños.

Hay otro plugin para Mozilla Firefox que es el Web Developer Toolbar. Este plugin incorpora una barra horizontal en el navegador con muchas opciones y muy útiles para ver un poco más “a fondo” las webs (subrayar las celdas, desvincular CSS, desactivar JS, etc.)

También me acaban de comentar un debugger que parece que está bien. Personalmente no puedo aportar ningún comentario sobre él ya que no uso debuggers. El programa en cuestión se llama DBG y parece que está bien.
Por último están los enlaces muy útiles para desarrollar cualquier sitio web:

El primero es, obviamente, PHP.net
El siguiente es PHP-Hispano.net

Por último, como siempre, Mr. Google

Eso es todo por hoy, espero que os haya sido útil para desarrollar vuestras páginas web :)

Actualización: Gracias a Anieto2k por esta lista de programas en MySQL