ftp — PHP copy () дает мне предупреждение

Я пытаюсь скопировать файлы с удаленного 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"}

1

Решение

Вот попробуйте это:

Используемый класс Вот.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]