[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка изображений на сервер
kern
Здравствуйте! Я начинающий в php, впервые столкнулся с необходимостью создать форму загрузки изображений из браузера на сервер. Создал все, как написано в учебниках (несколько разных вариантов) - не работает. Создал простейший проверочный файл из учебника - не работает.
Вот код этого файла:
PHP
<body>
<
div>
<?
php 
if (isset($_FILES['fupload']))
{
print 
"Имя файла: ".$_FILES ['fupload']['name'] . "<br>";
print 
"Размер: " .$_FILES ['fupload']['size'] . "<br>"
print 
"Имя временного файла: " .$_FILES ['fupload']['tmp_name'] . "<br>"
print 
"Тип: " .$_FILES ['fupload']['type'] . "<br>"
print 
"Код ошибки: " .$_FILES ['fupload']['error'] . "<br>"

if (
$_FILES ['fupload']['type'] == "image/gif")
{

$source $_FILES['fupload']['tmp_name'];
$target 'images' $_FILES ['fupload']['name'];
move_uploaded_file ($source$target);
$size getimagesize ($target);

$imgstr "<p><img width='$size[0]' height='$size[1]' src='$target' alt='Загруженое изображение'></p>";

print 
$imgstr;
}
}
?>
</div>
<form enctype="multipart/form-data" action="<?php print $_SERVER['PHP_SELF'?>" method="POST">
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="1024000">
<input type="file" name="fupload"><br>
<input type="submit" value="Загрузить">
</p>
</form>


Все проверочные значения: имя файла, размер, имя временного файла, тип - выводятся нормально. Код ошибки - 0. Это значит, что передача прошла успешно. Но сам имидж на сервер в указанную папку "images" (она находится в той же директоории, что и сам файл с вышеописанным кодом) не попадает и, соответственно, не выводится на экран (выводится только значение атрибута alt).
Подскажите, пожалуйста, что не так? Заранее извините за глупый, наверно, вопрос, но лично ни с кем из программеров не знаком и объяснить некому.



Спустя 8 минут, 23 секунды (1.09.2009 - 17:15) xPoint написал(а):
скорее всего в $target = 'images' . $_FILES ['fupload']['name'];
забыл поставить разделитель директорий между images и именем файла.

Спустя 17 минут, 38 секунд (1.09.2009 - 17:32) kern написал(а):
Вы имеете ввиду вот так:
PHP
$target "images/"$_FILES ['fupload']['name'];

Тот же результат

Спустя 11 минут, 18 секунд (1.09.2009 - 17:44) xPoint написал(а):
у меня без проблем загружает гифку. Может тип не image/gif загружаете, а другой какой-нить? Или права на папку images не выставлены?

Спустя 15 минут, 41 секунда (1.09.2009 - 17:59) kern написал(а):
да вроде все проверил уже 10 раз - и файлы только .gif беру, и права выставлены, и пример из учебника - он по умолчанию должен работать, это не то, что я сам что-то понаписал. хотя и тот код, который я сам написал - работал, никаких ошибок не выдавал, но файлы так же не загружал.

Спустя 1 день, 5 часов, 6 секунд (2.09.2009 - 23:00) ZSH написал(а):
PHP
move_uploaded_file ($source$target);


попробуй заменить на:

PHP
copy($source$target);

Спустя 17 часов, 32 минуты, 7 секунд (3.09.2009 - 16:32) kern написал(а):
Не, не помогает, тот же результат.

Спустя 18 часов, 43 секунды (4.09.2009 - 10:32) sergeiss написал(а):
Проверь, что в описании формы у тебя указано именно enctype="multipart/form-data".

Спустя 3 часа, 7 минут, 13 секунд (4.09.2009 - 13:40) twin написал(а):
Цитата
попробуй заменить на:
PHP
copy($source, $target);

не надо так делать.

Спустя 2 дня, 23 часа, 23 минуты, 33 секунды (7.09.2009 - 13:03) ZSH написал(а):
а так?
PHP
$source $_FILES['fupload']['tmp_name'];
if(!
is_dir('images'))mkdir('images',0777); // создает папку если ее нет 
$target 'images/' $_FILES ['fupload']['name'];
move_uploaded_file ($source$target);
$size getimagesize ($target);


Спустя 17 дней, 2 часа, 43 минуты, 55 секунд (24.09.2009 - 15:47) Антон написал(а):
У меня похожая проблема, но только дело в том, что он файл(рисунок в формате JPG) загружает, но его как-то портит, так что он потом не открывается.
Даже если я его по fttp назад скачаю - он не открывается.
Подскажите что делать, чтобы он не портился

Спустя 2 часа, 28 минут, 52 секунды (24.09.2009 - 18:16) twin написал(а):
О как... А по подробнее с этого места?

Спустя 6 часов, 48 минут, 34 секунды (25.09.2009 - 01:04) vuzy написал(а):
PHP
if ($_FILES ['fupload']['type'] == "image/gif")
{

Объясните мне эту часть кода?.
Во первых: откуда взялось вместо upload - fupload и все дружно подхватили эту инициативу?
и во вторых: зачем проверять данное значение вообще?

Я покапался в своих учебниках по PHP нигде нет понятния fupload и поноценный скрипт загрузки страниц не содержит подобных строк.

если это попытка проверить разширение файла то думаю следует использовать функцию:
PHP
$upload_file=$_FILES[upload][name];
$images_allow=array("JPG","jpg","GIF","gif","PNG","png");
$file_info=pathinfo($upload_file);
//проверка на то что файл можно загружать.
if (!(in_array($file_info['extension'],$image_allow)))
{
// дальше текст ошибки что юзер загрузил недопустимый файл.
}
//а потом уже проходит копирование файла и вывод всех сообщений.

помоему так было бы гараздо надежнее.
Я сам такой скрипт юзал и все работает.

Спустя 8 минут, 46 секунд (25.09.2009 - 01:13) waldicom написал(а):
[fupload]- это имя твоего поля, которое
<input type="file" name="fupload" />
А ['type'] - это часть структуры, которую создает php автоматически.

Таким образом в элементе $_FILES ['fupload']['type'] хранится тип загруженного файла (по мнению php).

Спустя 12 минут, 48 секунд (25.09.2009 - 01:26) vuzy написал(а):
а тогда зачем?
PHP
if (isset($_FILES['fupload']))

Я такой функции проверки тоже ниразу не видел..
помоему следовало бы использовать в форме имя для кнопки субмит в первую очередь:
PHP
<input type="submit" value="Загрузить" name=ok_upload>

потом уже при обработке проверять:
PHP
if (isset($_POST['ok_upload']))

вот снова проштудировал книги по PHP таки да
$_FILES[fupload][type] содержит в себе расширение накшталт image/gif
Поэтому прошу прощения за дилетантизм и вопрос снимаю.
Ради любопытсва скопировал представленный сценарий загрузки файла себе разделил сценарии на форму index.php и на обработчик upload.php
получилось следующее.
Файл успешно загружается с компьютера на сервер.
Более того. в имя добавляется надпись images и получается что то вроде imagesсертификат.gif
ВЫВОД:
PHP
$target 'images' $_FILES ['fupload']['name'];

заменить на:
PHP
$target 'images/'.$_FILES ['fupload']['name'];

и лишний раз проверить все на наличие заглавных букв в именах файлов и директорий.

Спустя 10 часов, 35 минут, 43 секунды (25.09.2009 - 12:02) twin написал(а):
PHP
if (isset($_FILES['fupload']))
это зря. Корректно было бы так:
PHP
if($_FILES['fupload']['error'] === 0)

Цитата
вот снова проштудировал книги по PHP таки да
$_FILES[fupload][type] содержит в себе расширение накшталт image/gif
Поэтому прошу прощения за дилетантизм и вопрос снимаю.

Это тоже зря. Дело в том, что разные браузеры MIME передают по разному. Так что лучше проверять так, как раньше -
PHP
if (!(in_array($file_info['extension'],$image_allow)))

Спустя 6 минут, 28 секунд (25.09.2009 - 12:08) Антон написал(а):
Я извиняюсь, что вмешиваюсь, но хотел бы развить свою проблему, которая касалась того, что рисунок портится и не открывается, хотя файл скачивается на сервер.
Это код моих страничек:


Форма:
___________________________________________________________
HTML
<table width=100% height=100% border=0 cellpadding=0 cellspacing=0>
<tr><td align=center valign=middle>
<h2><p><b> Форма для загрузки файла <br>фотографии... </b></p></h2>
<form action="index.php?menu=fotoloadsave" method="post" enctype="multipart/form-data">
<table border=1 cellpadding=5 cellspacing=5>
<tr><td>
<input type="hidden" name="max_file_size" value="512000">
<input type="file" name="filename" size=70><br>
<tr><td align=center>
<input type="submit" value="Загрузить"><br>
</table>
</form>
</table>

____________________________________________________________
____________________________________________________________
Обработчик:
____________________________________________________________
PHP
$name_foto="ID$id".$_FILES["filename"]["name"];
 
$adres_foto="foto-user/".$name_foto;
 if (
move_uploaded_file($_FILES['filename']['tmp_name'], $adres_foto)) {
     echo(
"Файл успешно загружен <br>");
     echo(
"Характеристики файла: <br>");
     echo(
"Имя файла: ");
     echo(
$_FILES["filename"]["name"]);
     echo(
"<br>Размер файла: ");
     echo(
$_FILES["filename"]["size"]);
     echo(
"<br>Каталог для загрузки: ");
     echo(
$_FILES["filename"]["tmp_name"]);
     echo(
"<br>Тип файла: ");
     echo(
$_FILES["filename"]["type"]);}

Спустя 42 минуты, 30 секунд (25.09.2009 - 12:51) twin написал(а):
Не должно так быть... Это локально или на хотинге?

Спустя 7 минут, 11 секунд (25.09.2009 - 12:58) Антон написал(а):
Это на бесплатном хостинге hut

Спустя 2 часа, 39 минут, 45 секунд (25.09.2009 - 15:38) vuzy написал(а):
ну лично я всегда использую сей способ:
PHP
if (!(in_array($file_info['extension'],$image_allow)))

Цитата
Это на бесплатном хостинге hut

не пробовал проверять скрипт локально? может дело в хостинге?

Спустя 2 дня, 19 часов, 14 минут, 52 секунды (28.09.2009 - 10:53) Антон написал(а):
Локально пока не проверял, надо будет попробовать....
А что это за способ не совсем понятно? Что за переменная - $image_allow?

Спустя 56 минут, 16 секунд (28.09.2009 - 11:49) atarix написал(а):
Цитата
А что это за способ не совсем понятно? Что за переменная - $image_allow?


массив разрешённых типов. условие проверяет файл на не соответствие этих типов

Спустя 1 год, 6 месяцев, 4 часа, 58 минут, 15 секунд (28.03.2011 - 16:47) Pasica написал(а):
if ($_FILES ['fupload']['type'] == "image/gif")
эта строчка может говорит скрипту, что надо грузить файлы с расширением gif!!!

[php]
if ($_FILES ['fupload']['type'] == "image/gif" or "image/jpg" or "image/jpeg" or "image/png")
//теперь всё грузит
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.