Con PHP-CLI (Command Line Interface) es posible generar archivos PDF, Flash,e imágenes en diferentes formatos.
Permite conextarse a servidores de bases de datos SQL, MySQL, PostgreSQL, Oracle, ODBC, DB2, Microsoft SQL Server,
Firebird, SQLite o MongoDB.
Es alternativa a Microsoft ASP y ASP.NET (que utiliza C# y Visual Basic .NET como lenguajes), a ColdFusion de la empresa Adobe,
a JSP/Java, CGI/Perl y a Node.js/Javascript.
|
Ingresa un pasword para acceder a una página secreta PHP. ( Ayuda: . . la clave es el esposo de tu mama )
Es una posición de memoria creada para introducir o asignar cualquier valor o dato.
- Durante la ejecución del script el valor de la variable puede "variar" tanto de tipo como de valor.
- En PHP no hace falta declarar la variable ya que simplemente anteponiendo el carácter $
al nombre de la variable estamos indicando que es una variable.
- Este lenguaje "CASE SENSITIVE", diferencia entre mayúsculas y minúsculas y por ello, no es lo mismo
$miVariable=valor; que $MiVaRiABle=valor;
pues PHP lo interpreta como dos variables diferentes.
- Los tipos de datos posibles que almacena una variable son:
Double | Números decimales o de coma flotante |
String | Cadenas de texto |
Boolean | Valores True o False |
Array | Tipo especial de colección de valores |
Object | Tipo especial de dato complejo |
PHP realiza la conversión de tipos en función de los operandos
y del operador.
Así, para sumar la cadena '10' y el número 20 la acción que realizaría sería convertir la primera variable a numérica y sumar 10+20=30.
Esta conversión usa las funciones:
- gettype(): Recibe el tipo de variable.
- settype($variable,'tipo variable'): Transforma el tipo de variable del modo actual a el modo que le introduzcamos.
Variables características de PHP:
Argv | Array de argumentos pasados en la ejecución del script. |
$_SERVER['argc'] | Número de parámetros pasados al script en su ejecución. |
$_SERVER['PHP_SELF'] | Nombre del script que se está ejecutando |
$_COOKIE | Array asociativo de pares (clave, valor) pasados a través de cookies |
$_GET | Array asociativo de pares (clave, valor) pasados a través de GET |
$_POST | Array asociativo de pares (clave, valor) pasados a través de POST |
$_FILES | Array asociativo que contiene información de los ficheros recibidos mediante POST |
$_ENV | Array asociativo de pares (clave, valor) del entorno |
$_SERVER | Array asociativo de pares (clave, valor) del servidor |
$_SESSION | Array asociativo de pares (clave, valor) de sesión |
Valor que se mantiene igual a lo largo de la ejecución del script y suele usarse un gran número
de veces.
Su sintaxis es:
define("nombre de la constante", valor);
PRIMER SCRIPT PHP:
<html>
<body>
<?php
$myvar = "Hola. Este es mi primer script en PHP n";
//Esto es un comentario
es mi primer script en PHP n";
//Esto es un comentario echo $myvar;
?>
</body>
Una vez instalados PHP y MySQL, y el servidor APACHE, escribamos nuestro primer script:
Luego de grabar con la extensión php, subimos al servidor,
http://mi_servidor/php/test.php,
asì el navegador mostrarà
"Hola. Este es mi primer script en PHP".
Notemos en la primera línea del script
<?php
que delimita el comienzo de un script en PHP, y en la última colocamos
?>
que delimita el final del script.
Todas las líneas que se encuentre entre estos delimitadores deben acabar en punto y coma, excepto las sentencias de control (if, swicht, while, etc.).
Para comentar una sola línea usamos al principio de la línea //, para varias usamos los delimitadores /* - */ .
Para que el servidor envié texto utilizaremos la instrucción echo, ò printf similar al del C o Perl.
La palabra myvar comienza con el signo dólar $, que indica a PHP que es una variable.
Hemos asignado un texto a esta variable, pero también pueden contener números o tablas (arrays).
El texto que le asignamos a la variable termina con n , que no se imprime, sirve para indicarle al navegador una nueva línea.
OPERADORES EN PHP:
Sirven para realizar diversas operaciones.
+ | Suma dos valores |
- | Resta dos valores (o pasa a negativo un valor) |
* | Multiplica dos valores |
/ | Divide dos valores |
% | Resto de dividir dos valores |
++ | Incremento una unidad |
-- | Decremento una unidad |
= | Asigna a la parte derecha el valor izquierdo |
+= | Realiza la suma de la derecha con la izquierda y la asigna a la derecha |
-= | Realiza la resta de la derecha con la izquierda y la asigna a la derecha |
*= | Realiza la multiplicación de la derecha con la izquierda y la asigna a la derecha |
/= | Realiza la división de la derecha con la izquierda y la asigna a la derecha |
%= | Se obtiene el resto y se asigna |
.= | Concatena el valor de la izquierda con la derecha y lo asigna a la derecha |
! | Operador NO o negación. Si era true pasa a false y viceversa |
AND | Operador Y, si ambos son verdaderos vale verdadero |
OR | Operador O, vale verdadero si alguno de los dos es verdadero |
XOR | Verdadero si alguno de los dos es true pero nunca ambos |
&& | True si ambos lo son |
|| | True si alguno lo es |
== | Comprueba si dos números son iguales |
!= | Comprueba si dos números son distintos |
> | Mayor que, devuelve true en caso afirmativo |
< | Menor que, devuelve true en caso afirmativo |
>= | Mayor o igual |
<= | Menor o igual |
ESTRUCTURAS DE CONTROL:
Indican la acción debe realizar en cada caso.
if(condición/es)
acción a realizar;
}
else{
acción a realizar en caso de que no se cumpla;
}
{
Otro ejemplo básico para entender mejor:
if($edad>=18){
Comprar cerveza;
}
else{
echo "No puedes comprar cerveza porque no tienes 18 años";
}
Podemos realizar condicionales mas completas como el siguiente caso:
if(($edad>=18)&&($dinero>0)){
Puedes comprar cerveza porque tienes 18 y tu dinero es mayor que 0;
}
else{
echo "O no tienes dinero o no tienes los 18" ;
}
Switch (expresión)
valor1
break
case valor2:
sentencia a ejecutar cuando la expresión tiene como valor
valor2
break
default:
}
{
case valor1:
sentencia a ejecutar cuando la expresión tiene como valor
sentencia a ejecutarse por defecto, cuando no se cumpla ninguna de las condiciones anteriores.
for (inicialización;condición;actualización)
sentencia a ejecutar mientras se cumpla la condición
{
}
El bucle for tiene 3 partes:
Ejemplo:
for($i=1;i<=10;i++){
echo "El número actual es".$i; }
De esta forma escribiría todos los números contenidos entre 0 y 10.
while(condición)
sentencia a ejecutar
{
}
Para entender mejor el uso de while nos serviremos del siguiente ejemplo:
while($color != "rojo"){
color= dame un color; }
En este caso siempre y cuando el color no sea rojo nos dirá que introduzcamos un color.
do
{
sentencia a ejecutar
}
while(condicion)
La función es un conjunto de rutinas y acciones que el script ejecutarà varias veces; puede se llamada desde cualquier punto del script luego ejecutada.
La función puede recibir parámetros externos de los cuales dependa el resultado. La sintaxis usada es:
function nombre(parámetros)
{
instrucciones de la función
}
nombre(parámetros)
Ejemplo: Función que realice la suma de dos números y muestre el resultado
function sumar($sumando1,$sumando2){
$ suma=$sumando1+$sumando2
echo $sumando1."+".$sumando2."=".$suma;
}
sumar(5,6)
Hay que diferenciar entre los dos tipos de matrices existentes:
En caso de no indicarle una posición el array tomara el valor siguiente al ultimo valor introducido.Ejemplo: $nombres[]='Lucas' // tomaría como valor 1 ya que lo ultimo introducido era 0.
Mediante array() en el cual le pasamos los elementos como parámetros. En caso de matriz indexada toman la posición que ocupan en la creación de la matriz, mientras que los de la matriz asociativa se les asigna su valor mediante "=>".
Ejemplo: $amigo=array('Nombre'=>'Jose','Direccion'=>'Neopatria 21'); Cabe destacar que PHP no solo se limita a la existencia de matrices por sí solo sino que existen matrices de matrices, o lo que es lo mismo, matrices multidimensionales.
Ejemplo: $amigos[2]['Pedro'] Recorrido de una matriz Disponemos de diversas herramientas para poder acceder a los elementos de una matriz. En cada momento se mantiene una referencia del elemento de la matriz al que se tiene acceso, por tanto, para recorrer una matriz bastará con modificar dicha referencia. En caso de una matriz indexada el recorrido se realizara mediante un bucle y para ello debemos saber el número de elementos totales que posee la matriz. Para ello nos basamos de la función count(variable) donde variable representa la variable de la que se quiere obtener el número de elementos. Si variable es una matriz devuelve el número de elementos que tiene, devuelve 1 si solo tiene un elemento (aunque no sea matriz) y 0 si no tiene ningún valor.
Otra función que nos permite saber el número de elementos es sizeof(matriz) . Para acceder a los elementos de una matriz asociativa debemos usar la función ecah() que recupera el par formado por clave y valor y además avanza una posición de puntero. Su sintaxis es each(matriz) y los valores que devuelve la matriz asociativa son los siguientes:
Clave | Significado |
0 | Nombre de la clave |
1 | Valor asociativo de la clave |
Key | key Nombre de la clave |
Value | Valor de la clave |
La función que realiza el constructor list(variable1,variable2...variableN) es asignar los valores del elemento actual de una matriz a las variables indicadas como parámetro.
Navegación sobre matrices: Cuando se trata de matrices indexadas la navegación es sencilla ya que tan solo basta acceder al elemento que queremos mostrar, pero al tratarse de alguna matriz asociativa no se puede aplicar el mismo tratamiento. Para ello existen un conjunto de funciones prefabricadas que nos permiten realizar multitud de acciones:
Sintaxis Acción
reset(matriz); El puntero interno vuelve a la primera posición
end(matriz); El puntero interno va a la ultima posición
next(matriz); El puntero va al elemento siguiente
prev(matriz); Accede al elemento anterior
Current(matriz); Devuelve el contenido del elemento actual
Inserción de elementos Para la inserción de elementos dentro de un array existen una serie de funciones que nos permiten añadir elementos. Entre ellas destacamos:
array_push(matriz,variable1,variableN); Añade elementos al final de la función y su longitud se incrementara tantos elementos como se hayan añadido
array_unshift(matriz,variable1,variableN); Añade elementos al principio de la función desplazando a los otros tantas posiciones como elementos haya.
array_pad(matriz,nuevo_tamaño,valor_relleno); Aumenta el tamaño de la matriz empleando un valor proporcionado como relleno.
Eliminación de elementos array_shift(matriz); Elimina el primer elemento de la matriz array_pop(matriz);
Elimina el último elemento de la matriz array_splice(entrada,pos_ini,[tamaño],[sustitutos]);
Se usa para reemplazar o borrar el contenido de una porción de matriz, para ello debemos especificar la posición desde la cual queremos iniciar el borrado o sustitución, el tamaño o número de elementos que se verán afectados y los sustitutos (en caso que deseemos sustituirlo por algún elemento).
array_keys(matriz,[valor buscado]);
Se emplea cuando deseamos eliminar un elemento cuya posición desconocemos. array_values(matriz);
Devuelve una matriz indexada con todos los valores almacenados en la matriz pasada como parámetro. Manipulación masiva de matrices
array_walk(matriz,nombre_de_la_funcion,lista_parametros);
Se emplea para realizar el mismo proceso definido en la función en todos los elementos incluidos.
Otras funciones
En este apartado se comentaran una serie de funciones (no todas porque seria imposible) que nos pueden servir en cierto momento. compact() Devuelve una matriz asociativa a partir de un numero indeterminado de parámetros
extract() Crea variables desde matriz asociativa
array_unique() Devuelve matriz sin datos repetidos ya que algunos se eliminan
array_reverse() Devuelve matriz con mismos elementos pero en orden inverso
shuffle() Modifica el orden de elementos de forma aleatoria
array_count_values() Devuelve una matriz asociativa que contiene frecuencias de repetición de los valores de la matriz in_array() Permite comprobar si un valor esta en la matriz
array_merge() Combina elementos de dos matrices en 1.
Para crear matrices en PHP existen dos formas:
- De forma implícita, que consistiría en indicarle el elemento (ya sea proporcionando su posición o su clave).Ejemplo: $nombres[0]='Javier';
En caso de no indicarle una posición el array tomara el valor siguiente al ultimo valor introducido.Ejemplo:
$nombres[]='Lucas' // tomaría como valor 1 ya que lo ultimo introducido era 0.
- Mediante array() en el cual le pasamos los elementos como parámetros. En caso de matriz indexada toman la posición que ocupan en la creación de la matriz, mientras que los de la matriz asociativa se les asigna su valor mediante "=>".Ejemplo: $amigo=array('Nombre'=>'Jose','Direccion'=>'Neopatria 21');
Cabe destacar que PHP no solo se limita a la existencia de matrices por sí solo sino que existen matrices de matrices, o lo que es lo mismo, matrices multidimensionales. Ejemplo: $amigos[2]['Pedro']
Recorrido de una matriz
Para poder acceder a los elementos de una matriz: En cada momento se mantiene una referencia del elemento de la matriz al que se tiene acceso, por tanto, para recorrer una matriz bastará con modificar dicha referencia. En caso de una matriz indexada el recorrido se realizara mediante un bucle y para ello debemos saber el número de elementos totales que posee la matriz. Para ello nos basamos de la función count(variable) donde variable representa la variable de la que se quiere obtener el número de elementos. Si variable es una matriz devuelve el número de elementos que tiene, devuelve 1 si solo tiene un elemento (aunque no sea matriz) y 0 si no tiene ningún valor.
Otra función que nos permite saber el número de elementos es sizeof(matriz) . Para acceder a los elementos de una matriz asociativa debemos usar la función ecah() que recupera el par formado por clave y valor y además avanza una posición de puntero. Su sintaxis es each(matriz) y los valores que devuelve la matriz asociativa. La función que realiza el constructor list(variable1,variable2...variableN) es asignar los valores del elemento actual de una matriz a las variables indicadas como parámetro.
CADENAS DE CARACTERES:
Una cadena consiste en una secuencia de caracteres que se encuentran comprendidos entre unos delimitadores que pueden ser:
- Comillas simples ' '
- Comillas dobles " "
- Documento incrustado <<< >>>
Si se desea por ejemplo unas " " dentro de las comillas de la cadena de es necesario realizar la acción que se denomina escapar un carácter que consiste en precederlo de una es decir ". Los caracteres especiales que pueden aparecer dentro de un documento con delimitación son:
Secuencia | Significado |
n |
Nueva línea |
r |
Retorno de carro |
t |
Tabulación horizontal |
Barra invertida |
|
$ |
Signo de dólar |
" |
Comillas dobles |
[0-7]{1,3} |
Carácter ASCII que coincide con el numero octal |
x[0-9A-Fa-f]{1,2} |
Carácter ASCII que coincide con el numero hexadecimal |
El caso de documento incrustado es diferente al de ambas comillas. Su sintaxis es:
- <<<Identificador
- Cadena de caracteres
- Identificador;
El resultado obtenido con documento incrustado es el texto mostrado igual que se ha introducido.
- La función chr(valor) nos devuelve en una variable del tipo cadena el carácter de la tabla de códigos ASCII asociado a un valor que recibe como parámetro, el valor que se pase debe estar entre 0 y 255.
- La función ord(cadena) nos devuelve un número entero que se corresponde con el código ASCII del primer caracter que recibe como parámetro.
Símbolo |
Significado |
% |
Representa el símbolo del porcentaje |
b |
El argumento se trata como nº entero y se representa en binaria. |
c |
El argumento se trata como nº entero y se el carácter cuyo código ASCII se corresponde con el valor. |
d |
El argumento se trata como nº entero y se representa en codificación decimal sin parte fraccionaria |
f |
El argumento se trata como un nº de tipo double y se representa como un decimal sin coma flotante |
o |
El argumento se trata como un nº entero y se representa en codificación octal |
s |
El argumento se trata y representa como una cadena de caracteres |
x |
El argumento se considera un nº entero y se representa en codificación hexadecimal en minúsculas |
X |
El argumento se considera un nº entero y se representa en codificación hexadecimal en mayúsculas |
- Sprintf(formato,[valores]); su funcionamiento es idéntico a printf. Lo único que la cadena resultante de aplicarle un determinado formato se guarda en una variable.
Campo | Significado |
scheme |
Http |
host |
Ip o DNS |
port |
puerto |
user |
nombre usuario |
password |
contraseña |
path |
path completo al recurso |
query |
query string con datos al recurso |
urldecode |
decodifica la información |
urlencode |
Codifica la información |
C L A S E S:
PHP que no es un lenguaje orientado a objeto, posee características que permiten definir las clases, de modo que sirven hacer el código más legible,
reutilizable y más rentable por su portabilidad a otras aplicaciones y su mantenimiento.
Las Clases no son más que una serie de variables y funciones que describen y actúan sobre algo; así para crear la clase automóvil, la cual tendrá diversas variables, $color , $ , $marca, $potencia, $matricula y habrá una serie de funciones que actuarán sobre la clase automóvil como Precio(), Acelerar() , Frenar() , Girar() y Reparar().
Ejemplo: Crear la clase mysql, para realizar consultas a las bases de datos MySQL.
<?php class DB_mysql { /* variables de conexión */ var $BaseDatos; var $Servidor; var $Usuario; var $Clave; /* identificador de conexión y consulta */ var $Conexion_ID = 0; var $Consulta_ID = 0; /* número de error y texto error */ var $Errno = 0; var $Error = ""; /* Método Constructor: Cada vez que creemos una variable de esta clase, se ejecutará esta función */ function DB_mysql($bd = "", $host = "localhost", $user = "nobody", $pass = "") { $this->BaseDatos = $bd; $this->Servidor = $host; $this->Usuario = $user; $this->Clave = $pass; } /*Conexión a la base de datos*/ function conectar($bd, $host, $user, $pass){ if ($bd != "") $this->BaseDatos = $bd; if ($host != "") $this->Servidor = $host; if ($user != "") $this->Usuario = $user; if ($pass != "") $this->Clave = $pass; // Conectamos al servidor $this->Conexion_ID = mysql_connect($this->Servidor, $this->Usuario, $this->Clave); if (!$this->Conexion_ID) { $this->Error = "Ha fallado la conexión."; return 0; } //seleccionamos la base de datos if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) { $this->Error = "Imposible abrir ".$this->BaseDatos ; return 0; } /* Si hemos tenido éxito conectando devuelve el identificador de la conexión, sino devuelve 0 */ return $this->Conexion_ID; } /* Ejecuta un consulta */ function consulta($sql= ""){ if ($sql == "") { $this->Error = "No ha especificado una consulta SQL"; return 0; } //ejecutamos la consulta $this->Consulta_ID = @mysql_query($sql, $this->Conexion_ID); if (!$this->Consulta_ID) { $this->Errno = mysql_errno(); $this->Error = mysql_error(); } /* Si hemos tenido éxito en la consulta devuelve el identificador de la conexión, sino devuelve 0 */ return $this->Consulta_ID; } /* Devuelve el número de campos de una consulta */ function numcampos() { return mysql_num_fields($this->Consulta_ID); } /* Devuelve el número de registros de una consulta */ function numregistros(){ return mysql_num_rows($this->Consulta_ID); } /* Devuelve el nombre de un campo de una consulta */ function nombrecampo($numcampo) { return mysql_field_name($this->Consulta_ID, $numcampo); } /* Muestra los datos de una consulta */ function verconsulta() { echo "<table border=1>n"; // mostramos los nombres de los campos for ($i = 0; $i < $this->numcampos(); $i++){ echo "<td><b>".$this->nombrecampo($i)."</b></td>n"; } echo "</tr>n"; // mostrarmos los registros while ($row = mysql_fetch_row($this->Consulta_ID)) { echo "<tr> n"; for ($i = 0; $i < $this->numcampos(); $i++){ echo "<td>".$row[$i]."</td>n"; } echo "</tr>n"; } } } //fin de la Clse DB_mysql ?>Así, para crear una clase usamos la sentencia class, además creamos una función con el mismo nombre que la clase, a esa función se le llama constructor y se ejecutará cada vez que definamos una variable de esa clase. Aunque, no es obligatorina variable de esa clase, ni crear un constructor en una definición de clase.
El operador -> , indica una variable o método (parte derecha del operador) de una clase (parte izquierda del operador).
Para hacer referencia a la clase que estamos creando dentro de su definición, debemos utilizar this.
Ejemplo: Si el código anterior lo hemos guardado en un fichero llamado clase_mysql.inc.php.
<body> <html> <?php require ("clase_mysql.inc.php"); $miconexion = new DB_mysql ; $miconexion->conectar("mydb", "localhost", "nobody", ""); $miconexion->consulta("SELECT * FROM agenda"); $miconexion->verconsulta(); ?> </body> </html>
F E C H A S:
El Tiempo suele tomarse con respecto al inicio de la "era UNIX" que es el 1 de enero de 1970 a las 00:00:00.
y orientadas a la obtención y representación en diferentes formatos, cuyas funciones mas comunes son:
Clave | Contenido |
seconds | Numero de segundos de la hora actual |
minutes | Numero de minutos de la hora actual |
hours | Numero de horas de la hora actual |
mday | Día correspondiente del mes |
wday | Día de la semana en valor numérico(empezando por 0) |
mon | Mes del año en valor numerico.Del 1 al 12. |
year | Valor numérico del año |
yday | Día del año en valor numérico |
weekday | Cadena de caracteres que contiene el día de la semana(en ingles) |
month | Cadena de caracteres que contiene el mes del año(en ingles) |
0 | Marca de tiempo obtenida por la función getdate() |
Índice | Clave | Contenido |
0 | tm_sec | Numero de segundos de la fecha indicada |
1 | tm_min | Numero de minutos de la fecha indicada |
2 | tm_hour | Numero de horas de la fecha indicada |
3 | tm_mday | Día correspondiente del mes |
4 | tm_wday | Día de la semana en valor numérico(empezando por 0) |
5 | tm_mon | Mes del año en valor numerico.Del 0 al 11. |
6 | tm_year | Valor numérico del año.(se ve afectado por el efecto 2000) |
7 | tm_yday | Día del año en valor numérico |
8 | tm_isdst | Indica si esta activado el efecto del cambio de hora. |
Opción | Descripción |
a | Hace que en la hora aparezca la cadena am o pm |
A | Hace que en la hora aparezca la cadena AM o PM |
d | Día del mes con dos dígitos desde 01 a 31 |
D | Día de la semana como cadena de tres letras(en ingles).Ejemplo: "Mon" |
F | Nombre del mes completo como una cadena de caracteres.Ejemplo: "March" |
h | Hace que la hora aparezca en formato 01 a 12 |
H | Hace que la hora aparezca en formato 00 a 23 |
g | Hace que la hora aparezca en formato 1 a 12 |
G | Hace que la hora aparezca en formato 0 a 23 |
i | Hace que los minutos aparezcan en formato 00 a 59 |
j | Hace que el día aparezca en formato 1 a 31 |
l(L min) | Día de la semana completo.Ejemplo: Monday |
L | Escribe 0 si no es año bisiesto y 1 si lo es |
m | Hace que el mes aparezca en formato 01 a 12 |
M | Hace que el mes aparezca en formato 1 a 12 |
s | Hace que los segundos aparezcan en formato 00 a 59 |
S | Cadena de caracteres con el sufijo ordinal.Ejemplo: "th","nd". |
t | Número de días del mes especificado de 28 a 31 |
U | Número de segundos desde el comienzo de la "era UNIX" |
w | Número del día de la semana de 0 a 6 |
Y | Año con cuatro cifras |
y | Año con dos cifras |
z | Día del año de 0 a 365 |
Z | Obtiene la diferencia horaria en segundos con respecto al GMT |
Opción | Descripción |
%a | Nombre del día de la semana abreviado en el idioma actual |
%A | Nombre del día de la semana completo en el idioma actual |
%b | Nombre del mes abreviado en el idioma actual |
%B | Nombre del mes completo en el idioma actual |
%c | Representación de fecha y hora en el idioma actual |
%d | Día del mes en formato 01 a 31 |
%H | Hora como numero de 01 a 12 |
%I | Hora como numero de 01 a 12 |
%j | Día del año como numero de 001 a 366 |
%m | Mes como numero de 01 a 12 |
%M | Minuto en numero |
%p | am o pm según la hora dada |
%S | Segundos en numero |
%U | Numero de la semana del año como el primer domingo como primer día de la semana |
%W | Numero de la semana del año como el primer lunes como primer día de la semana |
%w | Día de la semana en numero de 0 a 6 |
%x | Representación por defecto de la fecha sin hora |
%X | Representación por defecto de la hora sin fecha |
%y | Año en numero de 00 a 99 |
%Y | Año en numero de cuatro cifras |
%Z | Nombre o abreviatura de la zona horaria |
%% | Caracter % |
Estableciendo horas y fechas:
Luego de obtener la fecha actual, es necesario fijar una determinada hora,
para un evento, por ejemplo la fecha de caducidad de una cookie a una determinada hora. Para esto PHP dispone las funciones:
Opción | Descripción |
LC_TYPE | Conversión de cadenas a configuración regional |
LC_NUMERIC | Separadores numéricos |
LC_TIME | Para aplicar formatos de fecha y hora con strftime() |
LC_ALL | Todos los anteriores |
Validación de fechas:
Cuando es necesario la creación de un sistema para comprobar si la fecha introducida por el usuario es valida o no,
pueden usarse las funciones:
- checkdate(mes,dia,año); Comprueba que la fecha introducida sea correcta .
- strtotime(cadena_fecha); Comprueba que la cadena de fecha sea correcta. Para ello la fecha debe estar en formato ingles, es decir, mm/dd/aa
LENGUAJE SQL Y PHP:
Desarrollamos el lenguaje SQL porque posteriormente usaremos las conexiones de PHP con MySQL.
Tipo | Descripción |
Tinyint[Unsigned] | Entero de 0 a 255 o de -128 a 128 |
Smallint[Unsigned] | Entero de 0 a 65535 o de -32768 a 32768 |
Int o Integer | Entero normal.Rango de -2147483648 a 214783648 |
Float[ (M,D) ] | Número de coma flotante de simple precisión si no se pasa ningun argumento M es el nº de digitos y D el nº de decimales |
Double [ (M,D) ] | Número de coma flotante de doble precision. Siempre dispone de signo M y D |
Decimal [ (M [,D]) ] | Número almacenado como cadena de caracteres M es el número total de dígitos y D el nº de decimales |
Date | Tipo fecha.Admite formatos "AAAA-MM-DD" o "AA-MM-DD" o "AAMMDD" |
Time | Tipo hora.Admite formato "HH:MM:SS" o "HHMMSS" o "HHMM" o "HH" |
Char(longitud) | Cadena de caracteres de la longitud indicada.Se reserva el espacio en caracteres aunque no se usen |
Varchar(longitud) | Cadena de caracteres de la longitud indicada que se almacena con su ocupacion.Máxima longitud: 255 caracteres |
Blob | Tipo destinado a almacenar bits sin intrepretar.Se usa para almacenar texto mas largo de 255 caracteres.Diferencia mayúsculas de minúsculas. |
Text | Tipo destinado a almacenar bits sin intrepretar.Se usa para almacenar texto mas largo de 255 caracteres.No diferencia mayúsculas de minúsculas. |
CREATE TABLE Nombre_tabla (Campo1Tipo_datoNot Null, Campo2 Tipo_dato, PRIMARY KEY (Campo3)); Esto nos crearía una tabla con 3 campos de los cuales Campo3 es un valor único, es decir, que no puede ser sobreescrito. Para eliminar una tabla usaremos: DROP TABLE Nombre_tabla; Para modificar la estructura de la tabla usaremos la siguiente sintaxis: ALTER TABLE Nombre_tabla [ADD Nombre_atributo Definición] //Añadiría un nuevo campo [CHANGE AntiguoNombreAtributo NuevoNombreAtributo Definición] //Cambiaría un campo [DROP NombreAtributo]; //Borraría un campo
Los índices son una estructura de acceso que permiten organizar los datos contenidos en una tabla. Para crear un índice usamos:
CREATE [UNIQUE] INDEX NombreIndice ON Tabla (Campos);
Manipulación de datos
- Inserción de datos: Para insertar datos en la tabla se realiza mediante el comando insert y su sintaxis es:
INSERT INTO NombreTabla [Campo1,Campo2...CampoN] VALUES (Valor1,Valor2...ValorN);
- Consultas de datos: Usamos el comando SELECT y la sintaxis es: SELECT ([*]/[Atributos]) FROM Tabla/s [WHERE ListaCondiciones] [GROUP BY Campo] [HAVING ListaCondiciones] [ORDER BY Campo]
Existen un conjunto de funciones dentro de las consultas de datos que nos permiten obtener información o realizar operaciones con respecto a las filas. Las funciones son:
función | Descripción |
COUNT(*/DISTINCT Campo) | Cuenta el numero de filas |
SUM(Campo) | Suma los valores del atributo indicado |
AVG(Campo) | Obtiene la media aritmética del atributo |
MAX(Campo) | Obtiene el valor máximo del atributo |
MIN(Campo) | Obtiene el valor mínimo del atributo |
CONEXIÓN CON MYSQL:
MySQL es un gestor de bases de datos usado en entornos donde se emplea PHP, que dispone funciones que se compaginan con MySQL,
y cuya forma genérica de obtener información de tablas en Mysql es:
- Conexión con el gestor.
- Preparación de la consulta SQL.
- Ejecución de la consulta.
- Procesamiento del resultado obtenido en el cursor.
- Liberación de recursos (esta es opcional, aunque es recomendable).
- Cierre de la conexión con el gestor.
A tal fin, se dispone de las siguientes funciones:
Función | Descripción |
mysql_connect("host","usuario","password") | Establece la conexión con el servidor. Recibe el host y el usuario y contraseña con el que debe conectar. |
mysql_select_db("base de datos",conexión) | Selecciona la base de datos sobre la cual se va a trabajar |
mysql_query(consulta,conexión) | Ejecuta la consulta SQL indicada como primer parámetro. |
mysql_num_fields(cursor) | Devuelve el numero de atributos que figuran en el cursor que se le pasa como parámetro y en el que se almacena el resultado de la consulta |
mysql_fetch_row(cursor) | Avanza a la siguiente posición de la fila en cursor. Devuelve un array que contiene en sus celdas cada uno de los valores de los atributos de la fila. |
mysql_free_result(cursor) | Libera los recursos asociados al cursor. |
mysql_close(conexion) | Cierra la conexion establecida con mysql_connect. |
La integración de PHP y MYSQL, tiene funciones que permiten acceder a las diferentes estructuras de la base de datos. Algunas de ellas:
Función | Descripción |
mysql_list_dbs(conexion) | Devuelve en un cursor los nombres de las bases de datos disponibles en el servidor al que se haya conectado con mysql_connect |
mysql_list_tables(base_datos,conexion) | Devuelve en un cursor los nombres de las tablas disponibles en la base de datos. |
mysql_tablename(cursor,numero_fila) | Devuelve el nombre de la tabla o base de datos en la que esta el cursor indicado |
mysql_field_name(cursor,numero_col) | Devuelve el nombre del campo cuyo índice se pasa como segundo parámetro |
mysql_field_type(cursor,numero_Col) | Devuelve el tipo del campo cuyo índice se pasa como segundo parámetro |
mysql_field_len(cursor,numero_col) | Devuelve la longitud del campo cuyo índice se pasa como segundo parámetro |
mysql_field_flags(cursor,numero_col) | Devuelve una serie de indicativos correspondientes a características del atributo cuyo índice se pasa como segundo parámetro |
mysql_affected_rows(conexion) | Devuelve el numero de filas afectadas por una actualización o borrado |
mysql_change_user(usuario,password) | Cambia de usuario |
mysql_create_db(basedatos) | Crea una base de datos con el nombre pasado por parámetro |
mysql_drop_db(basedatos) | Elimina la base de datos pasada por parámetro |
mysql_insert_id(cursor) | Devuelve el valor generado para un AUTOINCREMENT |
SESIONES:
Una web compone una serie de páginas interrelacionadas, por ejemplo, la página donde es necesario estar registrado para poder acceder a ellas
ya que en función de la categoría del usuario nos permitirá acceder a unas secciones o otras.
En estas aplicaciones será necesario ir comprobando los permisos de usuario y para ello usamos un elemento en PHP denominado " sesiones".
La sesión se inicia cuando un usuario entra en la aplicación web y finaliza cuando el usuario abandona la aplicación.
Durante ese tiempo manipulamos las variables que se inician al iniciar la sesión y mantener un tipo de información común entre
todas las páginas.
Mantener esta información constante requiere que los datos se guarden en un fichero ya sea en el cliente (cookies)
o en el servidor (en caso de que tenga desactivado las cookies).
Para diferenciar los diferentes usuarios existe una solución básica que consiste en un identificador de sesión diferente en cada caso.
Este identificador de sesión será enviado de una pagina a otra para mantener la sesión activa
(a menos que en la configuración del servidor tengamos activada la opción session_trans_id)
y también es necesario pasar el identificador de sesión en los formularios como un campo HIDDEN. Ejemplos:
- Hipervínculo: <a href="pagina.php?<? =SID ?>">Entrar</a>
- Formulario <input type="hidden" name="session_name()" value="SID">
Funciones de gestión de sesiones:
función | Significado |
session_start(); | Si es la primera solicitud genera un identificador de sesión aleatorio cuyo nombre será sess_IDsesión; si es otra solicitud continua la sesión iniciada anteriormente. |
session_destroy(); | Elimina todos los datos asociados con una sesión, borra el archivo en el servidor pero no borra la cookie. |
session_register(nombre); | Recibe como parámetro una serie de nombres de variable globales y los registra como variables de sesión en el fichero del servidor |
session_unregister(nombre); | Eliminamos la variable global introducida y se elimina el contenido de esta variable en el fichero del servidor.Sin pasar el parámetro nombre eliminaremos todas las variables de la sesión. |
session_is_registered(nombre); | Devuelve true en caso de que en la sesión se encuentre registrada una variable con dicho nombre. |
session_unset(); | Dejamos sin ningún valor asignado a todas las variables de la sesión |
session_id([nombre]); | Si no le proporcionamos ningún parámetro nos da el identificador de sesión; si le proporcionamos el parámetro nombre cambia el valor del identificador por el parámetro nombre. |
session_name([nombre]); | Si se invoca sin parámetro devuelve el nombre de la variable interna que tiene el id de sesiones; si se pasa parámetro cambia el nombre de la sesión. |
session_get_cookie_params(); | Permite definir nuevos valores para los parámetros de configuración de las cookies.Para que el cambio sea permanente hay que invocar el cambio en todos los documentos. |
session_cache_limiter([cache_limiter]); | Si se le proporciona valor modifica el valor por defecto en cambio sino se muestra el caché que tiene por defecto. |
session_encode(); | Devuelve una cadena con la información de una sesión, después de usar esta función la información de la sesión queda actualizada |
session_decode(cadena); | Descodifica la cadena que recibe como parámetro y que contiene la info de sesión, después de usar esta función se actualiza la info de sesión. |
session_save_path([path]); | Devuelve el camino al directorio donde se guardan los ficheros asociados a la sesión.El efecto solo dura en el script actual. |
session_module_name([modulo]); | Devuelve el nombre del modulo que se usa para realizar la gestión de sesiones. Cuando se invoca un parámetro se usa como nuevo gestor de sesiones. |
session_set_save_handler(open,close,read,write,destroy,gc); | |
Permite definir su propio manejador para almacenar la información asociada con una sesión.De esta forma los datos pueden ser metidos en una BD en vez de en un fichero. Tenemos que pasarle como parámetro toda la información necesaria para crear y destruir sesiones. |
FORMULARIOS:
No forman parte de PHP, sino del lenguaje estándar de Internet, HTML. Vamos a dedicar en este capítulo algunas líneas al HTML, para entrar posteriormente a tratarlos con PHP.
Todo formulario comienza con la etiqueta <FORM ACTION="lo_que_sea.php" METHOD="post/get"> . Con . Con ACTION indicamos el script que va procesar la información que recogemos en el formulario, mientras que METHOD nos indica si el usuario del formulario va ha enviar datos ( post ) o recogerlos ( get ).La etiqueta <FORM> indica el final del formulario.
A partir de la etiqueta <FORM> vienen los campos de entrada de datos que pueden ser:
Cuadro de texto: <input type="text" name="nombre" size="20" value="jose"> Cuadro de texto con barras de desplazamiento: <textarea rows="5" name="descripcion" cols="20">Es de color rojo</textarea> Casilla de verificación: <input type="checkbox" name="cambiar" value="ON"> Botón de opción: <input type=" radio" value="azul" checked name="color"> Menú desplegable: <select size="1" name="dia"> <option selected value="lunes">lunes</option> <option>martes</option> <option value="miercoles">miércoles</option> </select> Boton de comando: <input type="submit" value="enviar" name="enviar"> Campo oculto: <input type="hidden" name="edad" value="55">
Este último tipo de campo resulta especialmente útil cuando que remos pasar datos ocultos en un formulario. Como habrás observado todos lo tipos de campo tienen un modificador llamado name , que no es otro que el nombre de la variable con la cual recogeremos los datos en el script indicado por el modificador ACTION de la etiqueta FORM FORM , con value establecemos un valor por defecto. A continuación veamos un ejemplo, para lo cual crearemos un formulario en HTML como el que sigue y lo llamaremos formulario.htm :
<HTML> <BODY> <FORM METHOD="post" ACTION="mis_datos.php"> <input type="hidden" name="edad" value="55"> <p>Tu nombre <input type="text" name="nombre" size="30" value="jose"></p> <p>Tu sistema favorito <select size="1" name="sistema"> <option selected value="Linux">Linux</option> <option value="Unix">Unix</option> <option value="Macintosh">Macintosh</option> <option value=&qmargin-left: 75"><option value="Windows">Windows</option> </select></p> <p>¿Te gusta el futbol ? <input type="checkbox" name="futbol" value="ON"></p> <p>¿Cual es tu sexo?</p> <blockquote> <p>Hombre<input type="radio" value="hombre" checked name="sexo"></p> <p>Mujer <input type="radio" name="sexo" value="mujer"></p> </blockquote> <p>Aficiones</p> <p><textarea rows="5" name="aficiones" cols="28"></textarea></p> <p><input type="submit" value="Enviar datos" name="enviar"> <input type="res-left: 50"> <input type="reset" value="Restablecer" name="B2"></p> </FORM> </BODY> <HTML>
Y ahora creemos el script PHP llamado desde le formulario mis_datos.php : Todos los datos se encuentran en la variable $_POST, ya que el formulario está enviado por el método post.
<?PHP; if (isset($_POST['enviar']) { echo "Hola <b>" . $_POST['nombre'] . "</b> que tal estás<BR>n"; echo "Eres " . $_POST['sexo'] . "<BR>n"; echo "Tienes " . $_POST['edad'] . "<BR>n"; echo "Tu sistema favorito es " . $_POST['sistema'] . "<BR>n"; if (isset($_POST['futbol']) {echo "Te gusta el futbol<BR>n";} else odigo" style="margin-left: 50">} else { echo "NO te gusta el futbol <BR>n"; } if ($_POST['aficiones'] != "") { echo "Tus aficiones son: <BR>n"; echo nl2br($_POST['aficiones']); } else { echo "NO tienes aficiones <BR>n"; } } echo "<a href='formulario.htm'>VOLVER AL FORMULARIO</a>" ?>
Una vez rellenados los datos del formulario, pulsamos el botón Enviar datos , con lo que le campo enviar toma lo que su etiqueta value indica, es decir enviar="Enviar datos" . En nuestro script lo primero que evaluamos es que se haya enviado el formulario, y para ello nada mejor que comprobar que la variable $enviar no está vacía. Le ponemos el signo dólar delante a enviar , ponemos el signo dólar delante a enviar , ya que en PHP todas las variables se les refiere con este signo. Hay que tener en cuenta que si fusionáramos el código de ambos ficheros, nos ahorraríamos uno, pero no también se puede hacer en dos como lo estamos haciendo. Si la variable $enviar está vacia, enviamos el formulario.
<?PHP; if ($enviar) { echo "Hola <b>" . $nombre . "</b> que tal estás<BR>n"; echo "Eres " . $sexo . "<BR>n"; echo "Tienes " . $edad . "<BR>n"; echo "Tu sistema favorito es " . $sistema . "<BR>n"; if ($futbol) { echo "Te gusta el futbol <BR>n"; } else { echo "NO te gusta el futbol <BR>n"; } if ($aficiones != "") { < stuot;)> echo "Tus aficiones son: <BR>n"; echo nl2br($aficiones); } else { echo "NO tienes aficiones <BR>n"; } echo "<a href='$PHP_SELF'>VOLVER AL FORMULARIO</a>" } else { <HTML> <BODY> <FORM METHOD="post" ACTION="<?PHP echo $PHP_SELF ?>"> <input type="hidden" name="edad" value="55"> <p>Tu nombre <input type="text" name="nombre" size="30" nombre" size="30" value="jose"></p> <p>Tu sistema favorito <select size="1" name="sistema"> <option selected value="Linux">Linux</option> <option value="Unix">Unix</option> <option value="Macintosh">Macintosh</option> <option value="Windows">Windows</option> </select></p> <p>¿Te gusta el futbol ? <input type="checkbox" name="futbol" value="ON"></p> <p>¿Cual es tu sexo?</p> <blockquote> <p>Hombre<input type="radio" value="hombre" checked name="sexo"></p> <p>="codigo" style="margin-left: 100"><p>Mujer <input type="radio" name="sexo" value="mujer"></p> </blockquote> <p>Aficiones</p> <p><textarea rows="5" name="aficiones" cols="28"></textarea></p> <p><input type="submit" value="Enviar datos" name="enviar"> <input type="reset" value="Restablecer" name="B2"></p> </FORM> </BODY> </HTML> <?PHP } //fin IF ?>
La variable de entorno $PHP_SELF , es una variable de entorno que nos devuelve el nombre del script que estamos ejecutando. Y por último, hacer notar el uso de la función nl2br() , nl2br() , con la cuál sustituimos los retornos de carro del texto, los cuáles no reconocen los navegadores, por la etiqueta <BR> .
Descarga de ficheros desde un formulario: Para descargar un archivo desde un formulario utilizaremos una etiqueta INPUT de tipo FILE , soportada a partir de las versiones de los navegadores Nestcape Navigator 2.0 e Internet Explorer 4.0. El formulario debe usar el método post , y el atributo post , y el atributo enctype debe tener el valor multipart/form-data . Además al formulario debemos añadirle un campo oculto de nombre MAX_FILE_SIZE , al cuál le daremos el valor en bytes del tamaño máximo del archivo a descargar.
<FORM ENCTYPE="multipart/form-data" ACTION="7-3.php" METHOD="post"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000"> <INPUT NAME="archivo" TYPE="file"> <INPUT TYPE="submit" VALUE="Descargar Archivo"> </FORM>Cuando el formulario es enviado, PHP detectará automáticamente que se está descargando un archivo y lo colocará en un directorio temporal en el servidor. Dicho directorio será que el que esté indicado en el archivo de configuración php.ini , o en su defecto en el directorio temporal del sistema. Cuando PHP detecta que se está descargando un archivo crea varias variables con el prefijo del nombre del archivo pero con distintas terminaciones. La variable terminada en $_FILES['archivo']['name'] contiene el nombre original del archivo, $_FILES['archivo']['size'] contiene el tamaño en bytes de éste, y la variable $_FILES['archivo']['type'] nos indicará el tipo de archivo si éste es ofrecido por el navegador. Si el proceso de descarga no ha sido correcto la variable archivo tomará el valor none y _size será 0 , y si el proceso ha sido correcto, pero la variable $_FILES['archivo']['size'] da 0 , quiere decir que el archivo a descarga supera el tamaño máximo indicado por MAX_FILE_SIZE . Una vez descargado el archivo, lo primero que debemos hacer es moverlo a otro lugar, pues sino se hace nada con él, cuando acabe la ejecución de la página se borrará. Veamos un ejemplo de todo lo dicho.
<HTML> <BODY> <?PHP if (isset($_POST['enviar']) { if ($_FILES['archivo']['name'] != "" && $_FILES['archivo']['size'] != 0){ echo "Nombre: $archivo_name <BR>n"; echo "Tamaño: $archivo_size <BR>n"; echo "Tipo: $archivo_type <BR>n"; if (! move_uploaded_file ($_FILES['archivo']['tmp_name'], "directorio/".$_FILES['archivo']['name'])) { echo "<h2>No se ha podido copiar el archivo</h2>n"; } } elseif ($_FILES['archivo']['name'] != "" && $FILES['archivo']['size'] == 0) { echo "<h2>Tamaño de archivo superado</h2>n"; } else { echo "<h2>No ha escogido un archivo para descargar</h2>n"; } echo "<HR>n"; } ?> <FORM ENCTYPE="multipart/form-data" ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="post"> <INPUT type="hidden" name="MAX_FILE_SIZE" value="100000"> <p><b>Archivo a descargar<b><br> <INPUT type="file" name="archivo" size="35"></p> <p><INPUT type="submit" name="enviar" value="Aceptar"></p> </FORM> </BODY> </HTML>
A R C H I V O S :
El archivo PHP es un fichero de texto repleto de caracteres y espacios que el motor PHP ejecutará para hacer operaciones en tu web.
Tales caracteres se denominan funciones y están encerradas entre las etiquetas
< ? php y ? > , donde, lo que está dentro de esas tags se ejecuta y lo que está fuera no.
Para gestionar un fichero de texto, para modificar las paginas HTML, podemos efectuar las siguientes transacciones:
Por ser PHP un lenguaje interpretado de alto nivel embebido en páginas HTML y ejecutado en el servidor, opera asì:
Atributo | Efecto |
r | Solo lectura |
r+ | Lectura y escritura |
w | Sólo escritura. Borra el contenido anterior |
w+ | Lectura y escritura. Borra el contenido anterior. |
a | Solo escritura. Conserva el contenido anterior. |
a+ | Lectura y escritura. Conserva el contenido anterior |
Para mostrar por pantalla el contenido del archivo "datos.txt" :
<html> <head> <title>Problema</title> </head> <body> <?php $ar=fopen("datos.txt","r") or die("No se pudo abrir el archivo"); while (!feof($ar)) { $linea=fgets($ar); $lineasalto=nl2br($linea); echo $lineasalto; } fclose($ar); ?> </body> </html>
Lo primero que debemos identificar es la forma de apertura del archivo:
$ar=fopen("datos.txt","r") or
die("No se pudo abrir el archivo");
El segundo parámetro de fopen es "r" es decir read (apertura para lectura), si el archivo no existe por ejemplo se ejecuta la función die que finaliza el programa mostrando el string correspondiente.
La función feof retorna true si se ha llegado al final del archivo en caso contrario retorna false.
Para que se impriman todas las líneas del archivo se plantea una estructura repetitiva que se ejecuta mientras no se llegue al final de archivo:
while (!feof($ar))
Dentro de la estructura repetitiva leemos una línea completa del archivo de texto con la función
fgets:
$linea=fgets($ar);
La variable $linea contiene una línea completa del archivo de texto, inclusive el salto de línea (\n)
Como el navegador no hace un salto de línea con este carácter, debemos convertir dicho carácter a la marca <br> propia de HTML. La función que realiza esta actividad se llama nl2br (new line to br)
El resultado se almacena en una nueva variable que es la que realmente imprimimos:
$lineasalto=nl2br($linea);
echo $lineasalto;
Para leer un fichero se va leyendo todos los caracteres hasta llegar al EOF (end of file... final del archivo) el cual determina el final del texto.
Los ficheros poseen un cursor interno que indica su posición actual con respecto a todo el texto.
Para comprobar si se ha llegado al final del archivo, PHP pone a nuestra disposición la función feof(manejador_fichero); que se encarga de comprobar si la posición actual del fichero es la marca del final.
La función mas genérica de lectura es fread(manejador_fichero,nº_bytes); que se encarga de leer un numero determinado de bytes del fichero y devolvérnoslo en una cadena de caracteres.
En cambio, si lo que pretendemos es leer el fichero caracter a caracter debemos usar la función fgetc(manejador_fichero); .
Otras de las funciones mas características son: fgets(fichero,nº bytes); que nos devuelve una cadena de caracteres con la información leída. fgetss(manejador_fichero,nº bytes,[mostrar_tags]); nos lee un fichero HTML omitiendo las etiquetas características del código, en mostrar tags debemos introducir las etiquetas que deseamos que se muestren.
Si al realizar la lectura lo que se pretenden leer los valores que siguen un determinado formato de entrada nos podemos ahorrar un gran trabajo usando la función fscanf(manejador_fichero,formato, Esta función obtiene los datos de entrada de un fichero siguiendo un formato determinado. Posteriormente dicha información debe ser tratada por el programador.
La ultima función que vamos a estudiar para abrir ficheros es la función file(nombre_fichero); con esta función no es necesario usar las funciones fopen() y fclose() ya que se ejecutan de forma implícita.
Las funciones para escribir en un fichero son:
- fputs(manejador_fichero,cadena); y
- fwrite(manejador_fichero,cadena); Permite añadir una cadena de caracteres al texto anterior contenido en el texto.
- fclose(manejador_fichero);
- copy(fichero_origen,fichero_destino); Realiza una copia de un fichero.
- unlink(nombre_fichero); Elimina el fichero.
- rename(nombre_antiguo,nombre_nuevo); Renombra el fichero pasado como parámetro.
Para situarnos en una determinada posición del fichero para leer a partir de ahí, usamos
la función fseek (manejador_fichero,posicion): Permite empezar a leer un fichero a partir de una posición según se determine:
- seek_set (se toma con el principio del fichero),
- seek_cur (posición actual),
- seek_end (posición final).
Existen dos funciones para:
- -> rewind(manejador_fichero); Posicionar al principio del fichero
- -> ftell(manejador_fichero); Devuelven el valor actual de la posición
El manejador de directorios (representa una conexión lógica con un directorio determinado que permite leer la lista con los nombres de los
elementos contenidos en el directorio actual).
- opendir(ruta): Abre el directorio de la ruta especificada. Una vez se ha ejecutado opendir() podemos realizar tres operaciones:
- readdir(manejador): Devuelve una cadena con el nombre del siguiente elemento del directorio, ya sea un subdirectorio o un fichero.
- rewinddir(manejador): Procesa un directorio y sitúa el puntero interno en el primer directorio.
- closedir(manejador): Finaliza el tratamiento de entradas de directorio.
Para trabajar con un directorio crea una instancia de la clase dir por medio de su constructor.
- $directorio=dir(ruta_directorio); que cuenta con 3 métodos:
-- ( read()
-- rewind() y
-- close() )
Resultado | Significado |
block | Dispositivo de bloques |
char | Caracteres |
dir | Directorio |
fifo | FIFO |
file | Fichero |
link | Enlace |
unknown | Desconocido |
Las operaciones elementales, copia, borrado y cambiar el nombre, requieren únicamente el nombre (y path) del archivo operado; mientras que para operaciones más complejas, como lectura de líneas o la escritura de texto dentro del archivo, se requiere previamente abrir el archivo al cual le asignaremos un indentificador $id.
Una vez abierto el archivo, podremos desplazarnos a lo largo de él por medio de un puntero imaginario que avanza o retrocede por las
líneas de texto y mediante el cual nos situaremos en el lugar escogido para insertar, modificar o simplemente copiar una cadena.
Los archivos en binario reqquieren una b delante del modo (ej: ba, bw+,...)
• basename - Nombre de archivo del componente de Devoluciones de la trayectoria • chgrp Cambios - archivo de grupo • chmod - Cambia el modo del archivo • chown Cambios - archivo de propietario • clearstatcache Borra - archivo de caché de estado • copy -copias en el archivo • delete - Véase desvincular conectado o desconectado • dirname - Devuelve el directorio componente del nombre de ruta • disk_free_space - Devuelve el espacio disponible en sistema de archivos o partición del disco • disk_total_space - Devuelve el tamaño total de un sistema de archivos o partición del disco • diskfreespace - Alias de disk_free_space • fclose - Cierra un apuntador de archivo abierto • feof - Las pruebas de fin de archivo de un puntero de archivo • fflush Vacía - la salida a un archivo • fgetc - Obtiene el carácter de puntero de archivo • fgetcsv - Obtiene una línea desde el apuntador de archivo y analizar por los campos CSV • fgets - Obtiene una línea desde el apuntador de archivo • fgetss - Obtiene una línea desde el apuntador de archivo y tira de etiquetas HTML • file_exists - Verifica si un archivo o directorio existe • file_get_contents - Lee el archivo entero en una cadena • file_put_contents - Escribe una cadena en un archivo • file - Lee el archivo completo en una matriz • fileatime - Obtiene la hora del último acceso del archivo • filectime - Obtiene la hora de cambiar inode del archivo • filegroup - Obtiene grupo de archivos • fileinode - Obtiene fichero inode • filemtime - Obtiene la hora de modificación del archivo • fileowner - Obtiene dueño del archivo • fileperms - Obtiene los permisos de archivos • filesize - Obtiene el tamaño del archivo • filetype - Obtiene el tipo de archivo • flock - asesoramiento archivo portátil de bloqueo • fnmatch - Nombre de archivo del Partido contra un patrón • fopen - Abre un archivo o URL • fpassthru - Imprimir todos los datos restantes en un apuntador de archivo • fputcsv - Formato de línea como CSV y escribir en el archivo puntero • fputs - Alias de fwrite • fread archivo binario seguro - leer • fscanf - Procesa la entrada desde un archivo con un formato • fseek - Las búsquedas en un apuntador de archivo • fstat - Obtiene información sobre un archivo que utiliza un apuntador de archivo abierto • ftell - Devuelve la posición actual del archivo de lectura / escritura puntero • ftruncate - Trunca un archivo a una longitud dada • fwrite - seguro para escribir archivos binarios • glob - Encontrar nombres de las rutas que coincidan con un patrón • is_dir - Indica si el nombre del archivo es un directorio • is_executable dice - ya sea el nombre del archivo es ejecutable • is_file dice - ya sea el nombre del archivo es un archivo normal • is_link - Indica si el nombre del archivo es un enlace simbólico • is_readable dice - si un archivo existe y es legible • is_uploaded_file dice - si el archivo fue cargado a través de HTTP POST • is_writable dice - ya sea el nombre del archivo es escribible • is_writeable Alias - de is_writable • lchgrp - grupo propietario de los cambios de enlace simbólico • lchown - el usuario cambia de propietario del enlace simbólico • link - Crea un enlace duro • linkinfo - Obtiene información sobre un enlace • lstat - Da información sobre un archivo o enlace simbólico • mkdir - directorio de Marcas • move_uploaded_file - Mueve un archivo cargado a una nueva ubicación • parse_ini_file - Procesar un archivo de configuración • parse_ini_string - Analizar una configuración de cadenas • pathinfo - Devuelve información sobre una ruta de archivo • pclose - Cierra proceso de archivo de puntero • popen - Abre proceso de apuntador de archivo • readfile salidas - un archivo • readlink - Devuelve el objetivo de un enlace simbólico • realpath_cache_get - Obtener entradas de caché realpath • realpath_cache_size - Obtener tamaño de la caché realpath • realpath - Devuelve canónica ruta de acceso absoluta • rename - Cambia el nombre de un archivo o directorio • rewind - Reinicia la posición de un apuntador de archivo • rmdir - Elimina el directorio • set_file_buffer - Alias de stream_set_write_buffer • STAT - Da información sobre un archivo • symlink - Crea un enlace simbólico • tempnam - Crea un archivo con nombre de archivo único • tmpfile - Crea un archivo temporal • touch - Establece el acceso y el tiempo de modificación del archivo • umask - Cambia la umask actual • touch - Elimina un archivo
Ejemplo: Crear un archivo de texto y añadir datos al mismo:
- Implementación de un libro de visitas: Se plantea dos páginas, un formulario para realizar la carga del nombre del visitante
y sus comentarios (se dispone un objeto de tipo "text" y otro de tipo "textarea"):
<html> <head> <'title>Problema</title> </head> <body> <form action="pagina2.php" method="post> Ingrese su nombre: <input type="text" name="nombre"> <br> Comentarios: <br> <textarea name="comentarios" rows="10" cols="40"> </textarea> <br> <input type="submit" value="Registrar"> </form> </body> </html>
<html> <head> <title>Problema</title> </head> <body> <?php $ar=fopen("datos.txt","a") or die("Problemas en la creacion"); fputs($ar,$_REQUEST['nombre']); fputs($ar,"\n"); fputs($ar,$_REQUEST['comentarios']); fputs($ar,"\n"); fputs($ar,"--------------------------------------------------------"); fputs($ar,"\n"); fclose($ar); echo "Los datos se cargaron correctamente."; ?> </body> </html>
Como el archivo crece con los datos que aportan los visitantes al sitio lo abrimos para añadir, parámetro "a".
La función retorna una referencia al archivo, la almacenamos en una variable.
Si el archivo no se puede abrir, se ejecuta la instrucción que se encuentra luego del operador "or" en nuestro caso llamamos a
la función dir que finaliza la ejecución del programa PHP mostrando como mensaje el texto que le pasamos a dicha función.
$ar=fopen("datos.txt","a") or
die("Problemas en la creacion");
Para la grabación de datos utilizamos la función fputs que tiene dos parámetros: la referencia al archivo donde grabamos y el string a grabar.
fputs($ar,$_REQUEST['nombre']);
fputs($ar,"\n");
Para el salto de línea en el archivo de texto, usamos los caracteres \n. De esta forma cuando leamos el archivo de texto lo haremos línea a línea. Cuando dejamos de trabajar con el archivo llamamos a la función fclose.
Hay que tener muy presente que el archivo se almacena en el servidor y no en la máquina de la persona que está navegando. Es decir, no vaya al explorador de archivos para ver donde se almacenó "datos.txt", tenga en cuenta que está en la máquina donde se ejecutó el script de PHP.
Luego veremos cómo leer el contenido del archivo y mostrarlo en otra página del sitio.
Las funciones PDF en PHP pueden crear archivos PDF utilizando la librería PDFlib creada por Thomas Merz.
La documentación en esta sección solamente es una descripción de las funciones de la librería PDFlib y no debería considerarse una referencia exhaustiva. Se ha de consultar la documentación incluida en el código fuente de la distribución de PDFlib para una completa y detallada explicación de cada función. Proporciona muy buena descripción de las capacidades de PDFlib y contiene actualizada la documentación de todas las funciones.
Todas las funciones de PDFlib y del módulo PHP tienen nombres iguales para las funciones y parámetros. Se necesitará entender algunos de los conceptos básicos de PDF y PostScript para un eficiente uso de esta extensión. Todas las longitudes y coordenadas se mesuran en puntos PostScript. Generalmente hay 72 puntos PostScript por pulgada, pero esto depende de la resolución de salida. Se puede consultar la documentación incluida en la distribución de PDFlib para una detallada explicación del sistema de coordenadas utilizado.
Hay que tener en cuenta que la mayoría de las funciones PDF requieren un primer parámetro pdfdoc. En los siguientes ejemplos hay más información.
Requerimientos
PDFlib está disponible para descargar en http://www.pdflib.com/products/pdflib/index.html, pero requiere la compra de una licencia para uso comercial. Se requieren las librerías JPEG y TIFF para compilar esta extensión.
Compatibilidad con versiones antiguas de PDFlib
Cualquier versión de PHP después del 9 de Marzo del 2000 no soporta versiones de PDFlib anteriores a la 3.0. PDFlib 3.0 o superior es compatible desde PHP 3.0.19 en adelante.
Configuración en tiempo de ejecución
Esta extensión no tiene directivas de configuración en php.ini.
Confusiones con antiguas versiones de PDFlib
Desde PHP 4.0.5, la extensión PHP para PDFlib es oficialmente soportada por PDFlib GmbH. Esto significa que todas las funciones descritas en el manual de PDFlib (V3.00 o superior) son soportadas por PHP 4 con el mismo funcionamiento y parámetros. Sólo los valores devueltos pueden variar en el manual PDFlib, ya que PHP adoptó la convención de devolver FALSE. Por razones de compatibilidad, PDFlib aún soporta las antiguas funciones, pero deberían reemplazarlas en sus nuevas versiones. PDFlib GmbH no dará soporte a cualquier problema causado por el uso de estas funciones obsoletas.
Ejemplos
La mayoría de las funciones son bastante fáciles de utilizar. La parte más difícil probablemente es la creación de un primer documento PDF. El siguiente ejemplo debería ayudar para comenzar. El ejemplo crea el archivo test.pdf en una página. La página contiene el texto "Times Roman outlined" en un contorno, con fuente de 30pt. El texto también está subrayado.
Ejemplo 1. Creando un documento PDF con PDFlib
<?php $pdf = pdf_new(); pdf_open_file($pdf, "test.pdf"); pdf_set_info($pdf, "Author", "Javier Tacon"); pdf_set_info($pdf, "Title", "Test for PHP wrapper of PDFlib 2.0"); pdf_set_info($pdf, "Creator", "See Author"); pdf_set_info($pdf, "Subject", "Testing"); pdf_begin_page($pdf, 595, 842); pdf_add_outline($pdf, "Page 1"); $font = pdf_findfont($pdf, "Times New Roman", "winansi", 1); pdf_setfont($pdf, $font, 10); pdf_set_value($pdf, "textrendering", 1); pdf_show_xy($pdf, "Times Roman outlined", 50, 750); pdf_moveto($pdf, 50, 740); pdf_lineto($pdf, 330, 740); pdf_stroke($pdf); pdf_end_page($pdf); pdf_close($pdf); pdf_delete($pdf); echo "<A HREF=getpdf.php>finished</A>"; ?>
El script getpdf.php simplemente devuelve el documento pdf.
Ejemplo 2. Mostrando un documento PDF precalculado
<?php $len = filesize($filename); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=foo.pdf"); readfile($filename); ?>
La distrubución PDFlib contiene un ejemplo más complejo para crear un reloj analógico en una página. Aquí se utiliza el método de creación en memoria de PDFlib para no tener que crear un archivo temporal. El ejemplo se ha convertido a PHP desde uno de PDFlib (El mismo ejemplo está disponible en la documentación ClibPDF.)
Ejemplo 3. Ejemplo pdfclock de la distribución PDFlib
<?php $radius = 200; $margin = 20; $pagecount = 10; $pdf = pdf_new(); if (!pdf_open_file($pdf, "")) { echo error; exit; }; pdf_set_parameter($pdf, "warning", "true"); pdf_set_info($pdf, "Creator", "pdf_clock.php"); pdf_set_info($pdf, "Author", "Uwe Steinmann"); pdf_set_info($pdf, "Title", "Analog Clock"); while ($pagecount-- > 0) { pdf_begin_page($pdf, 2 * ($radius + $margin), 2 * ($radius + $margin)); pdf_set_parameter($pdf, "transition", "wipe"); pdf_set_value($pdf, "duration", 0.5); pdf_translate($pdf, $radius + $margin, $radius + $margin); pdf_save($pdf); pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0); /* minute strokes */ pdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { pdf_rotate($pdf, 6.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin/3, 0.0); pdf_stroke($pdf); } pdf_restore($pdf); pdf_save($pdf); /* 5 minute strokes */ pdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { pdf_rotate($pdf, 30.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin, 0.0); pdf_stroke($pdf); } $ltime = getdate(); /* draw hour hand */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius/2, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw minute hand */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius * 0.8, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw second hand */ pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); pdf_setlinewidth($pdf, 2); pdf_save($pdf); pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0)); pdf_moveto($pdf, -$radius/5, 0.0); pdf_lineto($pdf, $radius, 0.0); pdf_stroke($pdf); pdf_restore($pdf); /* draw little circle at center */ pdf_circle($pdf, 0, 0, $radius/30); pdf_fill($pdf); pdf_restore($pdf); pdf_end_page($pdf); # to see some difference sleep(1); } pdf_close($pdf); $buf = pdf_get_buffer($pdf); $len = strlen($buf); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=foo.pdf"); echo $buf; pdf_delete($pdf); ?>
Se requieren dos páginas, una de ellas, un formulario donde seleccionamos el archivo a enviar y otra página donde se graba el archivo en el servidor.
El formulario para hacer la selección del archivo es:
<html> <head> <title>Problema</title> </head> <body> <form action="pagina2.php" method="post" enctype="multipart/form-data"> Seleccione el archivo: <input type="file" name="foto"><br> <input type="submit" value="Enviar"> </form> </body> </html>
<form action="pagina2.php" method="post" enctype="multipart/form-data">
Se define una nueva propiedad para la marca form, con esta indicamos que dentro del formulario de carga se envían archivos.
El control HTML para la selección del archivo se llama "file":
<input type="file" name="foto">
Automáticamente aparecerá el botón dentro de la página para poder navegar en nuestro disco duro para la selección del archivo (por defecto PHP está configurado para poder cargar archivos de hasta 2 Mb, aunque, este podemos modificarlo).
La segunda página es:
<html> <head> <title>Problema</title> </head> <body> <?php copy($_FILES['foto']['tmp_name'],$_FILES['foto']['name']); echo "La foto se registro en el servidor.<br>"; $nom=$_FILES['foto']['name']; echo "<img src=\"$nom\">"; ?> </body> </html>
Cuando se ejecuta esta página, ya está almacenado en el servidor el archivo, en una carpeta temporal. Ahora nos hace falta copiar el mismo a la carpeta donde se encuentra nuestra página (en definitiva nuestro sitio de internet). Para esto llamamos a la función copy:
copy($_FILES['foto']['tmp_name'],$_FILES['foto']['name']);
La matriz $_FILES almacena el nombre del archivo almacenado en el directorio temporal
($_FILES['foto']['tmp_name']) y el nombre del archivo originario ($_FILES['foto']['name'])
Por último mostramos en la página el archivo que se almacenó en el servidor:
$nom=$_FILES['foto']['name'];
echo "";
Otras cosas interesantes que tiene la matriz $_FILES:
$_FILES['foto']['name'] El nombre original del fichero en la máquina cliente.
$_FILES['foto']['type'] El tipo de archivo (si el navegador lo proporciona). Un ejemplo podría ser "image/gif".
$_FILES['foto']['size'] El tamaño en bytes del fichero recibido.
$_FILES['foto']['tmp_name'] El nombre del archivo temporal que se utiliza para almacenar en el servidor el archivo recibido.
Función Descripción Sintaxis opendir Abre un directorio situado en $path y le asigna un identificador $dir $dir = opendir($path) readdir Lee un elemento del directorio $dir abierto previamente con opendir y desplaza el puntero al elemento siguiente readdir($dir) rmdir Elimina el directorio $dir rmdir($dir) mkdir Crea un directorio situado en $path con los derechos de acceso $derechos (entero) mkdir($path, $derechos) rewinddir Vuelve el puntero de lectura del directorio $dir al primer elemento rewinddir($dir) closedir Cierra el directorio $dir abierto previamente con opendir closedir($dir)
La forma de tratar con estas funciones es la similar a la que ya hemos visto para le lectura de archivos. Podemos distinguir tres etapas elementales:
• Apertura del directorio por medio de la función opendir asignándole al mismo tiempo un identificador
• Realización de las tareas necesarias en relación con ese directorio
• Clausura del identificador por medio de la función closedir
A notar que, para que un directorio pueda ser borrado, hace falta previamente haber eliminado cada uno de los elementos contenidos dentro del directorio. Para esto, nos podemos servir de la función unlink.
Por otra parte, la creación de un directorio por medio de la función mkdir requiere la definición de los derechos de acceso por medio de un número entero.
Como ejemplo sencillo de lo que podemos hacer con estas funciones, se presenta un pequeño script de lectura que permite visualizar el contenido de un directorio:
<? //definimos el path de acceso $path = "mi/camino"; //abrimos el directorio $dir = opendir($path); //Mostramos las informaciones while ($elemento = readdir($dir)) { echo $elemento."<br>"; } //Cerramos el directorio closedir($dir); ?>
Otra forma de abordar la gestión de directorios es por medio de la clase dir que permite la creación de un objeto sobre el cual podremos aplicar toda una serie de métodos equivalentes a las funciones previamente vistas. Si estas familiarizado con la programación orientada a objetos, puede que esta modalidad te resulte más intuitiva.
En este caso, la forma de operar es análoga a la ya vista:
• Creamos un objeto $dir con la instrucción: $dir = dir($path)
• Realizamos las tareas necesarias llamando a los métodos de la clase dir
• Cerramos el directorio con el método close
Algunos de los métodos que podemos utilizar con esta clase son los siguientes:
Métodos de la clase dir
Método Descripción Sintaxis path Indica el path del directorio $objeto->path read Lee un elemento del directorio $objeto->read rewind Vuelve el puntero de lectura del directorio al primer elemento $objeto->rewind close Cierra el directorio $objeto->close
Como ejemplo, he aquí el script equivalente al abordado para el caso de las funciones, esta vez usando la clase dir:
<? //definimos el path de acceso $path="mi/camino/"; //instanciamos el objeto $dir=dir($path); //Mostramos las informaciones echo "Directorio ".$dir->path.":<br><br>"; while ($elemento = $dir->read()) { echo $elemento."<br>"; } //Cerramos el directorio $dir->close(); ?>
Los scripts propuestos no son más que ejemplos sencillos de lo que estas funciones pueden ofrecernos. En vuestras manos queda el combinar estas funciones con otras vistas en este mismo taller de manera a crear aplicaciones que gestionen los archivos y directorios de vuestro servidor.
Recordamos que esta lista no es más que una recopilación y que muchas otras funciones relacionadas pueden sernos también útiles.
Y para el cruel que me arranca
el corazón con que vivo,
cardo ni ortiga cultivo;
..cultivo una rosa blanca..!
José Martí
Te espero en: wilucha@gmail.com
Esta page está en: www.wilocarpio.com.ar
24/10/2010