php

Ejecutando código PHP directo desde el shell

Tuesday, June 15th, 2010

Muchas veces me sucede que tengo que fijarme si algún servidor tiene determinados módulos de PHP compilados y por lo general la forma de saber esto es a través de un archivo phpinfo, donde te lista todas las funciones y módulos de PHP activos. Pero realmente no hay necesidad de crear un archivo php con la función phpinfo(); y luego remitirnos hacia el navegador y ejecutar dicho PHP.

Si estamos en la consola del server existe una forma rápida de ejecutar código PHP directo desde el intérprete. Se hace a través del uso de la opción -r del binario php, en este caso yo deseaba saber si PHP tenía soporte para el módulo openssl o si debería compilarlo.

Ejemplo de uso:

[root@server.34343.com:~]php -r 'phpinfo();' | grep openssl -i
Configure Command =>  './configure'  '--disable-pdo' '--enable-bcmath' 
'--enable-calendar' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml'
 '--enable-magic-quotes' '--enable-mbstring' '--enable-safe-mode' 
'--enable-sockets' '--enable-zip' '--prefix=/usr/local' 
'--with-apxs2=/usr/local/apache/bin/apxs' '--with-curl=/opt/curlssl/' 
'--with-freetype-dir=/usr' '--with-gd' '--with-gettext' 
'--with-imap=/opt/php_with_imap_client/' '--with-imap-ssl=/usr'
 '--with-jpeg-dir=/usr' '--with-kerberos' '--with-libexpat-dir=/usr' 
'--with-libxml-dir=/opt/xml2/' '--with-mcrypt=/opt/libmcrypt/'
 '--with-mysql=/usr' '--with-mysql-sock=/var/lib/mysql/mysql.sock'
 '--with-openssl=/usr' '--with-openssl-dir=/usr' '--with-png-dir=/usr'
 '--with-ttf' '--with-xmlrpc' '--with-xpm-dir=/usr' '--with-xsl=/opt/xslt/'
 '--with-zlib' '--with-zlib-dir=/usr'
openssl
OpenSSL support => enabled
OpenSSL Version => OpenSSL 0.x.xx-xxxx
[root@server.34343.com:~]

Fatal error: Call to undefined function filter_input()

Thursday, June 10th, 2010

Fatal error: Call to undefined function filter_input()

Este era el error que tenía al cargar una página php de un cliente, por más que busqué por todos lados a nivel de servidor no pude encotrar nada que pudiera causar este error. Primeramente al investigar encontré con casos que detallaban que usaban PHP4 y esta función ya está incluída en PHP5, por lo que si yo usaba PHP 5.1.x debería funcionar, pero no era así.

La función filter_input() está disponible únicamente desde PHP 5.2.x en adelante, por lo que tendrás que hacer un upgarde de tu servidor web si quieres usarla. Tiempo atrás comenté como hacerlo en actualizar PHP 5.1 a PHP 5.2

That’s all.

Ejecutando un cron en PHP

Tuesday, May 25th, 2010

Los sistemas Linux poseen la posibilidad de realizar tareas programadas, a estas tareas se les llama crones, hace un tiempo ya expliqué como setear crones en el artículo Programando tareas con Crontab. En este caso, vamos a llevar dicho conocimiento a la práctica para ejecutar scripts en PHP.

Antes que nada, debemos evaluar qué tipo de script queremos ejecutar, si su funcionamiento amerita que podamos correrlo desde la línea de comandos usando el intérprete de PHP directamente, o bien si debe ejecutarse a través de URL. Vamos a tomar un ejemplo de un cron que debe ejecutarse cada 1 minuto.

El primero caso, es para ejecutarse con el intéprete de PHP directamente, especificando el path completo del archivo PHP:

* * * * * php -q /home/pepito/public_html/miarchivo.php

Por otro lado, la forma correcta de ejecutarlo a través de una URL, no es con PHP sino con otro intérprete, como puede ser wget, curl, etc. En este caso, utilizaremos curl, el que suelo usar siempre cuando debo configurar un cron de este estilo:

* * * * * /usr/bin/curl http://www.midominio.com/archivo.php

¿Qué es phpinfo? ¿Cómo puedo crear un archivo phpinfo?

Tuesday, January 5th, 2010

phpinfo

Esto es algo muy básico, pero que muchas personas que recién comienzan desconocen totalmente. Si estamos en la diaria tarea de administrar un servidor LAMP, siempre vamos a tener que hacer uso de una herramienta muy útil llamada phpinfo, la misma no es más que una función de PHP que nos muestra gran y variada información referente al servidor  Apache y principalmente a PHP claro está.

Lo recomendable, directamente es tener esta opción deshabilitada pues suele usarse bastante por atacantes para obtener información sobre que versiones, variables y funciones están habilitadas en el PHP que corre sobre el server. De cualquier manera, asumiendo está habilitada o la queremos habilitar para hacer uso de ella, puedes crear tu PHPINFO tan solo con agregar las siguientes líneas en un archivo info.php por ejemplo (puede ser cualquier nombre) dentro de un directorio público de tu web:

<?php
phpinfo();
?>

Luego lo cargas via web: http://www.tusitio.com/info.php y ya tendrás toda la información de PHP disponible.

URL file-access is disabled in the server configuration

Tuesday, November 20th, 2007

PHP Logo

Teniendo en cuenta el advenimiento de PHP 6, la ya estandarización definitiva de PHP 5 como versión estable de este lenguaje, y que PHP 4 dejará de tener soporte a finales del próximo mes de Diciembre, decidí actualizar un sistema con PHP 4.4.7 y Apache 1.3.3.9 a PHP 5.2.5, y Apache 2.0.61.

Todo el proceso de upgrade fue bien, por las dudas obviamente hice backups de los respectivos archivos de configuración de cada servicio. Luego del upgrade, procedí a reinstalar ciertos añadidos como ZendOptimizer, Eaccelerator, Mod_Security, etc, todo salió perfectamente y sin problemas.

Faltaba la verificación final de las páginas, por ello cargué página por página que había en este server, y todas me dieron bien, excepto una que usaba includes remotos, generaba el siguiente error:

URL file-access is disabled in the server configuration

Al parece la variable allow_url_fopen desaparece de php.ini, y debe ser reemplazada para que los includes remotos funcionen, simplemente reemplacen:

allow_url_fopen = On

Por:

allow_url_include = On

Luego de eso, reinician el servidor web y listo :D