|
|
|
|
function file_copy($file='', $file_name='', $folder=''){
if($file != '' && $file_name != '' && $folder != ''){
if(file_exists($folder) == false){
if(is_dir($folder) == true){
mkdir($folder, 0777);
chmod ($folder, 0777);
}else{
exit();
}
}
copy($file,$folder.$file_name);
return $folder.$file_name;
}
}
|
file_copy($image, 'list_'.$fname[3],$_SERVER['DOCUMENT_ROOT'].'/files/companies/actions4/');
|
actions4 не существует, по идее должно создать 1 раз и все, но не создается, думаю из-за ф-ции is_dir. Почему? | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 02:03)
| | is_dir и is_file вернут true, только в том случае если директория и файл существуют - это условие нужно убрать.
PS Кстати, $folder у вас имеет довольно сложную структуру - лучше на всякий случай добавить третий параметр true функции mkdir(), так как по умолчанию она создает только одну директорию - все остальные до этого должны существовать. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 07:33)
| | Что скажете в этот раз? Все ли учел и верно ли проверки поставил?
function file_copy($file='', $file_name='', $folder='', $resizer=false, $width=null, $height=null, $quality=null){
if($file != '' && $file_name != '' && $folder != ''){
//если в пути указан не файл - заканчиваем работу
if(!is_file($file)){
exit();
}
//если нету каталога, который указан в пути - создаем
if(!file_exists($folder)){
//создаем каталог, по умолчанию с правами 0777
mkdir($folder);
//проверяем каталог ли это, если нет - заканчиваем работу
if(!is_dir($folder)){
exit();
}
}
//если при попытке копирования возникла ошибка - заканчиваем работу
if(!copy($file,$folder.$file_name)){
exit();
}
if($resizer == true){
create_thumbnail($image, $file, $width, $height, $quality);
}
return $folder.$file_name;
}
}
|
| |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 13:49)
| | Вроде все верно, а у вас копирование нормально происходит? | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 14:07)
| | немного переписал, ибо много лишнего
function file_copy($file='', $file_name='', $folder=''){
if($file != '' && is_file($fullpath) == true && $file_name != '' && $folder != ''){
if(is_dir($folder))return true;
$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;
}
}
|
- проверка всех переменных на заполнение
- проверка существования файла, что копируем
- проверка директории куда копируем на существование, если есть, просто идем дальше, если нету - проверяем всю цепочку пути и создаем недостающее
- проверка ф-ции копирования на результат, если скопировало - возвращаем путь к новому файлу
Все ли верно? | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 19:20)
| | >is_file($fullpath)
Не понятно откуда это? У вас же переменная $fullpath в функции вообще не определена. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 19:24)
| | ой ошибся не fullpath, а folder | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 19:32)
| | Хм... так folder это вроде директория? Тогда может лучше is_dir(), а не is_file()? | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 19:20)
| | >$folder != ''
А нужно ли это условие? Получается нельзя создать копию файла в той же директории. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 19:26)
| | >$folder != ''
этим же я проверяю прописан ли путь к директории куда копируем и причем тут
>А нужно ли это условие? Получается нельзя создать копию файла в той же директории. | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 19:35)
| | Хорошо, пусть будет, в крайнем случае, если нужно будет создать копию файла в этой же директории, можно будет использовать ссылку на текущую директорию ./ | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 19:37)
| | имена копируемого и нового файлов всегда разные, даже если пишем в ту же директорию, то перезаписи не произойдет...вроде я правильно понял, чего Вы опасались.....
а так по этапам проверок существования файла, папки, создание папки по условию, проверка ф-ции копирования...все верно? | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 19:40)
| | Имена понятно... но что вы будете подставлять вместо $folder, если запись идет в ту же директорию? Как бы логично, что если запись идет в ту же самую директорию, то этот параметр можно оставить пустым, т.е. написать
Тем более, вы спроектировали функцию так, что её синтаксис это позволяет. Однако, в результате файл не будет скопирован, так как условие $folder != '' не позволит выполниться ничему. Лучше если бы это условие, просто не позволяло создавать директорию, но позволяло копирование файлов. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 19:51)
| | тогда так?
function file_copy($file='', $file_name='', $folder=''){
if($file != '' && is_file($folder) == true && $file_name != ''){
if(is_dir($folder))return true;
$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;
}
}
|
на этапе
if(is_dir($folder))return true;
|
проверяется наличие директории, если есть, то создание игнорируется
если в ту же директорию копируем, то
file_copy('/files/test.jpg', 'test2.jpg');//скопирует в эту же директорию и назовет файл test2.jpg
|
а если в другую
file_copy('/files/test.jpg', 'test2.jpg','/files/new/');//скопирует в другую директорию и назовет файл test2.jpg
|
теперь верно? | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 20:05)
| | >is_file($folder) == true
Зачем это условие? $folder - это директория, вероятно вы хотели проверить является ли файлом $file?
> if(is_dir($folder))return true;
Тогда у вас функция не дойдет до копирования файла - так как return - это выход из функции, лучше поставить проверку вида
if(!is_dir($folder))
{
// Создаем не существующую директорию
}
|
| |
|
|
|
|
|
|
|
для: 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;
}
}
|
теперь должно быть верно? | |
|
|
|
|
|
|
|
для: 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 позволяет создавать директории на всем протяжении пути, сколько бы их там не хватало. Одна строка встроенной функции всегда проще и надежнее - не будет соблазна потом поправить цикл и внести в него ошибку. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 20:59)
| | круто сократилось, спасибо огромное, буду тестировать
интересно про mkdir с 3-мя параметрами, что если указать третий, то он будет создавать на протяжении всего пути папки...не слышал даже | |
|
|
|
|
|
|
|
для: 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:58)
| | Тогда придется отменять все значения по умолчанию перед $folder, так как параметры со значениями по умолчанию могут идти только в конце, после обязательных параметров. Иначе невозможно будет однозначно определить какой аргумент к какому параметру относится. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 22:00)
| | тогда так оставлю. ведь не критично эту корректировку вносить? | |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 22:03)
| | Собственно это вопрос интерфейса - тут уже поступайте как вам удобнее. Хотя, конечно, так не принято делать, так как можно сделать вызов
и интерпретатор посчитает его правильным, хотя функция ничего сделать полезного не сможет. Я бы убрал вообще все = ''. | |
|
|
|
|
|
|
|
для: 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;
}
}
|
| |
|
|
|
|
|
|
|
для: TetRiska
(12.04.2011 в 22:39)
| | Ну в последнем варианте вроде все нормально, наличие $file проверяется при помощи is_file(), наличие $folder проверяется при помощи id_dir(), а $file_name мы создаем. | |
|
|
|