我正在尝试使用PHP显示收件箱文件夹和文件。同时我收到以下错误:
致命错误:未捕获的异常' InvalidArgumentException'有消息''代码'必须是非空的'在D:\ xampp \ htdocs \ Dropbox \ dropbox \ Dropbox \ Checker.php:59堆栈跟踪:#0 D:\ xampp \ htdocs \ Dropbox \ dropbox \ Dropbox \ WebAuthNoRedirect.php(79):Dropbox \ Checker :: argStringNonEmpty ('代码','')#1 D:\ xampp \ htdocs \ Dropbox \ dropbox.php(24):Dropbox \ WebAuthNoRedirect->完成('& #39;)在第59行的D:\ xampp \ htdocs \ Dropbox \ dropbox \ Dropbox \ Checker.php中抛出#2 {main}
这是我的代码:
<?php
require_once "dropbox/Dropbox/autoload.php";
require_once "dropbox/Dropbox/AppInfo.php";
use \Dropbox as dbx;
$appInfo = dbx\AppInfo::loadFromJsonFile("app-info.json");
$webAuth = new dbx\WebAuthNoRedirect($appInfo, "PHP-Example/1.0");
if(!function_exists("readline")) {
function readline($prompt = null){
if($prompt){
//echo $prompt;
}
$fp = fopen("php://stdin","r");
$line = rtrim(fgets($fp, 1024));
return $line;
}
}
$authorizeUrl = $webAuth->start();
$authCode = \trim(\readline("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"));
list($accessToken, $dropboxUserId) = $webAuth->finish($authCode);
print "Access Token: " . $accessToken . "\n";
?>
错误来自$ webAuth-&gt; finish()函数。从错误中我检查了checker.php。已经定义了一个函数。那就是
static function argStringNonEmpty($argName, $argValue)
{
if (!is_string($argValue)) self::throwError($argName, $argValue, "string");
if (strlen($argValue) === 0) throw new \InvalidArgumentException("'$argName' must be non-empty");
}
如果我命令条件错误继续移动到下一个下一个函数。请帮助解决它。
答案 0 :(得分:1)
看起来你是API v1 Dropbox PHP SDK。您的代码与the "authorize" example类似。该示例是为命令行应用程序构建的,但您尝试将其作为Web应用程序运行,因此无法正常运行。
具体来说,您尝试从标准输入读取(例如示例如何使用\trim(\fgets(STDIN))
)。
对于网络应用,您应该参考web-file-browser example。
在任何一种情况下,您都需要提供&#34;授权代码&#34;完成the OAuth app authorization flow。
另外,注意PHP SDK使用Dropbox API v1, which is deprecated非常重要。您应该转而使用Dropbox API v2。
还没有适用于Dropbox API v2的官方PHP SDK,但您可以使用third party library,也可以自己致电the HTTPS endpoints。
答案 1 :(得分:0)
我已经更改了我的代码,如下所示:
session_start();
$_SESSION['user_id'] = 1;
require __DIR__.'/Dropbox/autoload.php';
$dropboxKey = 'XXXXXXXXX';
$dropboxSecret = 'XXXXXXXXXX';
$appName = 'XXXXXXX/1.0';
$appInfo=new Dropbox\AppInfo($dropboxKey,$dropboxSecret);
//store CSRF token
$csrfTokenStore = new Dropbox\ArrayEntryStore($_SESSION,'dropbox-auth-csrf-token');
//Define auth details
$webAuth = new Dropbox\WebAuth($appInfo,$appName,'http://localhost/dropboxapi/dropbox_finish.php',$csrfTokenStore);
if(isset($_session['accessToken']))
{
$client = new Dropbox\Client($_session['accessToken'],$appName,'UTF-8');
$client->getAccountInfo();
} else {
$authUrl = $webAuth->start();
Header('Location:'.$authUrl);
exit;
}
list($accessToken) = $webAuth->finish($_GET);
$_session['accessToken']=$accessToken;