Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Обработка file upload в PHP   Найти похожие ветки 

 
Просто Джо ©   (2005-06-12 23:43) [0]

Вот, заставила судьба учить PHP. Учу. Уже пару дней :))
Попытался тут в обучающих целях сварганить загрузку файлов на сервер посредством простой типовой формы с методом POST и сценарием, в который по-идее должны передаваться данные этого файла. И его имя. Вроде все просто до безобразия, ан нет.

Файл 1.html со стандартной формой для загрузки файла на сервер
=======

<html>
<head></head>

<body>
 <form enctype="multipart/form-data" id="data" metod="POST" action="file_upload.php">
 <input name="picfile" type="file" size="50"><br>
 <input name="submit" type="submit">
 </form>
</body>

</html>

=======

Файл file_upload.php со скриптом, пытающимся вывести имя файла, загруженного на сервер. Но безрезультатно.


<?php

extract($_REQUEST);
extract($_POST);
extract($_FILES);

// этот массив пуст
echo $_FILES["picfile"]["name"];

 if ($picfile)
 {
   if (is_uploaded_file($picfile))
   {
     // и в этой переменной ничего нет
     echo $picfile;
   }
 }
?>


При выполнении сценария имя файла не выводится. Где ковырять? Может, какие-то еще настройки в php.ini? Кроме file_uploads = On, конечно.
Знатоки PHP, подскажите в чем грабли. Опс. PHP 5 версии.


 
phpGuru   (2005-06-13 01:33) [1]

http://www.web-faq.ru/showstat.php?viewfull=php&id=15


 
Просто Джо ©   (2005-06-13 01:38) [2]


>  [1] phpGuru   (13.06.05 01:33)

Спасибо, пхпГуру. Похоже - статья дельная. Но я уже сегодня этих статей перечитал... бр... Пойду запасусь пивком и прочту-ка на ночь еще одну, может, снизойдет на меня благодать :))
Спасибо еще раз, буду читать.


 
Просто Джо ©   (2005-06-13 02:30) [3]

Увы... во всех статьях одни и те же примеры и рекоммендации.
Но, как ни крути, все равно ничего не работает :(
Глубоко собака зарылась, однако...


 
VictorT ©   (2005-06-13 02:52) [4]

На первый взляд, вроде всё правильно. Счас попробую у себя, хоть будем знать, дело в скрипте или в сервере.


 
VictorT ©   (2005-06-13 02:56) [5]

О, первую ошибку уже нашёл, сам на такое напоролся, это отдельная и длинная история :D

> method="POST"


 
Просто Джо ©   (2005-06-13 03:00) [6]

А!!! Позор на мою голову, елы-палы. Огромное спасибо, Витя, теперь все ОК.
Уже, блин, весь в мыле был.


 
VictorT ©   (2005-06-13 03:02) [7]

Обрати внимание на второй пост :D
http://deep.webest.net/forum/reply.php?num=&id=17334
А я пока смотрю, что там ещё не так.


 
VictorT ©   (2005-06-13 03:04) [8]


> теперь все ОК

Всё ОК? А у меня ругается вот так: Notice: Array to string conversion in z:\home\rimit\www\file_upload.php on line 12


 
Просто Джо ©   (2005-06-13 03:06) [9]

> А я пока смотрю, что там ещё не так.
Да вроде все заработало, слава тебе, Господи.
Однако, забавное совпадение. "Проблему" уже стоит выносить в ФАК :)))


 
Просто Джо ©   (2005-06-13 03:17) [10]

Поменял на такое и работает отлично:

<?php

if (move_uploaded_file($_FILES["picfile"]["tmp_name"], $_FILES["picfile"]["name"]))
{
 print "Uploaded";
}
else
{
 print "NOT UPLOADED!";
}
?>


 
VictorT ©   (2005-06-13 03:22) [11]


> Просто Джо ©   (13.06.05 3:17) [10]

На это код у меня не ругается. Только, имхо, нужно точнее указать, куда именно переносить загруженный файл. У меня его перенесло в папку apache


 
Просто Джо ©   (2005-06-13 03:30) [12]

У меня тоже сначала в Апач в корень писало... Да вроде и с этим разобрался. Прилепляешь слева путь к нужной директории - и пишет туда без проблем. Но мне, в принципе, это и не особенно важно, мне главное, чтобы он аплоадил во временную папку, так как файлик тут же будет в БД затаскиваться.
Спасибо еще раз, что ткнул носом в опечатку, просто беда какая-то была :0)


 
VictorT ©   (2005-06-13 03:34) [13]


