Zamzy
@Zamzy
Человек

Как правильно создавать папки?

Ребят, какой пример кода лучше всего?
function picture_dir_create( $dir , $id ) {

        $f_level = ceil( $id / 1000000 );
        $s_level = ceil( ( $id - (($f_level-1)*1000000) ) / 1000 );

        $levelF_dir = $dir . $f_level . '/';
        $levelS_dir = $levelF_dir . $s_level . '/';
        $levelE_dir = $levelS_dir . $id . '/';

        // От так?
        
        if( ! file_exists($levelF_dir) ) mkdir($levelF_dir, 0777);
        if( ! file_exists($levelS_dir) ) mkdir($levelS_dir, 0777);
        if( ! file_exists($levelE_dir) ) mkdir($levelE_dir, 0777);
        
        // Или можно и так? 

        @mkdir($levelF_dir, 0777);
        @mkdir($levelS_dir, 0777);
        @mkdir($levelE_dir, 0777);

    }


Заранее спасибо!
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 3
muhammad_97
@muhammad_97
PHP-разработчик
Первое. Второй вариант - говнокод

UPD: php.net/manual/ru/function.mkdir.php

Можно передать третий аргумент true и сделать только одну проверку.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Тогда уж так правильнее:
if( ! (file_exists($levelF_dir) || file_exists($levelS_dir) || file_exists($levelE_dir))) {
   mkdir($levelF_dir, 0777);
   mkdir($levelS_dir, 0777);
   mkdir($levelE_dir, 0777);
} else {
  /* АХТУНГ! ОДНА ИЗ ПАПОК УЖЕ БЫЛА СОЗДАНА! */
}
Ответ написан
miraage
@miraage
Старый прогер

Emits an E_WARNING level error if the directory already exists.
Emits an E_WARNING level error if the relevant permissions prevent creating the directory.


Обновил ответ. Спасибо месье DevMan

/**
 * Create a directory
 *
 * @param string $path Directory path
 * @param int $mode Permissions
 * @return bool TRUE if directory created or exists, FALSE on failure
 */
function makedir($path, $mode)
{
  if (is_dir($path)) {
    return true;
  }

  if (is_writable($path)) {
    return mkdir($path, $mode, true);
  }

  return false;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы