一個簡單的堅果雲網盤接口,之前工做的時候寫的,如今轉行了,分享給你們。php
上代碼,都有註釋。json
<?php namespace Cn\Lib; /** * Class JianguoyunLib * @package Cn\Lib * 堅果雲網盤接口 * by sdxjwkq */ class JianguoyunLib { /** * JianguoyunLib constructor. * @param $davUrl * @param $userName * @param $passWord * 構造 */ public function __construct($davUrl, $userName, $passWord) { isset($davUrl) ? $this->davUrl = $davUrl : null; isset($userName) ? $this->userName = $userName : null; isset($passWord) ? $this->passWord = $passWord : null; } /*配置*/ private $davUrl = "https://dav.jianguoyun.com"; //網盤地址 private $userName = "xxx"; //用戶名 private $passWord = "xxx"; //密碼 /*分頁*/ private $pageOffset = null; //第幾頁 private $pageLength = null; //每頁數據量 public function page($p, $length) { $this->pageOffset = $p; $this->pageLength = $length; return $this; } /** * 外部的方法,方法中用到的「$folder」爲文件夾路徑,如「/dav/myfile/" */ /** * @param $folder * @return array * 取得某個文件夾內的文件列表 */ public function getFilelistByFolder($folder) { $data = $this->curlPropfind($this->userName, $this->passWord, $this->davUrl . $folder); $data = str_replace( array("d:", "<collection/>"), array("", "collection"), $data ); $data = json_decode( json_encode( simplexml_load_string($data) ), true ); $data = $data["response"]; $fileList = array(); //準備文件列表 foreach ($data as $key => &$value) { if (!$value["propstat"]['prop']["resourcetype"] == "collection") { $fileList[] = array( "url" => $value["href"], "time" => strtotime($value["propstat"]['prop']["getlastmodified"]), "type" => $value["propstat"]['prop']["getcontenttype"], "name" => $value["propstat"]['prop']["displayname"], ); } } //分頁的實現 if (is_numeric($this->pageOffset) && is_numeric($this->pageLength)) { $offset = ($this->pageOffset - 1) * $this->pageLength; //起始位置 if ($offset >= count($fileList)) { return array(); } $length = $this->pageLength; //長度 if (count($fileList) - $offset < $length) { $length = count($fileList) - $offset < $length; } return array_slice($fileList, $offset, $length); } else { return $fileList; } } /** * @param $folder * @return bool * 建立文件夾 */ public function createFolderByFolderName($folder) { $data = $this->curlMkcol($this->userName, $this->passWord, $this->davUrl . $folder); return true; } /** * @param $folder * @return bool * 向某個文件夾上傳文件 * 須要一個文件上傳的form表單,當IS_POST動做時調用這個方法便可 */ public function uploadFileByFolderName($folder) { $data = $this->curlPut($this->userName, $this->passWord, $this->davUrl . $folder . urlencode($_FILES["file"]['name']), file_get_contents($_FILES["file"]['tmp_name'])); return true; } /** * @param $url 路徑 * @param $fileName 文件名 * @return string * 文件下載 */ public function downloadFileByUrl($url, $fileName) { header("Content-Type: application/octet-stream"); header("Accept-Ranges: bytes"); header("Content-Disposition: attachment; filename=" . $fileName); $data = $this->curlGet($this->userName, $this->passWord, $this->davUrl . $url); echo $data; } /** * @param $url * @return bool * w文件刪除 */ public function deleteFileByUrl($url) { $data = $this->curlDelete($this->userName, $this->passWord, $this->davUrl . $url); return true; } /** * @param $username * @param $password * @param $url * @return bool|mixed * PROPFIND請求 */ private function curlPropfind($username, $password, $url) { $ch = curl_init(); $header = array( 'Content-Type: text/xml', ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PROPFIND"); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //30秒超時 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code $result = curl_exec($ch); if (curl_error($ch)) { //curl_error($ch);//錯誤緣由 curl_close($ch); return false; } else { curl_close($ch); return $result; } } /** * @param $username * @param $password * @param $url * @return bool|mixed * MKCOL請求 */ private function curlMkcol($username, $password, $url) { $ch = curl_init(); $header = array( 'Content-Type: text/xml', ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_HEADER, 1); //返回response頭部信息 curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 時追蹤句柄的請求字符串,從 PHP 5.1.3 開始可用。這個很關鍵,就是容許你查看請求header curl_setopt($ch, CURLOPT_URL, $url); //請求的url curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "MKCOL"); //請求模式 curl_setopt($ch, CURLOPT_TIMEOUT, 30); //30秒超時 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //獲取的信息以字符串返回,而不是直接輸出。 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); //用戶名和密碼 $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code $status_head = curl_getinfo($ch, CURLINFO_HEADER_OUT); //頭信息 $result = curl_exec($ch); if (curl_error($ch)) { //curl_error($ch);//錯誤緣由 curl_close($ch); return false; } else { curl_close($ch); return $result; } } /** * @param $username * @param $password * @param $url * @param $data * @return bool|mixed * Put請求 */ private function curlPut($username, $password, $url, $data) { $ch = curl_init(); $header = array( 'Content-Type: text/xml', ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_HEADER, 1); //返回response頭部信息 curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 時追蹤句柄的請求字符串,從 PHP 5.1.3 開始可用。這個很關鍵,就是容許你查看請求header curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //30秒超時 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code $result = curl_exec($ch); if (curl_error($ch)) { //curl_error($ch);//錯誤緣由 curl_close($ch); return false; } else { curl_close($ch); return $result; } } /** * @param $username * @param $password * @param $url * @return bool|mixed * Get請求 */ private function curlGet($username, $password, $url) { $ch = curl_init(); $header = array( 'Content-Type: text/xml', ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //30秒超時 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code $result = curl_exec($ch); if (curl_error($ch)) { //curl_error($ch);//錯誤緣由 curl_close($ch); return false; } else { curl_close($ch); return $result; } } /** * @param $username * @param $password * @param $url * @return bool|mixed * DELETE請求 */ private function curlDelete($username, $password, $url) { $ch = curl_init(); $header = array( 'Content-Type: text/xml', ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_HEADER, 1); //返回response頭部信息 curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 時追蹤句柄的請求字符串,從 PHP 5.1.3 開始可用。這個很關鍵,就是容許你查看請求header curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //30秒超時 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code $result = curl_exec($ch); if (curl_error($ch)) { //curl_error($ch);//錯誤緣由 curl_close($ch); return false; } else { curl_close($ch); return $result; } } }