Académique Documents
Professionnel Documents
Culture Documents
Introducción
En esta Unidad vamos a aprender a conocer y saber configurar las
diferentes características y opciones de PHP. Es importante saber
reconocer y asignar valores a las directivas que integran el fichero de
configuración php.ini.
1
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
En la instrucción…
if (preg_match("/opera/i",$_SERVER['HTTP_USER_AGENT']))
{$val=explode(" ",stristr($_SERVER['HTTP_USER_AGENT'],"opera"));
En la estructura condicional…
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else if (isset($_SERVER['HTTP_CLIENT_IP']))
$ip=$_SERVER['HTTP_CLIENT_IP'];
else if (isset($_SERVER['REMOTE_ADDR']))
$ip=$_SERVER['REMOTE_ADDR'];
asp_tags permite el uso de las etiquetas de estilo ASP <%...%>, además de las
habituales etiquetas de estilo PHP <?php...?>. Puede estar activado (on) o
desactivado (off). Por defecto y en este curso está desactivado.
2
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
engine sólo es útil en la versión de PHP como módulo Apache. Se utiliza para
habilitar la ejecución de PHP directorio por directorio. Puede estar activado (on)
o desactivado (off).
El valor por defecto para esta directiva es E_ALL & ~E_DEPRECATED &
~E_STRICT, donde se muestran los errores normales, avisos normales y errores
del analizador sintáctico. En este curso es recomendable modificarlo a E_ALL,
para que se muestren todos los errores. Para entender mejor esta directiva,
conviene editar y mirar el fichero php.ini, dentro de la sección Error handling
and logging. Ahí se explican con ejemplos las opciones de errores que se
pueden configurar y cómo se ha de llevar a cabo esta operación.
También puedes acceder al Manual de PHP en este enlace y estudiar todas las
posibilidades que ofrece PHP en este aspecto.
3
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
error_reporting(E_ERROR);
4
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Get, Post o Cookie. Si magic_quotes está en on todas las ' (comilla sencilla), "
(comilla doble), \ (barra invertida) y los NUL se marcan con una barra invertida
automáticamente. Además, si la directiva complementaria magic_quotes_sybase
contiene también on, la comilla sencilla es marcada con otra comilla sencilla en
lugar de la barra invertida. Por defecto, XAMPP estable ambas directivas en off.
memory_limit se usa también para impedir que un script con errores de diseño
o que exige recursos muy amplios pueda agotar la memoria disponible del
servidor. Esta directiva limita el número de bytes que puede reclamar un script.
Por defecto XAMOO, establece el límite en 128 Mb. Para entender mejor las
tres directivas anteriores, conviene editar y mirar el fichero php.ini, dentro de
la sección Resource Limits.
user_dir contiene, si se quiere usar, una cadena con el nombre del directorio
inicial de usuario para los archivos PHP.
5
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
SMTP contiene una cadena donde aparece el nombre DNS (Domain Name
System) o la dirección IP del servidor de SMTP (Simple Mail Transfer Protocol)
que PHP debe usar para enviar correo con la función mail(). Por defecto, en
XAMPP el nombre es localhost, aunque está deshabilitado por defecto.
extension_dir contiene una cadena con el nombre del directorio donde PHP
debe buscar las extensiones para que puedan cargarse.
6
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
7
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Hacer ping
shell_exec("ping -n 3 rediris.es");
ping -n 3 rediris.es
8
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
C:\>ping -n 3 rediris.es
Este resultado indica que el equipo remoto ha recibido los tres paquetes. De no
haber sido así, se habría indicado que el equipo no estaba accesible (Host
desconocido) o que la solicitud había superado el tiempo de espera (Tiempo de
espera agotado). También se muestra el tamaño del paquete enviado. Para
valorar la velocidad de la conexión nos hemos de fijar en el tiempo, ya que éste
nos muestra lo que tarda el paquete en completar su trayecto en milisegundos.
El término TTL significa tiempo de vida del paquete (Data). Se refiere al número
de saltos entre equipos remotos que el paquete dará antes de que el mensaje
de Host desconocido aparezca. Podemos cambiar la configuración por defecto,
que es de 246 saltos, a través de una línea de comandos. La característica de
tiempo de vida de un paquete se implementó en el TCP/IP para asegurarse de
que los paquetes de datos que se perdían o no alcanzaban su destino no se
quedaban rebotando indefinidamente por la red.
Para obtener una lista de las opciones disponibles, hay que escribir: ping -h en
la línea de comandos de Windows.
Como resultado, la orden tracert muestra una lista ordenada de los routers
por los que se ha ido pasando el paquete hasta encontrar su destino o exceder
el número máximo de saltos previsto.
9
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
shell_exec("$tipo ".$nombre_ip);
C:\>tracert rediris.es
Traza completa.
Para obtener una lista de las opciones disponibles hay que escribir: tracert sin
argumentos en la línea de comandos de Windows. En Linux podemos escribir
man traceroute.
La orden nslookup del sistema operativo es una utilidad que usa el protocolo
DNS para resolver nombres a sus IPs.
10
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
shell_exec("nslookup ".$nombre_ip);
C:\>nslookup rediris.es
Servidor: CONECTA
Address: 192.168.1.1
Respuesta no autoritativa:
Nombre: rediris.es
Addresses: 2001:720:418:cafd::20
130.206.13.20
11
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Conviene probar este script contra un servidor remoto, pues si se hace contra
el propio servidor local no funciona correctamente al no producirse una
transmisión real de información a través de la red. Puedes probar el script en
un servidor de Mentor en el siguiente enlace.
12
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
13
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Este programa hay que probarlo contra un servidor remoto para no falsear la
medida correcta de la transmisión de los datos. Puedes probar el script en un
servidor de Mentor en el siguiente enlace.
14
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Si haces clic en el primer enlace, podrás ver que tarda cierto tiempo en
cargarse la página:
15
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
16
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
17
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Inicia una conexión que tiene dominio Internet (AF_INET) o dominio Unix
(AF_UNIX). En el domino Internet abre una conexión TCP hacia el ordenador
nombre del servidor mediante el puerto número de puerto. Si se accede a un
dominio Unix, nombre del servidor se usa como ruta hacia el socket y número
de puerto debe ser 0. El parámetro opcional tiempo espera en segundos se
puede usar para indicar el tiempo de espera para establecer la conexión. Los
parámetros opcionales número de error y mensaje de error, que deben
pasarse por referencia, muestran el error del sistema producido en la llamada
mediante connect().
Algo más adelante, en este mismo script, se usa otra función de red para
obtener el servicio de Internet que corresponde al número de puerto
especificado:
$serv = getservbyport($i,"tcp");
18
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
19
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Para poder trabajar en PHP con un servidor FTP debemos activarlo primero. Al
instalar XAMPP ya se incluye el servidor FileZilla FTP Server. Para arrancarlo
debemos ejecutar el Panel de Control de XAMPP y hacer clic en el botón
correspondiente “Start” del servidor FileZilla:
20
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
21
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
22
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
23
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
24
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
$conexion=@ftp_connect($_SESSION['server'], $_SESSION['port']);
$acceso_ftp=@ftp_login($conexion,$_SESSION['user'],$_SESSION['password
']);
ftp_pasv($conexion, true);
Con este comando se activa el modo pasivo del protocolo FTP. En este modo,
las conexiones de datos las inicia el cliente en lugar del servidor. Es habitual
hacerlo si el cliente se encuentra detrás de un firewall, ya que, si no, la
conexión no funciona.
25
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
$tipo_sis=@ftp_systype($conexion);
Una vez que hemos establecido la conexión, podemos saber el tipo de sistema
del servidor remoto con la función ftp_systype, que devuelve un identificador
del sistema remoto sobre el que estamos haciendo FTP o False si no se puede
obtener. Un posible valor devuelto por esta función es "UNIX".
Nota: si usas FileZilla Server de XAMPP en Windows el servidor indica el sistema de ficheros
de tipo LINUX. Sin embargo, no funciona el cambio de permisos de los ficheros porque
realmente el sistema operativo es Windows.
5. Cambio de directorio
ftp_chdir($conexion,$dirActual);
$dirActual=ftp_pwd($conexion);
La función ftp_pwd sirve para invocar el comando pwd (print work directory), que
devuelve el nombre del directorio actual del servidor al que nos hemos
conectado.
Como puedes ver, si has usado alguna vez un servidor FTP por comandos, las
funciones se parecen mucho a estos comandos y resultan familiares y sencillas
de recordar.
7. Descarga de archivo
ftp_fget($conexion,$fp,"$file",$mode)
La función ftp_fget invoca el comando GET para bajar un archivo del servidor
remoto. Hay que especificar como parámetros de la función el identificador de
la conexión, el puntero al nombre del archivo local abierto, el nombre del
archivo remoto y la modalidad de la transferencia, que puede ser FTP_ASCII o
FTP_BINARY.
26
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Por ejemplo, para bajar del servidor el archivo informa.txt, suponiendo que
estamos ya en el directorio que lo incluye, y almacenarlo en el directorio local
/tmp con nombre informacion.txt en modalidad ASCII, escribiremos:
$fichero=ftp_fget($conexion,"/tmp/informacion.txt",
"informa.txt",FTP_ASCII);
8. Borrar fichero
ftp_delete($conexion,"$file")
9. Borrar directorio
ftp_rmdir($conexion,"$file"))
ftp_rename($conexion,"$file","$file2")
27
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Con la orden FTP HELP, escrita detrás del símbolo ftp>, se puede obtener
ayuda sobre los comandos FTP disponibles. Por ejemplo, el comando WHO
permite obtener una lista de todos los usuarios conectados al servidor; KICK
nombre_de_usuario desconecta a un usuario del servidor; SETATTR
nombre_de_usuario nombre_del_atributo valor_del_atributo asigna
permisos a un usuario; chmod permisos_fichero, que hemos usado en la
instrucción del ejemplo, cambia los permisos sobre el fichero o el directorio
especificado.
Su sintaxis es:
ftp_site(conexion,comando FTP)
ftp_rawlist($conexion,"");
28
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Esta función ejecuta el comando FTP LIST y devuelve el resultado como una
matriz. Cada elemento de esta matriz contiene una línea de texto con los datos
completos del directorio afectado. Si se quiere obtener la lista del directorio
actual, hay que poner comillas, como hemos hecho en este ejemplo del curso.
Si la operación no puede llevarse a cabo, se devuelve False.
Aunque no las hayamos usado en este ejemplo, veamos algunas otras, las más
importantes, que pueden ser necesarias para realizar las actividades que hay
que remitir al tutor en esta Unidad.
$fichero=ftp_fput($conexion,"informacion.txt",
"/tmp/informa.txt", FTP_ASCII);
29
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
ftp_close(conexion)
ftp_exec(conexion,comando)
Envía una orden FTP EXEC al servidor FTP. Devuelve la salida de la ejecución
de la orden o False si no se ha podido realizar la operación.
ftp_mdtm(conexion,fichero remoto)
Aconsejamos a los alumnos y alumnas que estudien los tres scripts del
Ejemplo 6 detenidamente. Para resolver correctamente la actividad que hay
que enviar al tutor en esta Unidad es preciso asimilar y saber aplicar
eficazmente las funciones FTP estudiadas en este apartado.
30
Curso Avanzado de PHP
Unidad 3: Configuración y Conectividad de PHP
Resumen
31