|
Автор |
Сообщение |
yok
Участник тусовки
Зарегистрирован: 06.02.2008 Сообщения: 260 Откуда: krasnodar
|
|
|
|
Короче я по ложному следу пошел. Чего это я решил проверять массив $_FILES[] , это как проверять $_POSTмассив.
Все проше, 4 ошибка это отсутствие позиции. И все.
Вот в руководстве по пхп нашел
В случае, если при отправке формы файл выбран не был, PHP установит переменную $_FILES['userfile']['size'] значением 0, а переменную $_FILES['userfile']['tmp_name'] - пустой строкой. none.
значит возможно лучше так проверять наличие загруженного файла.
Последний раз редактировалось: yok (Ср Сен 23, 2009 6:12 am), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
yok
Участник тусовки
Зарегистрирован: 06.02.2008 Сообщения: 260 Откуда: krasnodar
|
|
|
|
Заметил такое дело при попытке применить условие при работе с типом файла, в частности jpg
В IE, тип выводит image/pjpeg , а в опере image/jpeg, и как следствие,
if($_SERVER['my_foto']['type'] == "image/pjpeg")
условие работало в интернет эксплорере а в опере нет и наоборот.
а ведь тип будет необходим если imagecreatefromjpeg
Никто не сталкивался? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Нет, не сталкивался, возможно просто не обращал внимания. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
yok
Участник тусовки
Зарегистрирован: 06.02.2008 Сообщения: 260 Откуда: krasnodar
|
|
|
|
Для идущих по следу:
очень удобно и думаю правильно с типо\форматом работать из массива возврашаемого getimagesize()
третий индеск 1-гиф 2-джпег 3-пнг и далее
switch($image_type){
case1:
работает с гиф imagecreatefromxxxx для каждого кейса свой и так далее где
list($width,$height,$image_type)=getimagesize($foto); |
|
Вернуться к началу |
|
|
александр1
Зарегистрирован: 23.02.2013 Сообщения: 7
|
|
|
|
Здравствуйте!
Вопрос по загрузке файлов на сервер.
ВОТ ФОРМА ВСЁ КАК В КНИГЕ
<form enctype="multipart/form-data" action="upload.php" method="post">
Выберите файл: <input name="upfile" type="file" />
<input type="submit" value="загрузить" />
</form>
ВОТ ОБРАБОТЧИК КАК В КНИГЕ
<?php
// каталог для загрузки файлов
// В Linux/FreeBSD/UNIX не забудьте установить права 777 для этого каталога!
$dir = './upload/';
// В multipart-форме мы определили имя input-поля upfile
// Это имя нужно использовать при работе с массивом $_FILES
if(isset($_FILES["upfile"]))
{
$upfile = $_FILES["upfile"]["tmp_name"];
$upfile_name = $_FILES["upfile"]["name"];
$upfile_size = $_FILES["upfile"]["size"];
$upfile_type = $_FILES["upfile"]["type"];
$error_code = $_FILES["upfile"]["error"];
// Если ошибок нет
if($error_code == 0)
{
// выводим информацию о принятом файле
echo "Имя файла на сервере: ".$upfile."<br>";
echo "Имя файла на компьютере пользователя: ".$upfile_name."<br>";
echo "MIME-тип файла: ".$upfile_type."<br>";
echo "Размер файла: ".$upfile_size."<br><br>";
// дополняем имя файла
$upfile_name = $dir . $upfile_name;
// копируем временный файл в каталог $dir, имя файла будет исходное,
// т. е. как на компьютере у пользователя
// первый параметр — источник
// второй параметр — получатель
copy($upfile,$upfile_name,$dir);
// можно использовать функцию move_uploaded_file()
//move_uploaded_file($upfile, $upfile_name);
}
}
?>
ВОТ ТАКУЮ ОШИБКУ ВЫДАЁТ
Имя файла на сервере: C:\www\xampp\tmp\php5967.tmp
Имя файла на компьютере пользователя: фото.jpg
MIME-тип файла: image/jpeg
Размер файла: 23477
Предупреждение: (. / Загрузки / фото.jpg) копию [function.copy]: не удалось открыть поток: Нет такого файла или каталога в C: \ WWW \ XAMPP \ htdocs \ Sayt \ upload.php на линии 41
ПОДСКАЖИТЕ где и что ещё нужно сделать? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Начнем с того, что у вас винда, поэтому измените путь к папке загрузки, куда загружается файл
./upload
на upload\
также измените остальной код, который влияет на образование пути к файлу |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
александр1
Зарегистрирован: 23.02.2013 Сообщения: 7
|
|
|
|
так у меня вообще нечего не получается.
а если так:
$dir = 'upload';
то выдаёт только это:
Имя файла на сервере: C:\www\xampp\tmp\php412A.tmp
Имя файла на компьютере пользователя: animegirl.jpg
MIME-тип файла: image/jpeg
Размер файла: 25648
Никак в толк не возьму. Где и что нужно исправлять?
Уже всю голову сломал. |
|
Вернуться к началу |
|
|
александр1
Зарегистрирован: 23.02.2013 Сообщения: 7
|
|
|
|
Есть продвижение.
Теперь само изображение копируется в директорию сайта. Это так и должно быть? |
|
Вернуться к началу |
|
|
Anderson
Завсегдатай
Зарегистрирован: 08.07.2006 Сообщения: 642 Откуда: localhost
|
|
|
|
Код: |
copy($upfile,$upfile_name,$dir); |
Функция принимает 2 аргумента - источник и получатель. Поэтому должно быть так:
Код: |
copy($upfile, $dir.DIRECTORY_SEPARATOR.$upfile_name); |
$upfile - имя загруженного файла на сервере
$dir.DIRECTORY_SEPARATOR.$upfile_name - директория назначения ПЛЮС слэш (прямой или обратный - это PHP решает) и название исходного файла. НО! НАСТОЯТЕЛЬНО НЕ РЕКОМЕНДУЕТСЯ сохранять файл с именем, которое задал пользователь, потому что он может загрузить PHP-скрипт или другую фигню и заменить ваши файлы на сервере. Поэтому $upfile_name лучше сгенерировать самому (или хотя бы заменить в нем все символы, кроме точек, букв и цифр на, скажем, подчеркивание - '_') _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
александр1
Зарегистрирован: 23.02.2013 Сообщения: 7
|
|
|
|
Многоуважаемый автор!
ВОТ КОД ФАЙЛА.
<?php
$dir = "upload";
if(isset($_FILES["upfile"]))
{
$upfile = $_FILES["upfile"]["tmp_name"];
$upfile_name = $_FILES["upfile"]["name"];
$upfile_size = $_FILES["upfile"]["size"];
$upfile_type = $_FILES["upfile"]["type"];
$error_code = $_FILES["upfile"]["error"];
if($error_code == 0)
{
echo "Имя файла на сервере: ".$upfile."<br>";
echo "Имя файла на компьютере пользователя:".$upfile_name. <br>";
echo "MIME-тип файла: ".$upfile_type."<br>";
echo "Размер файла: ".$upfile_size."<br><br>";
$upfile_name = $dir . $upfile_name;
copy($upfile,$upfile_name);
}
}
?>
ВОТ ЧТО ВЫДАЁТ.
Имя файла на сервере: C:\www\xampp\tmp\phpD785.tmp
Имя файла на компьютере пользователя: animegirl.jpg
MIME-тип файла: image/jpeg
Размер файла: 25648
ПОЛНЫЙ ПУТЬ В ДИРЕКТОРИЮ ТАКОЙ.
c/www/xampp/htdocs/sayt
ПОМОГИТЕ!!!
Допишите где нужно и что нужно или исправте что нужно.
Уже всё перепробовал нечего не получается.
Копирует изображение в директорию сайта и всё.
БУДУ ВАМ ОЧЕНЬ ПРИЗНАТЕЛЕН!!! |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
александр1, не нужно истерить! Раз код попал в книгу, он рабочий. А этот код рабочий вдвойне так, как он используется во многих моих проектах. Раз не получается, значит проблема в ВАШЕЙ системе. И нужно разобраться, почему код не работает на вашей системе.
Сейчас поставлю иксамп и посмотрю этот код. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
александр1
Зарегистрирован: 23.02.2013 Сообщения: 7
|
|
|
|
Может в XAMPP всё дело?
Вы проверили код? Все кавычки? Точки? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Только что проверил на своем XAMPP. Код рабочий подкорректировал только каталог, в который загружаются файлы:
<?php
$dir = "upload/";
if(isset($_FILES["upfile"]))
{
$upfile = $_FILES["upfile"]["tmp_name"];
$upfile_name = $_FILES["upfile"]["name"];
$upfile_size = $_FILES["upfile"]["size"];
$upfile_type = $_FILES["upfile"]["type"];
$error_code = $_FILES["upfile"]["error"];
if($error_code == 0)
{
echo "Имя файла на сервере: ".$upfile."<br>";
echo "Имя файла на компьютере пользователя:".$upfile_name. "<br>";
echo "MIME-тип файла: ".$upfile_type."<br>";
echo "Размер файла: ".$upfile_size."<br><br>";
$upfile_name = $dir . $upfile_name;
copy($upfile,$upfile_name);
}
}
?> |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
То есть проблема в том, что вы неправильно указываете каталог для загрузки. Может еще быть проблема с правами, если используется NTFS, но это маловероятно. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
александр1
Зарегистрирован: 23.02.2013 Сообщения: 7
|
|
|
|
НЕ ЧЕГО НЕ ПОЙМУ.
С Вашим кодом выдаёт вот что.
Имя файла на сервере: C:\www\xampp\tmp\php7E05.tmp
Имя файла на компьютере пользователя:getImage2.jpg
MIME-тип файла: image/jpeg
Размер файла: 96414
Warning: copy(upload/getImage2.jpg) [function.copy]: failed to open stream: No such file or directory in C:\www\xampp\htdocs\sayt\upload.php on line 30
ПЕРЕВОЖУ:
Внимание: копия (upload/getImage2.jpg) [function.copy]: не удалось открыть поток: Нет такого файла или каталога в C: \ WWW \ XAMPP \ htdocs \ Sayt \ upload.php на линии 30
На 30 линии вот эта строка:
copy($upfile,$upfile_name);
У меня ноутбук Wista.
Ранее делал другие вещи по видео уроку. У автора получается.
Делаю всё тоже самое у меня не получается.
Не получается только с php.
Постоянно выдаёт какую-нибудь ошибку. Запарило уже.
Судя по вашей книге Вы профессиональный программист.
Вашу книгу несколько рас прочитал и не могу понять где происходят ошибки.
Может XAMPP нужно установить в другую папку?
ПОМОГИТЕ. |
|
Вернуться к началу |
|
|
|
|