Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

В какую директорию загружаются картинки через форму?

 
Начать новую тему   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 11 Ноя 2007 22:16:32    Заголовок сообщения: В какую директорию загружаются картинки через форму? Ответить с цитатой

Не могу найти Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Антон Исайкин
Site Admin


Зарегистрирован: 08 Окт 2007 12:02:56
Сообщения: 150
Откуда: Санкт-Петербург

СообщениеДобавлено: 11 Ноя 2007 23:40:34    Заголовок сообщения: Ответить с цитатой

Сразу картинки (как и любые другие файлы, загруженные методом POST) грузятся в папку временных файлов и удаляются как только сценарий отработал. Соответственно, в ходе сценария надо скопировать их оттуда в нужную тебе директорию простой функцией copy(). Дело будет выглядеть примерно так:
Код:
copy($this->data['file']['tmp_name'], 'нужный/тебе/путь')
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ztalker



Зарегистрирован: 06 Ноя 2007 14:00:26
Сообщения: 26
Откуда: Новосибирск

СообщениеДобавлено: 12 Ноя 2007 09:00:08    Заголовок сообщения: Ответить с цитатой

Лучше использовать move_uploaded_file, эта функция еще делает проверку - реально ли файл передан формой, и в нагрузку переносит файл, а не просто копирует.
Код:
move_uploaded_file($this->data['file']['tmp_name'], $new_path . $this->data['file']['name'])
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 12 Ноя 2007 13:47:32    Заголовок сообщения: Ответить с цитатой

Точно, спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 12 Ноя 2007 17:50:09    Заголовок сообщения: Ответить с цитатой

Подскажите, в $new_path указывается путь на диске?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Антон Исайкин
Site Admin


Зарегистрирован: 08 Окт 2007 12:02:56
Сообщения: 150
Откуда: Санкт-Петербург

СообщениеДобавлено: 12 Ноя 2007 18:15:35    Заголовок сообщения: Ответить с цитатой

В $new_path пишешь любой путь со слешем на конце.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 12 Ноя 2007 18:19:27    Заголовок сообщения: Ответить с цитатой

Слэш, как я понимаю, такой в Винде: "\"?

Я думаю, что у меня не получается из-за того, что у меня не одна, а три фотки... Следовательно, что-то я запутался, что тут не хватает:

move_uploaded_file($this->data['file']['tmp_name'], WEBROOT_DIR . '\boards\\' . $this->data['file']['name']);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 12 Ноя 2007 18:35:22    Заголовок сообщения: Ответить с цитатой

Я так понимаю, нужен цикл:

Код:
for ($i=0; $i<3; $i++) {
    ...
}


Но непонятно вот что:

$this->data['file']['tmp_name'], --> ???

$this->data['form']['name'] --> $this->data['Board']['phone_photo' . $i+1]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ztalker



Зарегистрирован: 06 Ноя 2007 14:00:26
Сообщения: 26
Откуда: Новосибирск

СообщениеДобавлено: 13 Ноя 2007 06:22:32    Заголовок сообщения: Ответить с цитатой

вьювер:
Код:
for ($i = 1; $i <= 3; $i++) {
   echo $html->file('Board/file' . $i);
}

контроллер:
Код:
$this->Board->upload($this->data);

модель (данные функции рекомендуется делать именно в модели, а не в контроллере):
Код:
public function upload($data)
{
   for ($i = 1; $i <= 3; $i++) {
      move_uploaded_file(
               $data['Board']['file'.$i]['tmp_name'],
               WEBROOT_DIR . DS . 'img' . DS . 'boards' . DS . $data['Board']['file'.$i]['name']
         );
   }
}

Используй константу DS вместо слешей.
Естественно в этот код еще необходимо дописать проверки на наличие переданных фалов.
_________________
На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 13 Ноя 2007 13:00:10    Заголовок сообщения: Ответить с цитатой

Спасибо, позже буду пробовать. Вчера остановился на том, что БД ругалась на то, что отправляется массив вместо адреса картинки. Что, собственно говоря, правильно.

А вот функция Upload меня уже вдохновила.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 15 Ноя 2007 16:31:55    Заголовок сообщения: Ответить с цитатой

Да, теперь получается фотку сохранить в нужную дирректорию. Только вот есть проблема с добавлением данных в БД.

Код:
echo $html->file('Board/file' . $i);


file - это массив, соответственно БД ругается. Как добавить конкретный элемент этого массива?


Последний раз редактировалось: Никита (15 Ноя 2007 17:01:13), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 15 Ноя 2007 16:32:46    Заголовок сообщения: Ответить с цитатой

Код:
Array
(
    [Board] => Array
        (
            [phone_model] =>
            [phone_year] =>
            [phone_description] =>
            [phone_price] =>
            [author_name] =>
            [author_phone] =>
            [author_email] =>
            [author_icq] =>
            [phone_photo1] => Array
                (
                    [name] => DSCI0022.jpg
                    [type] => image/jpeg
                    [tmp_name] => /tmp\php66.tmp
                    [error] => 0
                    [size] => 76366
                )

        )

)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Никита



Зарегистрирован: 24 Окт 2007 14:00:40
Сообщения: 39
Откуда: Новосибирск

СообщениеДобавлено: 15 Ноя 2007 17:03:31    Заголовок сообщения: Ответить с цитатой

Да, всё же на самом деле просто оказалось!

Перед тем, как добавить данные в БД, нужно просто заменить массив phone_photo1 на [name] => DSCI0022.jpg:

Код:
$this->data['Board']['phone_photo1'] = $this->data['Board']['phone_photo1']['name'];


И только потом

Код:
$this->Board->save($this->data);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru