Tutoriales de php

« 1/3 2 3 »

La función GetImageSize() es realmente muy útil cuando queramos obtener el ancho y largo de una imagen, asi como el tipo de imagen y el MIME. Esta función afortunadamente no depende de la librería GD de PHP, en la cual se pueden generar y modificar imagenes libremente. 

Obteniendo las enseñanzas de la gran documentación de PHP.net observemos lo siguiente:

  1. El índice 0 contiene el ancho de la imagen en píxeles.
  2. El índice 1 contiene la altura.
  3. El índice 2 es una bandera que indica el tipo de imagen: 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(orden de bytes intel), 8 = TIFF(orden de bytes motorola), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM. Estos valores corresponden a las constantes IMAGETYPE que fueron agregadas en PHP 4.3.0.
  4. El índice 3 es una cadena de texto con el valor correcto height="yyy" width="xxx" que puede ser usado directamente en una etiqueta IMG. 

Esto quiere decir que GetImageSize() devuelve una matriz (array) que posteriormente sus datos pueden ser utilizados para hacer modificaciones a la imagen, asi como comprobar sus datos entre otras novedades.

Ahora veremos un ejemplo del uso de esta función.

He creado una función que nos reducirá una imagen a escala en base a un determinado tamaño del eje horizontal (ancho). 

<?php
function escala($url,$base){
$datos = GetImageSize($url) OR die("Imagen no válida");
$xp = $datos[0]/$base;
$yp = $datos[1]/$xp;
echo '<img src="'.$url.'" width="'.$base.'" height="'.$yp.'" border="0"/>';
}
?>

Observamos que esta función tiene dos argumentos, una equivale a la dirección de la imagen y la otra es el tamaño predefinido de lo ancho, puede ser cualquier número, nótese que en base a ese número sacará la escala de la imagen.

Tenemos tres opciones para generar la escala de la imagen:  

<?php
escala("imagenes/imagen.gif",100);
escala("http://www.dominio.com/imagenes/imagen.gif",100);
?>

A poner la función de la manera anterior nos mostrará automáticamente la imagen con escala impresa en HTML, muy útil para las galerías de imagenes.

Esta es sin duda otra alternativa para evitar el uso de la librería GD en PHP. 

Autor: Blasten

PHP5 nos facilita la interpretacion de documentos XML con la introduccion de SimpleXML, en este artículo veremos cómo la funcion simplexml_load_file nos permitirá leer e interpretar un archivo XML.

La forma en la que trabaja la funcion es sencilla, convierte el documento XML pasado en el parámetro de la funcion en un objeto de la clase simplexml_element si no presenta errores, vamos a ver un ejemplo: 

<?
$noticias = simplexml_load_file('rss.xml');
foreach ($noticias->item as $noticia) {
echo "<b>$noticia->title:</b> ";
echo "$noticia->description<br><br>n";
}
?>

Este sería un ejemplo muy sencillo de como leer e interpretar un fichero de noticias RSS, pero vamos a complicarlo un poco teniendo en cuenta los errores que pueden surgir:

<?
$archivo = 'rss.xml';
if (file_exists($archivo)) {
$noticias = simplexml_load_file($archivo);
if($noticias){
foreach ($noticias->item as $noticia) {
echo "<b>$noticia->title:</b> ";
echo "$noticia->description<br><br>n";
}
} else echo "Sintaxi XML inválida";
} else echo "Error abriendo rss.xml";
?>

Bueno, hemos visto que ahora el codigo es un poco mas completo en cuanto al reporte de errores. 

Autor: Eloi de San Martín

Acceso Private (Privado)
Este es el más restrictivo, los elementos declarados bajo private solo seran accesibles desde metodos de su clase original.

<?php
class Ejemplo ()
{
private $atributo;
 
function Ejemplo() {
$this->atributo = 'Hey!';
}
 
function daAtributo(){
return $this->atributo;
}
 
}
 
$obj = new Ejemplo();
 
echo $obj->daAtributo;
?>

Como vez, hemos tenido que instanciar un metodo para devolver el valor de atributo. 

Acceso Protected (Protegido)
Con este los elementos seran accesibles desde su clase original o desde clases heredadas. 

Autor: tutorialphp.net

Acceso Public (Publico)
Al ser declarado un metodo o atributo public sera accesible desde cualquier punto, este es el punto mas bajo del sistema de proteccion. Para declarar publico, se usa la palabra reservada public.

<?php
class Ejemplo ()
{
public $atributo;
 
function Ejemplo() {
$this->atributo = 'Hey!';
}
 
}
 
$obj = new Ejemplo();
 
echo $obj->atributo;
?>

 

Autor: tutorialphp.net

Siempre que allow_url_fopen esté habilitado en php.ini , se pueden usar URLs HTTP y FTP con la mayoría de las funciones que toman un archivo como parámetro. Además URLs pueden ser usadas con include() , include_once() , require() y require_once() . Consultar Apéndice M para más información sobre los protocolos soportados por PHP.

Nota: En PHP 4.0.3 y versiones anteriores, para usar envolturas URL, habia que configurar PHP usando la opción de configuración --enable-url-fopen-wrapper .

 

Nota: Las versiones para windows de PHP anteriores a PHP 4.3 no soportaban acceso remoto a ficheros en las funciones siguientes: include() , include_once() , require() , require_once() , y las funciones imagecreatefromXXX de la extensión Referencia LVIII, Funciones para imágenes .

Por ejemplo, se puede usar este para abrir un archivo en un servidor web remoto, analizar en la salida la información que se quiera, y entonces, usar la información en una consulta a base de datos, o simplemente para sacarlas en un estilo que coincida con el resto de su sitio web.

 

Ejemplo 39-1. Obtener el título de una página remota

<?php
$file = fopen ( "http://www.example.com/" , "r" );
if (! $file ) {
echo "<p>Unable to open remote file.n" ;
exit;
}
while (! feof ( $file )) {
$line = fgets ( $file , 1024 );
/* This only works if the title and its tags are on one line */
if ( eregi ( "<title>(.*)</title>" , $line , $out )) {
$title = $out [ 1 ];
break;
}
}
fclose ( $file );
?>
También se puede escribir a archivos en un servidor FTP (siempre que se conecte como un usuario con los correctos derechos de acceso). Solamente se pueden crear nuevos ficheros usando este método; si se intenta sobreescribir un fichero ya existente, la función fopen() fallará

Para conectar como un usuario distinto de 'anonymous', se necesita especificar el nombre de usuario (y posiblemente contraseña) dentro de la URL, tales como 'ftp://usuario:clave@ftp.example.com/ruta/hacia/archivo'. (Se puede usar la misma clase de sintaxis para acceder a archivos via HTTP cuando se requería una autenticació de same sort of syntax to access files via HTTP when they require Basic authentication.)

 

Ejemplo 39-2. Almacenando datos en un servidor remoto
<?php
$file = fopen ( "ftp://ftp.example.com/incoming/outputfile" , "w" );
if (! $file ) {
echo "<p>Unable to open remote file for writing.n" ;
exit;
}
/* Write the data here. */
fwrite ( $file , $_SERVER [ 'HTTP_USER_AGENT' ] . "n" );
fclose ( $file );
?>

 

Nota: Podeis creer por el ejemplo anterior, que podeis usar esta tecnica para escribir en un fichero de registro remoto. Desgraciadamente no funcionaria porque la llamada fopen() fallaria si el fichero remoto existe. Para usar registros distribuidos de esa manera podeis consultar la funcion syslog() .

Autor: PHP.net

PHP soporta transparentemente cookies HTTP . Las Cookies son un mecanismo que sirve para almacenar datos en el navegador del usuario remoto, para así poder identificar al usuario cuando vuelva. Se pueden poner cookies usando la función setcookie() . Las Cookies son parte de la cabecera HTTP , por tanto la función setcookie() debe ser llamada antes de que se produzca cualquier salida al navegador. Esta limitación es la misma a la de la función header() . Se pueden usar las funciones de almacenamiento intermedio del resultado para retrasar el resultado del script hasta que hayas decidido mandar o no una cookie o cabecera.

Cualquier cookie enviada a ti desde el cliente, automáticamente se convertirá en una variable PHP igual que ocurre con los métodos de datos GET y POST , dependiendo de las variables de configuración register_globals y variables_order . Si deseas asignar multiples valores a una cookie simple, añade simplemente [] a el nombre de la cookie.

En PHP 4.1.0 y posteriores, la matriz auto-global $_COOKIE será siempre actualizada con cualquier cookie mandada por el cliente. $HTTP_COOKIE_VARS es tambien actualizada en versiones anteriores de PHP cuando la variable de configuración track_vars esté activada. (Siempre activada a partir de PHP 4.0.3.)

Para más detalles, incluyendo notas o bugs de navegadores, ver la función setcookie() y setrawcookie() .

Autor: PHP.net

La extensión calendar pone a disposición una serie de funciones para simplificar la conversión entre los distintos formatos de calendario. El intermediario ó estándar en que se basa es la Cuenta de Días Juliana. La Cuenta de Días Juliana es una cuenta que comienza mucho antes que lo que mucha gente podría necesitar contar (como alrededor del 4000 AC). Para convertir entre sistemas de calendario, primero deberá convertir a la Cuenta de Días Juliana y luego al sistema de su elección. ¡La Cuenta de Días es muy diferente del Calendario Juliano! Para más información sobre la Cuenta de Días Juliana visitar http://www.hermetic.ch/cal_stud/jdn.htm . Para más información sobre sistemas de calendario, visitar http://www.boogle.com/info/cal-overview.html . En estas instrucciones se han incluído extractos entrecomillados de dicha página.

Instalación

Para tener trabajando estas funciones, tiene que compilar PHP con --enable-calendar .

La versión para Windows de PHP tiene soporte nativo para esta extensión. No se necesita cargar ninguna extensión adicional para usar estas funciones.

Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración en php.ini .

Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución. 

CAL_GREGORIAN (entero)
CAL_JULIAN (entero)
CAL_JEWISH (entero)
CAL_FRENCH (entero)
CAL_NUM_CALS
(entero)
CAL_DOW_DAYNO (entero)
CAL_DOW_SHORT
(entero)
CAL_DOW_LONG
(entero)
CAL_MONTH_GREGORIAN_SHORT
(entero)
CAL_MONTH_GREGORIAN_LONG
(entero)
CAL_MONTH_JULIAN_SHORT
(entero)
CAL_MONTH_JULIAN_LONG (entero)
CAL_MONTH_JEWISH (entero) CAL_MONTH_FRENCH (entero)

Las siguientes constantes se pueden utilizar desde PHP 4.3.0 :

CAL_EASTER_DEFAULT (entero)
CAL_EASTER_ROMAN (entero)
CAL_EASTER_ALWAYS_GREGORIAN (entero)
CAL_EASTER_ALWAYS_JULIAN
(entero) 

Autor: php.net
Problema de rutas 1

Supongamos que tenemos como ruta del "public_html" esta ruta completa: "/home/tuweb/public_html/" y lo que queremos es un archivo que está dos subdirectorios abajo... ó lo que es lo mismo en el raiz.

La respuesta podría ser $_SERVER['DOCUMENT_ROOT'] (El directorio raíz de documentos bajo el que está siendo ejecutado el script actual), pero el autor del hilo descarta esta opción para ello nos da tres alternativas:

Alternativa 1:

str_replace("subdir/subdir/miscript.php", "", __FILE__);

Alternativa 2:

dirname(dirname(__FILE__));

Alternativa 3:

realpath("../../");

__FILE__ nos devuelve el nombre del fichero utilizado en la ejecución del script.
str_replace :Sustitiye todas las apariciones de una cadena en otra
dirname : Devuelve el nombre del directorio de un ruta dada.
realpath : Devuelve el nombre de ruta absoluto simplificado.

¿Cúal de estas tres opciones os parecen mejor (limpia, rápida y óptima)?

Problema de rutas 2

