curl out of memory window下PHP调用curl报内存不够
今天在调用新浪微博api的时候(官网下载的sdk),发现发布图片微博的时候不成功,报错说:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4294962523 bytes) in XXXsdksinasaetv2.ex.class.php on line 396
实在想不明白啊,不就上传个图片嘛,至于需要这么大内存吗!?
开始想官网提供的sdk,如果是代码有问题肯定其他开发者也碰到了,于是乎去新浪微博开发平台找答案,怪的很没人说起(不知道是大家都没碰到这问题还是咋的)。没办法,只能请谷歌。
一查还真有点头绪了,大部分出现这个问题的都是因为:用curl请求https,由于在获取证书的时候出问题了,这帖子感觉说的还行:CURLOPT_SSL_VERIFYPEER惹得祸,感兴趣的童鞋可以去看一下。但这个不是我这的原因,不扯远了,继续解决自己的错误。
照上面的帖子行不通,继续找。
但是这个里面的一句话给提醒了我,"出问题的服务器是Windows,工作的是linux。"。这有戏啊,问题可能出在php版本或跟操作系统上,于是把代码那linux上一测试,发现还真的没问题,大喜。
于是加了个关键字"window"重新搜了一遍,还真是这样,php官网果断的出现在了搜索结果里面里面,答案就在这:http://windows.php.net/。
看一下自己php的版本 5.2.5,活该出问题,不勤快点升级。
不多说,不过在写文章的时候又发现了这个(使用微博api发带图片的微博,提示内存不够,这哥们可比我惨多了,估计把所得内存都加上了之后才发现有点不头,哈哈),得来的全不费功夫啊(可惜这时候问题已经被我发现了,只是还没解决)。
解决方法:简单的解决方法就是升级一下php,敬业一点的方法当然就是自己改改代码,怎么改这 是个问题,我表示我不敬业,而且都懒得去升级。
中文乱码多半是编码导致的我们只要调整一下输出编码即可解决中文乱码问题,下面我们看simplexml_load_file中文乱码解决办法。在PHP5.0 中,simplexml_load_file()是一个很好的读取和处理XML文件的函数,但是在读取和处理中文时会出现乱码,经过研究发现,如果是中文内容,必须经过iconv编码转换,否则显示为乱码。
代码如下 | 复制代码 |
$xml=simple_load_file('xml文件'); foreach($xml->soft as $temp){ echo $temp->name; //这就是软件名称了。 echo $temp->mem; //这就是软件说明了。 } |
英文正确中文乱码,这个我估计就是编码问题了。
后来网上找到了相关文章,如核心一句
1、如果xml的encoding与文件类型不符,立刻报错
2、simplexml可以处理gbk的XML,即文件内容和encoding都为gbk(ANSI格式)
3、不管文件内容是什么,处理完了,都是UTF8.
具体方法如下:
代码如下 | 复制代码 |
$chname = iconv('utf-8', 'gb2312', $table->param["name"]); |
实现将编码为'utf-8'的XML文件内容转换为 gb2312 格式的内容。
中文编码采用gb2312格式输出。
还有一种办法本人没测试过直接摊贩页面编码转成uft8
代码如下 | 复制代码 |
header("Content-type: text/html; charset=utf-8"); |
php在windows IIS平台运作的时候,有些东西和在Linux apache下不太一样。
今天遇到个神奇的问题,就是用$URI=$_SERVER["REQUEST_URI"];
在linux下看到的是urlrewrite静态化以后的地址 /exy/exk/list-3/
windows下返回的是原来的地址 /exy/article.php?page=3
这时候发现windows下有个办法HTTP_X_REWRITE_URL
这个数组,linux下没有
所以代码小修改下以兼容两个平台。(更换服务器真是各种水土不服)
代码如下 | 复制代码 |
$URI = $_SERVER["HTTP_X_REWRITE_URL"]; |
这样就两个平台都能正确的显示了。
我们利用java把数据写入然后利用php读出,但这样利用php读出时发现了在memcache乱码问题出来了,下面我来给大家介绍memcache乱码的解决办法。java读取php写入memcache内容
故事背景:我用java插入一条数字记录,用php读取无法正确读取。
今天发现如果使用MemCachedClient来插入一条数字,或者java的对象,那么在php调出来就是乱码。
对象可以理解,简单的数字也会乱码
如
代码如下 | 复制代码 |
mcc.set("a",25); |
php中出来的是乱码,同时如果采用telnet的方式来进行查询
get a
出来问号。
翻了一圈说要改类包。
最后发现个问题,如果改用字符串,那么java和php就能通用了。
代码如下 | 复制代码 |
mcc.set("a","25″); |
而且telnet 192.168.0.1 11211进入进行get也能得出正确的数字了。
本来我要对a这个值进行加法运算,觉得采用int会方便一些,居然和php读取memcache的时候有冲突。还是来回进行变量类型转换吧。
如果你也在使用java写入memcache,php读出memcache,通用一个字符串存储,就可以避免很多问题了。
不是java的类包不行。
java读取php写入memcache内容
当前需求:php将key为"my_key",value为"my_value"写入到memcache中,然后用java连接memcache读取my_key的值my_value。
php端的代码为:
代码如下 | 复制代码 |
<?php |
经检测,php写入后,用php和在memcache命令行都能获取的很好。
但是,用下面的java代码获取,却获取到null
代码如下 | 复制代码 |
import com.danga.MemCached.MemCachedClient; public class CacheReader { static private MemCachedClient client =new MemCachedClient(); |
一开始,我还以为是我的编码的问题,或者是某些参数设置的问题。后来,我想可能是各种memcache的客户端的寻址方式不太一样吧。几经周折,还是间接的解决了这个问题:我更换了java端的memcache的客户端,采用net.spy.memcached.MemcachedClient就可以了。代码如下:
代码如下 | 复制代码 |
import java.io.IOException; import net.spy.memcached.MemcachedClient; public class SpyMem { |
1. 原因分析:
在存储到数据库时!MySQL 不会存储 unicode 字符:
MySQL 仅支持从基本的多语种平面字符 (0×0000-0xFFFF)。请尝试存储一个同义词相反:)
更新: MySQL 5.5.3 上 (其中尚未 GA), 支持补充字符如果您使用 UTF8MB4 编码。
json_encode中文的时候,会把每个中文字符encode成“uxxxx”
而存进数据库的时候,“”被屏蔽了,直接变成”uxxxx”
2. 解决问题:
知道是什么原因就好解决问题了,你可以选择其他存储方式;
或者再对症下药进一步转义””为“\”,以保留””
我们的解决方案:
1. 避免json_encode将中文转换unicode编码.
PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。
$test = json_encode("深圳", JSON_UNESCAPED_UNICODE);
2. 先将中文字段urlencode,json_encode后,再用urldecode,也可以保证中文不会被转成unicode。
$test =urldecode(json_encode(array('brief'=>urlencode('简介'),'title'=>urlencode(标题)));
3. 进一步转义””为“\” 避免unicode中文前’'被mysql当成特殊字符去除
相关文章
- 这篇文章主要介绍了浅谈redis key值内存消耗以及性能影响,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-07
- 这篇文章主要介绍了详解分析MySQL8.0的内存消耗,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下...2021-03-23
- 这篇文章主要介绍了解决使用OpenCV中的imread()内存报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文章来给大家详细介绍在php中如何来调用执行mysql存储过程然后返回由存储过程返回的值了,有需要了解的同学可进入参考。 。调用存储过程的方法。 a。如果存储过...2016-11-25
- 今天小编就为大家分享一篇解决tensorflow训练时内存持续增加并占满的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
- 方法一:直接调用复制代码 代码如下:<? /******************************************************************************/ /* 文件名 : soapclient.php /* 说 明 : WebService接口客户端例程 /****************...2014-06-07
- memory_limit是php.ini中的一个比较重要的参数了,它可以限制你php进行最大使用内存的情况,如果小了会导致运行时提示Fatal Error: Allowed memory size of xxxxxx bytes...2016-11-25
- 这篇文章介绍了C#操作内存读写方法的主要实现代码,下面让我们来看看具体的实例实现,有需要的朋友可以参考一下...2020-06-25
- 在本篇文章里小编给大家整理了关于C#托管内存与非托管内存之间的转换的实例以及相关知识点,需要的朋友们学习下。...2020-06-25
- 这篇文章主要介绍了c# 通过内存映射实现文件共享内存的示例代码,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...2021-04-24
- 这篇文章主要介绍了Redis swap空间的使用示例,帮助大家更好的理解和学习使用Redis数据库,感兴趣的朋友可以了解下...2021-03-25
- 这篇文章主要介绍了Android内存溢出及内存泄漏原因进行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-06
完美解决TensorFlow和Keras大数据量内存溢出的问题
这篇文章主要介绍了完美解决TensorFlow和Keras大数据量内存溢出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-04Fatal error: Out of memory (allocated 786432)提示解决办法
今天在运行phpmyadmin时页面突然出现了Fatal error: Out of memory (allocated 786432)提示,看英文的意思是说超过了指定内存大小了,下面我来介绍解决办法 错误提...2016-11-25- 这篇文章主要介绍了Redis fork进程分配不到内存解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-01-15
- 在php程序中有事会需要用到C代码,这篇文章着重介绍一下用C写php扩展的方法,而且不需要重新编译php。有需要的同学可以参考一下。 在php程序中需要用到C代码,应该是下...2017-07-06
- <HTML> <HEAD> <TITLE> php调用js文件的好办法</TITLE> </HEAD> <BODY> <scrīpt language=''javascrīpt'' type=''text/javascrīpt'' src=''test.php''>&...2016-11-25
- 这篇文章主要介绍了java应用开发之JVM运行时内存,文中附含图文示例内容分析非常简要,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-09-16
对比C语言中memccpy()函数和memcpy()函数的用法
这篇文章主要介绍了对比C语言中memccpy()函数和memcpy()函数的用法,二者都是用于复制内存内容,注意区别,需要的朋友可以参考下...2020-04-25- vivo x9老是提示内存不足应该怎么处理?下面小编整理了解决办法,一起来看一看吧。 问:vivo x9总提示内存不足安装软件失败怎么办?答:内存不足一般有两种,一个是运行内存...2017-01-22