> так как файлик тут же будет в БД затаскиваться.

Имхо, не лучший способ, лучше всё-таки файл в файловой системе, а в БД просто на него указатель. Хотя, конечно, нужно смотреть по конкретной ситуации, которую я не знаю.


 
VictorT ©   (2005-06-13 03:40) [14]

Реляционные базы данных хорошо работают с типизированными значениями
фиксированного размера. В MySQL поддерживаются типы переменной длины, например BLOB и TEXT, но управлять ими сложнее. Такого рода информацию лучше
хранить в файлах, а в базе данных достаточно запоминать путевые имена этих файлов
в столбцах типа CHAR. Если база данных используется в Web-приложениях, помните о том, что у Web-сервера есть кеш-буферы загружаемых файлов изображений и аудио-клипов, поэтому он будет работать с такими файлами быстрее, чем MySQL.
Еще одна причина избегать столбцов подобного типа заключается в появлении записей переменной длины со всеми вытекающими отсюда последствиями. При внесении изменений такая таблица становится  фрагментированной, что приводит к замедлению доступа к ней. Для извлечения динамической строки может потребоваться несколько операций чтения, что также не способствует повышению производительности.


 
Просто Джо ©   (2005-06-13 03:56) [15]


>  [14] VictorT ©   (13.06.05 03:40)

Да там, собственно, специализированный тип данных. Пространственные данные БД PostgreSQL. Они внутренне хранятся как текст, но по ним строится индекс и поддерживаются пространственные запросы. А я пока изгаляюсь над этим делом, попутно изучая PHP. В конечном итоге, фронт-енд будет все-равно на Делфи и данные будут пересылаться непосредственно серверу БД, минуя веб-сервер.


 
phpGuru   (2005-06-14 00:49) [16]

Проверьте файл php.ini на правильность этих директив:

extension_dir = D:/usr/PHP3/extensions
enable_dl = On
file_uploads = On
upload_tmp_dir = D:/usr/PHP3/uploads
upload_max_filesize = 8M
register_globals = on


 
Piter ©   (2005-06-14 01:01) [17]

А я гружу вот так, например:

if($subaction == "upload")
   {
       if(!$image){ $image = $HTTP_POST_FILES["image"]["tmp_name"]; }
       if(!$image_name){ $image_name = $HTTP_POST_FILES["image"]["name"]; }


 
Просто Джо ©   (2005-06-14 01:07) [18]

Спасибо, ребята, я уже разобрался. Дело было в опечатке :)


 
VictorT ©   (2005-06-14 13:52) [19]

Уже оффтопим, но проблема и так уже исчерпана, думаю, можно :
А что такое > Пространственные данные? Не слышал про такое.


 
Просто Джо ©   (2005-06-14 14:34) [20]


> Пространственные данные?

Пространственные координаты (поддержка 3-х мерных, но мне нужно только 2-х мерные, так что "с запасом":). Соответственно, введены и такие типы данных, как POLYGON, LINE и т.д. По этим полям можно строить так называемый GIST-индекс. Для этих полей существуют специальные операторы для SQL-запросов, такие как:
~=    объекты геометрически идентичны
@    первый объект полностью содержится во втором
&&    объекты пересекаются
и так далее.
Кроме того, имеется куча встроенных функций для этих типов.
Насколько мне известно, подобная вещь (из крутых серверов БД) есть только в Оракл.
Формат предстваления этих данных - текстовый, поддерживает стандарт OpenGIS. Но работает довольно шустро, так как индекс весьма эффективный.


 
VictorT ©   (2005-06-15 15:10) [21]

Круто, не слышал про такое.



Страницы: 1 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.06 c
14-1118605246
Ferg
2005-06-12 23:40
2005.07.11
DelphiX


1-1119362853
markers
2005-06-21 18:07
2005.07.11
Реестр


11-1102869559
Boguslaw
2004-12-12 19:39
2005.07.11
KOL IDE again


3-1117083340
Dmitry_VP
2005-05-26 08:55
2005.07.11
Firebird


14-1118309693
КаПиБаРа
2005-06-09 13:34
2005.07.11
Помогите решить практическую задачу