在PHP中读取部分文件时的多字节指针
我使用PHP 下面的函数加载一个大的多字节输入分隔CSV文件的一部分,并返回一个在PHP中读取部分文件时的多字节指针,php,string,file,pointers,utf-8,Php,String,File,Pointers,Utf 8,我使用PHP 下面的函数加载一个大的多字节输入分隔CSV文件的一部分,并返回一个指针(结束位置)和数组中的内容。使用指针我可以稍后再运行一次。它的工作原理是: function part($path, $offset, $rows) { $buffer = array(); $buffer['content'] = ''; $buffer['pointer'] = array(); $handle = fopen($path, "r"); fseek($h
指针(结束位置)和数组中的内容。使用指针
我可以稍后再运行一次。它的工作原理是:
function part($path, $offset, $rows) {
$buffer = array();
$buffer['content'] = '';
$buffer['pointer'] = array();
$handle = fopen($path, "r");
fseek($handle, $offset);
if( $handle ) {
for( $i = 0; $i < $rows; $i++ ) {
$buffer['content'] .= fgets($handle);
$buffer['pointer'] = mb_strlen($buffer['content']);
}
}
fclose($handle);
return($buffer);
}
// Buffer first part
$buffer = part($path_to_file, 0, 100);
// Buffer second part
$buffer = part($path_to_file, $buffer['pointer'], 100);
print_r($buffer);
…它不再工作了。。。我知道当我使用UTF-8而不是默认值时,它使用了不同的编码,但是为什么它不能使用UTF-8呢
UTF-8不应该与外来字符兼容吗?
因为上面的函数在我不使用“UTF-8”的情况下可以工作,所以我想我可以不使用UTF-8
我仍然担心在某些情况下它会给出错误的指针?
是否有更安全的方法获取正确的指针?
编码测试
当我这样做时,我得到了UTF-8
:
echo mb_detect_encoding($buffer['content']);
这与UTF-8没有什么关系。文件系统功能(如fseek()
,fread()
等)对单个字节进行操作。他们根本不关心编码。(您可能正在写入/读取二进制数据)
如果要在以后存储指向fseek()
to的指针,请使用查找当前位置:
$buffer['pointer'] = ftell($handle);
这与UTF-8没有什么关系。文件系统功能(如fseek()
,fread()
等)对单个字节进行操作。他们根本不关心编码。(您可能正在写入/读取二进制数据)
如果要在以后存储指向fseek()
to的指针,请使用查找当前位置:
$buffer['pointer'] = ftell($handle);
我尝试了ftell
,但没有成功。我又一次用错了指针。到目前为止,唯一有效的方法是$this->pointer+=mb_strlen($this->content)但是我很难接受我不理解的事情。ShiraiNai7是正确的。如果您在使用ftell()时遇到问题,那么您的代码是错误的。在累积的数据上反复使用strlen来测量其大小是可怕的。@symcbean是的,我现在同意你的看法。好像我做错了什么。我重写了它,它确实有效。谢谢我尝试了ftell
,但没有成功。我又一次用错了指针。到目前为止,唯一有效的方法是$this->pointer+=mb_strlen($this->content)但是我很难接受我不理解的事情。ShiraiNai7是正确的。如果您在使用ftell()时遇到问题,那么您的代码是错误的。在累积的数据上反复使用strlen来测量其大小是可怕的。@symcbean是的,我现在同意你的看法。好像我做错了什么。我重写了它,它确实有效。谢谢