【问题标题】:PHP File name numberingPHP 文件名编号
【发布时间】:2015-10-08 10:16:38
【问题描述】:

我认为这个问题会很愚蠢,但我找不到答案,另外我是PHP的新手。

问题是我正在使用 PHPWord,我试图跳过 MySQL,只使用 PHP 和 PHPWord 来执行 delivery[ID].docx 文件,其中包含 ID,即添加+1 每个文件都是创建的,例如;

  • delivery11.docx
  • delivery12.docx
  • delivery13.docx

我当前的代码加载/保存如下所示:

require_once 'PHPWord.php';
$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate('./dfiles/delivery_template.docx');

     $nm = $_POST['NAME_' . 1];
     $qt = $_POST['QUANTITY_' . 1];
     $iid = $_POST['ID_' . 1];
     $t = 1000;
     $wg = $qt * $t;
     $document->setValue('pn1', $nm);
     $document->setValue('kg1', $wg);

$numid = 1;
$document->save('Delivery G'.$numid++.'-'.date(m).'-'.date(Y).'.docx', './dfiles/');

而且我知道 $numid 会将值设置为 1,此时代码将再次触发此功能,所以请帮忙,如果没有 MySQL,我该如何做到这一点?

附加信息:此代码将由HTML提交函数触发。

【问题讨论】:

  • 您可以使用file_exists 来检查文件是否在那里准备就绪(即名称已被占用),然后使用循环和 if 逻辑继续添加 +1,直到您获得一个免费的名称.
  • 有效。感谢您的回答。

标签: php numbers phpword


【解决方案1】:

PHP 变量仅在 PHP 运行期间持续存在 - 即生成对请求的响应所需的时间。如果要引用在先前执行中创建或修改的值,则需要将其存储在某处。你可以只使用一个文件:

function getNextNumber() 
{
   $number=file_get_contents("/tmp/counter");
   file_put_contents("/tmp/counter", ++$number);
   return $number;
}

在容量非常小的服务器上,这在大多数情况下应该没问题。 但它无法扩展!你迟早会遇到竞争。

这就是我们使用数据库的原因

不一定是 MySQL(您没有提供任何不能使用 MySQL 的原因,这可能会有所帮助)还有很多其他数据库可以适用(包括不需要的 SQLite正在运行的数据库服务器)。

【讨论】:

  • 不想使用 MySQL 因为我不熟悉它,所以我正在寻找临时选项。我认为它可以工作大约一个月而没有任何问题。感谢您的回答。
【解决方案2】:

你可以用不同的方式做:

  1. 生成一些随机数并附加到文件中,如果文件存在则重新生成随机数并附加到文件中,一直执行此过程直到找不到重复文件。

  2. 您可以添加日期和时间,使其具有唯一性和可读性。(例如:Delivery G 10-8-2015[15.12.99].doc)

  3. 生成哈希码并追加。

【讨论】:

  • 是的,尝试了第一个选项,它有效。第二个,对我来说不是一种方式,因为无论如何我需要知道每月有多少交付。感谢您的回答。
  • 在第二种方法 Delivery G 10-8-2015[HH.MM.SS.miliSec].doc)。这将是简单且易于创建的。我猜我比任何其他方法都快
猜你喜欢
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多