@upxbot

Яндекс.Диск, загрузка файлов через webdav. В чем проблема?

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

<?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 )
  • Вопрос задан
  • 1462 просмотра
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
от протокола (Вебдав яндекса не чистый выбдав) до версионности языка /курла
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы