Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: загрузка файлов на сервер
 
 автор: Sajmon_root   (05.04.2010 в 13:15)   письмо автору
 
 

День добрый всем!
Нужна помощь опытных специалистов, направте по правельному пути!
Мне нужно сождать фотогалерею!!!!! Фотогалерея есть, скрипт загрузки изображения есть (делает средний размер и миниаьюра) Проблема заключается в том, что чтоб отображалися фото в галереи нужно вручную писать <div> ... </div> для каждой фото, примерно так:

...
<div class="imageElement">
                    <h3>Item 2 Title</h3>
                    <p>Item 2 Description</p>
                    <a href="#" title="open image" class="open"></a>
                    <img src="images/brugges2006/2.jpg" class="full" />
                    <img src="images/brugges2006/2-mini.jpg" class="thumbnail" />
                </div>
                <div class="imageElement">
                    <h3>Item 3 Title</h3>
                    <p>Item 3 Description</p>
                    <a href="#" title="open image" class="open"></a>
                    <img src="images/brugges2006/3.jpg" class="full" />
                    <img src="images/brugges2006/3-mini.jpg" class="thumbnail" />
                </div>
...

Подскажите как мне сделать чтоб было все на автомате, я загружаю фото а оно само приписуется в этом файле?
За рание благодарю за помощь!

  Ответить  
 
 автор: sim5   (05.04.2010 в 13:23)   письмо автору
 
   для: Sajmon_root   (05.04.2010 в 13:15)
 

А где вы храните имена файлов загруженных? Надо полагать в базе. Вот при выводе списка их и обрамляйте тегами необходимыми, зачем руками.

  Ответить  
 
 автор: Sajmon_root   (05.04.2010 в 14:04)   письмо автору
 
   для: sim5   (05.04.2010 в 13:23)
 

Вот в этом и проблема!!! Как мне внести в базу данные из папки где хранятся среднее изображение и миниатюра. Кокие нужны функции?

  Ответить  
 
 автор: sim5   (05.04.2010 в 14:10)   письмо автору
 
   для: Sajmon_root   (05.04.2010 в 14:04)
 

При загрузке файла на сервер, вносите его имя в базу, и другие его параметры: описание, размер...

  Ответить  
 
 автор: Sajmon_root   (05.04.2010 в 14:43)   письмо автору
 
   для: sim5   (05.04.2010 в 14:10)
 

Большое спасибо, что Вы откликнулись на мою просьбу, но дело в том как это сделать? можна пример кода? как мне внести в базу полный путь к файлу и его описание? Вы наверника профессионал п пхп, а я только познаю азы, Помогите мне решить до конца эту проблему!
вот скрипт загрузки изображения
fotogalery_index.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <TITLE>Административный интерфейс</TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="ML студия">
</head>

<body>

<TABLE width='100%' cellpadding='10px'>
<TR style='background-color: white; '>
    <TD width='100%' valign='top'>
    <div id='head_root_pages'><P>Добавление изображений в фотогалерею</P></div>
    <div class='main_text'>
        <P>Для загрузки изображения в фотогалерею - выберите её ("Обзор...") на вашем ПК и нажмите "Загрузить". (Файлы изображений будут сохраняться в каталог img/fotogalery/)</P>
        <div class="child_pages" align='center'>
        
            <?php
                
require 'fotogalery_config.php'//Подключаем файл конфигурации
                
require 'fotogalery_process.php'//Подключаем файл-обработчик
                
                /* + Если картинка выбрана и нажата кнопка Загрузить */
                
if(isset($_FILES['fupload'])) 
                {
        
                        if(
preg_match('/[.](jpg)|(JPG)|(gif)|(GIF)|(png)|(PNG)$/'//Ставим допустимые форматы изображений для загрузки
                            
$_FILES['fupload']['name'])) 
                        {
                            
                            
/* Назначение переменных для создания миниатюры */
                            
$filename $_FILES['fupload']['name'];
                            
$source $_FILES['fupload']['tmp_name'];
                            
$target $path_to_source_image_directory $filename;
                            
                            
/* Перемещение исходного изображения в fotogalery/source/ */
                            
move_uploaded_file($source$target);
                            
                            
/* Вызов функции создания миниатюры */
                            
createThumbnail($filename);
                            
/* Вызов функции создания изображения */
                            
createFullimage($filename);

                            echo 
"<META HTTP-EQUIV=refresh CONTENT='1;url=fotogalery_index.php'>";

                            
unlink($path_to_source_image_directory.$filename);
                            
                        }
                        else
                        {
                            echo 
"<div class='message_div'><P id='mes_err'>Недопустимый формат изображения. (Разрешённые форматы: jpg, png, gif)</P></div><br>";
                        }
                }
                
