This question already has an answer here:
ftp_put is corrupting my movies after transfer, is it wrong?
(1 answer)
Closed 3 days ago.
I am working on a self taught local project and trying to upload a file to a server.
but when I upload the image file it gets corrupted.
this is my upload.php
<?php
$ds = DIRECTORY_SEPARATOR; //1
$storeFolder = 'uploads'; //2
if (!empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name']; //3
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds; //4
$targetFile = $targetPath. $_FILES['file']['name']; //5
move_uploaded_file($tempFile,$targetFile); //6
$ftp_server="myServer";
$ftp_user_name="userName";
$ftp_user_pass="Password";
$file = $targetFile;//tobe uploaded
$remote_file = $_FILES['file']['name'];
// 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);
// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
echo "successfully uploaded $file\n";
exit;
} else {
echo "There was a problem while uploading $file\n";
exit;
}
// close the connection
ftp_close($conn_id);
}
?>
It currently uploads to the local folder Uploads also to the server but corruptted any help on this will be great.
Have you tried using FTP Binary? an image is a binary file not an ASCII file.
Related
I have already made an upload form. But I want users to be able to upload .zip files and .rar files. I already have tried the following:
$ftp_server = "myserver";
$ftp_user_name = "myuser";
$ftp_user_pass = "mypass";
$source_file = $_FILES['file']['tmp_name'];
$fileType = $_FILES['file']['type'];
$fileExt = explode('.', $filename);
$fileActualExt = strtolower(end($fileExt));
$destination_folder = "/public_html/wp/wp-content/plugins/AbonneerProgrammas/FilesUpload";
$destination_file = $destination_folder . "/" . basename($_FILES['file']['name']);
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true);
$allowed = array('zip', 'rar');
if(in_array($fileActualExt, $allowed)) {
//my upload code
}else {
echo "You are not allowed to upload this file.";
}
It does not show any errors. It only enters inside the else. It also does this when I am uploading .zip files, I do not know what is wrong.
1.You need to use pathinfo() to get file extension.
2.$filename is no where defined in your code, so it will give you warning as well as extension checking code will always fail.
Modify code like below:
$ftp_server = "myserver";
$ftp_user_name = "myuser";
$ftp_user_pass = "mypass";
$source_file = $_FILES['file']['tmp_name'];
$fileType = $_FILES['file']['type'];
/*get file extension [*/
$fileExt = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);
$fileExt = strtolower($fileExt);
/* ] */
$destination_folder = "/public_html/wp/wp-content/plugins/AbonneerProgrammas/FilesUpload";
$destination_file = $destination_folder . "/" . basename($_FILES['file']['name']);
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true);
$allowed = array('zip', 'rar');
/*use $extension variable to check allowed or not [*/
if(in_array($fileExt, $allowed)) {
//my upload code
}else {
echo "U mag dit type bestand niet uploaden.";
}
/* ] */
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);
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
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
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);*/