php中readline与fread/fgets之间的区别

Posted

技术标签:

【中文标题】php中readline与fread/fgets之间的区别【英文标题】:Difference between readline vs fread/fgets in php 【发布时间】:2018-06-02 08:09:55 【问题描述】:

我之前一直在控制台命令中使用readline,但是今天我遇到了freadfgets 函数,我的问题是:使用这两种方法有什么区别:

// 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之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何使用fgets / fread读取PIPE

Python 之读取大文件readline与readlines的差别

BionicApi 学习笔记

php -v 返回 dyld:库未加载:/usr/local/opt/readline/lib/libreadline.7.dylib

PHP的命令行扩展Readline相关函数学习

python文件读取 readlines()方法之坑