ios — как безопасно вернуть данные файла в переполнение стека

Суть вопроса: что такое правильный PHP, чтобы я мог включить двоичный файл данных в объект ответа на основе json?

У меня есть (iOS, хотя это не имеет значения) приложение, которое взаимодействует с сервером. Я хочу, чтобы сервер возвращал файл при успешном входе в систему. я делаю НЕ хотите, чтобы этот файл можно было загружать через браузер или другими способами. Следовательно, каталог файлов защищен от публичного просмотра.

У меня есть файловая структура на сервере, которая выглядит так:

.../userFiles/
myFile.zip
yourFile.zip
somebodyElsesFile.zip
// all the other files, snip
.../server/
login.php
// other stuff, snip

userFiles/ каталог имеет drwxrw---- разрешения и тот же владелец & группа как server/, так что я считать эта часть права.

PHP-код моего сервера имеет:

// 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. Мне удалось получить загрузку & сохранить файл для работы, но у меня возникли проблемы с возвратом при следующем входе в систему.

Любые советы будут наиболее цениться.

Спасибо!

1

Решение

попробуйте base64 кодирование контента во время передачи. например $data = base64_encode($data);

если протоколом связи является json, я совершенно уверен, что двоичные данные не будут работать напрямую, поэтому для передачи предлагается кодировка base64.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]