簡體   English   中英

致命錯誤:消息為“ code”的未捕獲異常“ InvalidArgumentException”必須為非空

[英]Fatal error: Uncaught exception 'InvalidArgumentException' with message ''code' must be non-empty'

我正在嘗試使用PHP顯示Dropbox文件夾和文件。 同時,我收到以下錯誤:

致命錯誤:D:\\ xampp \\ htdocs \\ Dropbox \\ dropbox \\ Dropbox \\ Checker.php:59中未捕獲的異常“ InvalidArgumentException”消息為“ code”必須為非空堆棧跟蹤:#0 D:\\ xampp \\ htdocs \\ Dropbox \\ dropbox \\ Dropbox \\ WebAuthNoRedirect.php(79):Dropbox \\ Checker :: argStringNonEmpty('code','')#1 D:\\ xampp \\ htdocs \\ Dropbox \\ dropbox.php(24):Dropbox \\ WebAuthNoRedirect- > finish('')#2 {main}在第59行的D:\\ xampp \\ htdocs \\ Dropbox \\ dropbox \\ Dropbox \\ Checker.php中拋出

這是我的代碼:

<?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-> 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");
    }

如果我命令該條件,錯誤將繼續移至下一個下一個函數。請幫助解決問題。

看來您是API v1 Dropbox PHP SDK 您的代碼看起來類似於“授權”示例 該示例是為命令行應用程序構建的,但是您嘗試將其作為Web應用程序運行,因此它將無法正常工作。

具體來說,您正在嘗試從stdin中讀取內容(例如該示例如何使用\\trim(\\fgets(STDIN)) )。

對於Web應用程序,您應該參考web-file-browser示例

無論哪種情況,您都需要提供“授權代碼”以完成OAuth應用授權流程

另外,請務必注意,PHP SDK使用了不推薦使用的Dropbox API v1 您應該改為遷移到Dropbox API v2

沒有適用於Dropbox API v2的官方PHP SDK,但是您可以使用第三方庫 ,也可以自己調用HTTPS端點

我已經更改了我的代碼,如下所示:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM