elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Temas
Páginas: 1 2 3 4 [5] 6 7 8 9 10
41  Programación / PHP / Cambiar extensión script PHP en: 4 Mayo 2011, 23:11 pm
Cambiar extensión script PHP


Por motivos de seguridad nos puede interesar cambiar la extensión de nuestras aplicaciones en PHP, no conseguiríamos gran cosas, pero podría desorientar al atacante.

Cuando se trata de aplicaciones donde la seguridad es fundamental cualquier pequeño detalle ayudará.

En el fichero de configuración del intérprete php.ini podemos configurar la directiva expose_php = off , con esta directiva desactivada se reduce el número de información mostrada en caso de errores o advertencias(warnings).

Apache con la ayuda de los ficheros .htaccess nos permite cambiar la extensión utilizada para los scripts PHP.

Creamos un fichero .htaccess dentro del directorio de nuestra aplicación con el siguiente contenido:

Código:
#Así parecerá que utilizamos otro lenguaje
AddType application/x-httpd-php .asp .aspx .jsp .py .pl

Ahora si creamos un fichero con las extensiones arriba indicadas, Apache las interpretará como si se tratara de una aplicación en PHP.

Podemos hacer un típico Hello World para probar:

Código
  1. <?php
  2. echo "Esto es PHP aunque no lo parece.";
  3. ?>

Con las extensiones que hemos configurado en el .htaccess.



Al ejecutar cualquier de los archivos de arriba Apache interpretará el código como si fuera PHP, sin importar la extensión. Hay que tener cuidado, si tenemos documentos HTML es posible que no queramos que se ejecuten como scripts PHP.

También podemos jugar con las cabeceras, para que parezca que utilizamos otro lenguaje:

Código
  1. <?php
  2. header("X-Powered-By: ASP.NET");
  3. ?>

He subido a un hosting todos los ficheros junto con el .htaccess por si alguien quiere probarlo.

Enlace| MultiUpload
42  Foros Generales / Sugerencias y dudas sobre el Foro / Buscador para el foro - Plugin Firefox en: 2 Mayo 2011, 22:55 pm
A partir de los ya existentes he creado un plugin para Firefox para buscar más rápidamente en Google pero filtrando resultados para este foro.

Instrucciones:
  • Descargar elhackerNET.xml (1.38 KB)
  • Copiar el fichero descargado en C:\Program Files (x86)\Mozilla Firefox\searchplugins


Si no queréis descargar el fichero, podéis crearlo vosotros mismos manualmente y copiarlo en searchplugins del Firefox.

Contenido de elhackerNET.xml:

Código:
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>elhacker.NET Search Engine</ShortName>
<Description>elhacker.NET Search</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/png;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAf//////4AAD///////8AAI//iIiIiAAAj/gAAAAAAAB/+A+IiIiAAA//D/////AAD/8IiIj/9wAI/4AAAI/4AAD/+IiI//gAAP//////+AAAeP/////3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////gAf//wAD//8AA///AAP//wAB//8AAf//gAH//4AA//+AAP//gAD//8AA///AAP//4AH/////////////</Image>
<Url type="application/x-suggestions+json" method="GET" template="http://suggestqueries.google.com/complete/search?output=firefox&amp;client=firefox&amp;hl={moz:locale}&amp;q={searchTerms}"/>
<Url type="text/html" method="GET" template="http://www.google.es/search?q=site:foro.elhacker.net%20">
  <Param name="q" value="{searchTerms}"/>
  <Param name="ie" value="utf-8"/>
  <Param name="oe" value="utf-8"/>
  <Param name="aq" value="t"/>
  <!-- Dynamic parameters -->
  <Param name="rls" value="{moz:distributionID}:{moz:locale}:{moz:official}"/>
  <MozParam name="client" condition="defaultEngine" trueValue="firefox-a" falseValue="firefox"/>
</Url>
<SearchForm>http://elhacker.net/</SearchForm>
</SearchPlugin>


El resultado sería el siguiente:



A la derecha de la barra de direcciones/URL en el cuadro de búsqueda rápida, al desplegarlo aparecerá el icono de elhacker.net.

Espero que a alguien le sirva, yo lo estoy utilizando.
43  Programación / PHP / Inclusión de ficheros en PHP en: 25 Abril 2011, 19:58 pm
Inclusión de ficheros en PHP

