首页 / PHP / php – 如何在循环中“释放”内存?
php – 如何在循环中“释放”内存?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何在循环中“释放”内存?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2225字,纯文字阅读大概需要4分钟。
内容图文
![php – 如何在循环中“释放”内存?](/upload/InfoBanner/zyjiaocheng/966/f38138a6c4bf48b580440ef34f4584cc.jpg)
我有一个在共享托管环境中运行的脚本,我无法更改可用的PHP内存量.该脚本通过soap使用Web服务.我无法立即获取所有数据,或者内存不足,因此我在mysql数据库本地缓存数据方面取得了一些成功,以便后续查询更快.
基本上,我不是在5个月的数据中查询Web服务,而是一次查询它1个月并将其存储在mysql表中并检索下个月等.这通常有效但我有时仍会耗尽内存.
我的基本代码逻辑是这样的:
>使用soap连接到Web服务;
>连接到mysql数据库
>查询Web服务并将结果存储在变量$results中;
>将$dump结果转换为mysql表
>为每个月的数据重复步骤3和4
在每次迭代中使用相同的变量,所以我假设来自Web服务的每批结果都会覆盖以前的内存?我尝试在迭代之间使用unset($results)但是没有做任何事情.我每次输出与memory_get_usage(true)一起使用的内存,并且每次迭代都会增加使用的内存.
我有什么想法可以修复这个内存泄漏?如果我不够清楚,请发表评论,我可以提供更多细节.谢谢!
***编辑
这是一些代码(我使用nusoap而不是php5本机soap客户端,如果这有所不同):
$startingDate = strtotime("3/1/2011");
$endingDate = strtotime("7/31/2011");
// connect to database
mysql_connect("dbhost.com", "dbusername" "dbpassword");
mysql_select_db("dbname");
// configure nusoap
$serverpath ='http://path.to/wsdl';
$client = new nusoap_client($serverpath);
// cache soap results locally
while($startingDate<=$endingDate) {
$sql = "SELECT * FROM table WHERE date >= ".date('Y-m-d', $startingDate)." AND date <= ".date('Y-m-d', strtotime($startingDate.' +1 month'));
$soapResult = $client->call('SelectData', $sql);
foreach($soapResult['SelectDateResult']['Result']['Row'] as $row) {
foreach($row as &$data) {
$data = mysql_real_escape_string($data);
}
$sql = "INSERT INTO table VALUES('".$row['dataOne']."', '".$row['dataTwo']."', '".$row['dataThree'].")";
$mysqlResults = mysql_query($sql);
}
$startingDate = strtotime($startingDate." +1 month");
echo memory_get_usage(true); // MEMORY INCREASES EACH ITERATION
}
解决方法:
解决了它.至少部分.使用nusoap存在内存泄漏. Nusoap将调试日志写入$GLOBALS变量.在nusoap.php中改变这一行可以释放大量内存.
更改
$GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel = 9;
至
$GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel = 0;
我更喜欢使用php5的原生肥皂客户端,但我得到了一些奇怪的结果,我认为这些结果特定于我试图使用的web服务.如果有人熟悉使用php5的soap客户端和www.mindbodyonline.com的SOAP API,请告诉我.
内容总结
以上是互联网集市为您收集整理的php – 如何在循环中“释放”内存?全部内容,希望文章能够帮你解决php – 如何在循环中“释放”内存?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。