我有一个网络应用程序,允许用户将图像上传到我的网站。
我想做的不是自己托管这些图片,而是想将这些图片推送到我的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);
?>
答案 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!