Cómo subir archivos a un servidor FTP usando PHP

Con PHP, siempre hay más de una forma de realizar una tarea en particular. Tomemos, por ejemplo, la carga de archivos. Claro, puedes hacerlo de la forma tradicional, utilizando la carga de archivos HTTP y transfiriendo el archivo directamente a una ubicación en el disco del servidor web. O puedes hacerlo de una manera más exótica, utilizando el protocolo FTP para cargarlo en un proceso de dos pasos: desde tu disco local a un servidor web y luego a un servidor FTP.

PHP admite tanto los métodos de carga FTP como los métodos de carga HTTP de manera nativa, dejándote la opción de tomar la mejor decisión basada en los requisitos de diseño de tu aplicación. Transferir un archivo utilizando las funciones FTP de PHP es casi lo mismo que hacerlo utilizando un cliente FTP tradicional. Incluso, como verás, los nombres de las funciones son similares a los comandos estándar de FTP.

Se ha escrito mucho sobre la carga de archivos mediante HTTP, por lo que este breve tutorial se centra en la carga de archivos basada en FTP (en el ejemplo que sigue, sin embargo, verás ambos en acción). Ten en cuenta que este tutorial supone que tienes una instalación funcional de PHP / Apache, con tanto la carga de archivos HTTP como las funciones FTP activas.


La versión descargable de este artículo incluye todos los listados de código en archivos de texto separados más manejables.


Índice de Contenido
  1. Paso 1: Asegúrate de tener permisos para conectarte/subir al servidor FTP
    1. Listado A
  2. Paso 2: Construir un formulario de carga
    1. Listado B
  3. Paso 3: Crear el procesador de carga de PHP
    1. Listado C

Paso 1: Asegúrate de tener permisos para conectarte/subir al servidor FTP

Las funciones FTP de PHP funcionan a través de una conexión cliente-servidor, por lo que deberás iniciar sesión en el servidor FTP de destino antes de poder realizar una carga de archivos. Tu primera tarea es asegurarte de tener las credenciales necesarias para esta acción. Este paso puede parecer algo obvio, pero te sorprenderías cuántos desarrolladores lo olvidan y pierden horas de tiempo en depuración más tarde.

Puedes verificar esto utilizando un cliente FTP en línea de comandos para iniciar sesión en el servidor FTP de destino y tratar de cargar un archivo ficticio (Ver Listado A):

Cómo funciona el protocolo FTP y cómo resolver problemas relacionados con él

Listado A

$ ftp
ftp> open some.host.com
Connected to some.host.com.
220 Bienvenido al Servidor FTP de leon!
Usuario: upload
331 Usuario upload válido, necesita contraseña.
Contraseña: ***
230 Usuario restringido conectado.
ftp> bin
200 Tipo correcto.
ftp> hash
Marcador de hash activado en ftp: (2048 bytes/marcador de hash).
ftp> put file.bin
200 Comando PORT correcto.
150 Abriendo la conexión de datos en modo binario.
##
226 Transferencia completada.
ftp: 4289 bytes enviados en 0.00 segundos (4289000.00Kbytes/s).
ftp> bye
221 Adiós.

Una vez que hayas confirmado que tienes los privilegios de acceso relevantes, cierra la sesión.

Paso 2: Construir un formulario de carga

A continuación, crea un formulario HTML sencillo que solicite al usuario los parámetros críticos: información de acceso al servidor FTP, el directorio del servidor al que se cargará y la ruta completa y nombre del archivo a cargar. Aquí tienes un ejemplo de cómo podría ser este formulario (Ver Listado B):

Listado B

<html>
<head></head>
<body>
<h2>Por favor, proporciona la siguiente información:</h2>

<form enctype="multipart/form-data" method="post" action="upload.php">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000" />
Host <br />
<input type="text" name="host" /><p />

Usuario <br />
<input type="text" name="user" /><p />

Microsoft lanza servicio gratuito de almacenamiento en la nube para usuarios de Windows

Contraseña <br />
<input type="password" name="pass" /><p />

Directorio de destino <br />
<input type="text" name="dir" /><p />

Archivo <br />
<input type="file" name="file" /><p />

<input type="submit" name="submit" value="Cargar archivo" />
</form>

</body>
</html>

Aquí, el elemento <input type=file…> se renderiza como un cuadro de diálogo de selección de archivo, desde el cual el usuario puede seleccionar el archivo que se cargará. El elemento <form enctype=…> luego fuerza que los datos del formulario se codifiquen como una presentación multipart, lo que facilita que PHP identifique el componente del archivo en la presentación.

