Upload multiple files takes long time in ftp - php

I want to upload multiple files using ftp in php. Just want to make sure that I am doing it correctly or the good way. I am able to upload the file on my localhost but after I transfer the project to the server, It takes time to upload.
Sometimes, it also give an error unable to connect to ftp if I upload more than 1 files. Below are the codes that I did.
for($i=0; $i < count($_FILES['uploaded']['name']); $i++){
$array = array($_FILES['uploaded']['name']);
$tmpFilePath = $_FILES['uploaded']['tmp_name'][$i];
$filesize = $_FILES['uploaded']['size'][$i];
if($filesize > 10485760){
$msgError[] = "Exceed maximum file size!";
}
if($tmpFilePath != ""){
$shortname = $_FILES['uploaded']['name'][$i];
$filePath = $date.'-'.$_FILES['uploaded']['name'][$i];
// Start FTP Connection
require "../ftp-conn.php";
$file = $tmpFilePath;
$remote_file = "/public_html/procurement/uploads/" . $filePath;
// turn passive mode on
ftp_pasv($conn_id, true);
// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "successfully uploaded $file\n";
} else {
die ("There was a problem while uploading $file\n");
}
// close the connection
ftp_close($conn_id);
}
}
Is there a better solution for this?
Update codes:
// Start FTP Connection
$ftp_server = "ftp.myweb.com";
$ftp_user_name = 'user';
$ftp_user_pass = 'password';
// set up a connection or die
$conn_id = ftp_connect($ftp_server) or
die("Couldn't connect to $ftp_server");
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// turn passive mode on
ftp_pasv($conn_id, true);
//Function to check file size and upload file if success
for($i=0; $i < count($_FILES['uploaded']['name']); $i++){
$tmpFilePath = $_FILES['uploaded']['tmp_name'][$i];
$filesize = $_FILES['uploaded']['size'][$i];
if($filesize > 10485760){
$msgError[] = "Exceed maximum file size!";
}
if($tmpFilePath != ""){
$shortname = $_FILES['uploaded']['name'][$i];
$filePath = $date.'-'.$_FILES['uploaded']['name'][$i];
$file = $tmpFilePath;
$remote_file = "/public_html/procurement/uploads/" . $filePath;
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "successfully uploaded $file\n";
} else {
die ("There was a problem while uploading $file\n");
}
}
}
// close the connection
ftp_close($conn_id);

Related

FTP file upload in php

I have a windows server from which i wish to transfer some images to my FTP server. below is my code
$file = "docs/1.png";
$ftp_server = "";
$ftp_user_name = "";
$ftp_user_pass = '';
$destination_file = "1.png";
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection
if ((!$conn_id) || (!$login_result)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name";
exit;
} else {
echo "Connected to $ftp_server, for user $ftp_user_name";
}
echo "Current directory is now: " . ftp_pwd($conn_id) . "\n";
// upload the file
// ftp_set_option($conn_id, FTP_TIMEOUT_SEC, 180);
ftp_chdir($conn_id, "example/");
echo "Current directory is now: " . ftp_pwd($conn_id) . "\n";
// ftp_put($conn_id, $destination_file, $file, FTP_BINARY);
ftp_pasv($conn_id, true);
$upload = ftp_put($conn_id, $destination_file, $file, FTP_BINARY);
// check upload statu
if (!$upload) {
echo "FTP upload has failed!";
} else {
echo "Uploaded $source_file to $ftp_server as $destination_file";
}
// close the FTP stream
ftp_close($conn_id);
I am getting **
ftp_put(): Opening BINARY mode data connection
** this error and file not uploading.

Uploade image to FTP via php code error

