Chris@0: connection = ftp_connect($this->hostname, $this->port); Chris@0: Chris@0: if (!$this->connection) { Chris@0: throw new FileTransferException("Cannot connect to FTP Server, check settings"); Chris@0: } Chris@0: if (!ftp_login($this->connection, $this->username, $this->password)) { Chris@0: throw new FileTransferException("Cannot log in to FTP server. Check username and password"); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function copyFileJailed($source, $destination) { Chris@0: if (!@ftp_put($this->connection, $destination, $source, FTP_BINARY)) { Chris@0: throw new FileTransferException("Cannot move @source to @destination", NULL, ["@source" => $source, "@destination" => $destination]); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function createDirectoryJailed($directory) { Chris@0: if (!ftp_mkdir($this->connection, $directory)) { Chris@0: throw new FileTransferException("Cannot create directory @directory", NULL, ["@directory" => $directory]); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function removeDirectoryJailed($directory) { Chris@0: $pwd = ftp_pwd($this->connection); Chris@0: if (!ftp_chdir($this->connection, $directory)) { Chris@0: throw new FileTransferException("Unable to change the current directory to @directory", NULL, ['@directory' => $directory]); Chris@0: } Chris@0: $list = @ftp_nlist($this->connection, '.'); Chris@0: if (!$list) { Chris@0: $list = []; Chris@0: } Chris@0: foreach ($list as $item) { Chris@0: if ($item == '.' || $item == '..') { Chris@0: continue; Chris@0: } Chris@0: if (@ftp_chdir($this->connection, $item)) { Chris@0: ftp_cdup($this->connection); Chris@0: $this->removeDirectory(ftp_pwd($this->connection) . '/' . $item); Chris@0: } Chris@0: else { Chris@0: $this->removeFile(ftp_pwd($this->connection) . '/' . $item); Chris@0: } Chris@0: } Chris@0: ftp_chdir($this->connection, $pwd); Chris@0: if (!ftp_rmdir($this->connection, $directory)) { Chris@0: throw new FileTransferException("Unable to remove the directory @directory", NULL, ['@directory' => $directory]); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function removeFileJailed($destination) { Chris@0: if (!ftp_delete($this->connection, $destination)) { Chris@0: throw new FileTransferException("Unable to remove the file @file", NULL, ['@file' => $destination]); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isDirectory($path) { Chris@0: $result = FALSE; Chris@0: $curr = ftp_pwd($this->connection); Chris@0: if (@ftp_chdir($this->connection, $path)) { Chris@0: $result = TRUE; Chris@0: } Chris@0: ftp_chdir($this->connection, $curr); Chris@0: return $result; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isFile($path) { Chris@0: return ftp_size($this->connection, $path) != -1; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function chmodJailed($path, $mode, $recursive) { Chris@0: if (!ftp_chmod($this->connection, $mode, $path)) { Chris@0: throw new FileTransferException("Unable to set permissions on %file", NULL, ['%file' => $path]); Chris@0: } Chris@0: if ($this->isDirectory($path) && $recursive) { Chris@0: $filelist = @ftp_nlist($this->connection, $path); Chris@0: if (!$filelist) { Chris@0: // empty directory - returns false Chris@0: return; Chris@0: } Chris@0: foreach ($filelist as $file) { Chris@0: $this->chmodJailed($file, $mode, $recursive); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: }