[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файлов на сервер
}{-key
Просмотрел немало схожих тем, но всё не то...
Значится, пытаюсь загрузить файл на сервер (делаю фото галерею с возможностью добавления фото). Для меня это нечто новенькое, поэтому полез в Инет за инфой. Все сделал как в примерах (вроде бы), только везде пишут, что форма html передаёт значения php - обработчику... я же сделал все в php-файле. Ниже приведен код:
PHP
if (isset($_POST["userfile"])) $userfile $_POST["userfile"];
            else 
$userfile '';
            echo(
"file = '$userfile'");
error_reporting(E_ALL);
            if (
$userfile == '')
            echo(
"
            <form enctype='multipart/form-data' action='photogallery.php' method='post'>
            Отправить эту фотографию:
            <input type='hidden' name='max_file_size' value='600000'>
            <input name='userfile' type='file'>
            <br><br>
            <input type='submit' value='Загрузить'>&nbsp;<input type='reset' value='Сбросить'>
            </form>"
);
            else
            {
                
$uploaddir 'gallery/'// Папка куда закачивать файлы
                
$extentions = array(".gif",".jpg"); // Массив разрешенных форматов файлов
                
$userfilesize $_FILES['file']['size']; // Вычисление размера загружаемого файла
                
$maxfilesize 600000// Максимально допустимый размер файла

                
$uploadfile $uploaddir basename($_FILES['$userfile']['name']);

                if((
in_array(strrchr($_FILES['$userfile']['name'], "."),$extentions)) && ($maxfilesize >= $userfilesize)) //
                
{
                    
// Если копирование произведено удачно, выводим сообщения
                    
if (move_uploaded_file($_FILES['$userfile']['tmp_name'], $uploadfile)) //
                    
{
                    
$fname = ($_FILES['file']['name']); // Вычисление имени файла и присвоение переменной
                    
echo ("<script language=\"javascript\">alert('Файл $fname успешно закачан!');</script>");
                    echo (
"<script language=\"javascript\">history.back();</script>");
                    }
                    else
                    {
                    echo (
"<script language=\"javascript\">alert(\"Ошибка при передаче файла на сервер!\");</script>");
                    echo (
"<script language=\"javascript\">history.back();</script>");
                    }
                }
                
// Если превышен максимальный размер файла
                
else if ($maxfilesize $userfilesize)
                {
                echo (
"<script language=\"javascript\">alert(\"Превышен максимальный размер файла!\");</script>");
                echo (
"<script language=\"javascript\">history.back();</script>");
                }
                else
                {
                
// Если расширение файла имеет недопустимое расширение
                
echo ("<script language=\"javascript\">alert('Файл имеет недопустимое расширение!');</script>");
                echo (
"<script language=\"javascript\">history.back();</script>");
                exit();
                }
            }

$_POST["userfile"] постоянно пустой, т.е. тыркаешь на загрузить, а значения не передаются.
Решил проверить четко примеры:
HTML
<html>
<head>
<title>Загрузка файлов на сервер</title>
</head>
<body>
<h2><p><b> Форма для загрузки файлов </b></p></h2>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value="Загрузить"><br>
</form>
</body>
</html>

upload.php:
PHP
<html>
<
head>
  <
title>Результат загрузки файла</title>
</
head>
<
body>

<? 
php
   
if($_FILES["filename"]["size"] > 1024*3*1024)
   {
     echo (
"Размер файла превышает три мегабайта");
     exit;
   }
   if(
copy($_FILES["filename"]["tmp_name"],
     
"c:/temp/".$_FILES["filename"]["name"]))
   {
     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"]);
   } else {
      echo(
"Ошибка загрузки файла");
   }
?> 

В результате получил тотальный вынос мозга. При *передаче* файла и загрузке php страницы, браузер выдаёт следующее:
Цитата
1024*3*1024) { echo ("Размер файла превышает три мегабайта"); exit; } if(copy($_FILES["filename"]["tmp_name"], "c:/temp/".$_FILES["filename"]["name"])) { echo("Файл успешно загружен
"); echo("Характеристики файла:
"); echo("Имя файла: "); echo($_FILES["filename"]["name"]); echo("
Размер файла: "); echo($_FILES["filename"]["size"]); echo("
Каталог для загрузки: "); echo($_FILES["filename"]["tmp_name"]); echo("
Тип файла: "); echo($_FILES["filename"]["type"]); } else { echo("Ошибка загрузки файла"); } ?>

т.е. тупо показывает код после знака ">" . при чем тестил два таких примера с разных источников, в первом получал идентичную кракозяблу.

php.ini:
Цитата
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = /tmp

; Maximum allowed size for uploaded files.
upload_max_filesize = 4M


Вроде бы всё что можно было написал. Жду ответов, т.к. у самого идеи иссякли.



Спустя 40 минут, 14 секунд (23.07.2009 - 11:30) ИНСИ написал(а):
попробуй так:
скрипт загрузки файла:
Свернутый текст
PHP
$uploadfile $_FILES['uploadfile']['tmp_name'];
            
/*Проверяем на пустоту поля*/
            
if(!empty($uploadfile))
            {
                
$uploadfile_size $_FILES['uploadfile']['size'];
                
/*Проверяем размер файла*/
                
if($uploadfile_size 1024*5*1024)
                {
                    
$uploadfile_name $_FILES['uploadfile']['name']; 
                    
$uploadfile_name_arr explode(".",$uploadfile_name);
                    
$type end($uploadfile_name_arr);
                    
                    
/*Перечисляем, какие именно файлы можно загружать и проверяем*/
                    
$extentions = array("jpg""jpe""jpeg");
                    if ((
in_array($type$extentions) or in_array(strtolower($type), $extentions)) and $uploadfile_name)
                    {
                        
$uploaddir 'uploads/';
                        
$home_url "www.site.ru";                    
                        
$name basename($home_url."_".date("YmdHis",time()).".".$type); //даем уникальное имя для файла
                        
$upload $uploaddir $name;
                        
                        if (
move_uploaded_file($uploadfile$upload))
                        {
                            echo 
"Файл загружен";
                        }
                        else { die(
"Файл не загружен"); }
                    }
                    else { die(
"Тип файла не будет загружен"); }
                }
                else { die(
"Размер файла больше 5 МБ"); }
            }
            else { die(
"Вы пытаетесь отправить пустое поле"); }


а форма любая, можно твою:
PHP
<form action="upload.phpmethod="post" enctype="multipart/form-data">
<
input type="file" name="uploadfile"><br>
<
input type="submit" value="Загрузить"><br>
</
form>


и еще совет. ты делаешь фотогалерею, значит надо делать ресайз и т.д. в этот код будет легко вставить =))