Vamos a ver las distintas formas para incluir un fichero en nuestro script PHP.  Esta facilidad del lenguaje se utiliza principalmente para la definición de librerías, clases, varios script, permitiendo, de este modo, una reutilización y mantenimiento del código más óptimos. La extensión del fichero a incluir puede ser de cualquier tipo, ya sea .php, .htm, .txt, .inc, etc.

PHP dispone de una variedad de funciones que nos permiten la inclusión de ficheros en nuestros scripts. Las funciones de las que hablaremos en este articulo son las siguientes:

include()
Esta función incluye y evalúa un fichero externo cada vez que es interpretada. La inclusión del fichero externo y su posterior evaluación, se realizan cada vez que el flujo del programa llega a una línea que

contenga la llamada a esta función. En caso de no encontrar el fichero especificado, se genera un warning (advertencia) y se sigue la ejecución del script.

Cuando un archivo es incluido con esta función, el intérprete sale del modo PHP y entra en modo HTML al principio del archivo referenciado, y vuelve de nuevo al modo PHP al acabar de leer dicho archivo.

Si el código contenido dentro del archivo incluido contiene instrucciones PHP, dichas instrucciones deberán estar encerradas entre las etiquetas de inicio y fin de código PHP (<?php ?>).

include_once()
Funciona igual que la anterior, con la única diferencia de que esta función solo cargará y evaluará el archivo incluido solo una vez, como máximo. Con esta instrucción nos aseguramos de que un fichero sólo se ha cargado una vez a lo largo de la ejecución del script, evitando errores producidos por la redefinición de funciones o la reasignación de valores.

require()
Hace lo mismo que las funciones anteriores, pero con algunas diferencias. Sólo incluye el fichero referenciado, es decir, no lo interpreta. Su comportamiento es equivalente a la directiva #include del lenguaje C/C++.

Esta función no puede ser utilizada con en estructuras condiciones o de control de bucles porque el contenido del fichero referenciado se  incluye antes de que se evalúe la sentencia que lo contiene y se incluye siempre aunque la condición que lo contiene no se cumpla.

En caso de que el archivo pasado como parámetro a esta función no exista, se generará un error fatal que no permitirá con la ejecución del script. Es bastante desaconsejable pasar variables como parámetros a esta función.

require_once()
Evita la carga del fichero referenciado en más de una ocasión. Hace exactamente que include_once() pero hereda el comportamiento básico de su función padre require().

La función que se va a emplear depende del tipo de aplicación que estamos desarrollando y del programador, hay que elegir la que más se ajuste, no hay ninguna favorita.
44  Comunicaciones / Redes / Instalación de un servidor FTP en Linux (vsftpd) en: 17 Abril 2011, 21:24 pm
Artículo perteneciente al [Taller]Instalación/Configuración y Teoría de Servicios en Red, también disponible en la Wiki del Foro


Para sistemas GNU/Linux hay muchos software servidores de FTP que nos pueden servir para este tutorial, pero nos vamos a centrar en VSFTPD (Very Secure FTP Daemon),
como su nombre indica, es muy seguro, probablemente uno de los mas seguros del mercado y muy fácil de configurar.

Procedemos a instalar el daemon:

Código:
apt-get install vsftpd

El fichero de configuración está en /etc/vsftpd.conf.

Vamos a ver unas de las directivas que nos pueden interesar.

anonymous_enable = YES - Permite el acceso sin cuenta al servidor.
local_enable = YES - Con esta directiva los usuarios locales al sistema podrán iniciar sesión en el servidor FTP, al iniciar
sesión el usuario será redireccionado a su carpeta personal en  /home.

Podemos probar esta última directiva creando un usuario y logueandonos con él.
Código:
adduser demo



Se puede decir que prácticamente tenemos un servidor FTP funcionando, ahora solo falta personalizarlo un poco más.

write_enable = YES - Los usuarios tiene derecho a crear ficheros y archivos.
local_umask = 022 - Representan los permisos que tendrán los archivos subidos al servidor FTP.
anon_upload_enable = YES - El usuario anonymous tiene permisos para subir archivos.
ftp_banner = "Bienvenido al servidor FTP de madpitbull" - El mensaje de bienvenida al servidor.
anon_root = /home/ftp - El directorio inicial del usuario anonymous. Hay que crearlo.
Una vez hechos algunos cambios, reiniciaremos el servidor:
Código:
service vsftpd restart

