PHP: получать и хранить большие двоичные данные - PullRequest
0 голосов
/ 07 января 2019

Мой PHP-скрипт получает большие данные (100 - 500 МБ) от клиента. Я хочу, чтобы мой PHP-скрипт выполнялся быстро, не занимая слишком много памяти.

Для экономии трафика я не использую Base64 или данные форм. Я отправляю двоичные данные непосредственно в запросе POST.

Данные состоят из двух частей: заголовок 2000 байт и остальная часть, которая должна храниться в виде файла на сервере.

$fle = file_get_contents("php://input",FALSE,NULL,2000);
file_put_contents("file.bin", $fle);

Проблема в том, что file_get_contents игнорирует параметр смещения и считывает данные из байта 0. Есть ли лучший способ сделать это?

** Я не хочу читать все данные и вырезать последние байты N-2000, так как боюсь, что он будет использовать слишком много памяти.

1 Ответ

0 голосов
/ 07 января 2019

Используйте функции файлового ввода-вывода нижнего уровня и немного читайте / записывайте за раз.

$bufsz = 4096;

$fi = fopen("php://input", "rb");
$fo = fopen("file.bin", "wb");

fseek($fi, 2000);

while( $buf = fread($fi, $bufsz) ) {
  fwrite($fo, $buf);
}

fclose($fi);
fclose($fo);

Это будет чтение / запись в 4-килобайтных блоках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...