Спустя 40 минут, 52 секунды (23.07.2009 - 12:11) }{-key написал(а):
На выходе получил чистую страничку и если посмотреть исходный код с помощью браузера, то он отображает php код. это нормально? ))
файл конечно же не загрузился. сообщений вообще никаких.
есть идеи почему так?

Спустя 1 час, 18 минут, 52 секунды (23.07.2009 - 13:30) _CaXaP_ написал(а):
Идеи есть...

HTML
<html>
<head>
<title>Результат загрузки файла</title>
</head>
<body>

!!!<? php
if($_FILES["filename"]["size"] >!!! 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}

знаками "!!!" выделил кусок, который браузер считает за Тег(!). Поэтому всё остальное он считает не пхп кодом, а содержимым html тега.

Поэтому в файлах, содержащих html страницу с php вкраплениями, пишут обычно так:
HTML
<? php if($_FILES["filename"]["size"] > 1024*3*1024): ?>
Размер файла превышает три мегабайта
<? exit; ?>
<? endif; ?>

Спустя 15 минут, 42 секунды (23.07.2009 - 13:45) sergeiss написал(а):
Цитата (}{-key @ 23.07.2009 - 11:50)
<? php

Тут пробел не нужен. Этот тэг пишется слитно:
Код
<?php



Цитата (_CaXaP_ @ 23.07.2009 - 14:30)
Поэтому в файлах, содержащих html страницу с php вкраплениями, пишут обычно так:

А вот это - "от лукавого" smile.gif Потому что это называется "короткие тэги", которые могут быть отключены. В ПХП5, насколько я помню, они отключены "по умолчанию", хотя включить их можно.