/* - Если картинка выбрана и нажата кнопка Загрузить */
            
?>

        <form enctype="multipart/form-data" action="" method="post">
            Файл: 
            <input type="file" name="fupload" />
                <input type="submit" value="Загрузить" />
        </form>

            </TABLE>
    </div>
    </div>
    </TD>
</TR>

</TABLE>

</body>
</html>


fotogalery_process.php

<?
/* + Функция для создания миниатюры */
function createThumbnail($filename) {
    
    require 
'fotogalery_config.php'//Подключаем файл конфигурации
    
    
if(preg_match('/[.](jpg)|(JPG)$/'$filename)) {
        
$im imagecreatefromjpeg($path_to_source_image_directory $filename);
    } else if (
preg_match('/[.](gif)|(GIF)$/'$filename)) {
        
$im imagecreatefromgif($path_to_source_image_directory $filename);
    } else if (
preg_match('/[.](png)|(PNG)$/'$filename)) {
        
$im imagecreatefrompng($path_to_source_image_directory $filename);
    } 
//Определяем формат изображения

    
$ox imagesx($im);
    
$oy imagesy($im);
    
    
/* + Здесь уменьшение происходит относительно заданной высоты*/
    
$ny $final_height_of_thumb_image;
    
$nx floor($ox * ($final_height_of_thumb_image $oy));
    
/* - Здесь уменьшение происходит относительно заданной высоты*/

    
$nm imagecreatetruecolor($nx$ny);
    
    
imagecopyresized($nm$im0,0,0,0,$nx,$ny,$ox,$oy);
    
    if(!
file_exists($path_to_thumbs_directory)) {
      if(!
mkdir($path_to_thumbs_directory)) {
           die(
"<div class='message_div'><P id='mes_err'>Миниатюра для данного изображения не была создана.</P></div><br>");
      } 
       }

    
imagejpeg($nm$path_to_thumbs_directory $filename);
    echo 
"<div class='message_ok_div'><span id='mes_ok'>Миниатюра для данного изображения создана успешно.</span></div><br>";
    return 
"ok";
}
//Сжимаем изображение, если есть оишибки, то говорим о них, если их нет, то выводим получившуюся миниатюру
/* - Функция для создания миниатюры */



/* + Функция для создания полного изображения */
function createFullimage($filename) {
    
    require 
'fotogalery_config.php'//Подключаем файл конфигурации
    
    
if(preg_match('/[.](jpg)|(JPG)$/'$filename)) {
        
$im imagecreatefromjpeg($path_to_source_image_directory $filename);
    } else if (
preg_match('/[.](gif)|(GIF)$/'$filename)) {
        
$im imagecreatefromgif($path_to_source_image_directory $filename);
    } else if (
preg_match('/[.](png)|(PNG)$/'$filename)) {
        
$im imagecreatefrompng($path_to_source_image_directory $filename);
    } 
//Определяем формат изображения

    
$ox imagesx($im);
    
$oy imagesy($im);
    
    
/* + Здесь уменьшение происходит относительно заданной ширины*/
    
$nx $final_width_of_full_image;
    
$ny floor($oy * ($final_width_of_full_image $ox));
    
/* - Здесь уменьшение происходит относительно заданной ширины*/
    
    
$nm imagecreatetruecolor($nx$ny);
    
    
imagecopyresized($nm$im0,0,0,0,$nx,$ny,$ox,$oy);
    
    if(!
file_exists($path_to_full_image_directory)) {
      if(!
mkdir($path_to_full_image_directory)) {
           die(
"<div class='message_div'><P id='mes_err'>Изображение не было добавлено. Попробуйте сделать это ещё раз.</P></div><br>");
      } 
       }

    
imagejpeg($nm$path_to_full_image_directory $filename);
    echo 
"<div class='message_ok_div'><span id='mes_ok'>Изображение загружено в фотогалерею успешно</span></div><br>";
}
//Сжимаем изображение, если есть оишибки, то говорим о них, если их нет, то выводим получившуюся миниатюру
/* - Функция для создания полного изображения */



