开发者

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!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