file — PHP Создать новую папку динамически после тысячи изображений в папке

Я хочу создать новую папку для изображений динамически, когда в один каталог помещается 1000 изображений. Используя PHP, MySQL, что является наилучшей практикой для достижения такого рода вещей? 🙂 Спасибо

0

Решение

Чтобы подсчитать количество файлов в папке, я отсылаю вас к этому ответ.

Вы бы тогда использовали MkDir () функция для создания нового каталога.

Так что у вас будет что-то вроде:

$directory = 'images';
$files = glob($directory . '*.jpg');

if ( $files !== false )
{
$filecount = count( $files );
if ($filecount >= 1000)
{
mkdir('images_2');
}
}
0

Другие решения

Из этого примера Посчитайте, сколько файлов в каталоге php

Добавьте оператор if, который создаст папку, когда количество файлов достигнет определенного числа

<?php
$dir = opendir('uploads/'); # This is the directory it will count from
$i = 0; # Integer starts at 0 before counting

# While false is not equal to the filedirectory
while (false !== ($file = readdir($dir))) {
if (!in_array($file, array('.', '..') and !is_dir($file)) $i++;
if($i == 1000) mkdir('another_folder');
}

echo "There were $i files"; # Prints out how many were in the directory

?>

0

define("IMAGE_ROOT","/images");

function getLastFolderID(){

$directory = array_diff( scandir( IMAGE_ROOT ), array(".", "..") );

//if there is empty root, return zero. Else, return last folder name;
$id = empty($directory) ? 0 : intval( end($directory) );

return $id;
}

$last_dir = getLastFolderID();

$target_path = IMAGE_ROOT . DIRECTORY_SEPARATOR . $last_dir;

$file_count = count( array_diff( scandir( $target_path ), array(".", "..") ) ); // exclude "." and ".."
//large than 1000 or there is no folder
if( $file_count > 1000 || $last_dir == 0){

$new_name = getLastFolderID() + 1;
$new_dir = IMAGE_ROOT . DIRECTORY_SEPARATOR . $new_name;

if( !is_dir($new_dir) )
mkdir( $new_dir );

}

Я использую этот код на своем сайте, БЮР

0

Так что я решил свою проблему следующим образом.

Я использую Laravel для моей разработки PHP.

Первым делом я получаю папку с последними изображениями, а затем проверяю, есть ли более 1000 изображений.

если так, я создаю новую папку с текущим временем даты.

код выглядит так.

// get last image
$last_image = DB::table('funs')->select('file')
->where('file', 'LIKE', 'image%')
->orderBy('created_at', 'desc')->first();

// get last image directory
$last_image_path = explode('/', $last_image->file);

// last directory
$last_directory = $last_image_path[1];

$fi = new FilesystemIterator(public_path('image/'.$last_directory),  FilesystemIterator::SKIP_DOTS);

if(iterator_count($fi) > 1000){
mkdir(public_path('image/fun-'.date('Y-m-d')), 0777, true);
$last_directory = 'fun-'.date('Y-m-d');
}
0

Вы можете попробовать что-то вроде этого

$dir = "my_img_folder/";

if(is_dir($dir)) {
$images = glob("$dir{*.gif,*.jpg,*.JPG,*.png}", GLOB_BRACE); //you can add .gif or other extension as well

if(count($images) == 1000){
mkdir("/path/to/my/dir", 0777); //make the permission as per your requirement
}
}
0
По вопросам рекламы [email protected]