Cómo evitar que el archivo de registro de transacciones en SQL Server crezca demasiado grande

Paso 3: Crear el procesador de carga de PHP

Una vez que el formulario se ha enviado al servidor web, el siguiente (y último) paso es utilizar las funciones FTP de PHP para transferirlo al servidor FTP de destino, utilizando las credenciales de acceso suministradas por el usuario. Aquí está el script (upload.php) que realiza todo el trabajo (Ver Listado C):

Listado C

<?php

// Obtener los parámetros de acceso FTP

$host = $_POST['host'];

$user = $_POST['user'];

$pass = $_POST['pass'];

Debería su organización migrar a Google Apps desde Microsoft Exchange

$destDir = $_POST['dir'];

$workDir = "/usr/local/temp"; // definir esto según tu sistema local

// Obtener el nombre de archivo temporal para el archivo cargado

$tmpName = basename($_FILES['file']['tmp_name']);

// Copiar el archivo cargado al directorio actual

move_uploaded_file($_FILES['file']['tmp_name'], $workDir."/".$tmpName) or die("No se puede mover el archivo cargado al directorio de trabajo");

Google vs Microsoft: Quién ofrece el mejor almacenamiento en la nube

// Abrir la conexión

$conn = ftp_connect($host) or die("No se puede iniciar la conexión con el host");

// Enviar los parámetros de acceso

ftp_login($conn, $user, $pass) or die("No se puede iniciar sesión");

// Realizar la carga del archivo

$upload = ftp_put($conn, $destDir."/".$_FILES['file']['name'], $workDir."/".$tmpName, FTP_BINARY);

Cómo cambiar y administrar la cuenta de Administrador local en Windows mediante Group Policy

// Comprobar el estado de carga y mostrar un mensaje

if (!$upload) {

echo "No se puede cargar el archivo";

} else {

echo "Carga completada";

}

Cómo generar cadenas aleatorias únicas en una aplicación escalable

// Cerrar la conexión FTP

ftp_close($conn);

// Eliminar la copia local del archivo cargado

unlink($workDir."/".$tmpName) or die("No se puede eliminar el archivo cargado del directorio de trabajo. Se recomienda la eliminación manual");

?>

Esto puede parecer complicado, pero en realidad es bastante sencillo. Esto es lo que está sucediendo:

La importancia de la automatización en la gestión de servidores en la nube
  1. Una vez que se ha enviado el formulario, las credenciales suministradas por el usuario en los diferentes campos de entrada del formulario se extraen en variables regulares de PHP. La información sobre el archivo cargado también está disponible a través del array especial $_FILES de PHP.
  2. El array $_FILES se compone de varios sub-arrays, uno por cada archivo cargado. Las claves de cada sub-array contienen información sobre el tamaño, tipo MIME, nombre original y nombre temporal del archivo cargado correspondiente. Esta información se utiliza en la función move_uploaded_file para transferir el archivo desde el directorio temporal del sistema al directorio de trabajo. Recuerda alterar el valor de $workDir para reflejar una ruta de archivo válida en tu sistema.

Consejo: Por lo general, es buena idea comprobar el tipo y tamaño del archivo cargado antes de llamar a la función move_uploaded_file, para asegurarse de que cumple con cualquier restricción de carga que pueda tener la aplicación. Por ejemplo, si la aplicación requiere que los archivos estén en formato ZIP para su carga, esto se puede verificar en esta etapa (a partir del tipo MIME) para asegurarse de que los archivos en otros formatos sean filtrados.

  1. Se utilizan las funciones ftp_connect y ftp_login para iniciar una conexión con el host FTP y luego iniciar sesión en él utilizando las credenciales suministradas.
  2. Suponiendo un inicio de sesión exitoso, se utiliza la función ftp_put para cargar el archivo desde el directorio de trabajo al directorio remoto especificado por el usuario, y renombrarlo a su forma original. Observa la adición del argumento especial FTP_BINARY a ftp_put, para especificar que el archivo se transfiera en modo binario (no ASCII). Dependiendo del código de resultado devuelto por la función ftp_put, se muestra un mensaje de error o éxito al usuario.
  3. Se utiliza la función ftp_close para finalizar la sesión FTP y la función unlink() para limpiar, eliminando la copia local del archivo que se creó en el paso (2).

Sencillo, ¿verdad? ¡Adelante, inténtalo tú mismo y compruébalo!

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Nube, allí encontraras muchos artículos similares a Cómo subir archivos a un servidor FTP usando PHP , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.