En la página oficial del proyecto tenéis todas las directivas (documentación).

Una cosa interesante que podemos hacer es crear una carpeta donde se puedan subir archivos usando el usuario anonymous.
Un requisito es tener configuradas todas las directivas que he mencionado anteriormente.

Creamos la carpeta ftp dentro de /home.
Código:
mkdir /home/ftp

Le cambiamos los permisos.
Código:
chmod 577 /sudo/ftp

Creamos la carpeta donde se subirán los archivos.
Código:
mkdir /home/ftp/incoming

Y le damos todos los permisos.
Código:
chmod 777 /home/ftp/incoming

Solo falta cambiar el propietario de dicha carpeta.
Código:
chown ftp /home/ftp

Si usáis Webmin para administrar el servidor, os recomiendo que instaléis el módulo vsftpd.

Para problemas que os pueden ocurrir, os recomiendo mirar y comprobar esta lista de errores.
45  Comunicaciones / Redes / Teoría FTP en: 17 Abril 2011, 16:57 pm
Artículo perteneciente al [Taller]Instalación/Configuración y Teoría de Servicios en Red, también disponible en la Wiki del Foro

Servicio FTP (File Transfer Protocol)



Es un protocolo de transferencia de archivos en redes TCP/IP de forma fiable y rápida.

Cumple la siguiente lista de objetivos:
  • Permitir el intercambio de archivos ente máquinas remotas a través de la red.
  • Fomentar el acceso a máquinas remotas.
  • Permitir total independencia entre los sistemas de archivos, del cliente y del servidor.
  • Consigue una transferencia de datos segura y fiable.


Como todo protocolo, también tiene sus deficiencias:
  • Utiliza autenticación por medio de usuario y contraseña, no garantiza que el usuario sea quien dice ser.
  • Los datos de autenticación se envían en texto plano.
  • Las transferencias de archivos son en texto plano, tanto los datos del usuario como la información enviada/recibida se pueden interpretar fácilmente.

Está basado en la arquitectura cliente-servidor. Emplea los siguiente puertos:
  • 20 => Transferir datos.
  • 21 => Control(Envío de ordenes).


Características del servicio FTP:

1)Diferentes formas de acceso al servidor:
  • Por medio de usuario y contraseña, que debe existir en el servidor.
  • De forma anónima, usando anonymous.
  • De forma virtual, por medio de cuenta, sin que ésta exista. Se trata de unos usuarios "virtuales", independientes al Sistema Operativos y solo pertenecen al servidor FTP.

2)El acceso al sistema de archivos del servidor FTP es limitado según el tipo de usuario que se conecta:
  • El usuario anonymous solo accede al directorio principal.
  • Los usuarios locales acceden al sistema de archivos que comienza en su directorio de conexión.
  • Los usuarios FTP acceden a los directorios a los cuales tienen permisos.

3)Una vez establecida la conexión, se pueden emplear comandos FTP para realizar diferentes tareas:
  • ? - Muestra las ordenes disponibles.
  • ? orden - Muestra la ayuda de esa orden (? get).
  • ascii/binary - La transferencia se hará en ASCII o Binario.
  • cd/lcd - Moverse por los directorios. Con lcd se mueve por el directorio local del cliente FTP.
  • close - Cierra la conexión.
  • quit - Cierra conexión y cliente.
  • get/mget - Descargar un archivo o varios, usando mget.
  • put/mput - Subir/Enviar un archivo o varios, usando mput.
  • sieze - Ver tamaño del archivo.
  • delete/mdelete - Borrar archivos.