I have problem with my image uploade, it doesnt work...
give me this error
Connected to ftp.exemple.com, for user exemple#exemple.com Warning:
ftp_put(): Filename cannot be empty in
/home/user/public_html/foto-test.php on line 26 FTP upload has
failed!
<?php
$ftp_server = "ftp.xxxx.com";
$ftp_user_name = "xxxx#xxxx.com";
$ftp_user_pass = "xxxxxxx";
$folder = "/public_html/images";
$destination_file = $folder . $_FILES['file']['name'];
$source_file = $_FILE['file']['tmp_name'];
// set up basic connection
$conn_id = ftp_connect($ftp_server);
ftp_pasv($conn_id, true);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection
if ((!$conn_id) || (!$login_result)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name";
exit;
} else {
echo "Connected to $ftp_server, for user $ftp_user_name";
}
// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); //line 26
// check upload status
if (!$upload) {
echo "FTP upload has failed!";
} else {
echo "Uploaded $source_file to $ftp_server as $destination_file";
}
// close the FTP stream
ftp_close($conn_id);
?>
I tried to change the $folder destination but it give me the some error...
Check out the answers here PHP FTP upload error: Warning: ftp_put() [function.ftp-put]: Filename cannot be empty in
Also your destination path should have a slash at the end
$folder = "/public_html/images";
$destination_file = $folder . $_FILES['file']['name'];
change that to
$folder = "/public_html/images/";
$destination_file = $folder . $_FILES['file']['name'];
So it will be clear that whatever(image) you uploading is going into the image folder and not 'image+SomeName' folder

FTP via PHP Error

I am having an issue with uploading to FTP from my website through PHP.
It connects OK, but then has an issue with the uploading of the image.
HTML
<form action="../scripts/php/saveupload.php" method="post">
<input name="file" type="file" />
<input name="submit" type="submit" value="Upload File" />
</form>
PHP
$ftp_server = "XXXXXX";
$ftp_user_name = "XXXXX";
$ftp_user_pass = "XXXXX";
$destination_file = "/public_html/img/news/";
$source_file = $_FILE['file']['tmp_name'];
// set up basic connection
$conn_id = ftp_connect($ftp_server);
ftp_pasv($conn_id, true);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
//check connection
if ((!$conn_id) || (!$login_result)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name";
exit;
} else {
echo "Connected to $ftp_server, for user $ftp_user_name";
}
// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file);
// check upload status
if (!$upload) {
echo "FTP upload has failed!";
} else {
echo "Uploaded $source_file to $ftp_server as $destination_file";
}
// close the FTP stream
ftp_close($conn_id);
The message I am getting is:
"Connected to ftp.theucl.co.uk, for user theucl.co.ukFTP upload has
failed!"
This is now the error I am getting after following Niths advice on the error...
It appears the error is around the following..
$source_file = $_FILES['file']['tmp_name'];
and
$upload = ftp_put($conn_id, $destination_file.$_FILES['file']['tmp_name'], $source_file,FTP_ASCII);
Obviously there's a common apperance amongst this
There are few corrections in your code. Check the destination folder permission where you are uploading the files. Confirm that folder have writable permission. **IF upload failed, please check with error handler and do the necessary changes such as create upload destination folder, assign file permission etc **
First in your html form add enctype type.
HTML
<form action="../scripts/php/saveupload.php" method="post" enctype="multipart/form-data">
<input name="file" type="file" />
<input name="submit" type="submit" value="Upload File" />
</form>
And then in php file totally 3 changes. I have printed those lines below. Just compare those three changes with your code. In your program the $source_file says $_FILE is undefined. And, I used ftp port 21 in ftp_connect() function. In ftp_put() use 4th variable as FTP_ASCII or FTP_BINARY
$source_file = $_FILES['file']['tmp_name'];
$conn_id = ftp_connect($ftp_server,21);
$upload = ftp_put($conn_id, $destination_file.$_FILES['file']['name'], $source_file,FTP_ASCII);
For full program
PHP
ini_set("display_errors", "1");
error_reporting(E_ALL);
ini_set('display_startup_errors',1);
error_reporting(-1);
print_r(error_get_last());
$ftp_server = "XXXXXX";
$ftp_user_name = "XXXXX";
$ftp_user_pass = "XXXXX";
$destination_file = "/public_html/img/news/";
$source_file = $_FILES['file']['tmp_name'];
// set up basic connection
$conn_id = ftp_connect($ftp_server,21);
ftp_pasv($conn_id, true);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection
if ((!$conn_id) || (!$login_result)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name";
exit;
} else {
echo "Connected to $ftp_server, for user $ftp_user_name";
}
// upload the file
$upload = ftp_put($conn_id, $destination_file.$_FILES['file']['name'], $source_file,FTP_ASCII);
// check upload status
if (!$upload) {
echo "FTP upload has failed!";
} else {
echo "Uploaded $source_file to $ftp_server as $destination_file";
}
// close the FTP stream
ftp_close($conn_id);
I read many articles and found that username and password should contains only alpha numeric. Also i tried $ftp_server as your localhost.
So to check with the program, try in any internal server (one for both running php file and the same server for ftp file transfering). I know there is no use of same server as FTP for file transfer. But you please try uploading file in same server. If the FTP process works fine, then we will try changing ftp server.
Solved it by using a tutorial on Youtube by Thorn Web... instead of altering what I had above I restarted it and now have the following:
<?php
if($_POST['submit']){
$name = $_FILES['upload']['name'];
$temp = $_FILES['upload']['tmp_name'];
$type = $_FILES['upload']['type'];
$size = $_FILES['upload']['size'];
if(($type == "image/jpeg") || ($type == "image/jpg") || ($type == "image/gif")){
if($size <= 1000000){
move_uploaded_file($temp, "../img/news/$name");
}else{
echo "The file: '<b>$name</b>' is too big...<br>
The size is <b>$size</b> and needs to be less than 100GB. ";
}
}else{
echo "This type '<b>$type</b>' is not allowed";
}
}
?>
This works a treat

