使用PHP,如果我不知道该目录是否已存在,如何将文件FTP到FTP服务器上的目录?

时间:2009-10-15 17:07:38

标签: php ftp

我有一个网络应用程序,允许用户将图像上传到我的网站。

我想做的不是自己托管这些图片,而是想将这些图片推送到我的CDN(Cachefly)。

使用PHP,每当用户将图像上传到我的服务器时,我都希望将图像从我的服务器FTP到另一台。

但是,我想维护当前服务器的文件结构路径。这意味着,本地文件系统计划是:

local:  upload/YYYY/MM/DD/uniquefilename.jpg

所以我想在我的CDN上将图像上传到:

cdn:  upload/YYYY/MM/DD/uniquefilename.jpg

问题是目录/ YYYY / MM / DD可能存在,也可能不存在。

我正在使用以下PHP代码,但当它们当前不存在时,这不会创建目录(/ YYYY / MM / DD)。

如何在保持文件结构的同时将图像FTP到远程服务器?

<?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); 
?>

3 个答案:

答案 0 :(得分:1)

你为什么不谷歌ftp_mkdir? (这是我尝试的第一件事,是的,它的手册页是第一个结果。)

答案 1 :(得分:1)

您可以在上传图像之前隐含地尝试创建目录(带有错误抑制):

// assume you used substr() on your $destination_file to get the directory
// and named that variable $destination_dir
@ftp_mkdir($conn_id, $destination_dir);

答案 2 :(得分:1)

我通常会尝试ftp_chdir,如果失败,我会尝试使用ftp_mkdir创建目录,如果 失败,我会抛出错误。否则,你将不得不列出目录,捕获输出,并解析它寻找目录,然后尝试做ftp_mkdir

丑陋的黑客,诚然。

@Victor:嗯,我们在这里讨论php。你可以将它包装在try / catch块中,如果它让你感觉更好,但实际上它会做同样的事情。没有测试目录的方法(php没有),你将不得不做这样的事情。

如果它让你感觉更好,我从来没有见过这样做的php ftp脚本。地狱,这样的代码在ftp_mkdir manual page