Using PHP, how do I FTP a file to a directory on the FTP server if I don't know if that directory already exists?
I have a web-application that allow users to upload images to my web site.
What I want to do is instead of hosting those images myself, I want to push those images off to my CDN (Cachefly).
Using PHP, I want to FTP an image from my server to another whenever a user uploads an image to my server.
However, I want to maintain the file structure path of my current server. Meaning, the file system plan locally is:
local: upload/YYYY/MM/DD/uniquefilename.jpg
So I want on my CDN for the image to be uploaded to:
cdn: upload/YYYY/MM/DD/uniquefilename.jpg
The problem is that the directory /YYYY/MM/DD might exist, or might not.
I'm using the following PHP code but this does not create the directories (/YYYY/MM/DD) when they are not currently present.
开发者_JS百科How do I FTP an image to a remote server while also maintain the file structure?
<?php
// 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";
}
// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
// 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);
?>
Why don't you Google for ftp_mkdir? (It was the first thing I tried and yes, its manual page is the first result.)
You could implicitely try and create the directory before uploading the image (with error suppression):
// assume you used substr() on your $destination_file to get the directory
// and named that variable $destination_dir
@ftp_mkdir($conn_id, $destination_dir);
I usually try to do an ftp_chdir
, and if that fails, I try to make the directory with ftp_mkdir
, and if that fails, I throw an error. Otherwise you're going to have to list the directories, catch the output, and parse it looking for the directory, and THEN try to do a ftp_mkdir
.
Ugly hack, admittedly.
@Victor: Well, we ARE talking about php here. You can wrap it in a try/catch block if it makes you feel any better, but really it's going to be doing the same thing. Without a method to test the directory (which php doesn't have), you're going to have to do something like this.
If it makes you feel any better, I've never seen a php ftp script that did it any differently. Hell, code like that is on the ftp_mkdir manual page!
精彩评论