ftp_put says file is uploaded successfully but there is no file found

So the ftp_put says the file is successfully uploaded, but if i check the server there is no file found, i have checked the chmod permissions and they are 777.
here is the message i get when i uploaded a file:
conectd as a9408563#server23.000webhost.com Het bestand is succesvol geupload(the file has been successfully uploaded). connection closed
and this is my code:
<?php
$ftp_server = "xxxx";
$ftp_username = "xxx";
$ftp_password = "exxx";
$uploadedfile = $_FILES["uploadedfile"]["tmp_name"];
$destination_path = "/public_html/files";
//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";
}
ftp_pasv($conn_id, true);
/*
$remote_file_path = " /home/a9408563/public_html/files".$uploadedfile;
ftp_put($conn_id, $remote_file_path, $uploadedfile,
FTP_BINARY);
ftp_chdir($conn_id, '/public_html/files/');
ftp_put($conn_id, $destination_path.$_FILES["uploadedfile"]["name"], $_FILES['uploadedfile']['tmp_name'], FTP_BINARY );
*/
if (ftp_nb_put($conn_id, $destination_path.$_FILES["uploadedfile"]["name"], $_FILES['uploadedfile']['tmp_name'], FTP_BINARY))
{
echo "Het bestand is succesvol geupload.";
}
else
{
echo "Het bestand is niet geupload.";
}
ftp_close($conn_id);
echo "\n\nconnection closed";
?>
ftp_nb_put is more flexible than ftp_put, but also more complicated to check its result. A simple if(ftp_nb_put()) call isn't enough.
Try using ftp_put() instead, or learn how to check for ftp_nb_put's success in the manual:
// Initiate the Upload
$ret = ftp_nb_put($my_connection, "test.remote", "test.local", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// Do whatever you want
echo ".";
// Continue uploading...
$ret = ftp_nb_continue($my_connection);
}
if ($ret != FTP_FINISHED) {
echo "There was an error uploading the file...";
exit(1);
}

Downloading a file via ftp using php

I'm using ftp_put() to download a file from another server. Everything (connection etc.) working but it wont download.
ftp_chdir($conn_id, $destination_file);
$upload = ftp_put($conn_id, $name, $source_file, FTP_BINARY);
above is my code and its giving error "Can't change directory to"...
when i out ftp_put without 'ftp_chdir' it didn't work so i used ftp_chdir. but still not working. $destination_file equal to a path and $name equal to a file. Please give me an idea what a i doing wrong?
p.s even $upload is returning true. But i can't find the file anywhere.
Use ftp_get not ftp_put
<?php
// define some variables
$local_file = 'local.zip';
$server_file = 'server.zip';
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
echo "Successfully written to $local_file\n";
} else {
echo "There was a problem\n";
}
// close the connection
ftp_close($conn_id);
?>
ftp_get from PHP manual
This is my code,
$source_file="http://example.com/ex/ex2/".$file_name; and $destination_file is equal to a path.
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection
if ((!$conn_id) || (!$login_result)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name";
exit;
} else {
echo "Connected to $ftp_server, for user $ftp_user_name";
}
// upload the file
//ftp_chdir($conn_id, $destination_file);
$upload = ftp_get($conn_id, $destination_file, $source_file, FTP_BINARY);
// check upload status
if (!$upload) {
echo "FTP upload has failed!";
} else {
echo "Downloaded $source_file";
}
// close the FTP stream
ftp_close($conn_id);*/

Categories