<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>521PHP博客</title>
	<atom:link href="http://www.521php.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.521php.com</link>
	<description>我爱你PHP技术分享</description>
	<lastBuildDate>Fri, 13 Oct 2023 09:38:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>hyperf的四种协程方式使用</title>
		<link>https://www.521php.com/archives/2087/</link>
		<comments>https://www.521php.com/archives/2087/#comments</comments>
		<pubDate>Fri, 28 May 2021 09:17:53 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[我爱PHP]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[hyperf]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">https://www.521php.com/?p=2087</guid>
		<description><![CDATA[swoole的协程是单进程单线程的，是不能利用多核的，想使用多核需要通过添加work数来实现。这里和go本质区别就是，worker内的全局函数是进程内共享的，全局共享需要通过共享内存等其他方式实现； hyperf封装的协程基本有四种方式，第一种就是go或co关键字，通过管道channel通讯来并行处理；第二种是通过waitgroup；前两种发现和go几乎一样，第三种通过Parallel；第四种使用Parallel的全局函数，其实都是对前面两种的封装 上代码： [crayon-6a0655ef54742934638759/] &#160;]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2087/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>gin cookie使用的小坑(illegal base64 data at input byte )</title>
		<link>https://www.521php.com/archives/2082/</link>
		<comments>https://www.521php.com/archives/2082/#comments</comments>
		<pubDate>Wed, 21 Apr 2021 07:20:46 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[数据处理]]></category>

		<guid isPermaLink="false">https://www.521php.com/?p=2082</guid>
		<description><![CDATA[常用的go base64编码解码，有两个标准库 base64.StdEncoding base64.URLEncoding 都有其对应的编码和解码，但是我们在使用cookie时，一般使用下面这个，但是gin的SetCookie源码： [crayon-6a0655ef55630488894111/] 其对value做了QueryEscape，类似于php的urlencode,这也是为什么我们对接很多第三方的时候，使用base64编码出现问题的原因，需要先做一下urldecode，go里面是 [crayon-6a0655ef5563e794508900/] 解码前先做一下url解码 不然就有可能编码后有些特殊字符被转义，因为我们使用cookie时一般都是些明文、比较短的字符，一般可能没有遇到过这个问题]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2082/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>golang一点学习总结</title>
		<link>https://www.521php.com/archives/2073/</link>
		<comments>https://www.521php.com/archives/2073/#comments</comments>
		<pubDate>Wed, 07 Apr 2021 09:27:39 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[博采众长]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">https://www.521php.com/?p=2073</guid>
		<description><![CDATA[好久没有在博客更新文章了，现在习惯在wiki里面写了，更方便一点，最近正好系统学习了下go，然后域名申请了下https，发现自己确实太懒了，还是不应该放弃自己一直都喜欢写东西的习惯，这两年从技术上，生活上各方面还是有很多值得记录的事情。 学习go的起因主要出于对目前go的火热，当然对于做PHP的我来说，学习一门非解释性语音还是挺有必要的，尤其是好好系统的学一学。不过说真的语言没有好坏，到了我现在的阶段，就能明白语言都是工具，都有起专注和擅长的领域。很多人说PHP没落，其实吧也并不是这样，你水平不行，用什么语言都一样，你水平足够，不是多么牛逼的语言一样可以写出牛逼的东西。我学习go其实也是因为做基于目前公司项目，发现go写个网关服务非常合适、方便，带着这样的目的来学的，学完之后对于原有的水平有挺大的提高。而且发现go确实非常的方便，夸平台，而且编译的是机器码，性能必定相比java这样jit更高。对于phper还是建议学习下，php是个入门简单，但是学习曲线非常陡的原因，很多人只是知其然不知其所以然，对于现在的PHPer，一定要学习了解下swoole,workman,php8的jit，可以开阔眼界，对于想多学一门语言的PHPer，建议学一学go。两者也是挺互补的，也能做PHP扩展，而且入门也挺简单。大部分开发者都是对学习另外一门语言都是有些抵触的。这就好像是离开了自己的舒适区，但是其实，一旦你学进去还是会发现更广阔的天空。 一定明白语言没有好坏，整个系统的架构、设计才是最重要的。PHPer的特性让很多PHPer的水平差异很大，不如Java等有比较完备库，开发者基础。其实一个语言只有足够活跃，就会不断的有牛人贡献各种牛逼的东西。如果你的PHP水平已经可以，做过cli的各种服务、项目。其实就明白语言都一样，无法同样的功能换个语法。后端语言最终都是变为机器码，调用系统底层的接口。你认为PHP做不了什么，其实并不是他真的做不了，只是生态，专注的领益不通，更适合做什么。你如果非要做肯定都可以做的，只是你要考虑的是真正大的项目，需要多少人都要会做，你能找到多少这样的人。 推荐下我学习的资料：https://www.jianshu.com/u/15b2847f117e   这个资料还是挺不错，很多自己的理解，解释在里面。你如果学习的快，一周就差不多。前面基本语法肯定比较枯燥，但是所有语言都是这样的。坚持一下，最好和PHP自己的语言语法结合理解一下。关键的是PHPer一定要觉得这样强类型的语言很别扭，其实php为了实现这个弱类型付出的代价还是挺大的。这里需要自己能够理解下，你只要明白了其实也没啥特别的。另外go是没有强的类的概念的，不是传统的面向对象语言，他通过结构体的接口、导入、大小写，来实现类的定义、继承、私有共有；然后go的一大亮点就是他的协程。写过异步任务的人可以简单理解他的协程就类似异步，就一个go关键字就开启一个协程。非常方便。开销小，理论上资源够可以开很多很多协程，当然你可以自己控制实现一个协程池来管控一下。main就是一个主协程，其他协程，无论是协程里面又开启的协程，其实理论上都从属于main主协程。协程的通讯和控制就依赖于channel通道和context包，而协程的代码一定注意不要有死循环或者无限制等待的阻塞任务，不然除非main退出，子协程是无法退出的，他不像进程这样，你还可以通过kill等命令强制结束，context的控制逻辑其实也是要代码执行到判断逻辑主动退出的，如果之前就阻塞或者死循环，那就无法退出了。这里需要好好理解。你做过多进程或者多线程服务的话就好理解一些。而对于连接池的概念有一定水平的开发者应该就理解。go的连接池和多核使用都非常方便 总的来说我也就学了一个星期，刚开始也觉得真心挺牛逼的，其实吧，一个语言是否真的能牛逼起来还是要看生态，社区是否活跃。用的多了自然就牛逼了。不要太在意很多网上给出的语言性能压测对比，生产环境的业务哪有一个hello Word，别只看结果，你要看他压测的过程。当然纯语言层面，go这样的直接编译成机器码，PHP就算使用opcache或者jit，毕竟还是多了几层。肯定还是有些差距，但是你又发现为什么swoole或者workman 为什么又比go的hello word高了呢。其实很简单这样非阻塞的任务，swoole workman提前启动多个进程利用多核，go的协程是动态的，就算他再轻量也是有起管理的开销，切换的开销的。这样的对比其实意义不是特别大。但是呢，这里有个但是，真的如果你的业务发展到架构优化的成本已经比语言切换的成本高的时候，这个语言的优劣也确实是很重要的。切换个语言可能真的能省下个一半机器都很正常，尤其对于那种成千上万服务器的业务来说，就很重要了。但是，这里又一个但是，往往很多服务的架构都是综合考虑，迭代升级的。你一个初级项目，难道上来就意淫一个上亿用户的架构么。解决任何事情都有方法，任何困难都能解决，而且解决的方法不见得完全就是技术上的，最明显的12306.之前所有的票都是一个开票时间，现在都是高铁，普通车分开，等，这样也是解决方法。放开自己的视野。很多事情解决起来就没那么复杂]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2073/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP数组组合穷举方法</title>
		<link>https://www.521php.com/archives/2053/</link>
		<comments>https://www.521php.com/archives/2053/#comments</comments>
		<pubDate>Fri, 10 Feb 2017 03:42:17 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[总结]]></category>
		<category><![CDATA[我爱PHP]]></category>
		<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[数据处理]]></category>

		<guid isPermaLink="false">http://www.521php.com/?p=2053</guid>
		<description><![CDATA[某些业务场景下，我们会用到组合穷举方法，这里整理几个穷举方法 1、不限顺序的数组组合穷举： [crayon-6a0655ef55ed4445163704/] 结果： [crayon-6a0655ef55edc347414969/] 2、穷举排列组合的函数 [crayon-6a0655ef55ee6638900747/] 穷举排列组合的函数]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2053/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>PHP检查微信域名屏蔽接口</title>
		<link>https://www.521php.com/archives/2045/</link>
		<comments>https://www.521php.com/archives/2045/#comments</comments>
		<pubDate>Tue, 20 Dec 2016 05:23:36 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[博采众长]]></category>
		<category><![CDATA[我爱PHP]]></category>
		<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[转载]]></category>

		<guid isPermaLink="false">http://www.521php.com/?p=2045</guid>
		<description><![CDATA[微信里域名总是被微信拦截，或者域名被微信屏蔽，辛辛苦苦推广，却不知道微信里域名爆红了。给大家介绍一个微信分享域名防屏蔽 防微信拦截网址系统 可以实时查询域名是否被微信拦截，实时检测微信屏蔽域名api，有用没用自己试试就知道了。 使用方法多种多样。 官网：微信官方接口，实时监测域名是否被封http://www.917fenxiang.cn/ &#160; 这个检查接口的有点就是速度快，精准，并且微信公众号做管理，进行IP设置，密码设置等，非常方便，包含用户的权限，随时的方便控制 以下转自其wiki 实时域名检查功能wiki 功能需求 接入流程 功能管理 会员等级 程序接入文档 这么牛逼返回首页 1、功能需求： 为应对客户接口化检查域名在微信是否可用、顾开发此功能 2、接入流程 接入方式非常简单、安全，全自动微信交互接入流程，口令式管理、白名单设置等等功能、保证您的权益； 实时官方接口、高效、迅速、准确 接入一步走： 关注功能依赖公众号、根据公众号响应提示操作、获取操作权限，传送门-&#62; 3、域名检查功能管理 此公众号为响应式交互系统： 文字或语音（请说普通话）回复：我的信息 会响应您的系统账户信息 为了您的权益，可以设置IP白名单，IP为您服务器的出口IP，白名单可以设置多个 4、关于会员等级 目前会员等级规则： 会员等级 单日频次限制 说明 普通会员 10 关注之后默认获得 白银会员 500 升级获得 黄金会员 1000 &#8230;]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2045/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>memcache内存分配策略及内存计算</title>
		<link>https://www.521php.com/archives/2039/</link>
		<comments>https://www.521php.com/archives/2039/#comments</comments>
		<pubDate>Thu, 08 Dec 2016 06:19:41 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[memcache]]></category>

		<guid isPermaLink="false">http://www.521php.com/?p=2039</guid>
		<description><![CDATA[今天研究了一下memcache的内存分配策略，发现其和redis的确是有很大不同的，很多人知道memcache是提前预占用内存的，并且，其内存的占用是定长的，所以其内存的占用是可以被计算出来的。但是，其分配策略不是那么简单的，其合理的设置调优，也并不是那么容易的事情。下面就讲一下我的理解。以及-m参数认为无效的原因。 理解memcache的确必须先理解 slab、page、chunk 三个概念。page组成了slab,chunk组成了page,chunk是数据真实存储的位置，默认情况下,page的大小是1M，当然这个可以通过参数修改，chunk默认从96B开始，以1.25的倍数在slab区间增长。即，slab1 的chunk为96B，那slab2的所有chunk都是120B,那slab3的所有chunk就是150B,依次类推。因为page大小都是1m，那么相当于chunk的个数就确定了，如果slab1有一个page，那么就应该有10922个chunk，在内存未达到配置内存上限的时候，这个page是可以增加的，但是这里增加的单位就是page，也就是1M,比如已经存了10922个96B以下数据的key，再存一个新的，内存又没有达到配置上限，就会page增加，相应的也就再增加10922个chunk。下面具体代码看一下 启动命令 [crayon-6a0655ef57023636448043/] 启动命令就定死了其slab的分配规则，这样就能看到数据616944以上的，一个page也就只能存一个了，也就是就会占用1M的内存，其最大是不能存储1M以上的，除非你将page的配置设置1M以上，或者数据压缩。 这个时候看一下telnet localhost 11212    stats slabs [crayon-6a0655ef5702b854441540/] 可以看到，当其没有数据的时候，规则虽然确定，但是没有真的去分配内存的。 使用php脚本存入一个值 [crayon-6a0655ef5702e341302018/] 再次运行stats slabs [crayon-6a0655ef57030134733419/] 发现其开始分配内存，并且直接占用了1M内存（total_malloced 1048512），used_chunks 1 我们试试存储超过10922个key [crayon-6a0655ef57032742987623/] 发现结果 [crayon-6a0655ef57034724207236/] page变成了2， total_malloced也为2M,我们启动的时候-m为2也就是说运行其使用的内存就是2M,那试一下超过2M [crayon-6a0655ef57037244029823/] 结果： [crayon-6a0655ef57039088191992/] 我们发现所有的21844个chunk全被占用，内存没有增加，这个时候肯定就有数据比淘汰了，也就是被新的key替换了。 但是如果我们测试96B以上的数据 [crayon-6a0655ef5703b519215530/] 结果： [crayon-6a0655ef5703d293711065/] 其占用的slab5,内存突破了2M，又加了1M,我换了key，所以肯定是新增，slab1的没有动，还是占满的。这个数据为什么占用的比实际130B大，使用的是slab5应该是key等也需要内存的占用，这些不管，这也说明了-m参数的原则是在slab不变的情况下，不能突破限制，但是如果遇到数据有其他slab，那么他就会再增加一个page的大小，这也就是有的人说-m配置没有作用的原因，实际上不是没有作用。我们测试能否这个slab5出现两个page,我只要循环大于4369即可，因为240一个chunk这里STAT 5:chunks_per_page 4369 &#8230;]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2039/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>shell监控load以及小数判断</title>
		<link>https://www.521php.com/archives/2032/</link>
		<comments>https://www.521php.com/archives/2032/#comments</comments>
		<pubDate>Tue, 06 Dec 2016 09:56:56 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[博采众长]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[数据处理]]></category>

		<guid isPermaLink="false">http://www.521php.com/?p=2032</guid>
		<description><![CDATA[简单的shell监控服务器负载的话，可用使用uptime命令，获取load，然后根据使用awk,和你预定义阈值对比 只不过shell小数做比较需要特殊处理一下 [crayon-6a0655ef5785b858784503/] &#160;]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2032/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>纯php做类似php-fpm多进程管理服务</title>
		<link>https://www.521php.com/archives/2017/</link>
		<comments>https://www.521php.com/archives/2017/#comments</comments>
		<pubDate>Tue, 08 Nov 2016 12:54:32 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[总结]]></category>
		<category><![CDATA[我爱PHP]]></category>
		<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[数据处理]]></category>

		<guid isPermaLink="false">http://www.521php.com/?p=2017</guid>
		<description><![CDATA[php-fpm，以及现在比较火的workman，swoole，其都是使用的多进程的管理模式，使用manger进程，管理其子进程，今天通过纯php做了一个类似的小东西，这样以后再做守护脚本的时候，可以使用这种方式，好处就是，多进程，更能利用多核的优势，并且可以做平滑重启。 本代码实现的功能，可以自定义子进程数，比如你定3个子进程，运行会产生1个manger进程，3个work进程，通过linux信号，来实现，进程的平滑重启。 [crayon-6a0655ef5819b773584402/] php index.php命令行运行，会产生3个子进程， [crayon-6a0655ef581a4510006106/] 你随意kill一个，管理进城会立即补充一个，传递SIGUSR1给子进程，会平滑重启比子进程，给主进城，就会平滑重启所有子进程，kill主进城，或者传递SIGHUP信号，会平滑的kill所有子进程，结束主进城。这样的好处就是主进城只负责监控子进程和自己的状态，运行更稳定，然后后期可以做一些子进程任务处理上限的控制，就可以试进城更稳定高效，信号试用kill -s 传递 &#160; 升级版： 留作记录 [crayon-6a0655ef581a7741490906/] &#160;]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2017/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>file_put_contents和fwrite对比，以及他们在高并发下问题</title>
		<link>https://www.521php.com/archives/2004/</link>
		<comments>https://www.521php.com/archives/2004/#comments</comments>
		<pubDate>Fri, 23 Sep 2016 11:53:12 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[总结]]></category>
		<category><![CDATA[我爱PHP]]></category>
		<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[数据处理]]></category>

		<guid isPermaLink="false">http://www.521php.com/?p=2004</guid>
		<description><![CDATA[先说结论，单次性能，file_put_contents要比fwrite好，这个也很好理解，因为写入文件，file_put_contents就一行代码，fwrite至少三行，虽然不是说代码行少就一定快，但就这个写入功能来说，file_put_contents就等于fopen fwrite fclose，之所以前者快，就是因为一次api交互，直接干了这三件事，后者有三次api的开销。 再说问题，其实不能说是问题，应该说是一个需要注意的点，默认情况下，两者都是不是使用独占锁的方式运行，所以在高并发下，会有写入的内容被覆盖的问题。这里需要通过独占锁的方式来解决。 之前过某篇文章，对比file_put_contents和fwrite的性能，是用的循环100w次写入的方式对比，记得当时的结论是，file_put_contents用了300多秒，fwrite 10秒，那是因为，他讲fopen和fcolse放到了循环外，如果你100w拼成一个长字符，最后一次写入，那肯定更快。所以很多结论都是有特定场景的。 实验一、 [crayon-6a0655ef58b7b432723711/] ab [crayon-6a0655ef58b81080302998/] 结果，多次验证取中间结果 [crayon-6a0655ef58b84175773534/] 2.txt写入了86行，这里就出现了高并发下的问题，这里注意qps为1329 实验二、 [crayon-6a0655ef58b86139259684/] 结果 [crayon-6a0655ef58b88279328890/] 2.TXT写入81行，发现qps的确是比file_put_contents低一些，1278 实验三、 [crayon-6a0655ef58b8b226010607/] 结果： [crayon-6a0655ef58b8d042800904/] &#160; 2.txt这次写入了100行，没有丢失，但是qps发现下降了不少1187 实验四、 [crayon-6a0655ef58b90620731719/] 结果： [crayon-6a0655ef58b92323308846/] &#160; 2.txt同样没有丢失，qps也是有下降。 当然了，这两个函数，和你的系统，软件版本，文件系统有很大的关系，linux下的性能明显比window要好一些。所以这里就像我上篇文章说的，web程序，和你做一个类似的批处理程序，写法是不一样，因为着重的点不一样。就是因为没有锁，所以才有好的并发效果，但是你如果一定要强制写入的完整，就需要牺牲并发的性能。 如果我们在做文件处理脚本，就适合使用颗粒度更小的函数，这样你才能在关键点，通过函数、系统逻辑特性做出优化。所以没有银弹，任何的东西都是相对的]]></description>
		<wfw:commentRss>https://www.521php.com/archives/2004/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>php fseek读取超过内存大小文件</title>
		<link>https://www.521php.com/archives/1999/</link>
		<comments>https://www.521php.com/archives/1999/#comments</comments>
		<pubDate>Fri, 23 Sep 2016 03:00:50 +0000</pubDate>
		<dc:creator>地狱中仰望天堂</dc:creator>
				<category><![CDATA[总结]]></category>
		<category><![CDATA[我爱PHP]]></category>
		<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[数据处理]]></category>

		<guid isPermaLink="false">http://www.521php.com/?p=1999</guid>
		<description><![CDATA[可能有一些人就听过这样的面试题，做web程序的，的确在类似这样的问题上有很大的思路上的差异。包括我们做批处理的脚本程序，其实和我们普通的web程序是有区别的。后面我会抽出时间通过file_put_contents函数说一下类似的区别。这篇文章说一下操作大文件的处理，一种方式，当然做切割，当然，还有一种方式就是，我们可以通过fseek制定指针读取位置； 示例代码是这样： [crayon-6a0655ef59940513836527/] 上面代码是个示例的代码，读取一个大文件的前多少行，当然如果你需要处理整个文件，不能直接这样用，因为，代码最后还是付给了一个变量，处理这样的问题，就是要复用变量，不能直接全部给这个变量，阶段性的处理，这样这个变量只是不断的重新赋值，每次，都不超过内存的限制。]]></description>
		<wfw:commentRss>https://www.521php.com/archives/1999/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