Спустя 7 минут, 15 секунд (23.07.2009 - 13:53) }{-key написал(а):
Цитата
<? php if($_FILES["filename"]["size"] > 1024*3*1024): ?>

тут опять дойдёт до ">" и начнет выводить всё, что после ... т.е.
Цитата
1024*3*1024): ?>

с чего это вдруг такие приколы? у меня такое впервые

// пробел я сам поставил... забыл вернуть назад... но проблема всё та же.
написанный welbox2 ом пример так и не работает

Спустя 16 минут, 55 секунд (23.07.2009 - 14:10) sergeiss написал(а):
Цитата (}{-key @ 23.07.2009 - 13:11)
На выходе получил чистую страничку и если посмотреть исходный код с помощью браузера, то он отображает php код. это нормально? ))
файл конечно же не загрузился. сообщений вообще никаких.
есть идеи почему так?

Я вот это как-то не сразу прочитал... Если в браузер передается текст скрипта, то или ты его написал в HTML файле, или ты его вызываешь как простую страницу (на просмотр), или у тебя не включена поддержка ПХП (либо включена неправильно).

Спустя 9 минут, 42 секунды (23.07.2009 - 14:19) }{-key написал(а):
пример welbox2 по-ходу потому и не работает, что считает <?php ....?> тегом... который не работает, но выводит его в тексте кода. Интересно, поэтому у меня не пашет *моя* страничка и не передает никаких значений?
пробовал тестить: когда из строчки <form enctype='multipart/form-data' action='photogallery.php' method='post'> убрать enctype='multipart/form-data' , то значения таки передаются, но ясно, что файл без неё не передать.
мб дело в конфигурационных файлах? хз что там нужно делать, чтобы примеры, которые у всех работают заработали и у меня.
Все же хочется разобраться с этим, а то как-то стремно заливать фото на сайты вроде ipicture sad.gif

Спустя 14 минут, 16 секунд (23.07.2009 - 14:34) }{-key написал(а):
Цитата
Если в браузер передается текст скрипта, то или ты его написал в HTML файле
upload.php до php кода , как положено, прописано
HTML
<html>
<head>
<title>Результат загрузки файла</title>
</head>
<body>

после:
HTML
</body>
</html>

Цитата
ты его вызываешь как простую страницу (на просмотр)

это как ?
Цитата
у тебя не включена поддержка ПХП (либо включена неправильно).

нормально все работает. уже почти весь сайт написан (php + Mysql). проблема вся уперлась в загрузку файлов. как и писал выше, написал все по примеру, но не вышло, начал разбирать примеры... а они, выходит, не работают. (картинки в БД заливать не стал, т.к. не раз встречал, как писали, что это глупо)

Спустя 12 минут, 24 секунды (23.07.2009 - 14:46) _CaXaP_ написал(а):
Попробуйте в upload.php сделать такой код:

HTML
<html>
<head>
<title>Результат загрузки файла</title>
</head>
<body>
<? echo $_FILES["filename"]["size"]; ?>
<? echo $_SERVER['DOCUMENT_ROOT'] ?>
</body>
</html>


Хотя бы будет видно - работает ли приём файлов в принципе... да и пхп тоже...

Но вообще странно... Ведь <? php - это по сути слово "php" в php коде - должна была вылететь ошибка - поэтому похоже, что php не обрабатывается вообще.

2sergeiss
про короткие теги даже не знал, спс о_О
Правда нигде ещё не видел их отключёнными smile.gif

Спустя 5 минут, 33 секунды (23.07.2009 - 14:52) }{-key написал(а):
попробовал. все так же выводит пустую страничку, в тексте отображает пхп код как теги

Спустя 35 минут, 15 секунд (23.07.2009 - 15:27) _CaXaP_ написал(а):
Получается, что на всех страницах пхп код обрабатывается и только на upload.php не обрабатывается? о___О
Это похоже на чудеса.

Я б порекомендовал пошагово проверять все варианты - сначала убрать вообще загрузку файла (сделать форму просто с текстовым полем) и проверить - будет ли работать upload.php - если не будет - значит проблема не в файле, а в пхп (тогда надо будет посмотреть чем upload.php отличается от остальных файлов проекта, которые, по вашим словам, работают).
Если вдруг заработает, тогда проблема действительно в отправке файла и тут уже надо будет думать дальше.

Спустя 34 минуты, 36 секунд (23.07.2009 - 16:01) }{-key написал(а):
Цитата
Это похоже на чудеса.

+1
Так и есть ph34r.gif
упростил до элементарного - всё равно выводит черт-знает что,
скопировал правильно отображаемый код (с другого файла) - отображается некорректно. хз что это такое

update: скопировал код в *рабочий файл* - все отображается как нужно, ща его потестю на передачу файла и текста =\

update: передача текста работала. взял опять скопировал полностью текст кода в *нерабочий* файл... и он заработал. весело ph34r.gif

бгг вот я нуб smile.gif
sergeiss был прав, только сейчас заметил, что дело не в файле, а в кладке, в которой я открывал .... в начале стояла приставка не http а file.
скажи он об этом яснее, было бы конечно лучше
пример заработал. начну доводить до ума свой сайт.

Спустя 5 часов, 8 минут, 47 секунд (23.07.2009 - 21:10) ИНСИ написал(а):
biggrin.gif смешно все получилось =)))

