开发者社区> 问答> 正文

php字串写成文件只能写半截:报错

最近遇到一个很古怪的问题,生成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>。还它前的一部分图片都被截掉了。

有没有高人指点一下?谢谢。

 

展开
收起
kun坤 2020-06-09 22:26:31 471 0
1 条回答
写回答
取消 提交回答
  • 能不能放出点代码,测试下######磁盘空间没写满的话。像是单行文件的长度太长了。文件内容应该合适的的地方换个行吧,不要让一行的长度太长。######有个人说,要用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>

    ######

    引用来自“王强0621”的答案

    用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,我暂时还用不上。十分感谢!

    我的程序已经可以完全正确地工作了。

     

    ######赞
    2020-06-09 22:26:36
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载