【发布时间】:2014-10-13 12:46:33
【问题描述】:
我已经实现了三个 php 脚本,其中两个是在 stackoverflow 上提出的,以解决较大图像的 base64_decode 不起作用的问题。在这一点上,我已经放弃了 php 脚本,只是想知道可能需要进行什么服务器升级才能使其正常工作。所有这三个都可以在具有任何分辨率的一台服务器上工作,但在另一台服务器上获得的最大分辨率约为 1680 x 800(文件大小约为 140 kb)。除此之外,它会失败并输出一个空图像(文件大小 0 kb)。数据从 Flash 应用程序发布。我可以看到两台服务器之间的唯一区别是 php 内存限制(256 MB 与 128 MB)。会是这样吗?感谢您的任何建议!
尝试的php脚本复制如下:
版本 1:
$png = base64_decode($_POST['imagedata']);
header('Content-Type: image/png');
header("Content-Disposition: attachment; filename=".$_GET['name']);
echo $png;
版本 2:
$encoded = $_POST['imagedata'];
$decoded = "";
for ($i=0; $i < ceil(strlen($encoded)/256); $i++)
$decoded = $decoded . base64_decode(substr($encoded,$i*256,256));
header('Connection: Keep-alive');
header('Content-Type: image/png');
header("Content-Disposition: attachment; filename=".$_GET['name']);
echo $decoded;
版本 3:
$data = $_POST['imagedata'];
$target = 'img_'.date('Y-m-d-H-s').'.png';
$whandle = fopen($target,'w');
stream_filter_append($whandle, 'convert.base64-decode',STREAM_FILTER_WRITE);
fwrite($whandle,$data);
fclose($whandle);
header("Content-Length: " . filesize($target));
header("Content-Disposition: attachment; filename=" . basename($target));
readfile($target);
unlink($target);
【问题讨论】:
-
请添加html表单或说明获取imagedata内容的方式。
-
图片数据来自 Flash 应用
-
您能否将flash post数据捕获到文件中以检查是否正确捕获并且具有正确的b64格式。?例如,添加第一个和最后 20 个字符以及大小(字符数)。 B64 需要有一些规则才能正确。如果数据不正确,base64_decode 函数将返回 FALSE 而不是任何数据。
-
嗯,它在一台服务器上运行良好,但在另一台服务器上运行良好,并且在较低分辨率下都运行良好......所以这表明输出是正确的,但这是服务器限制?