最近我继承了一个项目,其中所有文件附件都以“0xFFD8FFE000104A4649”的格式存储在数据库表中,我需要 PHP 能够读取和提供这些数据。

我的第一个想法是尝试使用 base64_decode,以防这是 ​​base64 编码格式。不是。 

原来它是Ascii格式的。

解决方案 1

下面的代码块将数据转换为 PHP 可以读取的格式,方法是发出带有 -r 和 -p 选项的 shell 命令 xxd 将命令传递给 proc_open 命令以运行,然后使用 fwrite 将数据返回到`$source`

$file = '0xFFD8FFE000104A4649...'; //var containing the source data
$desc = array(
    0 => array('pipe', 'r'), // 0 is STDIN for process
    1 => array('pipe', 'w') // 1 is STDOUT for process
);
$cmd = "xxd -r -p -";
$p = proc_open($cmd, $desc, $pipes);
fwrite($pipes[0], $file);
fclose($pipes[0]);
$source = stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($p);

虽然这可行,但它确实依赖于能够在您的服务器上运行 shell 命令。 

解决方案 2

另一种方法是使用 hex2bin 函数并从数据中删除 0x 字符,这基本上做同样的事情,但 hex2bin 做了繁重的工作。

$source = hex2bin(ltrim(rtrim($file), '0x'));

如果您正在使用图像,则可以使用 base64 编码输出图像:

base64_encode($source)

或者使用headers直接渲染:

header('Content-type: image/jpg');
header('Content-Length: ' . strlen($source));
echo base64_encode($source);

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。