FTP over PHP upload
Si has llegado hasta aquí, asumo que...
- has llegado por error, no sabes qué es PHP, ni FTP, ni FTP sobre PHP... y te importa un carajo, lo tuyo es el bádminton y la equitación
- estás harto de recorrer internet buscando ejemplos de como hacer un upload en FTP sobre PHP, y sólo has encontrado páginas creadas por gente que sólo sabe copiar/pegar código, sin entender nada, y sin haberlo probado; eso sí, todo plagado de avisos de cookies, de si te quieres suscribir o recibir notificaciones, y de un montón de publicidad irrelevante.
Si éste último es tu caso, bienvenido, aquí tienes un código que sí que funciona!
Ah, y no tengo publicidad, ni avisos de cookies, ni te propongo que te suscribas a nada, ni te autentifiques por medio de Facebook!
Será por eso que tengo cero visitas...
Nombre del archivo: index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>FTP over PHP upload</title>
<style>body { font-family: Verdana; font-size: 12px; }</style>
</head>
<body>
<h1>FTP over PHP upload</h1>
<?php
if(isset($_POST['server'])) {
$server = rtrim($_POST['server']);
$username = rtrim($_POST['username']);
$pwd = rtrim($_POST['pwd']);
$fileName = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$dest = rtrim($_POST['dest']);
$enc = $_POST['enc'];
if (! function_exists('ftp_connect')) {
die("Sorry, your PHP doesn't seem to support FTP");
}
if ($enc == "plain") {
$conn = ftp_connect($server) or die("Unable to connect to host $server");
echo "Connected by plain text!<br>\n";
}
else if ($enc == "tls") {
$conn = ftp_ssl_connect($server) or die("Unable to connect to host $server");
echo "Connected by TLS encryption!<br>\n";
}
else {
die("You have to select an encryption protocol!");
}
ftp_login($conn, $username, $pwd) or die("Authorization Failed");
echo "Authorization OK!<br>\n";
if(! $fileName) {
echo "Please select a file\n";
} else {
ftp_put($conn, $dest . '/' . $fileName, $tmpName, FTP_BINARY) or die("Unable to upload file");
echo "File successfully uploaded!\n";
}
ftp_close($conn);
echo "<p><a href='index.php'>back</a></p>\n";
die("</body>\n</html>");
}
$actual_dir = getcwd();
$user = get_current_user();
$dest = str_replace("/home/$user", "", $actual_dir);
$dest = $dest . "/upload";
if (! is_dir("upload")) {
mkdir("upload", 0755);
}
?>
<form name="upload" method="post" action="index.php" enctype="multipart/form-data">
<p>Server: <input type="text" name="server" value="localhost"></p>
<p>Encryption: <input type="radio" name="enc" value="tls" checked> TLS
<span style="margin-left: 24px;"><input type="radio" name="enc" value="plain"> Text plain</span></p>
<p>User: <input type="text" name="username" value=""></p>
<p>Password: <input type="password" name="pwd" value=""></p>
<p>Dest dir: <input type="text" name="dest" value="<?php print "$dest"; ?>" size="65"></p>
<p>File to upload: <input type="file" name="file"></p>
<p><input type="reset" value="Reset"> <input type="submit" value="Upload"></p>
</form>
</body>
</html>
Si te ha servido de algo el código, o propones alguna mejora, por favor deja un comentario
(no te voy a pedir el email, ni tendrás que validar el email, ni usuario, ni contraseña, ni cookie, ni seguimiento de sesión, ni te voy a geolocalizar, ni te tendrás que suscribir a nada...)
(por dios, en qué hemos convertido internet...)
