如何将持久计数器重置为特定值?

2024-04-07

我之前问过一个问题(如何防止该计数器重置为 100,000? https://stackoverflow.com/questions/5250118/how-to-keep-this-counter-from-reseting-at-100-000),现在有一个后续问题。

我有另一个版本的计数器,可以被告知在某个数字处重置,我想确保第二个版本没有与第一个版本相同的问题。

我现在编码的是:

$reset = '10';

$filename4 = "$some_variable/$filename3.txt";  

// Open our file in append-or-create mode.
$fh = fopen($filename4, "a+");

if (!$fh)
    die("unable to create file");

if ($reset == 'default'){        
    // Before doing anything else, get an exclusive lock on the file.
    // This will prevent anybody else from reading or writing to it.
    flock($fh, LOCK_EX);

    // Place the pointer at the start of the file.
    fseek($fh, 0);

    // Read one line from the file, then increment the number.
    // There should only ever be one line.
    $current = 1 + intval(trim(fgets($fh)));

    // Now we can reset the pointer again, and truncate the file to zero length.
    fseek($fh, 0);

    ftruncate($fh, 0);

    // Now we can write out our line.
    fwrite($fh, $current . "\n");

    // And we're done.  Closing the file will also release the lock.
    fclose($fh);                
}
else {        
    $current = trim(file_get_contents($filename4)) + 1;

    if($current >= $reset) {            
        $new = '0';            
        fwrite(fopen($filename4, 'w'), $new);                        
    }
    else {            
        fwrite(fopen($filec, 'w'), $current);                        
    }               
}

echo $current;

我不想假设我知道要对此代码进行哪些更改,所以我发布了另一个问题。编辑-如果 $reset 不等于默认值,我应该在此处进行哪些更改以避免无法获得文件的独占锁定?编写此代码的正确方法是什么?这行得通吗?:

$filename4 = "$some_variable/$filename3.txt";  

// Open our file in append-or-create mode.
$fh = fopen($filename4, "a+");

if (!$fh)
die("unable to create file");


// Before doing anything else, get an exclusive lock on the file.
// This will prevent anybody else from reading or writing to it.
flock($fh, LOCK_EX);

// Place the pointer at the start of the file.
fseek($fh, 0);



if ($reset == 'default'){

// Read one line from the file, then increment the number.
// There should only ever be one line.
$current = 1 + intval(trim(fgets($fh)));

} else {
// Read one line from the file, then increment the number.
// There should only ever be one line.
$current = 1 + intval(trim(fgets($fh)));

if($current >= $reset) {            
    $current = '0';            
}
else {            
// Read one line from the file, then increment the number.
// There should only ever be one line.
$current = 1 + intval(trim(fgets($fh)));

} 
}
// Now we can reset the pointer again, and truncate the file to zero length.
fseek($fh, 0);

ftruncate($fh, 0);

// Now we can write out our line.
fwrite($fh, $current . "\n");

// And we're done.  Closing the file will also release the lock.
fclose($fh);                


echo $current;

编辑-这似乎对我有用:

$reset = "default";
$filename4 = "counter.txt";  

// Open our file in append-or-create mode.
$fh = fopen($filename4, "a+");

if (!$fh)
die("unable to create file");


// Before doing anything else, get an exclusive lock on the file.
// This will prevent anybody else from reading or writing to it.
flock($fh, LOCK_EX);

// Place the pointer at the start of the file.
fseek($fh, 0);

// Read one line from the file, then increment the number.
// There should only ever be one line.
$current = 1 + intval(trim(fgets($fh)));

if ($reset == 'default'){
$new = $current;
} else {
if($current >= ($reset + '1')) {            
$new = '1';            
}
else {            
$new = $current;
} 
}
// Now we can reset the pointer again, and truncate the file to zero length.
fseek($fh, 0);

ftruncate($fh, 0);

// Now we can write out our line.
fwrite($fh, $new . "\n");

// And we're done.  Closing the file will also release the lock.
fclose($fh);                


echo $new;

这看起来合适吗?


    if($current >= $reset) {
        // here is where you are setting the counter back to zero. comment out
        // these lines.
        //$new = '0';            
        //fwrite(fopen($filename4, 'w'), $new);                        
    }

如果您只是想要一个不重置的计数器,请尝试:

$filename4 = "counter.txt";  

// Open our file in append-or-create mode.
$fh = fopen($filename4, "a+");

if (!$fh)
die("unable to create file");


// Before doing anything else, get an exclusive lock on the file.
// This will prevent anybody else from reading or writing to it.
flock($fh, LOCK_EX);

// Place the pointer at the start of the file.
fseek($fh, 0);

// Read one line from the file to get current count.
// There should only ever be one line.
$current = intval(trim(fgets($fh)));

// Increment
$new = $current++;

// Now we can reset the pointer again, and truncate the file to zero length.
fseek($fh, 0);

ftruncate($fh, 0);

// Now we can write out our line.
fwrite($fh, $new . "\n");

// And we're done.  Closing the file will also release the lock.
fclose($fh);

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

如何将持久计数器重置为特定值? 的相关文章

  • Mysql获取特定表的最后一个id

    我必须从特定的插入表中获取最后的插入 ID 可以说我有这个代码 INSERT INTO blahblah test1 test 2 VALUES test1 test2 INSERT INTO blahblah2 test1 test 2
  • proc_open() 失败并显示“权限被拒绝”

    我正在尝试使用proc open 执行程序并打印结果 但是 我不断收到 许可被拒绝 的消息 已将脚本和可执行文件的 chmod 设置为 0777 但无济于事 ini get safe mode 是假的 可能出什么问题了 我正在使用 Cent
  • foreach 循环中 current() 的意外行为[重复]

    这个问题在这里已经有答案了 这是一个简单的循环 list array A B C D foreach list as var print current list Output demo http 3v4l org sBDjl BBBB O
  • ASCII“../”是 PHP 中指示目录遍历的唯一字节序列吗?

    我有一个 PHP 应用程序 它使用 GET参数来选择文件系统上的 JS CSS 文件 如果我拒绝输入字符串包含的所有请求 或者可见 7 位 ASCII 范围之外的字节 当路径传递到 PHP 的底层 基于 C 文件函数时 这是否足以防止父目录
  • 在 JQuery ui 自动完成中显示图像

    我有一个带有 JQuery ui 自动完成功能的脚本 可以完美运行 有一个显示用户名字和姓氏的搜索过程 但在我的数据库中 还有用户的图片 我想将其显示在带有名字和姓氏的建议中 数据库中pic包含图片url 剧本 function searc
  • Php 转换 GMT 格式的时间

    我有这个字符串2012 06 27 16 17 06我想将其转换为 GMT 格式 我怎样才能做到这一点 多谢 Use gmdate http php net manual en function gmdate php 使用以下命令将当前日期
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • 纯旧 PHP 对象 (POPO) 一词的确切含义是什么?

    我想了解一下波波 我搜索了 popo 发现它代表 Plain Old Php Object 但我不确定 Plain Old Php Object 的确切含义 我想知道什么是 popo 以及在哪里使用它 谢谢 普通旧 在此处插入语言 对象是一
  • PHP-列出一年中一个月中的所有天[重复]

    这个问题在这里已经有答案了 可能的重复 我在 PHP 中有 2 个日期 如何运行 foreach 循环来遍历所有这些日期 https stackoverflow com questions 3207749 i have 2 dates in
  • 没有得到 popen 的完整回复

    嗨 我正在使用 popen 运行一个进程 handle popen python scriptos py r while feof handle data fgets handle echo gt data 我只从返回 5 行的进程中获取
  • Laravel:使用 Faker 播种多个独特的列

    介绍 怎么样 伙计们 我有一个关于模型工厂和多个独特列的问题 背景 我有一个名为 Image 的模型 该模型将语言支持存储在单独的模型中 图片文字 图片文字 has an image id栏 语言栏和文本栏 图片文字有一个约束MySQL那个
  • 在 laravel 中禁用特定路由的 csrf

    我有一个支付系统 数据被提交到第三方网站然后被拉回 当数据返回时 它会到达特定的 url 比如 ok 路由 REQUEST transaction 但由于 Laravel 中间件 我遇到了令牌不匹配的情况 第三方支付API无法生成token
  • 如何使用 AJAX/jQuery 显示打印内容?

    所以我试图理解整个 AJAX jQuery 的事情 现在 当我单独运行这个 PHP 脚本时 我必须等待并观察轮子旋转 直到循环完成然后加载 while row mysql fetch array res postcode to storm
  • 动态创建和下载Doc文件

    因此 我尝试动态创建 doc 文件并让用户在单击按钮时下载该文件 这些是我找到的用于下载文件的标头 header Content Description File Transfer header Content Type applicati
  • 如何解决 注意:未定义索引:第 21 行 C:\xampp\htdocs\invmgt\manufactured_goods\change.php 中的 id [重复]

    这个问题在这里已经有答案了 我的 PHP 代码有一个问题 显示 注意 未定义的索引 我确信它非常简单 因为我是初学者 所以我不太清楚到底出了什么问题 所以请帮助我 这是代码
  • 将 PayPal 返回 URL 设置为 localhost

    我正在尝试集成 Paypal 并且在此过程中使用沙箱 我按照以下问题中接受的答案的步骤进行操作 设置 PayPal 返回 URL 并使其自动返回 https stackoverflow com questions 7642895 setti
  • PHP MVC 应用程序中哪里可以捕获异常?

    我有一个中小型 PHP 应用程序 用于练习 OOP 和 MVC 技能 我有初始化 引导程序调用的文件Router谁打电话控制器 gt 服务层 gt 存储库 数据库 然后将变量发送回视图层 所有依赖项均由 DiC IOC 处理 我创建抽象类
  • 警告:mysqli_query() 期望参数 1 为 mysqli,在 中给出 null

    我正在尝试构建一个简单的自定义 CMS 但出现错误 警告 mysqli query 期望参数 1 为 MySQLi 在中给出的为 null 为什么我会收到此错误 我的所有代码都已经是 MySQLi 并且我使用两个参数 而不是一个 con m
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • shell_exec 的输出被截断为 100 个字符

    当在 shell 中运行以下命令时 curl F file filename http 192 168 0 1 产生以下输出 Accuracy 0 0 1 classification Accuracy 0 0 1 classificati

随机推荐

  • Ruby 正则表达式中的反斜杠 + 捕获组

    如何转义捕获组之前的反斜杠 Example foo bar gsub 1 我的期望 和想要 foo bar 我不幸得到的是 foo 1bar 如何正确逃离这里 正如其他人所说 您需要将该字符串中的所有内容转义两次 所以在你的情况下 解决方案
  • “所选目录不是 Go Sdk 的有效主目录”

    我正在使用 IntelliJ Idea 和来自以下位置的 google go lang idea plugin https github com mtoader google go lang idea plugin issues 173 h
  • CORS 已启用,但在 POST JSON 时,预检响应的 HTTP 状态代码 404 无效

    我已经彻底搜索过 但在我的特定情况下找不到解决此问题的方法 使用Fiddler POST 的跨域服务调用正确执行并接收数据 但是 通过浏览器 Chrome 我收到消息 预检具有无效的 HTTP 状态代码 404 我有一个 Web API 应
  • 数据在表单发送时损坏,=\r\n 每 75 个字符在数据中引入一次?

    我正在 Google App Engine 上的 Django nonrel 项目上工作 尽管我感觉我的问题与其中任何一个都没有直接关系 我在其中一个模型中有一个隐藏字段 其定义如下 models CharField max length
  • 使用 git 时如何告诉 TeamCity 将合并视为单个提交?

    我们最近从 SVN 迁移到 git 我们使用一个主要的 发布 分支 master 以及开发人员正在开发的每个功能的功能分支 在TeamCity http www jetbrains com teamcity 我们为每个功能分支都有一个项目
  • 求约简分数的个数

    过去两天我一直在研究这个问题 我觉得我已经危险地接近了 但有些事情不太顺利 希望有一双新的眼睛来审视这一点 接受任何建议 任务是找到任何分母的完全约化分数的数量 蛮力在一定程度上有效 但我需要能够找到 10 10 以上的结果 完整的挑战在这
  • 默认情况下为特定用户角色显示特定仪表板

    我想在线配置 Dynamics CRM 2011 以便它默认显示特定用户角色的特定仪表板 是否可以通过某些设置或使用插件或 JavaScript 编写自定义代码来实现 例如 如果首席执行官约翰登录 他应该看到年收入仪表板 如果销售人员登录
  • 使用 SDL2 C++ 时出现应用程序无法正确启动 (0xc000007b) 错误

    好吧 这就是问题所在 最近我对 C 游戏编程感兴趣 并且正在使用 SDL2 库 一切都运行良好 直到我想加载 SDL2 图像库 我遇到的第一个问题是 我的第一个设置是使用 x64 库 但运行代码时出现一些问题 因此我将其更改为 x86 我将
  • Sql Server Clr 项目中的参考类库

    我正在尝试引用一个类库Visual C SQL CLR 数据库项目但我得到了错误 无法添加对 类库 的引用 SQL Server 项目只能引用其他 SQL Server 项目 有没有办法添加引用 这样我就不需要在该类库中复制代码 编辑 解决
  • PHP、jQuery 和 Ajax 面向对象

    我是一位相当有经验的程序员 第一次接触 PHP 和 Ajax 并且在弄清楚如何将面向对象的 PHP 合并到我的 ajax web 应用程序中时遇到了一些麻烦 我有一个管理页面 admin php 它将根据用户在管理页面上选择的表单从 XML
  • Python 继承和 __init__

    我正在学习Python 我发现一些关于Python如何构造子类的事情让我感到困惑 我有一个继承自列表类的类 如下所示 class foo list def init self a bar list init self bar a bar 我
  • ProgressBar/ProgressDialog 的自定义 Drawable

    阅读 Google 提供的有限文档后 我感觉可以通过简单地创建新样式并将其分配给 ProgressBar 的 style 属性来更改 ProgressBar ProgressDialog 的外观 可绘制 但我无法让它正常工作 这是我到目前为
  • eclipse“部署程序集”配置位于哪个文件中?

    我似乎无法在 project 文件中找到此配置 我正在寻找一种以编程方式更改此设置的方法 因为 我不知道为什么 每次清理项目时我的 Eclipse 都会丢失此配置 部署程序集设置存储在文件中 settings org eclipse wst
  • 选择第一级文本元素“.text()”而不选择子元素

    我有以下html
  • Mongo:如何通过存储在子数组中的ObjectId查找?

    我有一个包含这样记录的集合 id ObjectId 50ae3bdb50b3d6f01400027a admins ObjectId 50ae3bdb50b3d6f014000279 ObjectId 50ae3bdb50b3d6f0140
  • ASP.NET 路由 - 从数据库加载路由?

    是否可以使用 ASP NET 从数据库加载路由 For each r as SomeRouteObject in RouteDataTable routes MapRoute r Name r RouteUri r RouteValues
  • Django查询集获取相对于其他列的不同列值

    我正在使用 django orm 并且尝试获取列的所有值 但前提是不同的列相对于它是唯一的 很难解释 所以这里有一个例子 q a 1 w s 2 e a 3 q a 4 w s 5 e a 6 我想获取第 2 列中的所有值 但如果它们在第
  • 如何在 flutter 上创建带有圆角的方形头像?

    我想创建一个类似于 CircleAvatar 的小部件 但不是圆形的 这是圆形头像 这就是我想要创建的头像 我想知道是否有一个默认的小部件可以执行此操作 例如用于圆形头像的 CircleAvatar 有很多方法可以实现它 但我只会使用一种
  • 如何使用 NodeJS 客户端库使用 JWT 访问 Google Directory (Admin SDK)?

    我正在尝试创建一个服务器应用程序 将用户添加 删除到我的域的组中 请注意 它不会与用户进行任何交互 它是服务器到服务器的应用程序 我在 Google API 控制台中注册了我的应用程序 下载了密钥并通过发出将其转换为 pem openssl
  • 如何将持久计数器重置为特定值?

    我之前问过一个问题 如何防止该计数器重置为 100 000 https stackoverflow com questions 5250118 how to keep this counter from reseting at 100 00