Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FTP upload via PHP form

Tags:

php

ftp

I want to upload a file via FTP upload in a form.

<html>
  <body>
    <form enctype="multipart/form-data" action="upload_file.php" method="POST">
      <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
      Choose a file to upload: <input name="uploadedfile" type="file" /><br />
      <input type="submit" value="Upload File" />
    </form>
  </body>
</html>

Here is the PHP file:

<?php

$ftp_server = "xxx";
$ftp_username   = "xxx";
$ftp_password   =  "xxx";

// setup of connection
$conn_id = ftp_connect($ftp_server) or die("could not connect to $ftp_server");

// login
if (@ftp_login($conn_id, $ftp_username, $ftp_password))
{
  echo "conectd as $ftp_username@$ftp_server\n";
}
else
{
  echo "could not connect as $ftp_username\n";
}

$file = $_FILES["file"]["name"];
$remote_file_path = "/home/www/lifestyle69/import/".$file;
ftp_put($conn_id, $remote_file_path, $file, FTP_ASCII);
ftp_close($conn_id);
echo "\n\nconnection closed";

?>

The FTP connection connects successfully but the file is nowhere.

Can anybody help me?

Thanks!

like image 672
Raffinatore Avatar asked Jan 11 '13 14:01

Raffinatore


3 Answers

Because you have <input name="uploadedfile" type="file" />:

$file = $_FILES["file"]["name"]; // wrong
$file = $_FILES["uploadedfile"]["name"]; // right

Because you need the filename of the temporary copy stored by PHP, which exists on the server:

ftp_put($conn_id, $remote_file_path, $file, FTP_ASCII); // wrong
ftp_put($conn_id, $remote_file_path, $_FILES["uploadedfile"]["tmp_name"],
        FTP_ASCII); // right

Refer to the PHP documentation for more information about $_FILES.

like image 200
PleaseStand Avatar answered Nov 12 '22 19:11

PleaseStand


Are you sure that the folder you are uploading to has the correct permissions? Try chmoding it to 777 and see if that works.

like image 25
Kyle Avatar answered Nov 12 '22 19:11

Kyle


The file is stored on server with temporary name, so when you try uploading $_FILES['file']['name'], it fails, because file with such name does not exist. Instead you should call ftp_put() with $_FILES['file']['tmp_name']

It's explained a little better here

like image 36
Darvex Avatar answered Nov 12 '22 17:11

Darvex