/**
  *	Скачивание публичного файла или папки
  *
  *	@param	$path	Путь, по которому будет сохранён файл
  *	@return	boolean
  *	@throws	mixed
  */
 public function download($path, $overwrite = false, $progress = null)
 {
     if ($overwrite instanceof \Closure) {
         $progress = $overwrite;
         $overwrite = false;
     }
     if (is_file($path) && !$overwrite) {
         throw new \OutOfBoundsException('Такой файл существует, преедайте true Чтобы перезаписать его');
     }
     if (!is_writable(dirname($path))) {
         throw new \OutOfBoundsException('Запись в директорию где должен быть располоен файл не возможна');
     }
     $response = $this->getLink();
     if ($progress instanceof \Closure) {
         $this->request->progress(function ($curl, $download, $downloaded, $upload, $uploaded) use($progress) {
             return $progress($download, $downloaded, $curl);
         });
     }
     $this->request->setTimeout(null);
     $this->request->setOpt(CURLOPT_FOLLOWLOCATION, true);
     $this->request->download($response, $path);
     $this->request->setDefaultTimeout();
     $this->request->progress(null);
     if ($this->type == 'file' && md5_file($path) != $this->md5) {
         throw new \RangeException('Файл скачан, но контрольные суммы различаются.');
     }
     return $this->request->http_status_code == 200;
 }
Exemple #2
0
 /**
  *	Скачивает файл
  *
  *	@param	$path	Путь, по которому будет сохранён файл
  *	@param	mixed	$overwrite
  *	@param	mixed	$progress
  *	@return	boolean
  *	@throws	mixed
  */
 public function download($path, $overwrite = false, $progress = null)
 {
     if (!$this->has()) {
         throw new Exception\NotFoundException('Не возможно скачать, данный ресурс отсутствует на диске ?');
     }
     if ($overwrite instanceof \Closure) {
         $progress = $overwrite;
         $overwrite = false;
     }
     if (is_file($path) && !$overwrite) {
         throw new \OutOfBoundsException('Такой файл существует, передайте true Чтобы перезаписать его');
     }
     if (!is_writable(dirname($path))) {
         throw new \OutOfBoundsException('Запись в директорию где должен быть располоен файл не возможна');
     }
     $response = $this->request->get($this->parent_disk->getRequestUrl('resources/download', array('path' => $this->resource_path)));
     if (empty($response['href'])) {
         throw new \UnexpectedValueException('Не удалось запросить закачку, повторите заново');
     }
     if ($progress instanceof \Closure) {
         $this->request->progress(function ($curl, $download, $downloaded, $upload, $uploaded) use($progress) {
             return $progress($download, $downloaded, $curl);
         });
     }
     $put_data = $path;
     $this->request->setTimeout(null);
     $this->request->setOpt(CURLOPT_FOLLOWLOCATION, true);
     if ($this->hasEncrypted()) {
         $encrypted = $this->get('custom_properties', []);
         $this->phrase($encrypted['encrypted_phrase'])->vector(base64_decode($encrypted['encrypted_vector']));
         $put_data = function ($instance, $fh) use($path, $encrypted) {
             $fp = fopen($path, 'wb');
             while (!feof($fh)) {
                 fwrite($fp, $this->decrypt(fread($fh, $encrypted['encrypted_block'])));
             }
             fclose($fp);
         };
     }
     $this->request->download($response['href'], $put_data);
     $this->request->setDefaultTimeout();
     $this->request->progress(null);
     if (isset($encrypted['encrypted']) && (($hash_file = $encrypted['encrypted']) || ($hash_file = $md5)) && $hash_file !== md5_file($path)) {
         throw new \RangeException('Файл скачан, но контрольные суммы различаются.');
     }
     return $this->request->http_status_code == 200;
 }