Спустя 5 минут, 19 секунд (23.07.2009 - 21:16) sergeiss написал(а):
Цитата (}{-key @ 23.07.2009 - 17:01)
sergeiss был прав, только сейчас заметил, что дело не в файле, а в кладке, в которой я открывал .... в начале стояла приставка не http а file.
скажи он об этом яснее, было бы конечно лучше

(из рекламы) "Родители плохого не посоветуют!" smile.gif

Хотя я и не знаю, как уж яснее можно было сказать?

Спустя 1 год, 5 месяцев, 10 дней, 19 часов, 30 минут, 43 секунды (4.01.2011 - 17:46) kolyabis написал(а):
Доброго дня всем. Вопрос по теме описанной выше. Надеюсь подскажите мне мою проблемку и на что обратить внимание.

Есть форма загрузки файлов. upload.html

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename">
<input type="submit" value="отправить"></form>

И файл обработки для загрузки. upload.php
<?php
error_reporting(E_ALL); //Выводит ошибки принудительно
$min_limit = 0; // тут пишем размер ограничения в Мб
$max_limit = 15; //максимальный лимит загружаемого файла
if($_FILES["filename"]["size"] > 1024*$max_limit*1024)
{
echo ("Размер файла превышает $max_limit Мб");
exit;
}
elseif($_FILES["filename"]["size"] < 1024*$min_limit*1024)
{
echo("Размер файла меньше $min_limit МБ<br>");
exit;
}

if (copy($_FILES["filename"]["tmp_name"],
"c:/WebServers/home/upload/www/imegs/1/".$_FILES["filename"]["name"]))
if (copy($_FILES["filename"]["tmp_name"],
"c:/WebServers/home/upload/www/imegs/2/".$_FILES["filename"]["name"]))
{
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"]);
} else {
echo("Ошибка загрузки файла");
}
?>


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

Мне нужно чтоб файлы с размером $min_limit = 0; сохранялись в каталог c:/WebServers/home/upload/www/imegs/2/
А файлы с размером $max_limit = 15;
сохранялись в каталог c:/WebServers/home/upload/www/imegs/1/

Подскажите пожалуйста, так как в ПХП я новенький и как сделать проверку загруженного файла, а потом перенаправить его туда куда мне надо мозги пока не понимают.

Спустя 3 часа, 35 минут, 47 секунд (4.01.2011 - 21:22) ИНСИ написал(а):
kolyabis примерно так получится:
$minLimit = 0; // тут пишем размер ограничения в Мб
$maxLimit = 15; //максимальный лимит загружаемого файла

$pathMin = '/uploads/min/'; // путь, куда надо сохранить файл с 0 мб
$pathMax = '/uploads/max/'; // а тут путь, превышающий максимальный лимит МБ
$pathFile = '/uploads/normal/'; // путь, куда загружаются файлы, которые соответствуют стандарту

$uploadFile = 'filename'; // имя файла в форме

