#php
Здравствуйте. Как можно сделать загрузку изображений со страницы сайта на сервер в определённую папку, и чтобы название файла заносилось в базу данных?
Ответы
-- Обработчик для формы $etc = $_POST['etc']; // Конечно нужно фильтровать пришедшие данные if(isset($_FILES['imgfile']) && !empty($_FILES['imgfile']['name'])){ $result = upload_file($_FILES['imgfile']); $img = 'null'; // В таблице поле должно иметь значение по умолчанию null if(isset($result['error'])){ $error = $result['error']; }else{ $img = '"'.$result['filename'].'"'; } } if(!isset($error)){ $execute = mysql_query('INSERT INTO fotos ("Image","etc") Values ('.$img.',"'.$etc.'")'); if(!$execute) echo 'Ошибка обращения к базе'; }else{ echo $error; }Ответ 1
Отложим в сторону всякие проверки, их вы сделаете сами и какие хотите (и файл ли это, и доступные расширения файлов, и прочее). Вам надо определиться, с каким именем будете сохранять файл, т.к. если его не переименовать, то может случиться так, что будет загружен файл с таким же именем, как у файла загруженного раньше. Это приведет к перезаписи существующего файла. Для примера, будем задавать новое имя в зависимости с текущей меткой времени Unix. Теперь к сути: $path = 'path_to_dir/'; // директория для загрузки $ext = array_pop(explode('.',$_FILES['myfile']['name'])); // расширение $new_name = time().'.'.$ext; // новое имя с расширением $full_path = $path.$new_name; // полный путь с новым именем и расширением if($_FILES['myfile']['error'] == 0){ if(move_uploaded_file($_FILES['myfile']['tmp_name'], $full_path)){ // Если файл успешно загружен, то вносим в БД (надеюсь, что вы знаете как) // Можно сохранить $full_path (полный путь) или просто имя файла - $new_name } } P.S. Поле файла в форме для моего примера, должно иметь атрибут name="myfile". Замените на своё значение, соответственно изменив в глобальной переменной $_FILES['myfile']Ответ 2
-- В файле, который должен лежать в корне сайта, чтобы относительно этого файла правильно загружать в папку изображений от корня сайта. function upload_file($file, $upload_dir= 'images', $allowed_types= array('image/png','image/x-png','image/jpeg','image/webp','image/gif')){ $blacklist = array(".php", ".phtml", ".php3", ".php4"); $ext = substr($filename, strrpos($filename,'.'), strlen($filename)-1); // В переменную $ext заносим расширение загруженного файла. if(in_array($ext,$blacklist )){ return array('error' => 'Запрещено загружать исполняемые файлы');} $upload_dir = dirname(__FILE__).DIRECTORY_SEPARATOR.$upload_dir.DIRECTORY_SEPARATOR; // Место, куда будут загружаться файлы. $max_filesize = 8388608; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 8 Мб). $prefix = date('Ymd-is_'); $filename = $file['name']; // В переменную $filename заносим точное имя файла. if(!is_writable($upload_dir)) // Проверяем, доступна ли на запись папка, определенная нами под загрузку файлов. return array('error' => 'Невозможно загрузить файл в папку "'.$upload_dir.'". Установите права доступа - 777.'); if(!in_array($file['type'], $allowed_types)) return array('error' => 'Данный тип файла не поддерживается.'); if(filesize($file['tmp_name']) > $max_filesize) return array('error' => 'файл слишком большой. максимальный размер '.intval($max_filesize/(1024*1024)).'мб'); if(!move_uploaded_file($file['tmp_name'],$upload_dir.$prefix.$filename)) // Загружаем файл в указанную папку. return array('error' => 'При загрузке возникли ошибки. Попробуйте ещё раз.'); return Array('filename' => $prefix.$filename); } -- Пример отправки файла
Комментариев нет:
Отправить комментарий