使用PHP访问Dropbox_PHP教程
保持短期性和可读性的文章,我会保持代码到最低限度,而不是指你上PHPMaster的GitHub上提供完整的代码。要运行的代码,你需要与卷曲的支持,显然是一个PHP Dropbox帐户。
您的出发点应该是任何有关发展与Dropbox Dropbox的开发中心,在那里你可以找到它的基本概念和最佳实践的API参考。你也可以下载官方的SDK,但PHP不支持的语言中列出。还有一个链接到第三方的PHP SDK的 GitHub上。
我们的客户将结构更像是Python官方客户端,但我注意到,尤其是对OAuth的一部分,从以上的PHP SDK的一些想法和代码,。我们将有一个DropboxSession对象和DropboxClient的对象。首先照顾最困难的部分:从Dropbox的获取和管理访问凭据。客户端对象,然后将使用会话对象执行API调用和获取数据。下面的会话对象是DropboxRESTClient对象来执行HTTP调用使用cURL。
告诉Dropbox的关于您的应用程序
首先,我们需要注册我们的应用程序,以获得一个独特的API密钥对与Dropbox。我们需要这些键“引进”我们的应用程序和要求进行授权。
登录到开发中心,并遵循“MyApps”链接,然后选择“创建一个应用程序”。Dropbox的会问你的名称,描述,为您的应用程序和访问类型。
访问类型参数指定您的应用程序将能够读取和写入文件。建议值是“应用程序文件夹”,目录内用户的家中,将创建一个沙盘。选择“全Dropbox的”应用程序将用户的整个Dropbox的。
一旦你的应用程序创建的,会有一个选项页,在这里你可以编辑其详细信息,并找到其访问凭据。
新创建的应用是在“发展状态”。这让我们立即开始开发,并允许多达5个其他用户对其进行测试。应用程序是准备发布时,我们可以申请生产状况和Dropbox的团队会检讨,以确保它符合其条款及条件和品牌指引。
编码的应用程序
我把我的代码在我的本地Apache的一个子目录设置,以便它是在URL访问http://localhost/mydropbox。目录结构是:
bootstrap.php文件,执行应用程序的启动,将在每个前端文件,所以让我们开始讨论,。
我初始化一个全局配置为一个空数组变量,然后指定一些配置值。前三Dropbox的相关访问密钥,密钥,并从您的应用程序的详细信息页面的访问类型。然后,我定义其他一些有用的设置:应用程序的基根的路径,保存一些数据,和一个PHP文件的路径,将包含应用程序的访问令牌。
这个访问令牌文件的文件中不存在的开始;它创建由authorize.php页和充满Dropbox的所提供的凭据。这将是一个标准的PHP文件,如果存在,将被纳入这个脚本后。令牌文件的内容将类似于:
$access_token = array (
"oauth_token_secret" => "abcdefghilmnopqr",
"oauth_token" => "stuvwxyzabcdefgh",
"uid" => "1234567"
);
oauth_token和oauth_token_secret访问凭据,UID是用户的唯一ID。
我在下一节的引导文件设置PHP的错误行为,并执行一些要求检查;为了运行应用程序的数据目录必须存在和可写的auth.php文件必须是可写的,如果它存在。这将确保应用程序可以*地完成其工作。
最后,我包括我们的图书馆,PHP会话初始化,设置一个空美元access_token(稍后将填写),而且,如果它存在,包括auth.php文件。
每个前端脚本将运行里面一个主要的尝试 / 捕捉块。挖库代码之前,我们首先需要理解的流量,所以我将开始与授权周期。
授权
第一次运行我们的应用程序,在下列条件下的index.php文件将是真实的:
1
2 if (!isset($access_token)) {
3 header("Location: authorize.php");
4 exit;
5 }
访问令牌是空的,所以我将用户重定向到的authorize.php页,会管理的授权过程。
引导阶段后,我做的另一个现有令牌检查。这将确保这个脚本运行,只有当我们没有一个令牌。为了避免无限重定向循环中,auth.php文件被删除脚本块的主要渔获,如果返回的错误代码是401(无效的令牌)。
我在每一个脚本做的第一件事是创建一个新的DropboxSession与我们的API密钥的对象。当我们直接调用脚本,首要条件是假的,其他块被执行。会话对象连接到Dropbox和要求一个临时令牌。令牌,然后解析成一个数组存储到变量$ _SESSION中的下一阶段。
我们建立授权使用此令牌的URL。用户应重定向或提示访问的网址,在那里他将决定是否允许或拒绝对他的数据的访问。
授权URL可以包含一个可选的参数,返回URL。我只是通过当前脚本的URL,因此如果用户授权他重定向到我们的脚本的应用程序,这个用的时间的oauth_token和UID查询字符串传递的值。现在的首要条件评估真实的,所以我们可以去,并要求一个永久的访问令牌。
美元令牌这一要求的阵列是这个新建成oauth_token与以往oauth_token_secret的,这是然后传递到的obtainAccessToken()方法。在成功的情况下,我们有我们的永久(直至撤销)访问令牌。这必须存储在某个地方,显而易见的选择是一个数据库,但在这个例子中,我们将出口作为有效的PHP代码使用本地var_export()函数和它写入我们auth.php文件中。然后将用户重定向到索引页面,这是最简单的脚本。
在我们开始尝试 / 捕捉阻止一个新DropboxSession对象被创建,永久这次$ access_token作为第四个参数。此对象用于创建的DropboxClient对象。这两个步骤是共同所有其他脚本。
客户端的公共方法映射到相应的Dropbox的API调用。我打电话的AccountInfo()方法,返回一个数组,包含用户的详细资料:唯一的ID,姓名,电子邮件,配额信息和推介链接(指正式文件的更多细节)。
幕后:REST和会话对象
现在,我们有一个表面流的概述,让我们看到引擎盖下发生的事情,我们的Dropbox的库包含在lib / Dropbox的目录中,包括三类。
静止的物体
最低水平一流,我们的图书馆是REST客户端(见LIB /保管箱/ rest.php)。这个类是为卷曲简单的包装。它执行HTTP调用,并返回在原料或编码格式的输出,或在一个错误的情况下抛出异常。
构造检查cURL是在系统上安装,或者抛出一个异常。然后,它尝试初始化内部卷曲与处理程序美元curlDefaults设置。析构函数里面没有设置该处理程序。
()的错误,并将errno() ,()方法是不言自明。然后,我们有一系列实用的方法,得到() ,后()和put()方法简单的包装,所有的主要要求()方法,它的实际工作。
首先,我们设置了URL获取HTTP方法和所需的参数,额外的头和POST(如有)。沿URL呼叫者方法为GET和PUT方法的参数传递。
在进行调用之前,我们需要告诉卷曲检索的全部内容,包括HTTP头(设置选项CURLOPT_HEADER),因为一些API的方法(当然file_get() )把他们的信息,在头。
卷曲的请求被执行存储到curl_exec()的结果为响应和元信息的变量是由的充满curl_info()有关执行细节。如果提出的方法,我们也将不得不关闭输入文件句柄。
元响应的内容和元信息,我们分析的结果,并从身体中分离出来的HTTP头。默认情况下,身体返回的JSON解码,除非美元的原始参数设置为true。
怎么回事之前,有一个错误检查。Dropbox的API使用HTTP错误代码错误通知。如果状态码是大于400,则出现了错误和错误信息被储存在体内的含量。我提取这个消息,并抛出一个异常。如果没有错误的HTTP头解析结果返回的数组包含状态代码,头和身体。
Session对象
DropboxSession对象扩展的基本REST客户端,以填补我们的需求:
执行初始认证/授权的流量,
包括在以后每次REST请求获得验证数据。
构造简单initiazlizes内部变量。另一种简单的方法是buildAuthorizeURL()建立的临时令牌授权URL。类的最重要的方法是:
obtainRequestToken() -请求一个临时的OAuth访问令牌。
obtainAccessToken() -要求永久OAuth的应用程序的访问令牌。
取() -执行其余打电话,包括所有必要的认证和签名参数。
这三种方法也有类似的流动。首先,他们建立的基本目标URL和填写的params美元,与所需的关联数组oauth_ *键/值发送。每个API调用都必须提供一个时间戳和一个唯一的随机生成的哈希,美元的nonce参数。
然后使用HTTP方法的名称,URL,参数生成签名。它然后排队美元的params数组使用oauth_signature键。网址是牵强与给定的HTTP方法和返回响应的身体的一部分。对于GET和PUT方法,生成的查询字符串附加到URL使用的的本地http_build_query()函数。
的obtainRequestToken和obtainAccessToken()几乎是相同的:一是不使用令牌和一个GET HTTP方法调用。第二个被称为一个POST HTTP方法必须包括与以前的调用获得的令牌。此标记,然后用以下所有的API调用的签名密钥的一部分。
取()方法执行一些额外的任务。首先,它需要一个数组名为$ ARGS与特定的API所需的任何额外的参数,例如资源列表或上传/下载文件的路径。这些参数与美元的params数组合并之前生成签名。唯一的例外是使用PUT方法上传文件,输入文件中的参数,提取和保存,为以后。一个开关语句被用来告诉正确的HTTP方法来调用。
的DropboxSession类两个实用方法,encodeParams()和getSignature() ,在上述主要方法调用的encodeParams()准备请求的参数进行签名,而getSignature()产生在给定的API调用1 OAuth的要求签名。
最后DropboxClient对象
DropboxClient对象是我们的高级别接口与Dropbox。它暴露了公共API的方法,使用中期水平DropboxSession,对象执行API调用,并返回一个处理输出调用脚本。在这篇文章中,我已经实现了一套有限的方法:
的AccountInfo() -获取当前Dropbox的用户的详细信息。
元数据() -获取关于Dropbox的对象(文件或文件夹)的信息和检索文件夹对象的内容列表。
GETFILE() -下载文件和其元数据,并选择性地将其保存到磁盘。
PUTFILE() -本地的文件上传到远程Dropbox的路径。
会话对象和基本API的URL存储为内部变量和构造函数初始化。
所有方法都遵循同样的方法或多或少,所以我要指出的差异。所有路径处理的方法,必须预先考虑到每个呼叫的Dropbox的根路径。取决于应用程序的访问类型的根路径,可以是“保管箱”,如果应用程序具有完全访问权限或“沙箱”,如果应用程序具有有限的访问。如果此值不匹配的应用程序的远程设置,则返回一个错误。
每个方法执行的共同步骤是:
检查和准备参数列表。
执行HTTP调用。
解析并返回响应。
的AccountInfo()方法是最简单的调用不带参数的URL,并返回响应的关联数组。
list.php的文件元数据()方法来获取和显示目录的内容。唯一需要的参数是检查的文件或目录的路径,但它允许我们指定相应的API调用的所有其他参数。如果$ PATH参数是一个文件,返回的数组包含元数据。如果它是一个文件夹,内容项包含它的文件列表,除非美元列表参数是假的。我们可以与内容的大小限制$ fileLimit参数(最多为最大25000),我们可以问一个特定的文件或文件夹(有关详细信息,请参阅API参考)修订。
重要的是要注意,在Dropbox API返回为每个呼叫的哈希值。如果我们要列出文件夹的内容,并提供一个哈希参数自上次调用改变我们的方法,API检查是否输出。如果不是,它返回一个301状态代码(不能修改)。Dropbox的团队建议缓存的结果,并依靠这些文件夹列表值来优化性能。
GETFILE()方法用于检索存储在用户的Dropbox的文件。整个文件内容被返回调用成功案例,其元数据存储在自定义HTTP头中的X-Dropbox的元数据作为一个JSON字符串。这种方法的返回值是一个关联数组,包含名称,MIME类型,元数据和内容。此外,我已经添加了$ outfile中的参数直接保存在磁盘上的文件。
download.php文件显示了这种操作方法的演示。在这个例子中,下载的文件直接保存到应用程序的数据目录,并响应的部分内容被清空。
PUTFILE()方法,从我们的本地存储到用户的Dropbox的文件上传使用PUT HTTP方法,这是Dropbox的球队,而不是发表的首选。此方法检查本地文件存在,并且不超过150MB API的限制之前,任何其他共同行动。
支持此方法的参数,除了源文件的路径,目标文件夹,一个可选的替代名称和覆盖选项。如果这最后一个选项是假的,并且存在远程文件,上传的文件是一个渐进的数字命名(例如,成为test.txt的测试(1)。TXT)。API还允许一个可选的parent_rev参数来管理修改,但为了让事情变得简单我决定忽略它。
总结
这只是一小部分的Dropbox的API,但它可以作为一个起点,以开发自己的应用程序不够。对我来说,也是一个很好的机会,发挥与OAuth的。随时改进和扩大,伴随着这篇文章,以满足您的需求,并一如既往:快乐编码的代码!
推荐阅读
-
php生成数组的使用示例_PHP教程
-
网络编程 - 使用PHP通过不同页面访问同一主机的cookie传递问题
-
php+mysqli使用预处理技术进行数据库查询的方法,mysqli预处理_PHP教程
-
php使用Smarty的相关注意事项及访问变量的几种方式_php模板
-
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法_PHP教程
-
php如何控制用户对图片的访问 PHP禁止图片盗链,_PHP教程
-
ThinkPHP整合Smarty模板引擎的使用以及查询方法汇总_PHP教程
-
php如何使用函数嵌入网站访问量计数器的方法介绍
-
使用C语言来扩展PHP,写PHP扩展dll_PHP教程
-
php中SPL spl_autoload_register与__autoload方法使用_PHP教程