?>

  Ответить  
 
 автор: sim5   (05.04.2010 в 15:16)   письмо автору
 
   для: Sajmon_root   (05.04.2010 в 14:43)
 

Прежеде чем выполнять операции над загруженным изображением, нужно убедиться, что при загрузке не произошло ошибок - проверить $_FILES['fupload']['error'].
Такая проверка типа загружаемого изображения:
preg_match('/[.](jpg)|(JPG)|(gif)|(GIF)|(png)|(PNG)$/', $_FILES['fupload']['name'])
чревата тем, что вам спокойно можно столько мусора вместо изображений набросать, а вы даже и не проверяете этого.
Совсем не обязательно перемещать изображение временно в папку, чтобы его уменьшить потом, достаточно передать в функцию $_FILES['fupload']['tmp_name'], и сделать два его эскиза необходимых размеров, а этот временный файл будет удален мусорщиком.
Для уменьшения изображения достаточно иметь одну функцию, передавая ей необходимые размеры, а не две как у вас.
Вместо imagecopyresized() лучше использовать imagecopyresampled(), она обеспечивает лучшее качество при уменьшении изображения.
Чтобы произвести запись в базу, вам нужно заглянуть в РНР-мануал, в функции работы с MySQL, а таже почитать о самой MySQL. Примеры же вставок данных в базу можете посмотреть в разделе MySQL форума. Но прежде чем вставлять, вы уж определитесь с таблицей (ее структурой), что она у вас будет хранить, какую информацию об изображениях. К примеру, вы выводите описания к изображениям, значит форма загрузки изображения должна иметь поля для ввода этих описаний, значит нужно проверять при загрузке и наличие их, допустимость...
Саму же запись данных об изображении нужно проводить после того, как изображение будет загружено (нет ошибок), созданы их эскизы (большое и малое, либо одно из них, в зависимости от условий), правильно заполнены поля описаний. Для этого скорее всего потребуется временное хранение данных об изображении.
Вот таким примерно способом.

  Ответить  
 
 автор: Sajmon_root   (05.04.2010 в 15:39)   письмо автору
 
   для: sim5   (05.04.2010 в 15:16)
 

А кокой функцией я могу выташить путь изображения (images/full/big.jpg) images/mini/mini.jpg) ?
структура БД примерно такая (id url discription)

  Ответить  
 
 автор: sim5   (05.04.2010 в 15:52)   письмо автору
 
   для: Sajmon_root   (05.04.2010 в 15:39)
 

Зачем вам путь изображения?
В базе лучше держать имена файлов, при чем именовать их автоматически, чтобы исключить повтор имен. Например, если это может делать только администратор, то достаточно по времени.
При создании эскизов изображения, формируется их имя, запоминается в сессии, как и другие его параметры, а уже при записи в базу они и вставляются в нее. А вот путь лучше держать в файле конфигурации, или в таблице категорий вашей галереи, если она у вас имеет категории. Иначе, если потребуется перенос папок, либо их переименование, тогда трудностей лишних не избежать. От сюда, лучше уж иметь примерно такую структуру таблицы:
id, cat, name_big, name_small, real_name, discription, size

Да и вообще, при загрузке изображения и его описаний, возможно возникнет ситуация, когда изображение будет загружено, но в поле описания будут ошибки. Это значит, что надо возвращать форму пользователю для исправления. Вот чтобы не грузить опять успешно загруженное изображение, его нужно либо временно хранить, либо поместить в паку и записать его параметры в базу, а это уже два различных подхода к записи. Так что это надо тоже обдумать.

  Ответить  
Rambler's Top100
вверх

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