Archivo de la Categoría “Programación”
A la hora de instalar PHP en Windows para funcionar sobre el servidor web IIS podemos encontrarnos con algunos problemas. Dejo aquí una recopilación de pasos básicos que recomiendo al instalar PHP en Windows si encontramos alguno de estos problemas. Al menos está comprobado que funciona hasta la versión de php 5.2.9:
1.- Descargar el archivo comprimido en zip de http://php.net.
2.- Descomprimirlo en la carpeta c:\php5, por ejemplo.
3.- En IIS, en Equipo Local / Sitios web / Propiedades / pestaña Directorio particular / Configuración, dar de alta la asignación .php con c:\php5\php5isapi.dll.
4.- En IIS, en Equipo Local / Sitios web / Propiedades / pestaña Documentos / Habilitar documento predeterminado, agregar index.htm e index.php, que suelen ser los documentos por defecto en webs que usan Apache y PHP.
5.- En c:\php5, hacer una copia del archivo php.ini-recommended y renombrarlo a php.ini.
6.- Modificar en el php.ini anterior:
- De ;cgi.force_redirect = 1 a cgi.force_redirect = 0 (descomentar y poner a 0).
- extension_dir = “c:\php5\ext\”.
- descomentar extension=php_mysql.dll para que funcione mysql.
- descomentar extension=php_mbstring.dll y extension=php_mcrypt.dll para que no dé error el PhpMyAdmin, por ejemplo (al menos la versión 3.2.3.0).
7.- Copiar el archivo php.ini modificado a c:\windows.
8.- ver en http://www.php.net/manual/en/install.windows.extensions.php las dependencias de cada extensión, por ejemplo php_mysql.dll PHP >= 5.0.0, requires libmysql.dll (bundled) y copiarlas en c:\Windows\System32 (en este caso libmysql.dll). Para php_mcrypt.dll, Requires: libmcrypt.dll, copiar libmcrypt.dll a c:\Windows\System32.
No Hay Comentarios »
En una ocasión, instalando un servidor web con sistema operativo Linux Debian y soporte para PHP y MySQL, me encontré al instalar WordPress para un blog con el problema “Parece que tu instalación de PHP no cuenta con la extensión de MySQL, necesaria para WordPress”. La solución al problema es descomentar una línea del archivo php.ini, como especifica Patob en su blog. Hay que descomentar en el php.ini, generalmente en /etc/php5/apache2/php.ini (eliminar el punto y coma ; de delante) la línea:
;extension=mysql.so
con esto PHP carga la extensión para MySQL automáticamente. Por último reiniciamos Apache y MySQL:
#/etc/init.d/apache restart
#/etc/init.d/mysql restart
y este problema debería solucionarse.
No Hay Comentarios »
Escrito por: admin en Programación, tags: 20 aniversario, 20 años, asp, CERN, HTML, http, javascript, navegador, php, servidor web, web, www

Hoy viernes 13 de marzo se cumplen 20 años del nacimiento de las páginas web (WWW), tal como las conocemos. El 13 de marzo de 1989 una propuesta presentada por un físico del CERN (Centro Europeo de Investigaciones Nucleares) sentó las bases para desarrollar el lenguaje HTML, que en principio serviría para intercambiar información entre físicos de todo el mundo a través de Internet. El lenguaje HTML (HyperText Markup Language) es un lenguaje de etiquetas que permite establecer hipervínculos entre documentos de forma fácil y que los navegadores saben interpretar. Tiempo después vendrían nuevas tecnologías y lenguajes como javascript, flash, asp, php,…
 El creador de la WWW, Tim Berners-Lee, junto al ordenador que sirvió de primer servidor web
Pocos se imaginaban que aquel invento iba a revolucionar la tecnología y en el CERN lo están celebrando dando conferencias, haciendo camisetas y exponiendo el primer ordenador que albergó un servidor web, un navegador web y un editor para desarrollar páginas web.
 Ejemplo de documento en lenguaje HTML
