Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проверка и создание каталога

Сообщения:  [1-10]    [11-20]  [21-24] 

 
 автор: cheops   (13.04.2011 в 00:03)   письмо автору
 
   для: TetRiska   (12.04.2011 в 22:39)
 

Ну в последнем варианте вроде все нормально, наличие $file проверяется при помощи is_file(), наличие $folder проверяется при помощи id_dir(), а $file_name мы создаем.

  Ответить  
 
 автор: TetRiska   (12.04.2011 в 22:39)   письмо автору
 
   для: cheops   (12.04.2011 в 22:05)
 

тогда минус проверка, но и структура же поменяется?
function file_copy($file, $file_name, $folder){
   if(is_file($file)){
     if(!is_dir($folder)){
          mkdir($folder, 0775, true);
      }
      if(copy($file,$folder.$file_name)) return $folder.$file_name;
   }

  Ответить  
 
 автор: cheops   (12.04.2011 в 22:05)   письмо автору
 
   для: TetRiska   (12.04.2011 в 22:03)
 

Собственно это вопрос интерфейса - тут уже поступайте как вам удобнее. Хотя, конечно, так не принято делать, так как можно сделать вызов
file_copy();
и интерпретатор посчитает его правильным, хотя функция ничего сделать полезного не сможет. Я бы убрал вообще все = ''.

  Ответить  
 
 автор: TetRiska   (12.04.2011 в 22:03)   письмо автору
 
   для: cheops   (12.04.2011 в 22:00)
 

тогда так оставлю. ведь не критично эту корректировку вносить?

  Ответить  
 
 автор: cheops   (12.04.2011 в 22:00)   письмо автору
 
   для: TetRiska   (12.04.2011 в 21:58)
 

Тогда придется отменять все значения по умолчанию перед $folder, так как параметры со значениями по умолчанию могут идти только в конце, после обязательных параметров. Иначе невозможно будет однозначно определить какой аргумент к какому параметру относится.

  Ответить  
 
 автор: TetRiska   (12.04.2011 в 21:58)   письмо автору
 
   для: cheops   (12.04.2011 в 20:59)
 

а вот один нюанс
function file_copy($file='', $file_name='', $folder=''){ 

может изменить на
function file_copy($file='', $file_name='', $folder){

т. е. не присваивать сразу $folder пустое значение? т.к. его может и не быть

  Ответить  
 
 автор: TetRiska   (12.04.2011 в 21:32)   письмо автору
 
   для: cheops   (12.04.2011 в 20:59)
 

круто сократилось, спасибо огромное, буду тестировать
интересно про mkdir с 3-мя параметрами, что если указать третий, то он будет создавать на протяжении всего пути папки...не слышал даже

  Ответить  
 
 автор: cheops   (12.04.2011 в 20:59)   письмо автору
 
   для: TetRiska   (12.04.2011 в 20:39)
 

Да, сейчас вроде все верно, только бы я еще вот эту конструкцию
          $arr = explode('/', $folder); 
          $prev = null; 
          for($i=0;$i<count($arr);$i++){ 
              if(!is_dir($prev . $arr[$i] . '/')){ 
                   mkdir($prev . $arr[$i] . '/', 0777);                   
              } 
              $prev .= $arr[$i] . '/'; 
          }
сократил бы до
mkdir($folder, 0777, true);
Третий параметр true позволяет создавать директории на всем протяжении пути, сколько бы их там не хватало. Одна строка встроенной функции всегда проще и надежнее - не будет соблазна потом поправить цикл и внести в него ошибку.

  Ответить  
 
 автор: TetRiska   (12.04.2011 в 20:39)   письмо автору
 
   для: cheops   (12.04.2011 в 20:14)
 

блин эта спешка...ошибся снова, исправил is_file($file)
function file_copy($file='', $file_name='', $folder=''){
   if($file != '' && is_file($file) == true && $file_name != ''){
     if(!is_dir($folder)){
          $arr = explode('/', $folder);
          $prev = null;
          for($i=0;$i<count($arr);$i++){
              if(!is_dir($prev . $arr[$i] . '/')){
                   mkdir($prev . $arr[$i] . '/', 0777);                  
              }
              $prev .= $arr[$i] . '/';
          }
      }
      if(copy($file,$folder.$file_name)) return $folder.$file_name;
   }
}

теперь должно быть верно?

  Ответить  
 
 автор: cheops   (12.04.2011 в 20:14)   письмо автору
 
   для: TetRiska   (12.04.2011 в 20:05)
 

>is_file($folder) == true
Зачем это условие? $folder - это директория, вероятно вы хотели проверить является ли файлом $file?

> if(is_dir($folder))return true;
Тогда у вас функция не дойдет до копирования файла - так как return - это выход из функции, лучше поставить проверку вида
if(!is_dir($folder))
{
  // Создаем не существующую директорию
}

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-24] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования