PHP での新しいファイルの自動番号付けのアイデアと実装

高洛峰
リリース: 2023-03-01 10:02:01
オリジナル
1896 人が閲覧しました

要件: システムに新しいファイルを作成するときに自動番号付けを実装できます。たとえば、新しいテキスト ファイルのデフォルトのファイル名は「New Text Document.txt」です。新しいテキスト ファイルの作成を続けると、ファイル名は自動的に「New Text Document (2).txt」に変更されます。は 3、4、5 になります...このアルゴリズムを PHP でどのように使用しますか?
当初はループを使用してそれを実行したいと考えていましたが、その後考えてカウンターを使用してインクリメントすることにしました。この TME はデータベース、ファイル、または構成ファイルにすることができます。やり方によって異なりますが、ループはメンテナンス中にのみ使用されます。新しいファイルを作成するたびにループする必要がある場合は、非常に疲れます。コードをコピーします。コードは次のとおりです。 :
$dir="/web/csp/images/test/";
if (!file_exists($dir.'cache.txt')){
file_put_contents($dir.'cache.txt' ,1);
file_put_contents($dir.'新しいファイル.txt','');
$num = file_get_contents($dir.'cache.txt') ; = '新しいファイル('.$num.').txt';
file_put_contents($dir.'cache .txt',$num);
file_put_contents($dir.$name,'');

シルバー子供靴の書き換え
コードのコピー コードは次のとおりです:
function createFile($ filename, $content = '')
{
if(file_exists($filename . '.tmp'))
{
$num = (int) file_get_contents($filename . '.tmp') + 1;
$fileinfo = pathinfo($filename);
file_put_contents($fileinfo['filename'] . '(' . $num . ').' .$fileinfo['拡張子'], $content);
file_put_contents($filename . '.tmp ', $num);
else
{
file_put_contents($filename, $content); ($filename . '.tmp', 1);
}
}
createFile('test.txt');

3 番目のタイプのループ
コードは次のとおりです。 ?php

$files = scandir('.'); //このコードは Web ルート ディレクトリに書き込まれます
$num = 0;
$str = '新しいテキスト ドキュメント' ($files as $k=) > $file) {
if (is_file($file) && preg_match('/(.*)((d+)).txt/', $file, $matched)) {
$num = $matched[2] >$num ? $matched[2] : $num;
}
$filename = $num == 0 ? $str . ($num+ 1) . ').txt';
if (fopen($filename, 'w')) {
echo 'ファイルが正常に作成されました :' . $filename;

以下はネチズンからの返信です:
1. 最初のコードについては、
いくつかのファイルを自動的に作成した後、
例: 現在新しく作成されたファイルは
New file.txt
New file (2).txt
New file (3).txt
この時点でこの3つのファイルを削除した場合
新しいファイル(2).txt
新しいファイル(3).txt
この2つを実行してから、Cache.txtのカウントの問題により、実行時に新しいファイルが削除されます。
新しいファイル(4).txt
シーケンスに基づいてインテリジェントに作成されるわけではありません
上記の操作は Windows で実行されます その結果、新しく作成されるファイルの名前は
新しいファイル (2).txt
になります。
2. 2番目の段落について
まず、上記の問題があるはずですが、さらに深刻なのは、作成されたファイルの名前と拡張子の間の区切り文字が欠落していることです...
それは:
test .txt
test(2)txt
test(3)txt
test(4)txt
その理由は、ファイル名を結合するときに拡張子ドットが追加されないためです。
コードをコピー コードは次のとおりです。 $fileinfo['filename'] . '(' . $num . ')' .$fileinfo['extension'], $content) ;


もっと楽しくて短いものを作りましょう
上記のキャッシュ (tmp ファイル) または正規表現 (preg_match) を使用する方法よりも、コードをコピーします。 コードは次のとおりです。
$prefix = '新しいテキスト ドキュメント'
$suffix = '.txt ';
$t = $prefix.$suffix;//新しいテキストドキュメント.txt
$i = 1;
while(file_exists($t)){//新しいテキストドキュメント(d+).txt
$t = $接頭辞.'('.++$i.')'.$suffix;
fopen($t, 'w');

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート