【问题标题】:PHP create file with specific name [closed]PHP创建具有特定名称的文件[关闭]
【发布时间】:2025-03-08 12:10:01
【问题描述】:

此创建新文件的代码运行良好:

<?php
$myfile = fopen("LMS-NUMBER.txt", "w") or die("Unable to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
$txt = "Jane Doe\n";
fwrite($myfile, $txt);
fclose($myfile);
?>

我想创建名称如下的文件:LMS-001.txt、LMS-002.txt、LMS-003.txt 等。 或 LMS-1.txt、LMS-2.txt、LMS-3.txt。我更喜欢这种格式:LMS-001

谢谢


我想通过一个表单提交创建更多文件。所以在重新点击提交按钮后,将创建如下文件:

1st click = LMS-1.txt;
2nd click = LMS-2.txt;
3rd click = LMS-3.txt;

【问题讨论】:

  • sprintf() 例如:$name = sprintf("LMS-%03d.txt", $number);
  • fopen('LMS-001.txt', 'w')
  • 你能更具体地说明你想要什么吗?如果您想创建一个名称为LMS-001.txt 的文件,那么应该很容易看到您只需将“newfile.txt”替换为“LMS-001.txt”
  • "但是当我想创建具有以下名称的文件时:LMS-001.txt、LMS-002.txt、LMS-003.txt 等?文件名可以是 LMS-1.txt , LMS-2.txt, LMS-3.txt 也是。” 但是什么时候呢?你的问题似乎在这里消失了。你到底是什么问题?
  • 我需要通过一个表单提交创建更多文件。因此,重复点击提交按钮后,将创建如下文件:LMS-1.txt、LMS-2.txt、LMS-3.txt ... 第一次点击 = LMS-1.txt;第二次点击 = LMS-2.txt;第三次点击 = LMS-3.txt;对不起我的英语

标签: php file filenames fopen


【解决方案1】:

尽管在 cmets 中指出您的问题不清楚,但我想我理解您想要做什么,尽管如前所述,您应该编辑问题以使其更清楚。

如果我是对的,那么您要问的是如何创建数字后缀比前一个文件大一的新文件,以防止覆盖。执行此操作的一种简单方法是 for() 循环,该循环检查核心文件名 + 计数是否已经存在,并继续执行,直到找到一个不存在的。然后,您可以将文件名与文件不存在的循环迭代一起存储,最后写入具有该名称的新文件。举个例子;

<?php
    /* Here you can set the core filename (from your question, "LMS"),
    as well as the number of maximum files. */
    $coreFileName   = "LMS";
    $maxFilesNum    = 100;

    // Will store the filename for fopen()
    $filename = "";

    for($i = 0; $i < $maxFilesNum; $i++)
    {
        // File name structure, taken from question context
        $checkFileName = $coreFileName . "-" . str_pad($i, 3, 0, STR_PAD_LEFT) . ".txt";

        // If the file does not exist, store it in $filename for writing
        if(!file_exists($checkFileName))
        {
            $filename = $checkFileName;
            break;
        }
    }

    $fd = fopen($filename, "w");
    fwrite($fd, "Jane Doe"); // Change string literal to the name to write to file from either input or string literal
    fclose($fd); // Free the file descriptor

我已经对其进行了测试并且它可以工作,因此每次刷新页面时都会创建一个新文件,其数字后缀比之前创建的文件大一。我已经这样做了,因此它最多只能创建 100 个文件,您可以使用顶部附近的 $maxFilesNum 变量来调整它,但是我建议设置一个限制,以便您的文件系统位于本地或远程服务器不会被文件淹没。

编辑:现在包括 001、002 ... 100 的填充

【讨论】:

  • 就是这样!谢谢!可以像这样创建文件名:
  • LMS-001.txt, LMS-002.txt ... LMS-099.txt, LMS-100.txt ?
  • @Tlumic 为此,您可以简单地使用 str_pad() 用前导 0 填充左侧,直到达到数百个,因此作为示例,您可以在 for() 循环中的变量 $i 上使用它:str_pad($i, 3, 0, STR_PAD_LEFT),如果您想查看它的实际效果,我已将其编辑为答案。还请务必通过单击我的答案旁边的绿色检查图像将问题标记为已回答:)
  • 绿色支票将 100% 属于您 ;) 请编辑您的答案,干得好!
  • 超级好,再次感谢!