Formas de conectarse a un servidor FTP:

  • De modo Activo
    El cliente se conecta al puerto 21 del servidor desde un puerto superior al 1024 para enviarse comandos.
    El cliente le indica al servidor el puerto por el cuál recibirá los datos.
    El servidor abre su puerto 20 para realizar la transferencia de datos sobre el cliente en el puerto especificado.
    Importante: El servidor siempre emplea el puerto 20 para transmisión de datos.
    Problema: El cliente debe aceptar conexiones en puertos superiores a 1024 (se evita con un Firewall).

  • De modo Pasivo
    El cliente emplea un puerto superior al 1024 para conectar con el puerto 21 del servidor FTP y enviarle comandos.
    El servidor enviará por ese puerto, el puerto aleatorio que va a emplear para la comunicación de datos (puerto mayor a 1023).
    El cliente y el servidor abren el puerto especificado por el servidor y comienzan a transmitir datos.
    Aspectos a destacar: El cliente siempre inicia las comunicaciones y nunca se emplea el puerto 20 para transmitir datos.


    Hay dos modos de ejecutar el servidor FTP:
    1)Modo Standalone. El servidor se ejecuta como un proceso autónomo e independiente del sistema y siempre está activo esperando peticiones. Es el modo Recomendado.
    2)Modo Supervisor. El proceso del servidor FTP se ejecuta por el inetd como si se tratara de un proceso hijo. El proceso del servidor debe iniciarse cada vez que hay una nueva conexión.

    Mantenimiento del servidor FTP:
    Da igual como esté montado el servidor FTP, el administrador tendrá que hacer una serie de tareas cada x tiempo.
    • Organizar la información disponible en el servidor FTP por directorios, documentos, etc.
    • Gestionar las cuentas de usuario dando permisos, borrando cuentas inactivas, etc.
    • Mantener la seguridad en el acceso al contenido.
    • Realizar el mantenimiento del servidor y su contenido (actualizar el software, firewall, etc).

    Los servidores FTP trabajan con archivos Binarios(resto de archivos) y ASCII(contienen caracteres imprimibles)
46  Programación / PHP / Calcular tiempo de ejecución de un script en PHP en: 15 Abril 2011, 17:29 pm
Muchas veces en mis proyectos web tengo que optimizar el tiempo de carga y de ejecución de los scripts. Para eso me he creado una pequeña clase muy fácil de utilizar.

Código
  1. <?php
  2.  
  3. /**
  4.  * @author MadPitbull
  5.  * @copyright 2011
  6.  */
  7.  
  8.    class PageLoadingTime{
  9.  
  10.        private $time;
  11.        private $initTime;
  12.        private $finTime;
  13.        private $totalTime;
  14.  
  15.        /**
  16.          * PageLoadingTime::__construct()
  17.          * Starts the timer.
  18.          * @return null
  19.          */
  20.        public function __construct() {
  21.            $this->initPageLoadingTime();
  22.        }
  23.  
  24.        private function initPageLoadingTime() {
  25.            $this->time = microtime();
  26.            $this->time = explode(" ", $this->time);
  27.            $this->time = $this->time[1] + $this->time[0];
  28.            $this->initTime = $this->time;
  29.        }
  30.  
  31.        /**
  32.          * PageLoadingTime::getPageLoadingTime()
  33.          * Returns a float var with the page loading time in micro seconds.
  34.          * @return float
  35.          */
  36.        public function getPageLoadingTime() {
  37.            $this->time =  microtime();
  38.            $this->time = explode(" ", $this->time);
  39.            $this->time = $this->time[1] + $this->time[0];
  40.            $this->finTime = $this->time;
  41.            $this->totalTime = ($this->finTime - $this->initTime);
  42.  
  43.            return $this->totalTime;
  44.        }
  45.  
  46.    }
  47.  
  48. ?>

Su funcionamiento es muy sencillo, utiliza dos timers. El primero es inicializado al invocar al constructor de la clase y el valor del segundo es capturado invocando el método getPageLoadingTime y luego se guarda en otra variable la resta del tiempo registrado al principio del script con el tiempo registrado al final del script.
Os dejo un ejemplo de como funciona y mas abajo un enlace para descargar la clase y el ejemplo.

Código
  1. <?php
  2.  
  3.    include ("class.PageLoadingTime.php");
  4.    echo "[+] Testing the PageLoadingTime PHP Class <br />";
  5.  
  6.    $timer = new PageLoadingTime();
  7.  
  8.    for ($i = 0; $i <= 100; $i++) {
  9.        echo "<p style='text-indent: 1em'>" . $i . "<p>";
  10.    }
  11.  
  12.    echo "<p>Execution time: <b>" . $timer->getPageLoadingTime() . "</b></p>";
  13.  
  14. ?>

