Как base64-декодировать большие файлы в PHP

Я попытался создать пустой конструктор, который будет принимать объект DataRow в качестве параметра

Я думаю, что вы неправильно запутали термин пустой . Пустой конструктор не принимает параметры по определению. У вас не может быть пустого конструктора с параметрами.

Если вы также хотите сохранить параметр в конструкторе производного класса, вам нужно использовать ключевое слово base , чтобы указать базовый конструктор.

public Malicious(DataRow row)
    : base(row)
{
}
5
задан Sander Marechal 20 May 2009 в 19:53
поделиться

2 ответа

Even though this has an accepted answer, I have a different suggestion.

If you are pulling the data from an API, you should not store the entire payload in a variable. Using curl or other HTTP fetchers you can automatically store your data in a file.

Assuming you are fetching the data through a simple GET url:

$url = 'http://www.example.com/myfile.base64';
$target = 'localfile.data';

$rhandle = fopen($url,'r');
stream_filter_append($rhandle, 'convert.base64-decode');

$whandle = fopen($target,'w');

stream_copy_to_stream($rhandle,$whandle);
fclose($rhandle);
fclose($whandle);

Benefits:

  • Should be faster (less copying of huge variables)
  • Very little memory overhead

If you must grab the data from a temporary variable, I can suggest this approach:

$data = 'your base64 data';
$target = 'localfile.data';

$whandle = fopen($target,'w');
stream_filter_append($whandle, 'convert.base64-decode',STREAM_FILTER_WRITE);

fwrite($whandle,$data);

fclose($whandle);
20
ответ дан 18 December 2019 в 05:40
поделиться

Декодировать данные меньшими порциями. Четыре символа данных Base64 равны трем байтам данных Base256.

Таким образом, вы можете сгруппировать каждые 1024 символа и декодировать их в 768 октетов двоичных данных:

$chunkSize = 1024;
$src = fopen('base64.data', 'rb');
$dst = fopen('binary.data', 'wb');
while (!feof($src)) {
    fwrite($dst, base64_decode(fread($src, $chunkSize)));
}
fclose($dst);
fclose($src);
11
ответ дан 18 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: