PHP中readline与fread/fgets的区别

3htmauhk  于 2024-01-05  发布在  PHP
关注(0)|答案(5)|浏览(93)

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

// first
$inputLine = readline();

// second
$inputLine = fgets(STDIN);

字符串
他们俩做的都差不多不是吗

oug3syen

oug3syen1#

readline()默认从STDIN读取输入,而fgets()从任何资源读取。此外,readline()比fgets()执行时间更长

mefy6pfw

mefy6pfw2#

fgets比readline快得多。我不知道为什么,但我可以给予一些基准测试。
我经常在codeforces.com上参与解决问题。有一个问题我有时间限制问题(当用PHP解决时),我使用readline解决问题的时间超过2秒。我用fgets替换readline-s后,解决时间为400毫秒。
所以fgets相当快。

cczfrluj

cczfrluj3#

the readline docs
readline函数实现了一个GNU Readline库的接口。这些函数提供了可编辑的命令行。一个例子是Bash允许你使用箭头键插入字符或滚动命令历史。
readline只接受一个参数,也就是$prompt字符串,它也会为你修剪新行。此外,扩展函数具有像bash这样的命令历史记录,可以让你使用箭头键滚动以前的条目,完成的能力等等。正如其他人在以前的回答中指出的那样,额外的功能确实增加了一点开销,所以可能会更慢。
fgets更基本,它只是从文件指针获取输入。

yyhrrdl8

yyhrrdl84#

我发现的另一个区别是,与readline()不同,fgets()不能读取一些带有 *'é'**或 *'è'**口音的utf-8字符。
这意味着你必须小心使用fgets(),因为如果你不得不使用西班牙语或法语这样的语言,它可能会包含错误。

ohfgkhjo

ohfgkhjo5#

我能想到的唯一可能的区别是readline()没有参数,默认情况下只能从STDIN读取输入,而fgets()可以从任何resource读取。所以,换句话说,readline()fgets的同义词,第一个预定义的参数,比如fprintf()printf()
考虑以下情况:

fprintf(STDOUT, "hello!");
printf("hello!);

字符串
这在php标准库中很常见。

相关问题