/** * Uploads a file or directory to an FTP connection. * * @param \Ftp $ftp An active FTP connection. * @param \SplFileInfo $file A local file to upload. */ protected function upload(\Ftp $ftp, \SplFileInfo $file) { // enter into passive mode $ftp->pasv(true); // move to the file's parent directory $ftp->chdir($this->targetDirectory . '/' . $file->getRelativePath()); // check if the file exists $fileExists = in_array($file->getBasename(), $ftp->nlist('.')); // check if the file is a directory if ($file->isDir()) { // create the directory if it does not exist if (!$fileExists) { $this->printTaskInfo('Creating directory: ' . $file->getRelativePathname()); // create directory $ftp->mkdir($file->getBasename()); } } else { // if the file already exists, check our skip options if ($fileExists) { // skip the file if the file sizes are equal if ($this->skipSizeEqual && $ftp->size($file->getBasename()) === $file->getSize()) { return; } // skip the file if modified time is same or newer than source if ($this->skipUnmodified && $ftp->mdtm($file->getBasename()) >= $file->getMTime()) { return; } } // try to upload the file $this->printTaskInfo('Uploading: ' . $file->getRelativePathname()); if (!$ftp->put($file->getBasename(), $file->getRealpath(), FTP_BINARY)) { // something went wrong return Result::error($this, 'Failed while uploading file ' . $file->getRelativePathname()); } } }