Otro tema relacionado con las rutas de Php con el que me encontré hace poco tiempo es el siguiente:

Necesitaba obtener mediante una función la URL raiz a partir de una URL dada, voy a poner un ejemplo para facilitar un poco la comprensión del problema:

URL ofrecida: http://www.tufuncion.com/index.php
URL devuelta por función: http://www.tufuncion.com/

URL ofrecida: http://www.tufuncion.com/themes/tufuncion/logo.png
URL devuelta por función: http://www.tufuncion.com/

Esta es la función que finalmente utilicé:

 

function obtener_url_raiz($url) {
$parte1 explode("/"$url);
$count count($parte1);
$count_array $count 1;
if (
$count >= 4) {
if (
$parte1[$count_array] != '') {
 
$path str_replace($parte1[$count_array], ''$url); }
else { 
$path $url; }
} else {
if(
substr($url,-1) != '/'$url .= '/'$path $url; }
 return 
$path;
}

 

Autor: tufuncion.com

A estas alturas seguro que conoces bastantes cosas acerca de PHP 5 y a lo mejor has oído hablar del soporte para el tratamiento de documentos XML que trae está versión de PHP .

Sin duda sorprende todas aquellos desarrolladores que pudiendo haber migrado sus aplicaciones a Php 5 siguen desarrollando en PHP 4, hace poco escribíamos acerca de los motivos de la lenta muerte de PHP 4 .

La gran noticia para aquellos que habitualmente trabajaban con documentos XML es que PHP 5 trae un buen número de extensiones para trabajar con los documentos XML . El objetivo principal del soporte XML que trae PHP 5 es proporcionar una base sólida de herramientas para trabajar con los documentos XML y además proporcionar una cierta compatibilidad entre las diferentes herramientas.

La meta para la ayuda de XML en PHP 5 era no sólo proporcionar una base sólida de los sistemas de herramienta para trabajar de XML, pero también proporcionar una cierta unidad entre los sistemas de herramienta ellos mismos.

DOM

La revolución de la versión 5 de PHP comienza con la extensión ext/dom, que en PHP 4 estaba plagada de problemas que se fueron solucionando en cada nueva versión.

Veamos unos ejemplos:

Documento XML

<?xml version="1.0"?>
<article>
<name>XML in PHP 5
<author>Juan Perez
</article>

Ejemplo de Uso en PHP 4

<?php
$doc 
domxml_open_file('article.xml');
$root $doc->document_element();
$node $root->first_child();

while (
$node) {
if ((
$node->node_type() == XML_ELEMENT_NODE) &&
(
$node->node_name() == 'name')) {
$content $node->first_child();
$output $content->node_value();
print 
"Output: $output
"
;
break;
}
$node $node->next_sibling();
}
?> 

Ejemplo de Uso en PHP 5

 

<?php
$doc 
= new DOMDocument();
$doc->load('article.xml');
$root $doc->documentElement;
$node $root->firstChild;

while (
$node) {
if ((
$node->nodeType == XML_ELEMENT_NODE) &&
(
$node->nodeName == 'name')) {
$content $node->firstChild;
$output $content->nodeValue;
print 
"Output: $output
"
;
break;
}
$node $node->nextSibling;
}
?> 

 

Autor: S/A

¿Qué es una clase?

La mayoría de lenguajes de programación modernos están orientados a objetos. El concepto de orientación a objetos es una técnica que acerca la programación a la forma de pensar humana. Podemos pensar en cualquier aspecto de la vida real como un sistema basado en objetos: un coche, un bolígrafo, un libro, una silla, o incluso una persona. Todos estos pueden ser objetos con una serie de características y una serie de capacidades. Por ejemplo, un coche tiene un número de puertas determinado, un color, un tamaño... y es capaz de realizar tareas como arrancar, acelerar, frenar... Lo mismo sucede con una persona: tiene una estatura, un peso, un color de ojos y muchísimas características que la hacen única frente a las demás.

Siguiendo con el ejemplo, cuando uno va por la calle es capaz de distinguir fácilmente a los seres humanos de otro tipo de elementos, como los coches. ¿Por qué esto es así? Porque todos tenemos en la mente la idea de un ser humano, su molde, las características que tiene que cumplir una entidad para poder identificarse como un ser humano y no como un coche.

Este concepto que parece tan evidente es la base de la programación orientada a objetos. En el ejemplo, la idea mental que tenemos de un ser humano sería una clase, mientras que cada persona sería una representación física real de esa idea de ser humano, en términos de programación cada persona sería una instancia de esa clase.

En resumen, una clase es una idea de un objeto que tiene sus carácterísticas, que a partir de ahora llamaremos propiedades, y sus habilidades, su capacidad de realizar ciertas acciones, que en programación llamaremos métodos. La clase coche, por ejemplo, podría tener como propiedades el color, las puertas, el tamaño, la marca, el modelo, la velocidad máxima, y como métodos las acciones de cambiar de marcha, acelerar, frenar, abrir el capó, bloquear las puertas.

Un ejemplo del uso de clases

Pensemos en una aplicación que gestione los datos de los pacientes de una consulta médica, de forma que en cada visita el médico pueda ver el historial del paciente. Una opción recomendable para desarrollar este tipo de aplicación sería crear una clase llamada Paciente y dotarla de propiedades como la edad, el sexo, el peso, la estatura, el número de identificación y las observaciones. Podríamos ampliar la aplicación creando una clase llamada Visita con propiedades como fecha, hora y causa, y otra clase, por ejemplo, llamada Análisis que podríamos preparar para representar los resultados.

Todas estas clases podrían ir entrelazadas desde los métodos. Por ejemplo, la clase Paciente podría tener un método llamado nueva_visita que creara una nueva instancia de la clase Visita y esta a su vez podría tener un método llamada nuevo_analisis, que se aplicaría cuando el médico diese la orden a un paciente de hacerse un Análisis.

La programación orientada a objetos comporta una serie de ventajas como la reutilización de código, la mejor comprensión, la flexibilidad, la capacidad de hacer extensible una aplicación, la mejor división de las tareas... En el ejemplo podríamos extender la aplicación símplemente creando nuevas propiedades a la clase Paciente, podríamos dividir sin problemas el trabajo a realizar entre varias personas, podríamos utiilzar código de otras aplicaciones...

Sintaxis de clases en PHP

La programación orientada a objetos, aparte de las clases, se basa en más conceptos como la herencia, las interfaces, el polimorfismo... algunos de los cuales todavía no se implementan en la versión actual de PHP. La sintaxis básica de una clase en PHP es la siguiente.

<?php
class nombre_clase {
var $propiedad_1;
var $propiedad_2;
var $propiedad_3;

function método_1($parametro) {
  instrucciones_del_método;
}
}
?>

Una vez definida la clase, que es el molde del objeto, se pueden crear instancias a partir de ella. En PHP se hace de la siguiente forma.

<?php
$nombre_instancia = new nombre_clase($parametros);
?>

Herencia en las clases

La herencia es un concepto de la programación orientada a objetos, con el que una clase puede heredar todas las propiedades y los métodos de otra y además añadir los suyos propios. Por ejemplo, tanto la clase Gato y la clase Tigre podrían heredar el contenido de la clase Mamífero y además tener características propias.

PHP también está preparado para trabajar con la herencia de clases. El problema surge al usar el sistema automático para incluirlas. Una clase no puede heredar las características de otra, si no existe una definición previa de esa misma, como es lógico. Por tanto, es probable que el código anterior reporte un error de ese tipo.

La solución está de nuevo en el include_once. Básicamente se trata de asegurarnos de que cuando una clase vaya a recibir la herencia de otra, esa segunda clase ya se haya incluído en el archivo. Esto se consigue haciendo la llamada a la clase padre desde el archivo de la clase hijo que va a heredar las características.

<?php
include_once("class_padre.php");

class hijo extends padre {
var $propiedad_1;
var $propiedad_2;

function método_1($parametro) {
instruccion_del_método;
}
}
?>

Autor: Joaquin Marti Garc
« 1/3 2 3 »