Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление аватара, как на форуме 
V
    Опции темы
Рыжий
Дата 15.3.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



Нужно организовать загрузку аваторов на сайт.
Как сделано на винграде?? 
Если юзер вводит url, картинка загружается на сервер? (можно пример кода?)
Спасибо.


 ! 
PARROT
Перед постингом своих сообщений, выбирайте подходящий форум!


Это сообщение отредактировал(а) PARROT - 15.3.2007, 19:56
PM MAIL ICQ   Вверх
PARROT
Дата 15.3.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 2
Всего: 50



Если пользователь вводит урл, то его картинка висит где-нибудь, а не грузиться на форум.
Для загрузки на форум используйте форму html, с проверкой на размер файла.
Для примера пользуйте поиск. 


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
mishaSL
Дата 15.3.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



Цитата(Рыжий @  15.3.2007,  19:23 Найти цитируемый пост)
вводит url, картинка загружается на сервер


Очень просто:
Читаешь бинарные данные с данного урла (через сокеты или curl), сохраняешь в файл и все... smile

Добавлено @ 20:11 
Как пример так:
Код

<?php

/* $cUrl - соединение через curl_init(), $url - адрес необходимой страницы*/
function FileGetContents(& $cUrl, $url, $port = 80, $timeout = 10, $errCount = 1)
{
    curl_setopt($cUrl, CURLOPT_URL, $url);
    curl_setopt($cUrl, CURLOPT_PORT, $port);
    curl_setopt($cUrl,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($cUrl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
    curl_setopt($cUrl, CURLOPT_TIMEOUT, $timeout);
    $content = curl_exec($cUrl);
    if (curl_getinfo($cUrl,CURLINFO_HTTP_CODE) != 200) {
        return (($errCount < 3) ? FileGetContents($url, $port, $timeout, $errCount++) : false);
    } else {
        return $content;
    }
}

$cUrl = curl_init();
header("Content-type: image/gif");
$img = FileGetContents($cUrl, 'http://forum.vingrad.ru/uploads/av-6048.gif');
curl_close($cUrl);

if ($img !== false) {
    print $img;
}

?>


Далее переменныу $img сохраняешь в нужный тебе файл.

Добавлено @ 20:12 
И если будешь сохранять, а не выводить, то не забудь убрать header();



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Рыжий
Дата 15.3.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



Цитата(PARROT @  15.3.2007,  19:57 Найти цитируемый пост)
Если пользователь вводит урл, то его картинка висит где-нибудь, а не грузиться на форум.
Для загрузки на форум используйте форму html, с проверкой на размер файла.
Для примера пользуйте поиск.  


А если юзер изменит картинку по указанному url? 

Проверять данные в форме html очень небезопасно. Нужно повторно их проверять в php.


mishaSL, Сейчас опробую.


Это сообщение отредактировал(а) Рыжий - 15.3.2007, 20:41
PM MAIL ICQ   Вверх
Рыжий
Дата 16.3.2007, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



Немного покопавшись в функциях нашел интересную опцию:

imagecreatefrom***()  Может использовать в качестве параметра URL. (если в php.ini включена опция fopen wrappers)

Значит мы можем:


Код

$link='http://forum.vingrad.ru/uploads/av-7979.jpg';

$img=imagecreatefromjpeg($link);


После чего мы можем как угодно манипулировать изображением.



PM MAIL ICQ   Вверх
PARROT
Дата 16.3.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 2
Всего: 50



Цитата(Рыжий @  15.3.2007,  20:20 Найти цитируемый пост)
А если юзер изменит картинку по указанному url? 

Проверять данные в форме html очень небезопасно. Нужно повторно их проверять в php.

1) Значит не будет его аватара.
2) Проверять на размер аватара (как известно аватары на винград загружаеются не более чем 5кб помоему)
3) Потом есть загрузка не только с компа юзера, но и по предоставленной ссылке.



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
mishaSL
Дата 16.3.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



Цитата(Рыжий @  16.3.2007,  02:11 Найти цитируемый пост)
imagecreatefrom***()  Может использовать в качестве параметра URL. (если в php.ini включена опция fopen wrappers)


Очень плохая идея. Во-первых, эта опция на большенстве хостингов отключена. Во-вторых, посмотри эту информацию: http://vingrad.ru/PHP-PHPNETHTTP-003044

В третих, чем не устраивает, сначало сохранить, можно во временную директорию сохранить, а потом ресайзить и т.д.

Еще раз пример кода с сохранением:
Код

