【问题标题】:add a string and a number in a sum在总和中添加一个字符串和一个数字
【发布时间】:2017-12-17 08:55:50
【问题描述】:

我希望能够在每个页面重新加载时 +1 到 $i。 我遇到了一个非常简单的问题,我正在努力寻找在线解决方案。

这是我的代码:

$backupNumber = fopen("$v", "r+") or die("Unable to open file!");
$i = fread($backupNumber,filesize("invoices/invoice1/backupN.txt"));

$i = intval($i);
$i = $i + 1;
echo $i;
fwrite($backupNumber,$i);
$a = "invoices/" . $invoiceN . "/backup" . $i;
fclose($backupNumber);

在 txt 文件中只是数字“1”开始。

当我回显 $i 它输出时重新加载页面时会出现问题:
2 然后 13 然后 1214 然后 12131215 然后 2147483648 等等。
我想要它简单的输出
2 然后 3 然后 4 等等

【问题讨论】:

    标签: php file


    【解决方案1】:

    您附加了文本文件,这就是发生这种情况的原因。

    我的建议是使用file_get_contentsfile_put_contents

    $i = file_get_contents("invoices/invoice1/backupN.txt");
    $i++;
    Echo $i;
    file_put_contents("invoices/invoice1/backupN.txt" $i);
    

    文件获取和放置内容总是读取整个文本文件。
    我认为您不需要对字符串进行 intcast,没有它它应该可以工作。

    代码也可以是单行代码。它凌乱但紧凑。

    file_put_contents("invoices/invoice1/backupN.txt", file_get_contents("invoices/invoice1/backupN.txt")+1);
    

    【讨论】:

      【解决方案2】:

      从文件中读取数字后,句柄位于其末尾,因此当您的数学正确时,您将新数字附加到文件而不是覆盖它。

      处理此问题的一种方法是在写入之前重置句柄使用fseek

      fseek($backupNumber, 0);
      fwrite($backupNumber, $i);
      

      【讨论】:

        【解决方案3】:

        您正在附加文件,这就是发生这种情况的原因。不要使用 r+ 模式,只需使用 w+ 模式。 r+ 模式只打开一个文件并允许您读取和写入但不要覆盖内容。 在 w+ 模式下,总是会创建一个新的空文件。

        做类似的事情

        $backupNumber = fopen("$v", "r+") or die("Unable to open file!");
        $i = fread($backupNumber,filesize("invoices/invoice1/backupN.txt"));
        fclose($backupNumber);
        
        $backupNumber = fopen("$v", "w+") or die("Unable to open file!");
         $i = intval($i);
         $i = $i + 1;
        echo $i;
        fwrite($backupNumber,$i);
        $a = "invoices/" . $invoiceN . "/backup" . $i; fclose($backupNumber);
        

        否则,您也可以 fseek() 指向文件中的第 0 个位置并覆盖文件中的内容。

        【讨论】:

          【解决方案4】:

          也许是主题的另一种变体......

          function updatecount(){
              $file='invoices/invoice1/backupN.txt';
              if( !realpath( $file ) )$i=0;
              $i=intval( trim( file_get_contents( $file ) ) ) + 1;
              file_put_contents( $file, $i );
              return $i;
          }
          
          $count=updatecount();
          echo strval( $count );
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-27
            • 1970-01-01
            • 2013-02-05
            • 1970-01-01
            • 2023-02-01
            • 2021-09-06
            • 2013-08-07
            • 2013-10-27
            相关资源
            最近更新 更多