php中readline与fread/fgets之间的区别
Posted
技术标签:
【中文标题】php中readline与fread/fgets之间的区别【英文标题】:Difference between readline vs fread/fgets in php 【发布时间】:2018-06-02 08:09:55 【问题描述】:我之前一直在控制台命令中使用readline
,但是今天我遇到了fread
和fgets
函数,我的问题是:使用这两种方法有什么区别:
// first
$inputLine = readline();
// second
$inputLine = fgets(STDIN);
它们的作用几乎相同,不是吗?
【问题讨论】:
呵呵,我对 php 中的readline()
太不熟悉了……我只用过fgets()
;) 你可以写一个基准测试,看看是否真的有很大的区别。否则,它可能最终会成为您喜欢的。
文件指针有所不同,但我现在对它们不太熟悉,更多信息:php.net/manual/en/function.fgets.phpphp.net/manual/en/function.readline.php
【参考方案1】:
我能想到的唯一可能的区别是readline()
不带参数,默认情况下只能从STDIN
读取输入,而fgets()
可以从任何resource
读取。因此,换句话说,readline()
是带有第一个预定义参数的fgets
的同义词,例如fprintf()
和printf()
。
考虑以下几点:
fprintf(STDOUT, "hello!");
printf("hello!);
这在php标准库中很常见。
【讨论】:
【参考方案2】:readline() 默认从 STDIN 读取输入,而 fgets() 从任何资源读取。另外,readline() 比 fgets() 需要更多的时间来执行
【讨论】:
【参考方案3】:fgets 比 readline 快得多。我不知道为什么,不过我可以给你一些基准测试。
我经常在 codeforces.com 上参与解决问题。在一个问题上,我遇到了时间限制问题(使用 PHP 解决时),我使用的是 readline,解决时间超过 2 秒。将 readline-s 替换为 fgets 后,求解时间为 400 毫秒。
所以 fgets 相当快。
【讨论】:
以上是关于php中readline与fread/fgets之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
Python 之读取大文件readline与readlines的差别
php -v 返回 dyld:库未加载:/usr/local/opt/readline/lib/libreadline.7.dylib