<?php
/* $cUrl - соединение через curl_init(), $url - адрес необходимой страницы*/
function FileGetContents(& $cUrl, $url, $port = 80, $timeout = 10, $errCount = 1)
{
    curl_setopt($cUrl, CURLOPT_URL, $url);
    curl_setopt($cUrl, CURLOPT_PORT, $port);
    curl_setopt($cUrl,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($cUrl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
    curl_setopt($cUrl, CURLOPT_TIMEOUT, $timeout);
    $content = curl_exec($cUrl);
    if (curl_getinfo($cUrl,CURLINFO_HTTP_CODE) != 200) {
        return (($errCount < 3) ? FileGetContents($url, $port, $timeout, $errCount++) : false);
    } else {
        return $content;
    }
}
$cUrl = curl_init();
$img = FileGetContents($cUrl, 'http://forum.vingrad.ru/uploads/av-6048.gif');
curl_close($cUrl);
if ($img !== false) {
    $h = fopen('test.gif', 'w');
    fwrite($h, $img);
    fclose($h);
} else {
    print 'Указанный URL открыть не удалось.';
}

?>


А дальше с сохнаненной картинкой делаешь все, что душе угодно. smile 




--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Рыжий
Дата 21.3.2007, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



mishaSLА если требуется проверить размер файла перед закачкой, если он слишком большой - чтобы даже не браться закачивать?
Нашел опцию CURLOPT_INFILESIZE прописал значение 10Kb (10240) - если передавать увесистую картинку - все равно пропускает. Как быть?

PM MAIL ICQ   Вверх
Serkys
Дата 21.3.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: нет
Всего: 22



Цитата(Рыжий @  21.3.2007,  02:27 Найти цитируемый пост)
А если требуется проверить размер файла перед закачкой, если он слишком большой - чтобы даже не браться закачивать?

При отправке через POST файл не закачивается. Чтобы его закачать, надо после вызывать move_uploaded_file() или copy(). А размер файла хранится в $_FILES['filename']['size'].
Проверить его элементарно:
Код

if ($_FILES['filename']['size'] > 10*1024) {
  echo "Много!";
} else {
  move_uploaded_file($_FILES['filename']['tmp_name'], 'files/myfile.gif');
};

PM MAIL   Вверх
Рыжий
Дата 21.3.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



SerkysНет, мы не о том говорим. Или это я не о том думаю...  smile 
PM MAIL ICQ   Вверх
Serkys
Дата 21.3.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: нет
Всего: 22



Цитата(Рыжий @  21.3.2007,  02:27 Найти цитируемый пост)
А если требуется проверить размер файла перед закачкой, если он слишком большой - чтобы даже не браться закачивать?

Как проверить перед закачкой я написал.
Или тебе в php.ini надо?
PM MAIL   Вверх
mishaSL
Дата 21.3.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



Serkys, Рыжий имел ввиду загрузку удаленного файла зная его url.

 
Рыжий, я вижу два варианта:
1. еще до загрузки получить заголовки и проверить там Content-Length если он больше нужного то не загружать файл.
В данном подходе есть один минус заголовок Content-Length естьне всегда, к примеру его часто не бывает когда изображение генерируется скриптом. Но это мне кажется оптимальный вариант.

2. Воспользоваться функцией curl_getinfo() при указании константы CURLINFO_SIZE_DOWNLOAD мы получим кол-во закаченных байт. Соответственно мы можем получить эти данные только после выполнения закачки файла.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Рыжий
Дата 21.3.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



mishaSLБуду использовать первый вариант, если его нет - после закачки можно использовать хоть filesize().
PM MAIL ICQ   Вверх
mishaSL
Дата 21.3.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



Цитата(Рыжий @  21.3.2007,  15:28 Найти цитируемый пост)
после закачки можно использовать хоть filesize().


filesize() можно использовать уже после сохранение файла, а я предлогал во втором варианте проверять до сохранения, но после загрузки.


Цитата(Рыжий @  21.3.2007,  15:28 Найти цитируемый пост)
Буду использовать первый вариант


Я думаю он оптимален smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
wolfmessing
Дата 25.6.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 24.4.2007

Репутация: нет
Всего: 1



Код
<?php
$sql_messaga = "SELECT * FROM `gb`";
$sql_query = mysql_query($sql_messaga);
      
      if(!mysql_num_rows($sql_query))
            {
            $mess_no = "<center>сообщений ещё нету</br>
            <a href='add.php'>написать?</a></center>";
            }else{
            while($result = mysql_fetch_array($sql_query))
                  {
                  $table = "<center>
                  <TABLE WIDTH='450' BORDER='1' CELLSPACING='1' CELLPADDING='1'>
                  <TR>
                        <Td WIDTH='100' SCOPE='row'>".$result['id']."</Td>
                        <TD WIDTH='350'>".$result['tema']."</TD>
                  </TR>
                  <TR>
                        <Td HEIGHT='141' SCOPE='row'>".$result['user_name']."</br>
                              <DIV><IMG SRC='".$result['avatar']."'></DIV>
                        </Td>
                        <TD>".$result['message']."</TD>
                  </TR>
                  </TR>
                        <TD><form action='add.php' method='get'>
                        <input type='submit' value='ответить'/>
                        </form></TD>
                  </TR>
                  </TABLE></center></br>"; ?>


У меня такая трабла, '".$result['avatar']."' -- это путь до аватарки,  но она категорически не хочет выводица на экран.
В БД записался этот путь, показывает имя, ид, мессагу, и тему, а на аватаре пустое место smile 
Чо интересно, просто эхом выводица 
Код

<?php
$result['avatar'] = "http://forum.vingrad.ru/reklama/sun_comp_banner1.gif";
echo "<IMG SRC='".$result['avatar']."'>";
?>

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.1068 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.