Как при создании файла задавать ему имя типа 00001 и записи в файл, чтоб создавалась 00001?

Рейтинг: 0Ответов: 1Опубликовано: 16.01.2015
<? 
        $d = dir ("content/");
        while (false !== ($entry = $d->read()))
        {
            if (preg_match("/[0-9].dat/", $entry)){
                $nums[] = str_replace (".dat", "", $entry);
            }
        }
        if(!isset($nums)){
            $n = 1;
        }
        else
        {
            sort ($nums);
            $n = $nums[count($nums)-1] + 1;
        }

Создается файл с именем 0 1 2 с отсчетом от 0 1 2 и т.д.

Как отсчет делать 0000001 при создании файла и т.д., подскажите, пожалуйста.

<?
        $file = file("news.dat");
        $max = 0;
        foreach( $file as $line)
        {   
            if ( !empty($line) )
            {   
                $elem = explode("<!>",$line);
                if ( $elem[0] > $max) $max = $elem[0];  
            }
        }
        $max++;

// вычисляем номер последней записи в файле 0 1 2 и т.д.

Как делать отсчет в записи 00001 00002, а не 0 1 2?

Ответы

▲ 1

Зачем Вам ведущие нули в названии файла?

Имя файла можно получить

$basename = basename('/path/to/00002.dat'); //result: 00002.dat

Далее можно воспользоваться магией динамической типизации:

var_dump((int)$basename); //result: 2

UPDATE:

Что вас смущает в такой иерархии:

alt text

ну некрасиво, если отсчитывать 1 2 3 и т.д

В программировании нет такого выражения "красиво/некрасиво" - должно быть быстро и надёжно.

Такая форма 00001 записи усложняет функционал. Если в этом нет необходимости, нужно делать проще.

Я Вам писал в комментариях к предыдущему вопросу, как проще сделать. Повторюсь:

Берем класс с итератором pastebin. Далее

$dirUpload = '/path/to/';
$recurcive = false;
$maxFiles = 1000;
$tmpfilename = $_FILES['Filedata']['tmp_name'];
$filename = md5_file($tmpfilename);

$fileManager = new FileManager;
$count = $fileManager->count($dirUpload, $recurcive);

$filename = '/' . floor($count / $maxFiles) . '/' . $filename;

move_uploaded_file($tmpfilename, $filename);

В целях оптимизации, $count можно хранить в key-value strorage (memcached, redis,..) и при добавлении инкрементировать его.

Вот Вам в помощь библиотека, которая всё это умеет (осуществлять поиск файлов и кэширует файловую структуру с учётом изменений), кроме move_uploaded_file. По upload, можете сами попробовать написать с обязательной валидацией, либо вновь обратиться к github.