He estado buscando por el buscador (valga la redundancia) y no he encontrado nada, así que inicio este tema nuevo.
Buscando por Google he encontrado el tutorial de cómo subir archivos con PHP por FTP, disponible en esta web en http://www.cristalab.com/tutoriales/112/subir-archivos-con-php-por-ftp. El caso es que aunque no era lo que andaba buscando, me he parado a echarle un vistazo, y hay una cosa que no logro entender de su código.
Inicia todo el tema del FTP a mi juicio bien, pero cuando llega la hora de copiar el archivo al FTP, usa la función copy de PHP que sirve (cómo imagino que todos sabréis ) para copiar un archivo de un sitio a otro dentro del mismo servidor. Es por ello que no entiendo el uso de las funciones FTP para luego usar la función copy que nada tiene que ver con el manejo del ftp. En su lugar, habría que utilizar la función ftp_put.
Código actual:
Código :
// Verificamos si ya se subio el archivo temporal if (is_uploaded_file($remoto)){ // copiamos el archivo temporal, del directorio de temporales de nuestro servidor a la ruta que creamos copy($remoto, $ruta); } // Sino se pudo subir el temporal else { echo "no se pudo subir el archivo " . $local; }
Código Modificado
Código :
//verificamos que el archivo ha sido realmente subido al servidor (donde está el script php, no el ftp) if(is_uploaded_file($remoto) { //subimos el archivo subido (desde la carpeta temporal del sistema) al ftp if(ftp_put($cid, $local, $remoto, FTP_BINARY)) { echo "el archivo ha sido subido con éxito al destino ftp"; } else { echo "falló la subida al destino ftp"; } } else { echo "el archivo no ha sido subido normalmente"; }
Por ende, sobraría la parte de:
Código :
// Juntamos la ruta del servidor con el nombre real del archivo $ruta = "/srv/www/htdocs/boca/" . $local;
Para terminar, a modo de corrección de seguridad, la parte en la que comprueba que el tamaño del archivo no exceda de un tamaño determinado:
Código :
// Verificamos si no hemos excedido el tamaño del archivo if (!$tama<=$_POST["MAX_FILE_SIZE"]){ echo "Excede el tamaño del archivo...<br />";
Como toda entrada, no podemos tener la certeza de que el usuario nos pase un valor correcto para el tamaño máximo. Un usuario malicioso podría aumentar ese tamaño máximo, con lo que nuestro script quedaría vulnerable. Lo mejor es especificar ese tamaño máximo dentro del script. La modificación podría quedar algo así...
Código :
//verificamos si cumple con el tamaño máximo $tamano_max = 1048576; //1 MegaByte (en bytes) if($tama > $tamano_max) { echo "el archivo excede el tamaño máximo"; }
Ruego que si me equivoco en mi planteamiento, lo debatamos aquí para aprender todos.
Saludos.