Яндекс.Диск, загрузка файлов

445
12 февраля 2017, 13:30

Приветствую. Для загрузки файлов на яндекс.диск имеется следующий класс:

<?php
class YandexDisk {
    public $ch;
    public $ansver, $info;
    public $headers = array();
    function __construct($user, $pass) {
        $this->headers[] = "Authorization: Basic " . base64_encode($user . ":" . $pass);
        $this->ch = curl_init();
        curl_setopt($this->ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17");
        curl_setopt($this->ch, CURLOPT_HEADER, 0);
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($this->ch, CURLOPT_BINARYTRANSFER, 1);
        curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, false);
    }
//-----------------//
    function my_exec() {
        curl_setopt($this->ch, CURLOPT_HTTPHEADER, $this->headers);
        $this->ansver = curl_exec($this->ch);
        $this->info = curl_getinfo($this->ch);
        print_r($this->info);
        curl_close($this->ch);
    }
//--------получить файл---------//
    function get($url) {
        curl_setopt($this->ch, CURLOPT_URL, 'https://webdav.yandex.ru' . $url);
        $this->my_exec();
        if ($this->info['http_code'] != '200')
            return FALSE; // Error!
        return $this->ansver;
    }
//--------удалить файл---------//
    function delete($url) {
        curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
        curl_setopt($this->ch, CURLOPT_URL, 'https://webdav.yandex.ru' . $url);
        $this->my_exec();
        if ($this->info['http_code'] != '204')
            return FALSE; // Error!
        return TRUE;
    }
//-------закачать файл----------//
    function put($file, $url) {
        curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($this->ch, CURLOPT_URL, 'https://webdav.yandex.ru' . $url);
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, file_get_contents($file));
        $this->my_exec();
        if ($this->info['http_code'] != '201')
            return FALSE; // Error!
        return TRUE;
    }
//-------Список файлов в директории----------//
    function ls($dir = '') {
        $this->headers[] = 'Depth: 1';
        curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, 'PROPFIND');
        curl_setopt($this->ch, CURLOPT_URL, 'https://webdav.yandex.ru' . $dir);
        $this->my_exec();
        if ($this->info['http_code'] != '207')
            return FALSE; // Error!

        $xml = simplexml_load_string($this->ansver);
        $xml->registerXPathNamespace('d', 'urn:DAV');
        $res = array();
        foreach ($xml->xpath('/d:multistatus/d:response/d:href') as $v) {
            $res[] = urldecode($v);
        }
        return $res;
    }
//-----------------//
    function mkdir($dir) {
        curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, 'MKCOL');
        curl_setopt($this->ch, CURLOPT_URL, 'https://webdav.yandex.ru' . $dir);
        $this->my_exec();
        if ($this->info['http_code'] != '201')
            return FALSE; // Error!
        return TRUE;
    }
//-----------------//
}

Применение простое:

$disk = new YandexDisk('логин', 'пароль');
$disk->put('файл', 'файл');

Так вот, если гружу файл весом 0 байт, то он загружается, а если больше - то нет. В чем может быть проблема?

Ответ от сервера при неудачной загрузке:

Array ( [url] => https://webdav.yandex.ru/lokalka.11022017-0801.zip [content_type] => [http_code] => 500 [header_size] => 220 [request_size] => 378 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.664637 [namelookup_time] => 0.012795 [connect_time] => 0.058902 [pretransfer_time] => 0.307447 [size_upload] => 933888 [size_download] => 0 [speed_download] => 0 [speed_upload] => 1405109 [download_content_length] => 0 [upload_content_length] => 20144632 [starttransfer_time] => 0.433229 [redirect_time] => 0 [redirect_url] => [primary_ip] => 87.250.250.53 [certinfo] => Array ( ) [primary_port] => 443 [local_ip] =>  [local_port] => 60710 )
READ ALSO
Простой файловый менеждер

Простой файловый менеждер

Почему в ссылку не вставляется путь для папки, и как выводить изображение папки, только для папки?

246
Как изменить аргумент функции, так чтобы он был виден во внешней области видимости?

Как изменить аргумент функции, так чтобы он был виден во внешней области видимости?

Функция partitionOn принимает 2 аргумента, pred — это функция задающая условия выборки элементов из массива items

299
Возможно ли сделать веревку на SVG?

Возможно ли сделать веревку на SVG?

вот то, что делаю http://codepenio/cache0/pen/rjQwZJ

321