2011-05-27 78 views
2

说我这样写的字节数:PHP:字节的数量FREAD

$data = fread($fp, 4096); 

由于fread将停止阅读,如果它到达文件的末尾,我怎么能知道是究竟读了多少? strlen($data)会工作吗?或者这可能是错误的?


我想要完成的是读取一些字节,然后回到我读之前的位置。我试图避免使用算术(ftell,fread,ftell,),因为一个文件可能会大于PHP_INT_MAX,并且可能导致混乱。我想要的只是做fseek($fp, -$bytes_read, SEEK_CUR),但为此我需要知道我刚才读了多少字节......

+0

@OZ_,由于'strlen'返回一个字符串的长度,我想知道是否像字符编码和东西的东西可以搞砸的事例如。 – Svish 2011-05-27 21:14:03

+0

你有点矛盾,你怎么能不用'fseek'回到一个位置? – RobertPitt 2011-05-27 22:17:21

+0

@RobertPitt,不,不,我当然需要使用'fseek'。问题是如何获得正确的相对数量的字节向后跳转。我不想使用'ftell',就是这样。 – Svish 2011-05-28 07:01:19

回答

3

入住这(未经测试):

mb_strlen($data, '8bit') 

第二个参数'8bit'迫使函数返回的字节数。

发现在评论php manual for mb_strlen

+0

'mb_strlen()'返回读取的字符数,而不是字节数(如指定为'fread()'的第二个参数)。你应该在这里使用'strlen()'。 – KingCrunch 2011-05-27 22:03:08

+2

在8bit中强制mb_strlen将读取字节。虽然strlen最初将读取字节,但它可能已被重载以使用mb_strlen。并且确定发生这种事情并不容易。如果你需要确保你在计算字节数,那么渲染它就没用了。请参阅http://php.net/manual/en/mbstring.overload.php – ontrack 2011-05-27 22:06:40