El bucle for lo he puesto solo para probar el funcionamiento de la clase.
Os dejo el enlace para descargar la clase, si no queréis descargarla podéis copiarla directamente de aquí, funcionará sin
problemas. [Descargar]
47  Programación / Programación General / Repositorios privados SVN gratis en: 7 Abril 2011, 00:24 am
 Los sistemas de control de versión son una herramienta estupenda para el desarrollo en equipo, o simplemente si uno quiere llevarse el trabajo a casa. Como muchos ya sabréis hay varios sistemas, como:
 
  • Mercurial (CVS). Se esta quedando obsoleta y su uso esta decayendo.
  • Subversion (SVN). Sistema que pretende sustituir y corregir algunos fallos de Mercurial. Funciona con Apache.
  • GIT. Libre y de código abierto, junto con Subversion es uno de los mas utilizados, el equipo desarrollador del kernel Linux utiliza GIT.
Claramente hay muchos mas, pero los arriba citados son los mas conocidos y empleados. Yo en mi caso utilizo SVN, aunque GIT también me gusta.

 El problema puede venir cuando buscamos un hosting de repositorios svn gratis y privado, una opción es crear nuestro proprio servidor SVN con Apache2, ya que, no es nada del otro mundo, pero podemos optar por buscar algún hosting online.

 La verdad es que hay muchos, pero la mayoría son de pago, aun así podemos encontrar algunos hostings gratis y bastante buenos. Al ser gratis tienen el inconveniente del poco espacio y transferencia, pero si nuestro proyecto no es grande, nos sirve igualmente.

 Voy a mencionar algunos que permiten crear repositorios privados:

 
  • Assembla. Es el que estoy utilizando ahora en un proyecto en el que colaboro. Ofrece 2 Gb de espacio, de momento no he encontrado ninguno que ofrezca mas. Es solo para Subversion, aunque, en las versiones de pago se puede elegir el sistema de versiones.
  • Unfuddle. Solo dispone de 200 Mb de espacio, como ya he mencionado, si se trata de un proyecto poco extenso, puede servir igualmente.
  • Codesion. Al igual que Unfuddle solo tiene 200 Mb de espacio, tanto este como el que acabo de mencionar permiten elegir entre GIT o SVN.
  • ProjectLocker. Solo se permiten 3 usuarios que formen parte del equipo y disponen de 300 Mb de espacio.
  • Beanstalkapp. Dispone de una versión Trial de un solo usuario y un repositorio, tengo poca información sobre esta pagina, pero tiene muy buena pinta.


De todos esos, yo me he quedado con Assembla, si vais a trabajar con GIT, hay muchos mas como Github. Seguramente habrá muchos mas a parte de los que he citado, si conocéis alguno mas que permita repositorios privados y que sean gratis os invito a que comentéis vuestra opinión.

Y tu conoces alguno que valga la pena? Compártelo con nosotros.

 

48  Programación / Desarrollo Web / Agilizar el desarrollo con Notepad++ en: 29 Marzo 2011, 18:18 pm


Uno de los editores de texto que mas me gusta es Notepad++, es gratis, es open-source, muy liviano, arranca en menos de un segundo y permite varias configuraciones, por lo que es bastante flexible. Hace bastante tiempo que lo utilizo y en Windows he llegado a sustituir al Bloc de Notas por este intuitivo editor.

 

Expansión de Texto
 Al escribir un texto podemos hacer que al pulsar una tecla determinada nos lo sustituya por otro texto definido anteriormente. Para esto necesitaremos descargar QuickText (es un plugin de Notepad++). Una vez descargado copiamos el contenido de esa carpeta en la carpeta de plugins de Notepad (C:\Program Files\Notepad++\plugins) y reiniciamos el editor.

 Una vez instalado podemos configurarlo en el menú superior -> Plugins -> QuickText.

 Seleccionamos por ejemplo PHP y configuramos las palabras clave que queremos que nos expanda, por ejemplo al poner if que nos lo expanda con los paréntesis y las llaves.

 Así cuando escribamos if y pulsamos la tecla TAB nos expandira el texto por lo que le hemos indicado anteriormente. El resto depende de vosotros, podeis poner uno que expanda la palabra php por <?php ?>.

 

Autocompletar
 

 Si lo tenéis en Español, vais a Configurar -> Preferencias -> Copias de Seguridad/Autocompletar y marcáis la casilla de Habilitar autocompletar en cada entrada. Muchos editores disponen de esta función, pero en Notepad++ viene deshabilitada por defecto. También marcamos Pistas para los parámetros de la función, que nos mostrara que parámetro va en cada función.

 


