合并数据字符串以生成文件

时间:2015-03-05 06:00:47

标签: php arrays string file-upload download

我目前正在使用提供功能的API" GetFileChunk"使用pos和len来拉取文件的一部分。没有文档,所以我正在尝试并尝试首先将文件数据拉入数组,然后将其写入文件。

截至目前,我已将数据读入数组,但我不确定如何将其写出来。我已经尝试过file_put_contents(),但这只是将行写为文本而不是从字节数据创建文件。

$fm = new FileManager();

$data = array();
$pos = 0;
$len = 32;

//while (($chunk = $fm->getFileChunk('test.cfg', $pos, $len)) != '')
for ($i = 0; $i <= 500; $i++)
{
    $result = $fm->getFileChunk('test.cfg', $pos, $len);
    $chunk = $result->result;

    if ($chunk != '')
    {
        array_push($data, $chunk);
    }

    $pos += $len;
}

var_dump($data);

file_put_contents("test.cfg", $data);

以下是我之后转储数组时的输出结果......

array (size=49)
  0 => string 'I0FNUCBDb25maWd1cmF0aW9uIEZpbGUNCiMjIyMjIyM=' (length=44)
  1 => string 'IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI0RPIE4=' (length=44)
  2 => string 'T1QgRURJVCBXSElMRSBBTVAgSVMgUlVOTklORw0KIyM=' (length=44)
  3 => string 'IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo=' (length=44)
  4 => string 'DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM=' (length=44)
  5 => string 'IyMNCiMgU2VjdXJpdHkNCiMjIyMjIyMjIyMjIyMjIyM=' (length=44)
  6 => string 'IyMjIyMjIyMjIyMjIyMjIw0KU2VjdXJpdHkuRXhlY1A=' (length=44)
  7 => string 'YXRoPUV4ZWMNClNlY3VyaXR5LkFsbG93Q29uY3VycmU=' (length=44)
  8 => string 'bnRTZXNzaW9ucz1GYWxzZQ0KDQojIyMjIyMjIyMjIyM=' (length=44)
  9 => string 'IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgV2Vic2VydmU=' (length=44)
  10 => string 'cg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM=' (length=44)

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

在阅读后使用base64_decode解码块:

$data = '';
for ($i = 0; $i <= 500; $i++)
{
    $result = $fm->getFileChunk('test.cfg', $pos, $len);
    $chunk = $result->result;

    if ($chunk != '')
    {
        $data .= base64_decode($chunk)
    } else {
        break;
    }

    $pos += $len;
}

file_put_contents("test.cfg", $data);

答案 1 :(得分:0)

我不确定你的意思是“数据是直接写成文本而不是用来构建文件”,但我猜你想要的是块数据,它是base64编码的,已解码并写入文件。您可以使用base64_decode()功能来执行此操作。

php > echo base64_decode('I0FNUCBDb25maWd1cmF0aW9uIEZpbGUNCiMjIyMjIyM=');
#AMP Configuration File
#######

您需要为每个块执行此操作,因此array_push()应为:

array_push(base64_decode($data), $chunk);

通过该更改,您的输出文件应该是正确的。

但是为什么在写入文件之前构造一个数组,甚至是一个字符串?只需在检索时解码并写入每个块:

$outfile = fopen('test.cfg', 'w');
.
.
// in your loop..
    fwrite($outfile, base64_decode($data));
.
.
fclose($outfile);