Acceso Remoto usando PHP

Vicente González Ruiz

September 12, 2016

Para conseguir que sólo una parte du un fichero remoto sea enviado, vamos a utilizar PHP (Personal home page tools Hypertext Pre-processor) para crear una página Web (dinámica) que haga dicho trabajo. Para ello instalaremos el correspondiente módulo en apache y escribiremos un pequeño programa en PHP que muestre el contenido del fichero en la forma en que nosotros deseamos. Nótese que en este caso es el servidor el que genera un objeto Web dinámico que contiene el fichero y que, por tanto, la mayor parte del trabajo se realiza en el host remoto (el servidor). Esto es importante tenerlo en cuenta si el número de clientes va a ser muy alto porque este esquema no escala.

# Instalamos el PHP.  
remote_host@root# apt-get install php5  
 
# Nos aseguramos de que el m\’odulo php est\’e habilitado en apache.  
remote_host@root# a2enmod php5  
 
# Recargamos los m\’odulos que han sido seleccionados en apache.  
# Con esto conseguimos que el actual servidor pueda ejecutar a  
# partir de ahora PHP.  
remote_host@root# /etc/init.d/apache2 force-reload

# Nos aseguramos de que apache interpreta PHP.  
# Nota: no ejecutar este comando mediante sudo!  
# Acceda a la cuenta el administrador usando "su -",  
# por ejemplo.  
remote_host@root# cat << EOF > /var/www/test_php.php  
<?php  
phpinfo();  
php?>  
EOF  
 
# Verificamos que el fichero se ha creado adecuadamente.  
remote_host@root# cat /var/www/test_php.php  
 
# Recuerde sustituir "remote_host" por el correspondiente host  
# en su experimento ... que probablemente sea "localhost".  
local_host@usuario$ firefox http://remote_host/test_php.php &  
# Si todo ha ido bien, ver\’a en firefox una p\’agina que presenta la  
# configuraci\’on de PHP.

Una vez que todo parece ir correctamente, creamos el script en PHP que sirve el fichero. Descargue el script (http://www.ace.ual.es/\~vruiz/redes_industriales/read_data.php):

 
1<?php 
2// Envia los 10 ultimos bytes del fichero "datos.txt" 
3$myFile = "datos.txt"; // El fichero de datos 
4$fh = fopen($myFile, r); // Abrimos el fichero 
5fseek($fh,-10,SEEK_END); // Nos vamos a 10 bytes del final 
6// Imprimimos las ultimas 10 bytes 
7while (!feof($fh)) { 
8  $theData = fgets($fh); 
9  echo $theData. "<br/>"; 
10} 
11fclose($fh); // Cerramos el fichero 
12php?>

y almacenelo en como el fichero /var/www/read_data.php en remote_host.

# Accedemos al fichero remoto.  
local_host@usuario$ firefox http://remote_host/read_data.php &  
# Si algo va mal podemos revisar el fichero "/var/log/apache2"  
# (usar less es una buena opci\’on)  
# para ver si hay errores de interpretaci\’on  
# del script en PHP.

Taller 1: Usando Wireshark, compruebe que el servidor Web sólo envía los 10 últimos bytes de texto del fichero remoto.

Ejercicio 1: Mejore el script PHP anterior para que el servidor sea capaz de enviar al cliente un determinado número de líneas de texto, número que el cliente especifica al servidor como un argumento. Dese cuenta de que el script actual trabaja a nivel de bytes (no de líneas) y no acepta ningún argumento externo. Puede encontrar un buen manual de PHP en Internet que le ayude con la tarea de la manipulación de líneas de texto, buscando en Google “PHP manual”, y aunque probablemente encuentre además en el anterior manual cómo se pasa un argumento a un script en PHP, también puede buscar en Google “passing argument to PHP script”.