Я создаю простое приложение 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`}
вы уверены, что 'TODO/todo.txt 'файл существует? – Jordumus
Внутри '__DIR__' или файл верхнего уровня? –
Пожалуйста, ознакомьтесь с новым редактированием, где я добавил некоторую информацию о ваших проблемах. – wti