/** * Reading a file. * * @param PhingFile $file The file to read * @return string * @access protected **/ protected function _readFile(PhingFile $file) { $input = new FileReader($file); $buffer = $input->read(); $input->close(); return $buffer; }
/** * @param IFile $file The source file to copy from. * @return bool TRUE if the file has been successfully copied from $file, FALSE if an error occured * Note: An exception is raised if an important error is detected (the copy of a single file failed), * but during a folder copy, a failure during the copy of a single "sub-file" is ignored and no * exception is raised. * Nevertheless, you can check if the copy was a full success by testing the returned value. * @throws EyeIOException * @throws EyeFileNotFoundException */ protected function copyFrom(IFile $file, $overwrite = true) { if ($this->isDirectory() && (!$file->isDirectory() || $this->getName() != $file->getName())) { if ($this->getName() != '/' || $file->getName() != '/') { return $this->getChildFile($file->getName())->copyFrom($file, $overwrite); } } if ($this->exists() && !$overwrite) { throw new EyeIOException($this->path . '" exists and can\'t be overwritten.'); } //FILE or LINK if ($file->isFile() || $file->isLink()) { $srcPath = AdvancedPathLib::getPhpLocalHackPath($file->getPath()); $destPath = AdvancedPathLib::getPhpLocalHackPath($this->path); // First, let's try with the function provided by PHP, but only working with // a very restricted range of filesystems if (copy($srcPath, $destPath)) { return true; } if (!$this->exists() && !$this->createNewFile(true)) { throw new EyeIOException('Unable to create destination file ' . $this->path . '.'); } try { $fileWriter = new FileWriter($this->getOutputStream()); $fileReader = new FileReader($file->getInputStream()); $buffer = null; while ($fileReader->read($buffer) !== 0) { $fileWriter->write($buffer); } $fileReader->close(); $fileWriter->close(); return true; } catch (Exception $e) { if (is_object($fileReader)) { $fileReader->close(); } if (is_object($fileWriter)) { $fileWriter->close(); } throw new EyeIOException('Unable to transfer files contents ' . $file->getPath() . ' => ' . $this->path . '.', 0, $e); } } elseif ($file->isDirectory()) { if ($this->isDirectory() || $this->mkdirs()) { $success = true; foreach ($file->listFiles() as $subFile) { try { if (!$subFile->copyTo($this)) { $success = false; } } catch (Exception $e) { $success = false; } } return $success; } else { throw new EyeIOException('Unable to create destination directory ' . $this->path . '.'); } } else { throw new EyeFileNotFoundException($file->getPath() . ' does not exist.'); } }