Recuerdo mi primer contacto con la web en la Universidad Politécnica de Valencia (España), cuando inicié (y años después acabé) la carrera de Ingeniería Técnica en Informática de Sistemas, allá por el año 1994. En 1995-96 colaboré en el desarrollo de una página web de una asociación de la Universidad y desde la Facultad de Informática programábamos las páginas web con un editor de textos y editor de imágenes básicos… Escribía el lenguaje HTML totalmente a mano, qué recuerdos, <html><head><title>… <table border=”0″… Empezando de esta forma me ha servido mucho posteriormente, es mucho más fácil encontrar errores y problemas cuando se conoce el código.
Este artículo en una versión menos técnica también lo podéis encontrar en Tecnología de la Vida.
1 Comentario »
Me han enviado un correo con un truco curioso, obtenido de una traducción del artículo original de Phil Benwell.
Se trata de un pequeño código en Javascript para modificar el contenido de cualquier página web que se esté visualizando. Evidentemente sólo funciona en local con las webs que tengamos cargadas en el navegador, pero podemos vacilar un poco delante de los amigos modificando la cifra de ganancias en AdSense o apareciendo en la primera página de algún periódico online.
Para ello, cuando estemos visualizando la web que queremos modificar, pegamos el siguiente código en la barra de direcciones del navegador:
javascript:document.body.contentEditable='true';
document.designMode='on'; void 0
y pulsamos Intro, con lo que podremos editar cualquier parte de la página web: eliminar contenido, añadir imágenes, modificar texto,…
Como ya he dicho, estas modificaciones sólo actúan a nivel de nuestro ordenador local, con lo que no estamos modificando nada en Internet.
No Hay Comentarios »
Alguna vez he tenido la necesidad de eliminar los saltos de línea en un campo de formulario de tipo textarea. Más aún, he tenido la necesidad de eliminar los saltos de línea del texto seleccionado dentro de un textarea. Con la siguiente función Javascript conseguimos localizar la porción de texto seleccionado y eliminar los saltos de línea o line breaks (“\n”) y los retornos de carro o carrier return (“\r”). Para ello utilizamos funciones propias del lenguaje Javascript (createTextRange, duplicate, replace) y expresiones regulares.
function suprSaltos(campo) {
if (campo.createTextRange) {
campo.focus(campo.caretPos);
campo.caretPos = document.selection.createRange().duplicate();
if(campo.caretPos.text.length>0) {
var sel = campo.caretPos.text;
var fin = '';
while(sel.substring(sel.length-1, sel.length)==' ') {
sel = sel.substring(0, sel.length-1);
fin += ' ';
}
campo.caretPos.text = sel.replace(new RegExp('\\n','g'),''). _
replace(new RegExp('\\r','g'),'') + fin;
} else campo.caretPos.text = '';
}
else campo.value += '';
}
Como en otras funciones, en esta función es necesario juntar la expresión en una única línea quitando los _ de final de línea porque de lo contrario no funcionará.
3 Comentarios »
Para validar direcciones de Internet simples (URL’s) de usuarios que introducen su página web en un campo de formulario podemos utilizar la siguiente función en Javascript:
function ValidarUrl(txtCampo)
strExpReg = /^http:\/\/[a-zA-Z0-9-_:/.?&=]+$/;
if (!strExpReg.test(txtCampoActual.value)){
strMensaje = 'La página web no es válida,\ncontiene carácteres ';
strMensaje += 'no válidos o no empieza por "http://"';
alert(strMensaje);
txtCampoActual.focus();
return false;
}
return true;
end function
En este caso, la validación se realiza del lado del cliente (al ser Javascript) y la función recibe como parámetro el campo del formulario donde irá la URL, mostrando un mensaje de error si la URL no es válida y devolviendo el foco a ese campo.
Obtener su versión en ASP y otros lenguajes es fácil adaptando la expresión regular a la sintaxis de cada lenguaje
3 Comentarios »
Para validar direcciones de e-mail podemos utilizar la siguiente función en ASP:
function esValidoEmail(cadena)
set expReg = New RegExp
expReg.Pattern = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@_
[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$"
esValidoEmail = expReg.Test(cadena) and len(cadena) < 256
set expReg = nothing
end function
Su versión en Javascript:
function esValidoEmail(cadena) {
strExpReg = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@_
[_a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/;
return strExpReg.test(cadena);
}
Como en las otras funciones, en esta función en Javascript sí que es necesario juntar la expresión en una única línea quitando los _ de final de línea porque de lo contrario no funcionará.
No Hay Comentarios »
Continuando con las expresiones regulares, para validar fechas se puede utilizar la siguiente función en ASP:
function esValidoFecha(cadena)
set expReg = New RegExp
expReg.Pattern = "^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])_
(\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)_
([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])_
(\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|_
((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)_
([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9]_
[0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9]_
[13579][26])))$"
esValidoFecha = expReg.Test(cadena)
set expReg = nothing
end function
La expresión regular (que se puede poner en una única línea eliminando los _ finales) es un poco larga porque ha de tener en cuenta los días de los meses del año, los años bisiestos,… Para validar del lado del cliente (antes de enviar el formulario), se puede utilizar el mismo patrón en Javascript:
function esValidoFecha(cadena) {
strExpReg = /^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])_
(\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)_
([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])_
(\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|_
((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)_
([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9]_
[0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9]_
[13579][26])))$/;
return strExpReg.test(cadena);
}
En esta función en Javascript sí que es necesario juntar la expresión en una única línea quitando los _ porque de lo contrario no funcionará.
4 Comentarios »
A la hora de mantener y cambiar contenidos de una página web, las cachés de los navegadores pueden jugar malas pasadas a los desarrolladores y diseñadores web, haciendo que los cambios no se reflejen de manera inmediata, sobretodo con contenidos en flash. Las cachés de los navegadores y los proveedores de Internet (como el famoso Proxy-caché de Telefónica) guardan las urls completas para ver si la tienen en caché a la hora de solicitar una página. Así, cuando la caché está activada y un usuario solicita la página http://www.example.com/a.htm, el navegador mira si tiene esa url y archivo en caché y si es así, lo coge de caché y no lo solicita al servidor.
Un truco para evitar que el navegador mire en la caché es pedirle la misma página pero con diferente url, es decir, http://www.example.com/a.htm?1 es una url diferente a http://www.example.com/a.htm?2, pero sin embargo devuelve la misma página. Los parámetros que le pasamos a la página (1 y 2) no son interpretados, con lo que es como si no estuvieran pero hacen que la url sea diferente. Para asegurarse de que el parámetro siempre será diferente, podemos generarlo dinámicamente desde asp o cualquier otro lenguaje y podemos utilizar la función en jscript getTime(), que nos devuelve la cantidad de milisegundos transcurridos desde el 1 de Enero de 1970 hasta el momento actual. De esta manera, podemos generar los enlaces desde páginas asp con esta función:
<script language="jscript" runat="server">
function getTime() {
var d = new Date();
return d.getTime();
}
</script>
y generar el enlace así:
<a href="http://www.example.com/a.htm?<%=getTime()%>">Enlace sin cache</a>
que se convertiría en algo así:
<a href="http://www.example.com/a.htm?1224505518887">Enlace sin cache</a>
Este truco es especialmente útil cuando una página contiene un objeto flash. En el ejemplo anterior, llamando a http://www.example.com/a.htm?1224505518887 devuelve el código html actualizado, pero si hay algún objeto flash que queramos actualizar en el interior de la página, esta solución no funciona, ya que la url del objeto flash llamado siempre será la misma. Para resolver esto, hemos de aplicar la variable de tiempo anterior directamente a la llamada al objeto flash:
<object classid="clsid:d27...">
<param name="movie" value="home.swf?<%=getTime()%>" />
<embed src="home.swf?<%=getTime()%>" pluginspage... />
</object>
quedando algo así:
<object classid="clsid:d27...">
<param name="movie" value="home.swf?1224505518887" />
<embed src="home.swf?1224505518887" pluginspage... />
</object>
y lo guardamos como asp con la funcion jscript getTime definida. De esta manera nos aseguramos que el objeto flash será leído del servidor sin pasar por la caché sin necesidad de cambiarle el nombre al archivo. Después, simplemente hay que llamar a la página http://www.example.com/a.asp, sin la variable de tiempo, porque ya se genera en el código de la página y lo que realmente nos interesa actualizar es el objeto flash.
Este tipo de solución también se puede utilizar para refrescar la página cada ciertos segundos, como una página que visualice una webcam que actualiza las imágenes por FTP cada x segundos.
No Hay Comentarios »
Las expresiones regulares en programación son muy útiles para validar campos enviados y parámetros recibidos de formularios web, ya sean de contacto, usuario y contraseña o de cualquier otro tipo. Es cierto que las expresiones regulares pueden ser muy complejas, pero con algunos ejemplos sencillos y un poco de práctica podemos apreciar su verdadera potencia. En el mercado existen muchas soluciones predefinidas para no tener que ir validando manualmente los parámetros y “parseando” las entradas, pero hace tiempo que yo vengo utilizando algunas funciones propias que de forma sencilla evitan el tan temido SQL inyectado. En ASP es muy fácil utilizar expresiones regulares. Por ejemplo, para validar cadenas numéricas y alfanuméricas, utilizo estas dos funciones:
function esValidoNum(cadena)
set expReg = New RegExp
expReg.Pattern = "^[0-9]+$"
esValidoNum = expReg.Test(cadena) and len(cadena) < 6
set expReg = nothing
end function
function esValidoAlfaNum(cadena)
set expReg = New RegExp
expReg.Pattern = "^[a-zA-Z0-9-]+$"
esValidoAlfaNum = expReg.Test(cadena) and len(cadena) < 256
set expReg = nothing
end function
Como norma general, en primer lugar se declara la variable que tendrá la expresión regular y se le especifica el patrón a seguir mediante los diferentes símbolos:
^ : comienzo de la expresión regular
$ : fin de la expresión regular
+ : utilizado para especificar una o más apariciones de los símbolos precedentes
[...] : rango
Así pues en el primer ejemplo anterior se validan expresiones numéricas, es decir, una o más repeticiones de números entre 0 y 9, y de longitud menor que 6 (len(cadena)<6), mientras que en el segundo se validan cadenas alfanuméricas (sin acentos, ñ, ç,…), es decir, una o más repeticiones de letras minúsculas entre a y z, mayúsculas entre A y Z, números entre 0 y 9 y guiones (-), y de longitud menor de 256 carácteres (len(cadena)<256).
Con estas simples pero potentes funciones podemos validar usuarios y contraseñas y parámetros sencillos pasados por GET o POST como id’s, cadenas simples,…
En todos los lenguajes existen las expresiones regulares y el uso es bastante similar. De hecho, en Javascript es muy fácil utilizar las funciones para validar los campos en el cliente antes de enviar el formulario web.
Se pueden encontrar expresiones regulares predefinidas para validar e-mails, teléfonos, fechas, horas,… en RegExLib, una web muy útil.
No Hay Comentarios »
|