文件协程fseek ftell 文件大于2G bug
启用文件协程后对于大于2G的文件fseek 和ftell 会造成错误
<?php
Swoole\Runtime::enableCoroutine();
Co\run(function () {
$fp=fopen("/tmp/555","r+");
fseek($fp,2147724448,SEEK_SET);
echo ftell($fp);
});
输出结果:
-2147242848
修改 plain_wrapper.c 389行
if (data->fd >= 0)
{
zend_off_t result;
//result = lseek(data->fd, offset, whence); 此行 lseek修改为lseek64 重新编译
result = lseek64(data->fd, offset, whence);
if (result == (zend_off_t) -1)
return -1;
*newoffset = result;
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
实际上,以 32位无符号整数来看,
-2147242848
与2147724448
相等。建议补丁至git
底层已修复此问题,与
lseek
和lseek64
无关的。https://github.com/swoole/swo...