Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP';s fread()返回的值小于它的高级值_Php - Fatal编程技术网

PHP';s fread()返回的值小于它的高级值

PHP';s fread()返回的值小于它的高级值,php,Php,使用以下代码(以及Linux机器上的PHP5.4.13,Apache SAPI): 世跆联在这里进行什么?从何时开始,可以从使文件指针前进1024字节的读取中返回长度为821的字符串?这里有多字节的事情吗?文件是以模式'rb'打开的,手册上说strlen()以字节为单位返回长度,所以这不应该是问题所在 是否可以从使文件指针前进1024字节的读取中返回长度为821的字符串?这里有多字节的事情吗 正如您所指出的,strlen计算字节数;但是,某些扩展可能会重载strlen函数来计数字符(例如) 是否

使用以下代码(以及Linux机器上的PHP5.4.13,Apache SAPI):

世跆联在这里进行什么?从何时开始,可以从使文件指针前进1024字节的读取中返回长度为821的字符串?这里有多字节的事情吗?文件是以模式
'rb'
打开的,手册上说
strlen()
以字节为单位返回长度,所以这不应该是问题所在

是否可以从使文件指针前进1024字节的读取中返回长度为821的字符串?这里有多字节的事情吗

正如您所指出的,
strlen
计算字节数;但是,某些扩展可能会重载strlen函数来计数字符(例如)

是否可以从使文件指针前进1024字节的读取中返回长度为821的字符串?这里有多字节的事情吗


正如您所指出的,
strlen
计算字节数;但是,某些扩展可能会使
strlen
函数过载,以计数字符(例如,

删除
@
运算符可能会向您显示有用的错误消息,但输出不会发生任何变化。不过,完全删除错误对您自身的理智来说并不是一个好主意;)删除
@
运算符可能会向您显示有用的错误消息,但输出不会发生任何变化。不过,完全删除错误对您自身的理智来说从来都不是一个好主意;)你完全正确。禁用mbstring.func_重载修复了该问题。我应该自己想一想,我离得太近了。。。我想运行默认设置为func_重载=7的服务器可能不是一个好主意?是的,func_重载很可能会破坏脚本,而且很少是一个好主意。你完全正确。禁用mbstring.func_重载修复了该问题。我应该自己想一想,我离得太近了。。。我想运行默认设置为func_重载=7的服务器可能不是一个好主意?是的,func_重载很可能破坏脚本,而且很少是个好主意
    $intOffset = 0;
    $intInterval = min(filesize(TL_ROOT . '/' . $this->strFile), 1024);
    $strBuffer = '';

    print 'INTERVAL: '.$intInterval.'<br />';
    print 'POS1: '.ftell($this->resFile).'<br />';
    // Read to delimiter
    do
    {
        $intOffset -= $intInterval;

        $fseek = @fseek($this->resFile, $intOffset, SEEK_END);
        print 'POS2: '.ftell($this->resFile).'<br />';
        print 'READING: '.abs($intOffset).'<br />';
        $add = @fread($this->resFile, abs($intOffset));
        print 'ADD LEN: '.strlen($add).'<br />';
        print 'POS3: '.ftell($this->resFile).'<br />';
        print 'OFFSET: '.$intOffset.'<br />';
        print 'BUF LEN (0): '.strlen($strBuffer).'<br />';
        $strBuffer = $add . $strBuffer;
        print 'BUF LEN (1): '.strlen($strBuffer).'<br />';
    }
    while ($fseek != -1 && ($pos = strpos($strBuffer, self::CENTRAL_DIR_END)) === false);

    print 'BUF LEN (2): '.strlen($strBuffer).'<br />';
    print 'POS: '.$pos.'<br />';
INTERVAL: 1024
POS1: 0
POS2: 1078538
READING: 1024
ADD LEN: 821
POS3: 1079562
OFFSET: -1024
BUF LEN (0): 0
BUF LEN (1): 821
BUF LEN (2): 821
POS: 785