Приветствую. Для загрузки файлов (и не только загрузки) на яндекс.диск имеется следующий класс:
<?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 )