Save image & keep structure in PHP

Im currently working on a way to archive webpages using PHP. What I am currently stumped with is the a way on how I can save images from the page and keep the same folder structure.

So far I have extracted the URL to the image. What im left with is:
www.testsite.com/img/main/layout/head_image_cc_09.jpg
what I need to do now is copy that image to my server and still have the correct file structure.
for example I want it to be like this:
copy testsite.com/img/main/layout/head_image_cc_09.jpg
to www.mysite.com/archive/testsite.com/img/main/layout/head_image_cc_09.jpg

Any ideas?

EDIT: Maybe to make it a bit easier, maybe even a way to remove everything before the filename and the file extension. So like change 'testsite.com/img/main/layout/head_image_cc_09.jpg' to just head_image_cc_09.jpg. I would actually though have to be able to remove the filename and not just get image properties. Like remove all characters before and including the / symbol.

I would really really much prefer the first idea, but if thats not plausible then I guess the second way should be alright, but would require much more work.
LVL 5
drakesheAsked:
Who is Participating?
 
AtanAsfalothConnect With a Mentor Commented:
I would recommend using explode("/", $remoteimage) and recursively create the missing directories using mkdir(). Then once the folder structure is in place copy($remoteimage, $localpath) would suffice to copy the file. The (untested) snippet should illustrate this.
$remoteimage = "www.testsite.com/img/main/layout/head_image_cc_09.jpg"
$localpath = "/archive/"
 
//Remove leading 'www.'
if (substr($remoteimage, 0, 4) == "www.") {
	$remoteimage = substr($remoteimage, 4);
}
 
//Explode by slashes
$folders = explode("/", $remoteimage);
 
//Create folder structure
for ($I=0; $I+1 < count($folders); $I++) {
	//Add foldername to local path
	$localpath += $folders[I] + "/";
	if (!file_exists($localpath)) {
		//Directory does not yet exist, create it
		mkdir($localpath);
	}
}
 
//Add filename to local path
$localpath += $folders[count($folders)-1];
 
//Copy the file
if (!copy($remoteimage, $localpath)) {
	echo "Error copying '$remoteimage' to '$localpath'";
} else {
	echo "Successfully copied '$remoteimage' to '$localpath'";
}

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.