php - 根据文件夹中已存在的名称创建文件

标签 php

我想在现有文件的文件夹中创建一个新文件,这些文件的名称按数字顺序排列,例如。 1, 2, 3, 4...

我想检查最后一个 nr 是什么,然后用一个 nr 覆盖那个创建一个文件。

我知道我应该使用 file_exists 但我不知道如何使用它,也许在 for 循环中?但是如何呢?

如果有人能给我提示就太好了

最佳答案

我认为这是您最好的选择(请参阅 revisions 了解以前的版本):

$files    = glob('/path/to/dir/*');      // get all files in folder
natsort($files);                         // sort
$lastFile = pathinfo(array_pop($files)); // split $lastFile into parts
$newFile  = $lastFile['filename'] +1;    // increase filename by 1

if(file_exists("/path/to/dir/$newFile")) { // do not write file if it exists
    die("$newFile aready exists");
}
file_put_contents("/path/to/dir/$newFile", 'stuff');  // write new file    

只要您文件夹中的文件名以数字开头,这应该始终写入最高编号的文件名加一,例如

1,5,10                  => writes file 11
1.txt, 5.gif, 10.jpg    => writes file 11
1, 5.txt, 10_apple.txt  => writes file 11

如果有一个不是以数字开头的文件,上述方法将不起作用,因为数字在字符之前排序,因此不会为例如写入任何内容

1,5,10,foo => foo+1 equals 1, already exists, nothing written

您可以通过将 glob 的模式更改为 /path/[0-9]* 来解决此问题,这将只匹配以数字开头的文件。那应该非常可靠。

注意 natsort 在不同的操作系统上表现不同。以上在我的 Windows 机器上运行良好,但您需要检查生成的排序顺序以使其适用于您的特定机器。

有关如何使用 glob() 的更多信息,请参阅手册, natsort()pathinfo() ;

关于php - 根据文件夹中已存在的名称创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077147/

相关文章:

php - 是否可以有一个离线数据库

javascript - 使用 AJAX 将表单输入发送到 PHP

php - 在不使用 value 属性的情况下在输入字段上显示 var

php - 如果 url 与 iframe 标签中设置的不同,则拒绝访问

php - Woocommerce 通过 ajax 更新结帐时的运输方式

php - mysql_fetch_row 循环不返回第一组结果

php - 简化 PHP 中的长 IF 语句

PHP Twig 日期(H :i:s) from seconds

php - PHP 中的平方根

php - 选择未被阻止的用户 - SQL