Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是什么阻止base64_解码处理大文件/图像_Php_Image_Post_Base64_Png - Fatal编程技术网

Php 是什么阻止base64_解码处理大文件/图像

Php 是什么阻止base64_解码处理大文件/图像,php,image,post,base64,png,Php,Image,Post,Base64,Png,我已经实现了三个php脚本,其中两个是在stackoverflow上提出的,以解决较大图像的base64_解码不起作用的问题。现在,我已经放弃了php脚本,只是想知道需要什么样的服务器升级才能让它正常工作。这三台服务器都可以在一台服务器上以任何分辨率工作,但在另一台服务器上获得的最大分辨率约为1680 x 800(文件大小约为140 kb)。除此之外,它还会失败并输出一个空映像(文件大小为0 kb)。数据是从Flash应用程序发布的。我能看到的两台服务器之间的唯一区别是php内存限制(256 M

我已经实现了三个php脚本,其中两个是在stackoverflow上提出的,以解决较大图像的base64_解码不起作用的问题。现在,我已经放弃了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;

可能是内存相关的问题:post大小限制或php内存使用限制

  • 使用xdebug检查脚本的内存消耗:。脚本不应超过php.ini文件中的memory_limit参数:
  • 检查php.ini中的post_max_大小(应大于最大图像大小)
  • 检查您的web服务器是否对post数据有任何限制
  • 检查您的日志:如果base64_encode编码不正确,应该会在某个地方显示错误消息
请添加html表单或解释获取imagedata内容的方法。图像数据是从Flash应用程序发布的。您是否可以将Flash post数据捕获到文件中,以检查是否正确捕获并具有正确的b64格式。?例如,添加第一个和最后20个字符以及大小(字符数)。B64需要有一些规则才能正确。如果数据不正确,base64_decode函数将返回一个FALSE,而不是any data。它在一台服务器上工作正常,但在另一台服务器上工作正常,并且在较低分辨率下在两台服务器上都工作正常…因此这表明输出是正确的,但这是服务器的限制?谢谢!这是一个客户机服务器,所以让他们安装xdebug可能很棘手,但希望他们可以。post_最大大小为55米(最大图像大小仅为140 kb左右)。是否有其他post限制可能导致这种情况?刚刚确认主机不支持XDEBUG…是否有其他方法检查内存使用情况?我刚刚使用了echo memory_get_usage()并输出“1795496”这远低于128 MB的限制…所以我猜问题既不是post_max_size,也不是php内存限制?似乎可能是suhosin.post.max_value_length最大post大小可以由web服务器限制(对于Ingance for nginx:)。
$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);