if(!empty($_FILES[$uploadFile]['tmp_name'])) { // если загружается файл
$ext = strtolower(str_replace('.', '', strrchr($_FILES[$uploadFile]['name'],'.'))); // узнаем тип файла
$newName = uniqid() . '.' . $ext; // создаем новое имя файла

if($_FILES[$uploadFile]['size']) < 1024 * $minLimit * 1024) // если файл меньше минимального размера
$uploadPath = $pathMin . $newName;

else if($_FILES[$uploadFile]['size']) > 1024 * $maxLimit * 1024) // если файл, больше максимального размера
$uploadPath = $pathMax . $newName;

else // если файл подходит по стандартам
$uploadPath = $pathFile . $newName;

if(!move_uploaded_file($_FILES[$uploadFile]['tmp_name'],$uploadPath)) exit('Ошибка при загрузке файла.');
else exit('Файл успешно загружен');

}

ВАЖНО!!! Поставь правильные пути к загрузке файлов!!! Если будут вопросы, пиши...

Спустя 15 часов, 45 минут, 7 секунд (5.01.2011 - 13:07) kolyabis написал(а):
Огромное спасибо, именно так как мне и надо)))

Спустя 35 минут, 28 секунд (5.01.2011 - 13:43) ИНСИ написал(а):
kolyabis пожалуйста.

Спустя 21 день, 4 часа, 39 минут, 15 секунд (26.01.2011 - 18:22) sezon написал(а):
welbox2
Начал изучать php, были некоторые проблемы с загрузкой файла - поизучал ваши скрипты. Сразу стало ясно как и чего!
Спасибо друг!

Спустя 1 месяц, 2 дня, 18 часов, 27 минут, 16 секунд (1.03.2011 - 12:49) kolyabis написал(а):
Доброго дня всем, подскажите, почему в данном скрипте работа сценария доходит только до проверки. В чем может быть проблема???

<?php
$minLimit = 3; // тут пишем размер ограничения в Мб
$pathMin = '../media_img/'; // путь, куда надо сохранить файл с 0 мб
$uploadFile = 'filename'; // имя файла в форме

if($_FILES[$uploadFile]['tmp_name']) { // если загружается файл

if($_FILES[$uploadFile]["type"] !="image/gif" ||
$_FILES[$uploadFile]["type"] !="image/png" ||
$_FILES[$uploadFile]["type"] !="image/jpg" ||
$_FILES[$uploadFile]["type"] !="image/jpeg") {
echo "Доступна загрузка только gif, png, jpg, jpeg файлов";
exit;
}

$ext = $_FILES[$uploadFile]['name']; // узнаем тип файла
$newName = $ext; // создаем новое имя файла

if($_FILES[$uploadFile]['size'] < 1024*$minLimit*1024) // если файл меньше минимального размера
$uploadPath = $pathMin . $newName;


{
echo("Характеристики файла: <br>");
echo("Имя файла: ");
echo($_FILES["filename"]["name"]);
echo("<br>Тип файла: ");
echo($_FILES["filename"]["type"]);
}
if(!move_uploaded_file($_FILES[$uploadFile]['tmp_name'],$uploadPath))
exit('<br>Ошибка при загрузке файла.');
else
exit('<br><p>Файл успешно загружен</p>');
}

?>

Спустя 1 час, 7 минут, 30 секунд (1.03.2011 - 13:57) Ser18 написал(а):
А если какой нибудь text.txt переименовать в text.jpg

Загрузится на сервер?

Спустя 5 минут, 55 секунд (1.03.2011 - 14:03) kolyabis написал(а):
В таком виде нет, но если из скрипта убрать exit; то загрузится что захочешь если файл не привышает 3мб, вот в этом то и проблема.

Спустя 14 минут, 47 секунд (1.03.2011 - 14:17) Ser18 написал(а):
Проверяйте через

$image = getimagesize($_FILES['uploadfile']['tmp_name']);
//Если это картинка, то в
$image['0']; //Будет ширина картинки
$image['1'];//Будет высота картинки

Если это не картинка, то они будут пусты

Спустя 9 минут, 55 секунд (1.03.2011 - 14:27) kolyabis написал(а):
Такой вариант я тоже пробовал, он не то что не работает, даже ошибки не выдает.
Быстрый ответ:

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