Macros
 Para grabar una macro vamos a Macro -> Comenzar grabación y escribimos la macro o el conjunto de código o texto. En mi caso tengo una pequeña plantilla de HTML grabada, así cuando empiezo un documento HTML nuevo solo tengo que ejecutar esta macro.

 

 Una vez escrito el contenido de la macro vamos a Macro -> Para grabación y Guardar grabación, le ponemos un nombre y asignamos las teclas. En mi caso cada vez que pulso CTRL + SHIFT + H me inserta una plantilla básica de HTML.

 
 TextFX
 Esto es otro plugin que viene instalado por defecto y nos ayuda bastante a la hora de desarrollar, dos funciones basica que debemos activar son el autocierre de etiquetas y parentesis.

 

 Aparte de este funcionalidad TextFX nos provee muchas mas, como conversores de texto y código como embellecimiento de código.

 Sintax Highlight personalizado
 En realidad este ultimo consejo no agiliza para nada el desarrollo en Notepad++, pero nuestra vista nos lo agradecerá. Si vamos a Configurar -> Configurador de Estilo podemos elegir varios temas para nuestro editor. Yo en mi caso utilizo Zenburn, un conjunto de colores oscuros y que no saltan a la vista, en definitiva algunos de ellos son muy agradables.

 

 


49  Programación / PHP / Introducción a FirePHP [Tutorial] en: 21 Marzo 2011, 22:59 pm
Tutorial de FirePHP
=======================



FirePHP es un plugin para FireFox utilizado por desarrolladores web para realizar la depuración
de las aplicaciones.

En principio se creo el plugin Firebug que se utiliza para debuggear "interfaces web" o lo que viene a
ser las paginas web estáticas. Para la depuración de las aplicaciones del lado del servidor se ha creado
el plugin llamado FirePHP.

