@@ -386,9 +386,21 @@ public function removeFile($remoteFile)
386
386
*/
387
387
public function isExists ($ remoteFile )
388
388
{
389
- return @in_array (
389
+ /**
390
+ * Trying to get the files list of the remote file parent directory, this
391
+ * check is basically to avoid passing false to the next 'in_array' function
392
+ * below, so we don't want to get an error because of this.
393
+ *
394
+ * The str_replace because of dirname in windows gives '\' instead of '/'
395
+ * if the path matches for example '/foo/'.
396
+ */
397
+ if (($ list = $ this ->wrapper ->nlist (str_replace ('\\' , '/ ' , dirname ($ remoteFile )))) === false ) {
398
+ return false ;
399
+ }
400
+
401
+ return in_array (
390
402
basename ($ remoteFile ),
391
- $ this -> wrapper -> nlist ( dirname ( $ remoteFile ))
403
+ $ list
392
404
);
393
405
}
394
406
@@ -449,7 +461,8 @@ public function createDirectory($directory)
449
461
450
462
if (!$ this ->isExists ($ dir )) {
451
463
if (!$ this ->wrapper ->mkdir ($ dir )) {
452
- return false ;
464
+ throw new FtpClientException (FtpClientException::getFtpServerError ()
465
+ ?: 'Unable to create directory [ ' .$ dir .'] ' );
453
466
}
454
467
}
455
468
}
@@ -807,26 +820,26 @@ public function download($remoteFile, $localFile, $resume = true, $mode = FtpWra
807
820
public function getTransferMode ($ fileName )
808
821
{
809
822
if (
810
- in_array (substr ($ fileName , strpos ($ fileName , '. ' ) + 1 ), [
811
- "3dm " , "3ds " , "3g2 " , "3gp " , "7z " , "a " , "aac " , "adp " , "ai " , "aif " , "aiff " , "alz " , "apk " , "ape " , "ar " ,
812
- "arj " , "asf " , "au " , "avi " , "bak " , "baml " , "bh " , "bin " , "bk " , "bmp " , "btif " , "bz2 " , "bzip2 " , "cab " ,
813
- "caf " , "cgm " , "class " , "cmx " , "cpio " , "cr2 " , "cur " , "dat " , "dcm " , "deb " , "dex " , "djvu " , "dll " , "dmg " ,
814
- "dng " , "doc " , "docm " , "docx " , "dot " , "dotm " , "dra " , "DS_Store " , "dsk " , "dts " , "dtshd " , "dvb " , "dwg " ,
815
- "dxf " , "ecelp4800 " , "ecelp7470 " , "ecelp9600 " , "egg " , "eol " , "eot " , "epub " , "exe " , "f4v " , "fbs " , "fh " ,
816
- "fla " , "flac " , "fli " , "flv " , "fpx " , "fst " , "fvt " , "g3 " , "gh " , "gif " , "graffle " , "gz " , "gzip " , "h261 " ,
817
- "h263 " , "h264 " , "icns " , "ico " , "ief " , "img " , "ipa " , "iso " , "jar " , "jpeg " , "jpg " , "jpgv " , "jpm " , "jxr " ,
818
- "key " , "ktx " , "lha " , "lib " , "lvp " , "lz " , "lzh " , "lzma " , "lzo " , "m3u " , "m4a " , "m4v " , "mar " , "mdi " , "mht " ,
819
- "mid " , "midi " , "mj2 " , "mka " , "mkv " , "mmr " , "mng " , "mobi " , "mov " , "movie " , "mp3 " , "mp4 " , "mp4a " , "mpeg " ,
820
- "mpg " , "mpga " , "mxu " , "nef " , "npx " , "numbers " , "nupkg " , "o " , "oga " , "ogg " , "ogv " , "otf " , "pages " , "pbm " ,
821
- "pcx " , "pdb " , "pdf " , "pea " , "pgm " , "pic " , "png " , "pnm " , "pot " , "potm " , "potx " , "ppa " , "ppam " , "ppm " ,
822
- "pps " , "ppsm " , "ppsx " , "ppt " , "pptm " , "pptx " , "psd " , "pya " , "pyc " , "pyo " , "pyv " , "qt " , "rar " , "ras " ,
823
- "raw " , "resources " , "rgb " , "rip " , "rlc " , "rmf " , "rmvb " , "rtf " , "rz " , "s3m " , "s7z " , "scpt " , "sgi " ,
824
- "shar " , "sil " , "sketch " , "slk " , "smv " , "snk " , "so " , "stl " , "suo " , "sub " , "swf " , "tar " , "tbz " , "tbz2 " ,
825
- "tga " , "tgz " , "thmx " , "tif " , "tiff " , "tlz " , "ttc " , "ttf " , "txz " , "udf " , "uvh " , "uvi " , "uvm " , "uvp " ,
826
- "uvs " , "uvu " , "viv " , "vob " , "war " , "wav " , "wax " , "wbmp " , "wdp " , "weba " , "webm " , "webp " , "whl " , "wim " ,
827
- "wm " , "wma " , "wmv " , "wmx " , "woff " , "woff2 " , "wrm " , "wvx " , "xbm " , "xif " , "xla " , "xlam " , "xls " , "xlsb " ,
828
- "xlsm " , "xlsx " , "xlt " , "xltm " , "xltx " , "xm " , "xmind " , "xpi " , "xpm " , "xwd " , "xz " , "z " , "zip " , "zipx "
829
- ])
823
+ in_array (substr ($ fileName , strpos ($ fileName , '. ' ) + 1 ), [
824
+ "3dm " , "3ds " , "3g2 " , "3gp " , "7z " , "a " , "aac " , "adp " , "ai " , "aif " , "aiff " , "alz " , "apk " , "ape " , "ar " ,
825
+ "arj " , "asf " , "au " , "avi " , "bak " , "baml " , "bh " , "bin " , "bk " , "bmp " , "btif " , "bz2 " , "bzip2 " , "cab " ,
826
+ "caf " , "cgm " , "class " , "cmx " , "cpio " , "cr2 " , "cur " , "dat " , "dcm " , "deb " , "dex " , "djvu " , "dll " , "dmg " ,
827
+ "dng " , "doc " , "docm " , "docx " , "dot " , "dotm " , "dra " , "DS_Store " , "dsk " , "dts " , "dtshd " , "dvb " , "dwg " ,
828
+ "dxf " , "ecelp4800 " , "ecelp7470 " , "ecelp9600 " , "egg " , "eol " , "eot " , "epub " , "exe " , "f4v " , "fbs " , "fh " ,
829
+ "fla " , "flac " , "fli " , "flv " , "fpx " , "fst " , "fvt " , "g3 " , "gh " , "gif " , "graffle " , "gz " , "gzip " , "h261 " ,
830
+ "h263 " , "h264 " , "icns " , "ico " , "ief " , "img " , "ipa " , "iso " , "jar " , "jpeg " , "jpg " , "jpgv " , "jpm " , "jxr " ,
831
+ "key " , "ktx " , "lha " , "lib " , "lvp " , "lz " , "lzh " , "lzma " , "lzo " , "m3u " , "m4a " , "m4v " , "mar " , "mdi " , "mht " ,
832
+ "mid " , "midi " , "mj2 " , "mka " , "mkv " , "mmr " , "mng " , "mobi " , "mov " , "movie " , "mp3 " , "mp4 " , "mp4a " , "mpeg " ,
833
+ "mpg " , "mpga " , "mxu " , "nef " , "npx " , "numbers " , "nupkg " , "o " , "oga " , "ogg " , "ogv " , "otf " , "pages " , "pbm " ,
834
+ "pcx " , "pdb " , "pdf " , "pea " , "pgm " , "pic " , "png " , "pnm " , "pot " , "potm " , "potx " , "ppa " , "ppam " , "ppm " ,
835
+ "pps " , "ppsm " , "ppsx " , "ppt " , "pptm " , "pptx " , "psd " , "pya " , "pyc " , "pyo " , "pyv " , "qt " , "rar " , "ras " ,
836
+ "raw " , "resources " , "rgb " , "rip " , "rlc " , "rmf " , "rmvb " , "rtf " , "rz " , "s3m " , "s7z " , "scpt " , "sgi " ,
837
+ "shar " , "sil " , "sketch " , "slk " , "smv " , "snk " , "so " , "stl " , "suo " , "sub " , "swf " , "tar " , "tbz " , "tbz2 " ,
838
+ "tga " , "tgz " , "thmx " , "tif " , "tiff " , "tlz " , "ttc " , "ttf " , "txz " , "udf " , "uvh " , "uvi " , "uvm " , "uvp " ,
839
+ "uvs " , "uvu " , "viv " , "vob " , "war " , "wav " , "wax " , "wbmp " , "wdp " , "weba " , "webm " , "webp " , "whl " , "wim " ,
840
+ "wm " , "wma " , "wmv " , "wmx " , "woff " , "woff2 " , "wrm " , "wvx " , "xbm " , "xif " , "xla " , "xlam " , "xls " , "xlsb " ,
841
+ "xlsm " , "xlsx " , "xlt " , "xltm " , "xltx " , "xm " , "xmind " , "xpi " , "xpm " , "xwd " , "xz " , "z " , "zip " , "zipx "
842
+ ])
830
843
) {
831
844
return FtpWrapper::BINARY ;
832
845
}
@@ -984,7 +997,8 @@ public function createFile($remoteFile, $content = null)
984
997
rewind ($ handle ); // Rewind position
985
998
986
999
if (!$ this ->wrapper ->fput ($ remoteFile , $ handle , FtpWrapper::ASCII )) {
987
- throw new FtpClientException ("Failed to create file [ {$ remoteFile }]. " );
1000
+ throw new FtpClientException (FtpClientException::getFtpServerError () ?:
1001
+ "Failed to create file [ {$ remoteFile }]. " );
988
1002
}
989
1003
990
1004
return true ;
0 commit comments