武汉PHP培训
达内武汉民大中心

15827352908

热门课程

内存过小时如何用PHP读取大文件

  • 时间:2018-03-28 16:11
  • 发布:武汉PHP培训班
  • 来源:互联网

作为PHP开发人员,我们并不经常需要担心内存管理。PHP 引擎在我们背后做了很好的清理工作,短期执行上下文的 Web 服务器模型意味着即使是最潦草的代码也不会造成持久的影响。

很少情况下我们可能需要走出这个舒适的地方 ——比如当我们试图在一个大型项目上运行 Composer 来创建我们可以创建的最小的 VPS 时,或者当我们需要在一个同样小的服务器上读取大文件时。

衡量成功的标准

确保我们对代码有改进的唯一方法是测试一个不好的情况,然后将我们修复之后的测量与另一个进行比较。换句话说,除非我们知道“解决方案”对我们有多大的帮助(如果有的话),否则我们不知道它是否真的是一个解决方案。

这里有两个我们可以关系的衡量标准。首先是CPU使用率。我们要处理的进程有多快或多慢?第二是内存使用情况。脚本执行时需要多少内存?这两个通常是成反比的 – 这意味着我们可以以CPU使用率为代价来降低内存使用,反之亦然。

在一个异步执行模型(如多进程或多线程的PHP应用程序)中,CPU和内存的使用率是很重要的考量因素。在传统的PHP架构中,当任何一个值达到服务器的极限时,这些通常都会成为问题。

测量PHP内的CPU使用率是不切实际的。如果这是你要关注的领域,请考虑在Ubuntu或MacOS上使用类似top的工具。对于Windows,请考虑使用Linux子系统,以便在Ubuntu中使用top。

为了本教程的目的,我们将测量内存使用情况。我们将看看在“传统”的脚本中使用了多少内存。我们将执行一些优化策略并对其进行度量。最后,我希望你能够做出一个有经验的选择。

我们查看内存使用多少的方法是:

// formatBytes is taken from the php.net documentation

memory_get_peak_usage();

function formatBytes($bytes, $precision = 2) {

$units = array("b", "kb", "mb", "gb", "tb");

$bytes = max($bytes, 0);

$pow = floor(($bytes ? log($bytes) : 0) / log(1024));

$pow = min($pow, count($units) - 1);

$bytes /= (1 << (10 * $pow));

return round($bytes, $precision) . " " . $units[$pow];

}

// formatBytes is taken from the php.net documentation

memory_get_peak_usage();

function formatBytes($bytes, $precision = 2) {

$units = array("b", "kb", "mb", "gb", "tb");

$bytes = max($bytes, 0);

$pow = floor(($bytes ? log($bytes) : 0) / log(1024));

$pow = min($pow, count($units) - 1);

$bytes /= (1 << (10 * $pow));

return round($bytes, $precision) . " " . $units[$pow];

}

我们将在脚本的最后使用这些函数,以便我们能够看到哪个脚本一次使用最大的内存。

本篇文章是有武汉PHP培训班为您呈现,希望给您带来更多更好的文章,更多武汉PHP培训班相关资讯,请扫描下方二维码

上一篇:上传文件如何控制文件大小
下一篇:关于Protocol Buffers使用指南

oop是什么?

php还会是最好的语言吗

这些PHP事件你该不会不知道吧

话说PHP的thinkphp框架好用吗

选择城市和中心
贵州省

广西省

海南省

有位老师想和您聊一聊