我正在尝试连接到安装了WAMP x64的Dropbox API.
这是我从Dropbox php API获得的Dropbox身份验证文件的例外
致命错误:未捕获异常'Exception',消息'Dropbox SDK使用64位整数,但看起来我们正在运行不支持64位整数的PHP版本(PHP_INT_MAX = 2147483647).库:C:\ Users\Albert\Desktop\www\test\dropbox-sdk\Dropbox\RequestUtil.php中的"C:\ Users\Albert\Desktop\www\test\dropbox -sdk\Dropbox\RequestUtil.php"'在第15行
它说,我检查了我的PHP版本
架构x64
我应该怎么做才能使我的Dropbox应用程序工作?非常感谢.
有没有办法检索公共Dropbox文件夹的内容列表(最好是在PHP中)?这是Dropbox中公共文件的URL如下所示:
http://dl.dropbox.com/u/1234567/publikPholder/textytext.txt
Run Code Online (Sandbox Code Playgroud)
人们会认为跳到一个级别到URL中的目录...
http://dl.dropbox.com/u/1234567/publikPholder/
Run Code Online (Sandbox Code Playgroud)
...会显示所有公共文件.不.除了404之外什么都没有.
我有一个表单,允许用户填写几个方面,然后选择要上传的文件.
提交表单时,我想写一些代码将文件保存到Dropbox帐户并访问直接下载链接并将其放在我托管的数据库中.
如果有人这样做了,是否有API的特定部分可供查看?或者任何例子?
我似乎无法在API中找到这个.
谢谢.
我正在尝试使用Dropbox API v2上传文件.不幸的是,Dropbox API v2没有PHP库.
https://www.dropbox.com/developers/documentation/http/documentation#files-upload
这是我的代码:
$token = 'sometoken'; // oauth token
$headers = array("Authorization: Bearer ". $token,
'Dropbox-API-Arg: {"path": "/test.txt","mode": "add","autorename": true,"mute":false}',
"Content-Type: application/octet-stream");
$url = 'https://content.dropboxapi.com/2/files/upload';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
$path = './google/file.json';
$fp = fopen($path, 'rb');
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($path));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo($response.'<br/>');
echo($http_code.'<br/>');
curl_close($ch);
echo $response;
Run Code Online (Sandbox Code Playgroud)
它创建test.txt但是0字节.当我检查代码时,它读取0字节.
这是代码执行的输出:
* Trying 45.58.74.164... …Run Code Online (Sandbox Code Playgroud) 我正在将Dropbox集成到我的基于PHP的网站中.当我尝试运行以下代码时.我得到了这个致命错误:在最后一行调用未定义的函数readline().
require_once "dropbox-sdk/Dropbox/autoload.php";
use \Dropbox as dbx;
$appInfo = dbx\AppInfo::loadFromJsonFile("app-info.json");
echo "<pre>";
print_r($appInfo);
echo "</pre>";
$webAuth = new dbx\WebAuthNoRedirect($appInfo, "PHP-Example/1.0");
echo "<pre>";
print_r($webAuth);
echo "</pre>";
$authorizeUrl = $webAuth->start();
echo "1. Go to: " . $authorizeUrl . "\n<br>";
echo "2. Click \"Allow\" (you might have to log in first).\n<br>";
echo "3. Copy the authorization code.\n<br>";
$authCode = \trim(\readline("Enter the authorization code here: "));
Run Code Online (Sandbox Code Playgroud)
我来过不同的论坛,人们说它会在命令行中工作,但我不明白怎么办?任何的想法 ?
我想我可能已经找到了一个PHP程序,用于将文件从特定文件夹上传到我的Dropbox帐户.完整的解决方案可以在这里找到.
代码似乎有效,因为正在上传文件和文件夹.但是,我不希望事先压缩我服务器上的文件:我想要复制包含文件和文件夹的所有文件.
如何修改代码呢?我想要的只是将一个名为uploads的特定目录从我的服务器复制到dropbox.修改代码后,我设法得到了这段代码:
<?php
// Set the timezone so filenames are correct
date_default_timezone_set('Europe/London');
// Dropbox username/password
$dropbox_email='dropbox@dropbox.com';
$dropbox_pass='password';
// Filenames for backup files
$backup_files = "files_" . date("Y.m.d-h.i.s_l") . '.zip';
// File to backup
$siteroot = "/site/home/public_html/website/parent/child/uploads/";
// Backup all files in public_html apart from the gz
system("zip -r $backup_files $siteroot");
include("DropboxUploader.php");
$uploader = new DropboxUploader($dropbox_email, $dropbox_pass);
$uploader->upload($backup_files,'Backup/Files/');
system("rm $backup_files");
?>
Run Code Online (Sandbox Code Playgroud)
实际解决方案 特别感谢Alireza Noori,halfer和其他所有人.
<?php
// Set the timezone so filenames are correct
date_default_timezone_set('Europe/London');
// Backup all files …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用文件的自定义表示(徽标字体等)创建一个平滑的解决方案来共享文件.
我的理想是将文件放在一个dropbox文件夹中,然后在一个单独的服务器上有一个网页,通过javascript访问这些文件并显示链接到实际文件的列表.
需求是最终用户不必使用dropbox acocunt进行身份验证以访问文件.我宁愿使用公共文件夹或使用其他帐户的文件.
有没有办法维护auth-session服务器端,像永久会话ID或类似的东西?
我一直在研究 Dropbox API 的文档,但找不到一种无需进入 OAuth 流程即可直接访问帐户的方法。有办法实现吗?
我的最终目标是拥有一个网页,其中包含来自特定 Dropbox 帐户(我自己的)的文件和文件夹列表,任何人都可以查看和下载。
我正在尝试使用dropbox api上传文件,但是下面的代码显示了一些错误:
bootstrap.php中
// Register a simple autoload function
spl_autoload_register(function($class){
$class = str_replace('\\', '/', $class);
require_once('../' . $class . '.php');
});
// Set your consumer key, secret and callback URL
$key = 'XXXXXXXXXXXXX';
$secret = 'XXXXXXXXXXXXX';
// Check whether to use HTTPS and set the callback URL
$protocol = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
$callback = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// Instantiate the required Dropbox objects
$encrypter = new \Dropbox\OAuth\Storage\Encrypter('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
$storage = new \Dropbox\OAuth\Storage\Session($encrypter);
$OAuth = new …Run Code Online (Sandbox Code Playgroud) 我需要一个简单的网页表单,也可以让人们上传一些pdf文件.我认为我可以做的(因为上传文件的大小和数量)是将此应用程序的后端绑定到我的Dropbox帐户或我的box.com帐户.这两种服务都提供类似的API来构建应用程序.
然而,他们都假设我想与人们的Dropbox/box帐户进行互动.我想我有点想要反过来.人们会将文件上传到网络服务器,但是我想以编程方式将它们上传到这两种服务中的任何一种,但是在我的帐户下,访问权限和权限仅与我的帐户相关.
用户根本不需要与Dropbox交互,他们不需要批准任何内容.为什么不能以这样的方式使用API,以便将文件添加到我拥有的同一个先前已知的Dropbox帐户?
我正在使用dropbox php sdk构建我的应用程序我正在尝试使用以下代码访问核心API
function getWebAuth()
{
$appInfo = dbx\AppInfo::loadFromJsonFile("../dropbox.json");
$clientIdentifier = "My-demo-app/1.0";
$redirectUri = "http://localhost/demo.app/public/dropbox-finish-oauth";
$csrfTokenStore = new dbx\ArrayEntryStore($_SESSION, 'dropbox-auth-csrf-token');
return new dbx\WebAuth($appInfo, $clientIdentifier, $redirectUri,$csrfTokenStore);
}
//My controller => http:://localhost/demo.app/public/dropbox
Route::get('dropbox',function(){
$authorizeUrl = getWebAuth()->start();
return Redirect::to($authorizeUrl);
});
//dropbox redirect uri
Route::get('dropbox-finish-oauth',function(){
list($accessToken, $userId, $urlState) = getWebAuth()->finish($_GET);
});
Run Code Online (Sandbox Code Playgroud)
一切都很好在第一个控制器它重定向到Dropbox登录页面我填写用户名和密码然后页面重定向到指定的uri我得到以下异常csrf未找到异常
我在这里有这个奇怪的问题,我立即通过Dropbox获取令牌并尝试测试它,这个消息抛出异常:
HTTP状态401 {"错误":"给定的OAuth 2访问令牌不存在或已过期."}
为什么Dropbox令牌会在生成后立即过期?
让我告诉你我的应用程序的流程:
用户看到此屏幕:

其中包含以下相关的PHP代码:
require "../../includes/dropbox-sdk/Dropbox/autoload.php";
require "../../includes/config.php";
session_start();
session_regenerate_id();
$appInfo = Dropbox\AppInfo::loadFromJsonFile("../../includes/dropbox-sdk/Dropbox/app-info.json");
$webAuth = new Dropbox\WebAuthNoRedirect($appInfo, "Mignori-Box/1.0");
$authorizeUrl = $webAuth->start();
Run Code Online (Sandbox Code Playgroud)
好吧,我们使用官方SDK生成一个Dropbox授权URL,这似乎工作正常,用户看到这个屏幕:

他们点击允许,Dropbox为他们提供授权令牌,然后他们将其粘贴到我的网站,然后提交.这是处理表单的代码:
try
{
$accessToken = $_POST['authorization_code'];
$dbxClient = new Dropbox\Client($accessToken, "Mignori-Box/1.0");
$accountInfo = $dbxClient->getAccountInfo();
}catch(Exception $e)
{
echo "<div class=\"alert alert-danger\">";
echo "<strong>An error has occurred.</strong><br>" . $e -> getMessage();
echo "</div>";
}
Run Code Online (Sandbox Code Playgroud)
但无论令牌有多近,当用户提交令牌时,都会调用catch并显示警告.即使令牌是在几秒钟之前生成的,这种情况也会发生.
有人可以告诉我什么是错的吗?
请使用Dropbox版本2 推荐一个php表单文件上传代码.
dropbox-php ×13
dropbox-api ×11
dropbox ×10
php ×8
api ×1
curl ×1
oauth ×1
readline ×1
wamp ×1
wampserver ×1