How to create a zip file in PHP

Howdy!

I will show you how to create a zip file in PHP. All the directory in your server will also be zipped in the code. I will use the ZipArchive class in php. It’s easy as 1 2 3 :)

function ListFiles($dir) {
	if($dh = opendir($dir)) {
		$files = Array();
		$inner_files = Array();
		while($file = readdir($dh)) {
			if($file != "." && $file != ".." && $file[0] != '.') {
				if( $dir == getcwd() )	continue;
				if(is_dir($dir . "/" . $file)) {
					$inner_files = ListFiles($dir . "/" . $file);
					if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
				} else {
					array_push($files, $dir . "/" . $file);
				}
			}
		}

		closedir($dh);
		return $files;
	}
}

$zip = new ZipArchive();
$backupName = date("Y-M-d-h:i:a",time());
$filename = $backupName.".zip";
#Store the backup file in a Folder called 'Files'
if( $zip->open("Files/".$filename,ZIPARCHIVE::CREATE) !== TRUE ) {
	exit("Cannot open the archive file");
}
#Replace this one with your root directory
$directory = '/home/mysite/public_html';
foreach (ListFiles($directory) as $key=>$file){
        #do not include the backup files to be backed-up 
	if( strstr($file,getcwd()) != "" ) continue; 
	$zip->addFile($file);
}  
$zip->close();

To download the zip file, just access it through your browser, so mine is I put the zip file in a File Directory, so it should be something like this: http://mysite.com/File/ . It really depends.

Hope this helps someone! Have a happy coding!

Solving Amazon S3 cURL Error when uploading an Object

Lately, I’ve been working on Amazon S3 API, wherein I’m uploading videos/object in the Amazon Server, however, I was really stuck on an error every time i’m uploading files into the Amazon. Here’s the error below:
Fatal error: Uncaught exception 'RequestCore_Exception' with message 'cURL resource: Resource id #16; cURL error: select/poll returned error (55)' in /home/user/website.com/amazon/lib/requestcore/requestcore.class.php: 824 Stack trace: #0 /home/user/website.com/amazon/services/s3.class.php(882): RequestCore->send_request() #1 /home/user/website.com/amazon/services/s3.class.php(1391): AmazonS3->authenticate('bucket...', Array) #2 /home/user/website.com/amazon_upload_video.php(41): AmazonS3->create_object('bucket...', '1te0f0idn4.mp4', Array) #3 {main} thrown in /home/user/website.com/amazon/lib/requestcore/requestcore.class.php on line 824

Now this is the start of a major headache which I thought I could pass this task quickly! After doing a quick research, I never found an answer, how sad :( , I even asked this at Stackoverflow.com but unfortunately, I never got a correct answer. Anyway, nuf said!

Here’s what I did to combat this bug.

Simple 3 Steps.

  • Make sure to download the Latest Version of Amazon SDK for PHP 
  • After uploading the SDK into your site, point your browser to the location where you uploaded the SDK, then point it where the sdk_compatibility_test.php. Mine was http://my-website.com/location-of-the-sdk/_compatibility_test/sdk_compatibility_test.php. You will see if you’re able to run the Amazon SDK in your site. I assume that you are able to run. Try to check the version of your cURL.
  • Since the error that we encountered was about cURL. Make sure that you have the latest version of  it. Mine is 7.21.0 (OpenSSL/0.9.8o). To update the version of your cURL, try to contact your hosting administrator.

There you go!! That’s how easy to solve that major bug that you’ve been stuck for so long.

So to make the debugging short, make sure you have the latest version of cURL because the lower version of cURL was quite buggy.

There was another solution that I read on how to solve the bug. It was like modifying the config.inc.php and changing the
‘certificate_authority’ => false
into
‘certificate_authority’ => true
but honestly that didn’t work for me, so I guess all of us have a different situation.

Okay! I hope this helps everyone! Have a Happy Coding!