最近遇到一个很古怪的问题,生成svg图片(xml文件)时,使用string变量把图片的代码收集起来,集中交给php函数file_put_contents来写到一个目录下。结果图片只能是30K左右,余下的部分被截掉了。srcString是由几段HEREDOC连接而成的。
把那个string dump出来看,是完整的。即可以肯定的是:写入到文件过程中出错了。我尝试着把前面的部分内容删除几个字,会看到生成的文件中也会向前进几个字符。反之亦然。
可能出问题的地方:
1)php.ini中的max_post_size、代码执行时间限制等,没有限制,代码执行时间90也没有问题。
2)Zend Framework中上传文件的大小限制,也没有
3)file_put_contents函数的限制,这个里里外外看了几遍,没有。
4)尝试使用fopen、fwrite、fclose,据说不会漏掉一个字符的方法fwrite($desFile,$srcString,strlen($srcString))写出来的结果也是一样。
半截svg图片请见:http://www.ypgogo.com/Rmap/info/visitorId/6531/tSpan/2013
在图片上右键点击,查看源文件可以看srcString的一部分,可以看到没有svg的结尾</svg>。还它前的一部分图片都被截掉了。
有没有高人指点一下?谢谢。
能不能放出点代码,测试下######磁盘空间没写满的话。像是单行文件的长度太长了。文件内容应该合适的的地方换个行吧,不要让一行的长度太长。######有个人说,要用utf8_encode($srcString),处理一下,果然好了,不过,其中的文字全部变成了乱码。######乱码是 因为文件字符集不对, 你输出一个BOM 到开头就好了######
用javascript截取的方式就没有问题了,我曾经也用php代码截取汉字,效果不佳。
<SCRIPT language=javascript>
//截取字符串的方法
function cutString(string, strLength) {
var currentLength = 0;
for (var i=0; i<=string.length; i++ ) {
if (currentLength>strLength) {
return string.substring(0,i-1)+"...";
}
var ch = string.charCodeAt(i);
if (ch > 256) {
currentLength++;
}
currentLength++;
}
return string;
}
</SCRIPT>
<script>document.write(cutString('字符串','12'));</script>
######用javascript截取的方式就没有问题了,我曾经也用php代码截取汉字,效果不佳。
<SCRIPT language=javascript>
//截取字符串的方法
function cutString(string, strLength) {
var currentLength = 0;
for (var i=0; i<=string.length; i++ ) {
if (currentLength>strLength) {
return string.substring(0,i-1)+"...";
}
var ch = string.charCodeAt(i);
if (ch > 256) {
currentLength++;
}
currentLength++;
}
return string;
}
</SCRIPT>
<script>document.write(cutString('字符串','12'));</script>
谢谢你的提醒!
顺着这个思路,我发现是由于图片中的事件标题太长,所以使用了substr()函数将标题进行了截取,有一些就出错了。导致整个文档不能正确显示。
把图片下载下来,里面都是完整。只是浏览器不能正确地显示而已。现在去掉了substr(),不管标题的长度了。你提供的javascript,我暂时还用不上。十分感谢!
我的程序已经可以完全正确地工作了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。