我正在用PHP创建发票,并且要为发票号生成一个序列号。
我现在使用gettimeofday()来生成发票编号,但这给了我一个非顺序编号,看起来像这样:46023913
Iterable
答案 0 :(得分:1)
创建一个带有数字的文本文件'counter.txt'(1509000000) 使用file_get_contents(counter.txt)读取文件,然后更新文件
我已经有一段时间没有在php中工作了,但是类似
按照KIKO:锁定文件
<?php
$num = file_get_contents('counter.txt');
echo $num;
$handle = fopen('counter.txt','w+');
if (flock($handle,LOCK_EX)){
$num++;
fwrite($handle,$num);
fclose($handle);
// release lock
flock($handle,LOCK_UN);
} else {
echo "Error locking file!";
}
$num = file_get_contents('counter.txt');
echo $num;
类似的东西。
答案 1 :(得分:1)
Richardwhitney现在包括了文件锁,但是做得并不好。如果已经存在锁,则他的代码将产生错误。那不切实际。下面的代码将等待长达10秒钟的时间来解锁文件。
first First name
last Last name
Fullname
锁定文件时,请始终尝试在尽可能短的时间内执行此操作。
最好将此代码与其余代码隔离开来,例如在一个函数中。
// open the file
$handle = fopen("counter.txt","r+");
if ($handle) {
// place an exclusive lock on the file, wait for a maximum of 10 seconds
$tenths = 0;
while (!flock($handle, LOCK_EX)) {
$tenths++;
if ($tenths == 100) die('Could not get a file lock.');
usleep(100000);
}
// get old invoice number
$oldInvoiceNo = fgets($handle);
// create a new sequential invoice number
$newInvoiceNo = $oldInvoiceNo++;
// write the new invoice number to the file
ftruncate($handle, 0);
fwrite($handle, $newInvoiceNo);
// unlock the file
flock($handle, LOCK_UN);
// close the file
fclose($handle);
}
else die('Could not open file for reading and writing.');