我正在编写一个将更新文件文件夹上传到多个网站的代码。我一直在尝试使用以下功能将所有文件和文件夹上传到 FTP 帐户。在这种情况下,包含文件的本地文件夹被命名为“files”,并且所有文档都被上传到 ftp 帐户的父目录。
功能
function upload_dir($dirname,$conn_id) {
$dir_array=array();
if (is_dir($dirname))
$dir_handle = opendir($dirname);
if (!$dir_handle)
return false;
while($file = readdir($dir_handle)) {
if ($file != "." && $file != "..") {
if (!is_dir($dirname."/".$file)){
$dirname2= str_replace('files','',$dirname);
if($dirname2[0]=='/'){
$dirname2 = substr($dirname2, 1);
}
ftp_put($conn_id, $dirname2."/".$file, $dirname."/".$file, FTP_BINARY);
}
else{
$dirname2= str_replace('files','',$dirname);
if($dirname2[0]=='/'){
$dirname2 = substr($dirname2, 1);
}
if(in_array($dirname2.'/'.$file, $dir_array)){
upload_dir($dirname.'/'.$file,$conn_id);
}
else{
array_push($dir_array, $dirname2.'/'.$file);
// check if directory exists before trying to create it
$filename = $dirname2.'/'.$file;
if (file_exists($filename)) {
} else {
ftp_mkdir($conn_id,$dirname2.'/'.$file);
}
upload_dir($dirname.'/'.$file,$conn_id);
}
}
}
}
closedir($dir_handle);
return true;
}
代码
// Ftp All data to new server
$ftp_server = "ftp.mywebsite.com";
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, 'username', 'password');
// check connection
if ((!$conn_id) || (!$login_result)) {
$reply = "FTP connection has failed!";
$reply .= "Attempted to connect to $ftp_server for user zerozill@".$option1;
exit;
} else {
$reply = "Connected to $ftp_server, for user annon";
upload_dir('files',$conn_id);
}
// close the FTP stream
ftp_close($conn_id);
我遇到的问题是该功能在大多数情况下都有效,但由于某种原因它有时会拒绝上传文件夹。例如,我有一个名为 scripts 的文件夹。每次我运行此功能时,它都不会上传脚本文件夹。同样,它仍会尝试将所有文件上传到文件夹,从而创建脚本文件夹不存在的错误。我不知道我是否忽略了某些东西或什么,但对此事的任何帮助表示赞赏。