<?php namespace League\Flysystem\Adapter\Polyfill; use League\Flysystem\Config; trait StreamedCopyTrait { /** * Copy a file. * * @param string $path * @param string $newpath * * @return bool */ public function copy($path, $newpath) { $response = $this->readStream($path); if ($response === false || ! is_resource($response['stream'])) { return false; } $result = $this->writeStream($newpath, $response['stream'], new Config()); if ($result !== false && is_resource($response['stream'])) { fclose($response['stream']); } return $result !== false; } // Required abstract method /** * @param string $path * @return resource */ abstract public function readStream($path); /** * @param string $path * @param resource $resource * @param Config $config * @return resource */ abstract public function writeStream($path, $resource, Config $config); }