Para utilizar este plugin hay que descargarlo e instalarlo desde la pagina oficial de addons de Firefox (http://addons.mozilla.org) y
descargar unos scripts en PHP para "conectar" la aplicación PHP con la consola de FirePHP.

Después de instalar el plugin hacemos clic en el icono de la cucaracha y abrimos la consola.



Una vez instalado el plugin nos dirigimos a su pagina oficial y descargamos los ficheros necesarios que debamos incluirnos en nuestro
proyecto para poder usarlo. La pagina oficial es (http://firephp.org).



Uno de esos ficheros deberemos incluirlo en nuestro proyecto web.



Para hacer las pruebas creen un script PHP y llamadlo como queráis. Lo primero que debemos hacer en nuestro proyecto
es habilitar el buffer de salida, para eso instanciamos el objeto ob_start(), nuestro script quedara algo así:

Código
  1. <?php ob_start(); ?>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <title>untitled</title>
  7. </head>
  8. <body>
  9. </body>
  10. </html>
  11. <?php ob_end_flush(); ?>

El siguiente paso es incluir el fichero fb.php o fb.php4 si se utiliza PHP 4 en nuestro proyecto.

Código
  1. <?php ob_start();
  2. include('includes/FirePHPCore/fb.php');
  3.  
  4. ?>
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  9. <title>untitled</title>
  10. </head>
  11. <body>
  12. <?php
  13. echo "Hola"; //Para probar que PHP funciona
  14. ?>
  15. </body>
  16. </html>
  17. <?php ob_end_flush(); ?>


Los métodos incluidos en la clase FirePHP pueden ser instanciados de forma estática.
Para añadir un log o hacer un pequeño Hola Mundo con FirePHP podemos usar el objeto log:

<?php
 FB::log('Hola mundo!');
?>

Ahora si miramos en la consola veremos nuestro mensaje.



Si no muestra ningún mensaje hay que asegurarse de que FirePHP esta habilitado, Menu Herramientas --> FirePHP --> FirePHP Enabled (tiene que estar marcado)

Os preguntareis básicamente para que sirve esto? Cuando debuggeamos una aplicación podemos cambiar el típico echo 'el objeto/función X esta funcionando'; por
un mensaje o log en este caso que se muestre en la consola del plugin.

También podemos usarlo para depurar el contenido de las variables:

Código
  1. <?php
  2. $variable = 'probando firephp';
  3. FB::log('Hola mundo!');
  4. FB::log($variable);
  5. ?>

Y el resultado seria el siguiente:



Para especificar el nombre de la variable o algún mensaje descriptivo agregamos lo siguiente:

Código
  1. <?php
  2. $variable = 'probando firephp';
  3. FB::log('Hola mundo!');
  4. FB::log($variable, 'Mi variable');
  5. ?>

Y en el resultado nos mostraría el nombre de la variable o el texto descriptivo indicado.



Para mensajes informativos se emplea el método info:

Código
  1. <?php
  2. FB::info('Esto es muy importante!');
  3. ?>



A parte de los mensajes informativos también podemos hacer advertencias:

Código
  1. <?php
  2. FB::warn('Esto es una advertencia!');
  3. ?>



O mostrar algún error:

Código
  1. <?php
  2. FB::error('Esto es un error!');
  3. ?>



Hay que asegurarse que no estamos usando FirePHP en un entorno de producción o en alguna web corporativa, ya que, puede ser bastante inseguro.
FirePHP se puede deshabilitar usando otro método booleano llamado SetEnabled(false/true), quedaría algo así:

Código
  1. <?php ob_start();
  2. include('includes/FirePHPCore/fb.php');
  3. FB::SetEnabled(false);
  4. ?>
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  9. <title>untitled</title>
  10. </head>
  11. <body>
  12. <?php
  13. $variable = 'probando firephp';
  14. FB::log('Hola mundo!');
  15. FB::log($variable, 'Mi variable');
  16.  
  17. FB::info('Esto es muy importante!');
  18.  
  19. FB::warn('Esto es una advertencia!');
  20.  
  21. FB::error('Esto es un error!');
  22. ?>
  23. </body>
  24. </html>
  25. <?php ob_end_flush(); ?>

O simplemente borrar las lineas referentes a FirePHP. Si refrescamos la pagina veremos que los mensajes ya no aparecen en la consola y no debemos
preocuparnos por la seguridad.

Para agrupar los mensajes FirePHP nos provee una funcionalidad que permite crear grupos para mostrar los diferentes mensajes en la consola del
plugin. Un ejemplo de como funcionan los grupos lo tenéis abajo:

Código
  1. <?php ob_start();
  2. include('includes/FirePHPCore/fb.php');
  3. FB::SetEnabled(true);
  4. ?>
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  9. <title>untitled</title>
  10. </head>
  11. <body>
  12. <?php
  13.  
  14. FB::group('Este es el primer grupo'); // Indica el inicio y el nombre del grupo.
  15. $variable = 'probando firephp';
  16. FB::log('Hola mundo!');
  17. FB::log($variable, 'Mi variable');
  18.  
  19. FB::info('Esto es muy importante!');
  20.  
  21. FB::warn('Esto es una advertencia!');
  22.  
  23. FB::error('Esto es un error!');
  24.  
  25. FB::GroupEnd(); // Indica el fin del grupo.
  26. ?>
  27. </body>
  28. </html>
  29. <?php ob_end_flush(); ?>


Y el resultado seria la agrupación de los mensajes:



Imaginémonos que no queremos mostrar en la pagina web los mensajes de error de PHP y que solo se vean en la consola, creamos un objeto a partir de la clase
FirePHP e instanciamos los métodos registerExceptionHandler y registerErrorHandler.

Código
  1. <?php
  2. $obj = new FirePHP();
  3. $obj->registerExceptionHandler();
  4. $obj->registerErrorHandler();
  5.  
  6. echo $variableSinDefinir;
  7.  
  8. ?>

Y el mensaje de error seria mostrado directamente en la consola y no en la pantalla a la vista de todos.

FirePHP permite debuggear hasta tablas o arrays. Se hace con el método table, el primer parámetro es un nombre descriptivo y el segundo es el array.

Código
  1. <?php ob_start();
  2. include('includes/FirePHPCore/fb.php');
  3. FB::SetEnabled(true);
  4. ?>
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  9. <title>untitled</title>
  10. </head>
  11. <body>
  12. <?php
  13.  
  14. $miArray = array (
  15. array('Asignatura', 'Profesor'),
  16. array('Matematicas', 'Pedro Sanchez'),
  17. array('Lengua', 'Soraya Labrada'),
  18. array('Biologia', 'Mercedes Lara')
  19.  
  20. ); //Un array que contiene otros arrrays.
  21.  
  22. FB::table('Tabla de Asignaturas', $miArray);
  23.  
  24. ?>
  25. </body>
  26. </html>
  27. <?php ob_end_flush(); ?>

Y en la consola veremos nuestro array representado en una tabla:



También podemos mostrar un array en forma de log:

Código
  1. <?php
  2.  
  3. $miArray = array(1,2,3,4,5,6,7,8,9);
  4.  
  5. FB::log($miArray);
  6.  
  7. ?>

Y nos mostrara algo parecido a lo de abajo, si hacemos clic en el mensaje informativo nos abrira una especie de popup con el
contenido del array:



Si no fuera bastante, FirePHP soporta tambien las clases y los objetos, o lo que viene siendo la POO.

Código
  1. <?php ob_start();
  2. include('includes/FirePHPCore/fb.php');
  3.  
  4. class MiClase {
  5. function hacerAlgo() {
  6. return 'Hola mundo desde POO';
  7. }
  8.  
  9. }
  10. ?>
  11. <!DOCTYPE html>
  12. <html lang="en">
  13. <head>
  14. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  15. <title>untitled</title>
  16. </head>
  17. <body>
  18. <?php
  19.  
  20. $obj = new MiClase();
  21.  
  22. FB::info($obj->hacerAlgo());
  23. ?>
  24. </body>
  25. </html>
  26. <?php ob_end_flush(); ?>

Y mostrara como mensaje informativo lo que devuelve nuestro metodo. Para ver el contenido de una clase entera se haria asi:

Código
  1. <?php
  2.  
  3. $obj = new MiClase();
  4.  
  5. FB::info($obj);
  6. ?>

Esto es todo, claramente se pueden hacer mas cosas con FirePHP, os recomiendo que visiteis la web del plugin (firephp.org) donde tienen una
wiki (firephp.org/wiki) con muchos tutoriales y documentacion.
50  Programación / PHP / Funciones con número arbitrario de argumentos [PHP] en: 6 Marzo 2011, 20:44 pm
Como muchos ya sabréis, PHP permite definir funciones con parámetros opcionales, otra funcionalidad que no es tan conocida, es que permite crear funciones que aceptan un numero arbitrario de parámetros.

Veamos una función que permite argumentos opcionales:
Código
  1. <?php
  2. // Funcion que acepta 2 parametros opcionales
  3. function dummy($parm1 = '', $parm2 = '') {
  4. echo "Parametro 1: $parm1 <br />";
  5. echo "Parametro 2: $parm2 <br />";
  6. }
  7. dummy('Hola','mundo!');
  8. ?>

Ahora vamos a ver como crear una función que acepte cualquier numero de argumentos, para ello vamos a utilizar la función func_get_args , que devuelve un array numérico con los argumentos pasados a la función.

Código
  1. <?php
  2. // La lista de argumentos es vacia
  3. function sinArgumentos() {
  4.  
  5. // Devuelve un array con los argumentos
  6. // pasados a la funcion
  7. $argumentos = func_get_args();
  8.  
  9. foreach ($argumentos as $k => $v) {
  10. echo "Argumento: ".($k+1).": $v <br />";
  11. }
  12.  
  13. }
  14.  
  15. sinArgumentos();
  16. // No imprime nada
  17.  
  18. sinArgumentos('Hola', ' mundo ',' maravilloso!');
  19. // Imprime los argumentos pasados
  20.  
  21. ?>


Esta función nos puede ser muy útil si pensamos crear un pequeño framework o librería. Abajo dejo otro ejemplo con una función que suma un numero indefinido de números.

Código
  1. <?php
  2.  
  3. function suma(){
  4. $s=0;
  5. foreach(func_get_args() as $a) $s+= is_numeric($a) ? $a : 0;
  6. /*
  7.  * Comprueba si el valor introducido es un numero,
  8.  * si no, se toma como un cero
  9.  */
  10. return $s;
  11. };
  12.  
  13. print suma(1,2,3,4,5,6,7,9,10); // Devuelve 47
  14. print suma(1,3,3,7); // Devuelve 14
  15. print suma(false,array(),5,5);
  16. /*
  17.  * Devuelve 10, ya que, el array y false lo
  18.  * toman como un cero
  19.  */
  20. ?>

No es nada del otro mundo pero nos puede venir muy bien este tipo de funciones en nuestras aplicaciones. Seguramente muchos ya conocían esta función.
Páginas: 1 2 3 4 [5] 6 7 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines