2017-06-14 45 views
0

我試圖顯示使用PHP的保管箱文件夾和文件。同時我收到以下錯誤:致命錯誤:帶有消息''代碼'的未捕獲異常'InvalidArgumentException'必須爲非空'

Fatal error: Uncaught exception 'InvalidArgumentException' with message ''code' must be non-empty' in D:\xampp\htdocs\Dropbox\dropbox\Dropbox\Checker.php:59 Stack trace: #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} thrown in D:\xampp\htdocs\Dropbox\dropbox\Dropbox\Checker.php on line 59

這是我的代碼:

<?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->完成()function.From我檢查了checker.php錯誤到來。還有一個功能已經defined.That是

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

如果我命令錯誤繼續移動到下一個下一個function.Please幫助如何解決這個問題的條件。

+0

使用了'readline',這是一個控制檯應用程序? – sjdaws

+0

現在我正在爲Web應用程序做。控制檯尚未啓動 – lalithkumar

+0

如果您迴應'$ authCode',您可能會發現它是空的,這就是導致問題的原因。 – sjdaws

回答

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; 
1

它看起來像你是API v1 Dropbox PHP SDK。您的代碼與the "authorize" example類似。該示例是爲命令行應用程序構建的,但您試圖將其作爲Web應用程序運行,所以它不起作用。

具體來說,你正試圖從標準輸入讀取(例如如何使用示例\trim(\fgets(STDIN)))。

對於Web應用程序,您應該改爲參考web-file-browser example

無論哪種情況,您都需要提供「授權碼」來完成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

+0

謝謝man.you顯示我的路徑。 @格雷格 – lalithkumar

相關問題