Я пытаюсь скопировать файлы с удаленного FTP-сервера на другой удаленный FTP-сервер и получаю предупреждение:
Warning: copy(): The first argument to copy() function cannot be a directory in
Я дважды проверил имена папок и путь к файлу, и все правильно. Я могу успешно использовать copy()
вне вложенных foreach()
, но как только я добавлю вложенный цикл и поставлю copy()
это душит.
Вот мой код:
// set-up basic connection
$one_connection = ftp_connect("ftp.***.com");
$two_connection = ftp_connect("ftp.***.com");
// login with username and password
$one_login_result = ftp_login($one_connection, $one_user, $one_pass);
$two_login_result = ftp_login($two_connection, $two_user, $two_pass);
// get a list of directories on ftp server
$directories = ftp_nlist($one_connection, "ftp_images/rsr_number/");
// log start time
$start_time = date('Hi');
// loop through and pull all images from each directory
foreach($directories as $dir)
{
// get list of images in directory
$images = ftp_nlist($one_connection, "ftp_images/img_number/".$dir);
foreach($images as $img)
{
copy('ftp://user:pass@ftp.****.com/ftp_images/img_number/' .$dir . '/' . $img, 'ftp://user:pass@ftp.***.com/public_html/temp/' . $img);
}
}
ftp_close($one_connection);
ftp_close($two_connection);
Почему я получаю это предупреждение?
Кроме того, это правильный способ подключения двух удаленных FTP-серверов?
РЕДАКТИРОВАТЬ
Вот var_dump()
за $directories
:
array(27) {
[0]=>
string(1) "#"[1]=>
string(1) "a"[2]=>
string(1) "b"[3]=>
string(1) "c"[4]=>
string(1) "d"[5]=>
string(1) "e"[6]=>
string(1) "f"[7]=>
string(1) "g"[8]=>
string(1) "h"[9]=>
string(1) "i"[10]=>
string(1) "j"[11]=>
string(1) "k"[12]=>
string(1) "l"[13]=>
string(1) "m"[14]=>
string(1) "n"[15]=>
string(3) "num"[16]=>
string(1) "o"[17]=>
string(1) "p"[18]=>
string(1) "r"[19]=>
string(1) "s"[20]=>
string(1) "t"[21]=>
string(1) "u"[22]=>
string(1) "v"[23]=>
string(1) "w"[24]=>
string(1) "x"[25]=>
string(1) "y"[26]=>
string(1) "z"}
Вот попробуйте это:
Используемый класс Вот.
<?php
// use object oriented method
// Class found here: http://geneticcoder.blogspot.com/2015/04/class-for-doing-ftp-stuff.html
$ftp1 = new ftp($host_one, $one_user, $one_pass);
$ftp2 = new ftp($host_two, $two_user, $two_pass);
//change to the correct path of the temp directory
$ftp2->change_dir("public_html/temp/");
// get a list of directories on ftp server
$directories = $ftp1->list_all("ftp_images/rsr_number/");
// loop through and pull all images from each directory
foreach($directories as $dir){
// FTP almost always sends these dot-dealies, filter them out
if($dir == "." || $dir == "..") continue;
// change the current directory
$current_dir = "ftp_images/rsr_number/$dir";
$ftp1->change_dir($current_dir);
// get list of images in directory
$images = $ftp1->list_all();
foreach($images as $img){
// FTP almost always sends these dot-dealies, filter them out
if($img == "." || $img == "..") continue;
// copy the file from a to b
// create a temporary file on the server to store the file we're moving
$tmpname = realpath(dirname(__FILE__))."/".microtime();
// temporarily put the file on the current server
$file = $ftp1->get("$current_dir/$img", $tmpname);
// move file from current server to remote server
$ftp2->put($tmpname);
// remove the file from the current server
unlink($tmpname);
}
}
$ftp1->close();
$ftp2->close();
Других решений пока нет …