即使文件大小不是 0 字节,filesize() 也始终读取 0 字节

2023-12-24

我在下面编写了一些代码,目前我正在测试,因此代码中没有数据库查询。

下面的代码说的是if(filesize($filename) != 0)总是去else即使文件不是 0 字节并且其中有 16 字节数据。我一无所获,它似乎总是认为文件是 0 字节。

我认为显示我的代码更容易(其中可能还有其他错误,但我会一边检查每个错误,一边一一处理它们)。我没有收到任何 PHP 错误或任何错误。

$filename = 'memberlist.txt';
$file_directory = dirname($filename);
$fopen = fopen($filename, 'w+');

// check is file exists and is writable
if(file_exists($filename) && is_writable($file_directory)){

    // clear statcache else filesize could be incorrect
    clearstatcache();

    // for testing, shows 0 bytes even though file is 16 bytes
    // file has inside without quotes:   '1487071595 ; 582'
    echo "The file size is actually ".filesize($filename)." bytes.\n";

    // check if file contains any data, also tried !==
    // always goes to else even though not 0 bytes in size
    if(filesize($filename) != 0){

        // read file into an array
        $fread = file($filename);

        // get current time
        $current_time = time();

        foreach($fread as $read){
            $var   = explode(';', $read);
            $oldtime  = $var[0];
            $member_count = $var[1];
        }
            if($current_time - $oldtime >= 86400){
                // 24 hours or more so we query db and write new member count to file
                echo 'more than 24 hours has passed'; // for testing

            } else {
                // less than 24 hours so don't query db just read member count from file
                echo 'less than 24 hours has passed'; // for testing
            }
    } else { // WE ALWAYS END UP HERE
        // else file is empty so we add data
        $current_time = time().' ; ';
        $member_count = 582; // this value will come from a database
        fwrite($fopen, $current_time.$member_count);
        fclose($fopen);
        //echo "The file is empty so write new data to file. File size is actually ".filesize($filename)." bytes.\n"; 
    }

} else {
    // file either does not exist or cant be written to
    echo 'file does not exist or is not writeable'; // for testing
}

基本上,代码将位于会员列表页面上,该页面当前检索所有会员并计算注册的会员数量。脚本中的要点是,如果时间少于 24 小时,我们从文件中读取member_count,否则如果已经过了 24 小时或更长时间,则我们查询数据库,获取成员计数并将新数字写入文件,这是为了减少对会员列表页面。

更新1:

这段代码:

echo "The file size is actually ".filesize($filename)." bytes.\n";

始终输出以下内容,即使它不是 0 字节。

文件大小实际上是0字节。

也尝试过

var_dump (filesize($filename));

Outputs:

int(0)


您正在使用:

fopen($filename, "w+") 

根据说明书w+ means:

开放阅读和写作;将文件指针放在文件的开头并将文件截断为零长度。如果该文件不存在,请尝试创建它。

所以文件大小为 0 是正确的。

你可能需要r+

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使文件大小不是 0 字节,filesize() 也始终读取 0 字节 的相关文章

