Вопрос в нижней строке: что такое правильный PHP, чтобы я мог включить файл двоичных данных в объект ответа json?Как безопасно вернуть данные файла в PHP
У меня есть (iOS, хотя это не имеет значения) приложение, общающееся с сервером. Я хочу, чтобы сервер возвращал файл при успешном входе в систему. Я делаю NOT хочу, чтобы этот файл можно было загрузить через браузер или другими способами. Следовательно, каталог файлов защищен от общедоступного просмотра.
У меня файловую структуру на сервере, который выглядит следующим образом:
.../userFiles/
myFile.zip
yourFile.zip
somebodyElsesFile.zip
// all the other files, snip
.../server/
login.php
// other stuff, snip
userFiles/
каталог имеет drwxrw----
разрешения, и тот же владелец & группа, как server/
, так что я думаю что часть правильно.
Мой сервер код РНР:
// A bunch of stuff, snip.
// by this point, user is already verified valid login.
$filePath = "../userFiles/$username.zip";
if (file_exists($filePath))
{
// get the user's file
$fileData = file_get_contents($filePath);
if ($fileData)
{
$response->addparameters(array('data' => $fileData));
$response->addparameters(array('DEBUG-filePath' => $filePath));
}
else
{
$response->addparameters(array('msg' => "can't read data."));
$response->addparameters(array('DEBUG-filePath' => $filePath));
$response->setStatusCode(500);
}
}
else
{
// deal with non-existent file, snip
}
$response->send();
exit();
Когда я войти с моего приложения, то JSON ответ выглядит следующим образом:
myapp[13529:3615028] -[LoginViewController connection:didReceiveData:] ***** Login, but no data:
{
"DEBUG-filePath" = "../userFiles/olie.zip";
data = "<null>";
token = [token redacted];
}
Что я делаю неправильно? Что еще более важно: что такое правильный PHP, чтобы я мог включить файл двоичных данных в объект ответа json?
Это не имеет большого значения (за исключением того, что я использую приложение, а не браузер, для доступа к этому API), но я запускаю iOS и мой желаемый способ получить данные файла, как только все это работает является:
NSData *zipFile = [json objectForKey: @"data"];
// unzip the file, deal with contents, snip.
Дополнительная информация: Мой $response
код 200, а DEBUG-filePath
и data
параметры дают мне высокую степень уверенности в том, что я на этом конкретном пути кода (в отличие от некоторых других провал, в другом месте.)
Я довольно эксперт в iOS, но очень новичок в PHP. Мне удалось загрузить & сохранить файл на работу, но у меня возникли проблемы с возвратом его при следующем входе в систему.
Любые советы были бы наиболее ценными.
Спасибо!
Опечатка: $ fileData = file_get_contents ($ farmFilePath); vs $ fileData = file_get_contents ($ filePath); – jancha
Нет, это просто плохое редактирование с моей стороны. Починю. (Извините, я немного модифицировал оригинал, пытаясь удалить всю ссылку на «ферму», так как это не является частью проблемы. Похоже, я пропустил 2, теперь исправлено.) – Olie
Кроме того, мой объект ответа - '$ response = new Response(); '; исходный источник снимается непосредственно из http://bshaffer.github.io/oauth2-server-php-docs/cookbook. Я не думаю, что проблема существует, так как все остальное в ней работает отлично (и оно используется повсюду «как механизм Oauth2».) Если нет чего-то странного, где он неправильно обрабатывает двоичные данные. Наверное, я мало знаю об этом. – Olie