©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5, PHP 7)
fgetc — 从文件指针中读取字符
$handle
)从文件句柄中获取一个字符。
handle
文件指针必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)。
返回一个包含有一个字符的字符串,该字符从 handle
指向的文件中得到。
碰到 EOF 则返回 FALSE
。
此函数可能返回布尔值
FALSE
,但也可能返回等同于 FALSE
的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用
===
运算符来测试此函数的返回值。
Example #1 一个 fgetc() 例子
<?php
$fp = fopen ( 'somefile.txt' , 'r' );
if (! $fp ) {
echo 'Could not open file somefile.txt' ;
}
while ( false !== ( $char = fgetc ( $fp ))) {
echo " $char \n" ;
}
?>
Note: 此函数可安全用于二进制对象。
[#1] spaceftp at legtux dot org [2013-09-03 21:32:26]
If you want to read a file and the fgets function doesn't work, you can try this function :
<?php
function read_file($file) {
$handle = fopen($file, "rb");
if($handle) {
while(!feof($file)) {
$buffer = fgetc($file);
echo $buffer;
}
}
else {
echo "ERROR : Could not open ".$file." !";
}
}
?>
I've tried this function on 30-40 Ko's files.
[#2] sfinktah at php dot spamtrak dot org [2011-03-22 06:33:12]
To read a single key-press in CLI mode, you can either use ncurses (which will probably require additional modules for PHP) or get nasty with the *nix "/bin/stty" command)
<?php
function stty($options) {
exec($cmd = "/bin/stty $options", $output, $el);
$el AND die("exec($cmd) failed");
return implode(" ", $output);
}
function getchar($echo = false) {
$echo = $echo ? "" : "-echo";
# Get original settings
$stty_settings = preg_replace("#.*; ?#s", "", stty("--all"));
# Set new ones
stty("cbreak $echo");
# Get characters until a PERIOD is typed,
# showing their hexidecimal ordinal values.
printf("> ");
do {
printf("%02x ", ord($c = fgetc(STDIN)));
} while ($c != '.');
# Return settings
stty($stty_settings);
}
getchar();
?>
[#3] alex at alexdemers dot me [2009-05-11 10:30:50]
The best and simplest way to get input from a user in the CLI with only PHP is to use fgetc() function with the STDIN constant:
<?php
echo 'Are you sure you want to quit? (y/n) ';
$input = fgetc(STDIN);
if ($input == 'y')
{
exit(0);
}
?>
[#4] ktraas at gmail dot com (Kevin Traas) [2009-03-23 19:08:47]
I was using command-line PHP to create an interactive script and wanted the user to enter just one character of input - in response a Yes/No question. Had some trouble finding a way to do so using fgets(), fgetc(), various suggestions using readline(), popen(), etc. Came up with the following that works quite nicely:
$ans = strtolower( trim( `bash -c "read -n 1 -t 10 ANS ; echo \\\$ANS"` ) );