Jump to content

Automatically Ftp A Directory From My Site?

Recommended Posts



was wondering if anyone can recommend a method of automatically backing up a directory and FTPing it, optimally in a secure way (SSL?). i would prefer something that doesn't require installation of a special program to run at my end (ie running cuteFTP automatically at startup and having some sort of schedule), since I can have a local FTP server using the inbuilt features of WinXP...

any recommendations?

Link to comment
Share on other sites

No, it's not that one and no it doesn't use secure FTP either and you won't be able to run a secure FTP on the servers here at TCH because they do not run secure FTP server software.


The script I found does not zip the files it copies each file, I don't like that approach as it will use a lot of bandwidth. I am still working on something that will zip the contents and then be able to FTP it.


Actually I believe there is something like this already posted in the forums but I have not found it yet.

Link to comment
Share on other sites

The script referenced above works fine. I use a modified version to dump all MySQL DB's, attach to an e-mail, and send to me daily. I also use it to do a full site backup weekly but it is too large to e-mail so I have a notification sent then I download the backup.

Link to comment
Share on other sites

I've had some time and with the help of TCH-Andy have created a script that can be used to email (not recommended) or remote ftp a directory from your site to a remote server.


// +----------------------------------------------------------------------+
// | PHP Version 4														|
// +----------------------------------------------------------------------+
// | Copyright © 2006 Bruce Richards / Andy Beckett					 |
// |																	  |
// | Purpose: To backup a folder structure to a zip file and then FTP	 |
// |		  the file to a remote server								 |
// |																	  |
// | Requires:  zip be installed on the server and that you are able	  |
// |			to use the passthru command of PHP, the TCH servers	   |
// |			do have zip installed and passthru can be used.		   |
// |																	  |
// | WARNING: Depending on what you are backing up the files can be quite |
// |		  large. Be sure you have enough space for what you are	   |
// |		  backing up. Also, sending huge files via email is not	   |
// |		  recommended.												|
// |																	  |
// +----------------------------------------------------------------------+
// | Author: Bruce Richards / Andy Beckett								|
// +----------------------------------------------------------------------+

// setup variables
$remove_file = "yes";  // remove file when done -- recommended!

$path= '/home/your-account/public_html/';  // Full path to backup

$zipfile = "your.zip";  // backup file name
$zippath = "/home/your-account/backups";  // path to save backup file 

$send_email = "no";  // Do you want this backup sent to your email? Fill out the next 2 lines
$to	  = "you@yourdomain.ext";  // Who to send the emails to
$from	= "backup@yourdomain.ext"; // Who should the emails be sent from?

$senddate = date("j F Y");

$subject = "Backup - $senddate"; // Subject in the email to be sent.
$message = "Your backup is attached to this email"; // Brief Message.

$use_ftp = "yes"; // Do you want this backup uploaded to an ftp server? Fill out the next 4 lines
$ftp_server = "localhost"; // FTP hostname
$ftp_user_name = ""; // FTP username
$ftp_user_pass = ""; // FTP password
$ftp_path = "/"; // This is the path to upload on your ftp server!

// Do not Modify below this line! 

$date = date("mdy-hia");
$zipname = "$zippath/$date-$zipfile";
passthru("nice -n 16 zip -q -r $zipname $path ");

$filename2 = "$zipname";
if($send_email == "yes" ){
	$fileatt_type = filetype($filename2);
	$fileatt_name = "".$date."-".$zipfile."";
	$headers = "From: $from";
	// Read the file to be attached ('rb' = read binary)
	$file = fopen($filename2,'rb');
	$data = fread($file,filesize($filename2));

	// Generate a boundary string
	$semi_rand = md5(time());
	$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

	// Add the headers for a file attachment
	$headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\"";

	// Add a multipart boundary above the plain message
	$message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" .
	$message . "\n\n";

	// Base64 encode the file data
	$data = chunk_split(base64_encode($data));

	// Add file attachment to the message
	$message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$fileatt_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$fileatt_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" .
	$data . "\n\n" ."--{$mime_boundary}--\n";

	// Send the message
	$ok = @mail($to, $subject, $message, $headers. "-f" .$from);
	if ($ok) {
		echo "<h4><center>Backup created and sent! File name $filename2</center></h4>";
	} else {
		echo "<h4><center>Mail could not be sent. Sorry!</center></h4>";

if($use_ftp == "yes"){
	$conn = ftp_connect($ftp_server);
	if(!$conn) {
		exit("Could not connect to server: $ftp_server\n");

	if(!ftp_login($conn,$ftp_user_name,$ftp_user_pass)) {
		exit("Could not log in\n");


	$remotefile = "".$date."-".$zipfile."";

	if(!ftp_put($conn, $ftp_path.$remotefile, $filename2, FTP_BINARY)) {
			echo "Could not upload $filename2\n";

	echo "<h4><center>$filename2 Was created and uploaded to your FTP server!</center></h4>";


	exec("rm -r -f $filename2");


Copy this and create a PHP file, upload it to your server and create a cron job to run it or you can run it from your web browser.


Don't forget this could create huge files and I could not get a 22MB file to email to GMail but smaller zip files emailed just fine. The FTP function works just fine with large files.

Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...