更新ファイルのフォルダーをいくつかのWebサイトにアップロードするコードに取り組んでいます。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という名前のフォルダがあります。この関数を実行するたびに、scriptsフォルダーがアップロードされません。また、すべてのファイルをフォルダーにアップロードしようとすると、scriptsフォルダーが存在しないというエラーが発生します。私は何かを見落としているのか、それとも何を見落としているのかわかりませんが、この問題についての助けをいただければ幸いです。