随机推荐

  • 如何找到最佳的模糊字符串匹配?

    蟒蛇的新的正则表达式模块 https pypi python org pypi regex支持模糊字符串匹配 大声歌颂 现在 根据文档 The ENHANCEMATCH标志进行模糊匹配尝试以提高拟合度 它找到的下一个匹配项 The BEST
  • 获取用户输入的数字列表

    我尝试使用input Py3 raw input Py2 获取数字列表 但是使用代码 numbers input print len numbers 输入 1 2 3 and 1 2 3给出的结果是7 and 5分别 它似乎将输入解释为字符
  • 在Lua中,我可以轻松地选择第N个结果而不需要自定义函数吗?

    假设我将一个字符串插入到表中 如下所示 table insert tbl mystring 然后mystring通过将所有出现的 a 替换为 b 生成input mystring string gsub input a b 将两者合并为一个
  • 使用 JSON.NET 序列化/反序列化动态属性名称

    我有以下课程 public class MyRequest public string Type get set public string Source get set 我想序列化 反序列化以下值Source来自名为值的 JSON 字段T
  • java使用excel打开csv文件

    我正在为大学做一个项目 并制作了一个创建 csv 文件的程序 我希望有一个按钮 您可以单击该按钮 然后使用 Excel 打开 csv 文件 谢谢 知道系统上安装了 MsOffice 您应该能够使用以下命令从命令行打开文档 excel myD
  • Keycloak.loadUserProfile() 上的 Keycloak 403(禁止)

    我是 Keycloak 的新手 我尝试使用以下代码获取用户信息 keycloakAuth loadUserProfile success function profile debugger console log profile error
  • InvalidOperationException:无法为“角色”创建 DbSet,因为该类型未包含在上下文的模型中

    以下解决方案在 net core 1 1中有效 但从1 1升级到2 0后 我收到以下错误 InvalidOperationException 无法为 Role 创建 DbSet 因为该类型未包含在上下文的模型中 当用户尝试登录时 执行以下语
  • 捕获谷歌应用程序引擎日志输出

    如何在管理控制台之外查看 Google App Engine 日志 我正在开发 所以使用dev appserver py 管理控制台并希望在发出记录时查看日志 我想使用标准 Unix 工具 例如 在控制台中监控日志输出 less grep
  • 查找文件中最后一次出现的字符串

    我需要从 C 中的特定字符串中获取最后一次出现的日志跟踪 例如 lines File ReadLines logPath SkipWhile line gt line Contains param Take 20 该代码可以工作 但它从日志
  • Coffeescript 中的臃肿 JS 想要返回所有内容

    我这里有这个 Coffeescript brew args gt for e in args alert e null brew fo re eo 我希望我不需要在那里放置 null 来让它工作 但可惜的是 它编译成这样 brew func
  • 比较 Pyspark 中的列

    我正在开发一个包含 n 列的 PySpark DataFrame 我有一组 m 列 m 例如 输入 PySpark DataFrame 包含 col 1 1 2 3 col 2 2 1 4 col 3 3 2 5 Ouput col 4 m
  • 如何将 git note 移动到不同的提交?

    我已经错误地记录了错误的提交 有没有一种简单的方法可以将其整体移动到不同的提交 我希望有一种方法可以在语义上将注释重新定位到不同的提交上 但是无论什么是最简单的都会很高兴知道 我怀疑最简单的选择是使用桌面剪贴板复制粘贴文本 可能最简单的方法
  • 等宽窗扇

    我的应用程序有一个带有两个孩子的 SashForm 我希望在调整窗口大小时左孩子保持相同的大小 我想要 Eclipse 对 Package Explorer 和主编辑器做同样的事情 当您调整窗口大小时 只有文本编辑器会更改大小 但是 Pac
  • Django 子查询和带有 OuterRef 的注释

    我在使用 annotate 时遇到问题OuterRef在 Django 1 11 中的子查询 型号示例 class A models Model name models CharField max length 50 class B mod
  • IIS Express 与 VS2010 SP1 不断重建网站

    我正在使用具有多个网站项目的大型解决方案 最近决定从 Cassini 切换到 IIS Express 大约有 10 名左右的开发人员共享相同的解决方案 项目以及 web configs 除了我之外 他们都在愉快地使用 IIS Express
  • Nougat 版本的快捷方式

    当我尝试在 Intent 包中传递可序列化时 我发现了这个致命异常 我认为这与我试图实现的牛轧糖快捷方式有关 这里有一个例外 12 16 16 17 32 972 20461 20461 debug E AndroidRuntime FAT
  • Flutter 蓝牙打印到 Zebra

    我需要在 Zebra zq520 蓝牙热敏打印机上添加打印功能 我设法使用 flutter blue 插件来做到这一点 但我对实现并不满意 我讨厌将字符串分成更小的块以便通过蓝牙 并且等待 我想知道是否有更好的方法 就像我们在过去的 好 j
  • 通过套接字发送对象

    我过去做过的唯一套接字编程是简单的文本流 我想知道通过套接字发送 Java 对象之类的内容的最有效方法是什么 例如 如果我有以下 Employee 类 Dependent 将是一个由家属信息组成的简单类 public class Emplo
  • 如何禁用 esLint 上的缩进检查?

    缩进规则似乎无法禁用 如何 在配置设置中 禁用此规则 谢谢 将规则设置为 off 在你的配置中像这样 rules indent off 您可以阅读更多内容这里的文档 https eslint org docs user guide conf
  • 即使文件大小不是 0 字节,filesize() 也始终读取 0 字节

    我在下面编写了一些代码 目前我正在测试 因此代码中没有数据库查询 下面的代码说的是if filesize filename 0 总是去else即使文件不是 0 字节并且其中有 16 字节数据 我一无所获 它似乎总是认为文件是 0 字节 我认