2015-06-09 2 views
0

Я создаю простое приложение Dropbox, которое после аутентификации пользователя должно предлагать запрашивать некоторую информацию, читать содержимое файла txt. Используйте ajax для всего после аутентификации. до сих пор мне удалось аутентифицироваться, но когда я отправляю информацию на сервер с помощью ajax, я не могу открыть файл. У меня есть следующий сценарий на стороне сервера:dropbox php read file content

<?php 
require_once "../app/start.php"; 

require_once __DIR__.'/../app/config.php'; 

$regex = $_POST['regex']; 
(...) 


$accessToken = $_SESSION['accessToken'] ; 
$client = new Dropbox\Client($accessToken, $GLOBALS['app_name'], 'UTF-8'); 
var_dump($client); 
// Read File todo.txt 

$filename = __DIR__.'/todo/todo.txt'; 
$f = fopen($filename, "w+b") or die("Unable to open file!"); 
$fileMetadata = $client->getFile('/todo/todo.txt', $f); 
var_dump($fileMetadata); 

и когда я исполню ее выход следующее:

object(Dropbox\Client)#8 (6) { 
    ["accessToken":"Dropbox\Client":private]=> 
    string(64) "xxxxxxxxxxxxxxxxxxxxxxxxx" 
    ["clientIdentifier":"Dropbox\Client":private]=> 
    string(13) "oauth-php/1.0" 
    ["userLocale":"Dropbox\Client":private]=> 
    string(5) "UTF-8" 
    ["apiHost":"Dropbox\Client":private]=> 
    string(15) "api.dropbox.com" 
    ["contentHost":"Dropbox\Client":private]=> 
    string(23) "api-content.dropbox.com" 
    ["host"]=> 
    object(Dropbox\Host)#5 (3) { 
    ["api":"Dropbox\Host":private]=> 
    string(15) "api.dropbox.com" 
    ["content":"Dropbox\Host":private]=> 
    string(23) "api-content.dropbox.com" 
    ["web":"Dropbox\Host":private]=> 
    string(15) "www.dropbox.com" 
    } 
} 
NULL 

Если последний NULL относится к содержанию $fileMetadata. Почему это пусто?

start.php - объекты для удаления.

<?php 
session_start(); 
require_once __DIR__.'/../vendor/autoload.php'; 
$key = "XCV..."; 
$secret = "DFG..."; 
$GLOBALS['app_name'] = "oauth-php/1.0"; 
$GLOBALS['redirectURI'] = "https://oauth.dev/dropbox_finish.php"; 
$GLOBALS['HomeURI'] = "https://oauth.dev"; 

$appInfo = new Dropbox\AppInfo($key, $secret); 
$csrfTokenStore = new Dropbox\ArrayEntryStore($_SESSION, 'dropbox-auth-csrf-token'); 
$webAuth = new Dropbox\WebAuth($appInfo, $GLOBALS['app_name'], $GLOBALS['redirectURI'], $csrfTokenStore); 

Edit: в локальных файлах у меня есть каталог с именем web, где файлы казненных. есть также папка (внутри web) под названием todo и файл todo.txt внутри. __DIR__ относится к директории web, о которой я упомянул.

В Dropbox у меня есть управляющий код todo с todo.txt внутри.

Редактировать2: Остальная часть кода. index.php содержит:

<?php 
include_once __DIR__.'/../app/start.php'; 
include_once __DIR__.'/../app/dropbox_auth.php'; 

Тогда dropbox_auth.php имеет следующий код:

$authURL = $webAuth->start(); 
header("Location: $authURL"); 

и, наконец, dropbox_finish.php

<?php 
//session_start(); 
require_once "../app/start.php"; 

try { 
    list($accessToken, $userId, $urlState) = $webAuth->finish($_GET); 
    assert($urlState === null); // Since we didn't pass anything in start() 
} 
catch (Dropbox\WebAuthException_BadRequest $ex) { 
    error_log("/dropbox-auth-finish: bad request: " . $ex->getMessage()); 
    // Respond with an HTTP 400 and display error page... 
} 
//review 
catch (Dropbox\WebAuthException_BadState $ex) { 
    // Auth session expired. Restart the auth process. 
    header('Location: '.$GLOBALS['HomeURI']); 
} 
catch (Dropbox\WebAuthException_Csrf $ex) { 
    error_log("/dropbox-auth-finish: CSRF mismatch: " . $ex->getMessage()); 
    // Respond with HTTP 403 and display error page... 
} 
catch (Dropbox\WebAuthException_NotApproved $ex) { 
    error_log("/dropbox-auth-finish: not approved: " . $ex->getMessage()); 
} 
catch (Dropbox\WebAuthException_Provider $ex) { 
    error_log("/dropbox-auth-finish: error redirect from Dropbox: " . $ex->getMessage()); 
} 
catch (Dropbox\Exception $ex) { 
    error_log("/dropbox-auth-finish: error communicating with Dropbox API: " . $ex->getMessage()); 
} 

$client = new Dropbox\Client($accessToken, $GLOBALS['app_name'], 'UTF-8'); 
$_SESSION['accessToken'] = $accessToken; 

$_SESSION['client_object'] = $client; 

{... here I load an HTML form that uses AJAX send to `insert.php`} 
+0

вы уверены, что 'TODO/todo.txt 'файл существует? – Jordumus

+0

Внутри '__DIR__' или файл верхнего уровня? –

+0

Пожалуйста, ознакомьтесь с новым редактированием, где я добавил некоторую информацию о ваших проблемах. – wti

ответ

0

К сожалению, я не могу написать комментарий прямо сейчас.

Try, чтобы получить список папок/файлов с помощью вызова $ client-> getMetadataWithChildren ('/ TODO /') и проверить, если $ F является действительным FilePointerRessource :)

+0

Спасибо. Ответ будет «NULL», даже если папка существует. Я также пытался с помощью '/' dir, и он говорит, что там ничего нет, даже если есть несколько файлов и каталог todo. это ответ: 'Массив ( [хеш] => 4177b1e8a3e90f5dd949c91de497c876 [thumb_exists] => [байт] => 0 [путь] =>/ [is_dir] => 1 [значок] => папка [корень] => app_folder [содержание] => Массив ( ) [размер] => 0 байт ) 'Может быть, я, прежде чем что-то с видом? – wti

+0

Я немного запутался прямо сейчас, так как в документации по Dropbox говорится, что пользователь должен утверждать, что для приложения разрешен доступ к учетной записи Dropbox. Подтвердил ли это ваш код? И кроме того, документация предназначена только для oAuth2, так что откуда вы получили ваш фрагмент до сих пор :) [Dropbox API] (https://www.dropbox.com/developers/core/start/php) –

+0

Пожалуйста, проверьте Часть Edit2. – wti