hugsbrugs/php-ftp

download_dir and download_all issue

Opened this issue · 1 comments

Hello!

Hopefully you can help - when I call download_dir it will download a few files then get stuck in a loop, eventually erroring out with something like the below:
Warning: ftp_get(): Error opening ./Data/languages/plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plugins/../plu in /vendor/hugsbrugs/php-ftp/src/Hug/Ftp/Ftp.php on line 553

Note the line number 553 may be out slightly as I've added the passive mode line ftp_pasv($cid, true); near the top of the file. the line

if(ftp_get($cid, $local_dir . DIRECTORY_SEPARATOR . basename($file), $file, FTP_BINARY)) is line 553 for me.

To fix this
change line 524 of /src/Hug/Ftp/Ftp.php
from
$files = ftp_nlist($cid, $remote_dir);
to
$files = ftp_mlsd($cid, $remote_dir);

line 534 from
if ($file != "." && $file != "..")
to
if ($file['type'] != "cdir" && $file['type'] != "pdir")

line 538 from
if (Ftp::is_dir($file, $cid))// $remote_dir . DIRECTORY_SEPARATOR .
to
if ($file['type'] == 'dir')

Then whenever $file is used after this in that function (5 occurrences) change to $file['name']

Hope that helps someone.