Собственно, имеются 2 вопроса по теории: 1) После загрузки файлика на сервер, файл веб-сервером переименовывается в <tmp_name>.tmp Собственно вопрос по tmp_name. Это имя уникально в пределах сервера? Дело в том, что есть желание оставлять это имя как есть, подсовывая только расширение. 2)На разных ресурсах советуют использовать copy(), а не move_uploaded_file() во время загрузки файла. Т.к. я только в начале пути написания нового приложения, хотелось бы сразу прояснить ситуацию. Спасибо.
у меня в основном проекты где нужно грузить картинки.. поэтому я делаю все на JS)) 1. Чел выбрал картинку - она загрузилась в див и сразу показало на экране то что человек грузит.. т.е. Картинка уже на странице в data:URL 2. Потом он нажал кнопку - аяксом отправили POST запрос на сервер - и там картинку уже сохранили.. Уникальные имена создаю на лету.. плюс создаю иерархию каталогов /ГГГГ/ММ/ДД что бы в одной директории не было 100500 изображений..
Да-да, FileReader + FormData + $.ajax()... Также и у меня. Вопрос в уникальности имен. Уникальность обеспечивает php сам? Именем *.tmp?
@Зингер не надо смотреть на разные ресурсы есть мануал в котором написано как. И как там написано так и делайте! Не ошибётесь. --- Добавлено --- Там даже примеры есть как это сделать.
когда то давно сделал)) теперь тягаю из проекта в проект)) PHP: /** * Сегоднящний текущий путь * @global $boarddir * @return boolean|string */ public function getTodayPath() { global $boarddir; $abs_path_for_save = $boarddir . '/' . 'ADSImages'; //назначили путь ГОД $year = '/' . ( (string) date('Y') ); //назначили путь ГОД/МЕСЯЦ $mount = '/' . ( (string) date('m') ); //назначили путь ГОД/МЕСЯЦ/ДЕНЬ $day = '/' . ( (string) date('d') ); //назначили путь ГОД $full_path_year = $abs_path_for_save . $year; //назначили путь ГОД/МЕСЯЦ $full_path_mount = $full_path_year . $mount; //назначили путь ГОД/МЕСЯЦ/ДЕНЬ $full_path_day = $full_path_mount . $day; //проверили есть ли путь if (!is_dir($full_path_day)) { //если нет то создали if (!is_dir($full_path_year)) { if (!mkdir($full_path_year, 0755)) { return FALSE; } } if (!is_dir($full_path_mount)) { if (!mkdir($full_path_mount, 0755)) { return FALSE; } } if (!is_dir($full_path_day)) { if (!mkdir($full_path_day, 0755)) { return FALSE; } } } $path_day = $year . $mount . $day; //Если все удачно то вернули полный путь return $path_day; } /** * Сгенерировать имя файла * @global $boarddir * @param string $path_file * @param type $type * @return string */ public function newName($path_file, $type = 'jpg') { global $boarddir; $path_file = $boarddir . $path_file; $cut_sym = 5; $filename = '' . mb_substr(md5(microtime()), 0, $cut_sym) . '.' . $type . ''; //создали уникальное имя //проверили на совпадение while (is_file('' . $path_file . '/' . $filename . '')) { //создали уникальное имя $filename = '' . mb_substr(md5(microtime()), 0, $cut_sym) . '.' . $type . ''; } //вернули уникальное имя return $filename; }
в одном проекте делал вот как еще.. файлам генерю случайные имена... а в базу пишу оригинальные имена.. а потом файлы отдают не напрямую а через скрипт.. и получается что отдачу файла можно контролировать правами доступа - и в тоже время сохраняются оригинальные имена файлов)