Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: суперглобальный массив $_FILES
 
 автор: jenvlasov   (05.02.2009 в 00:27)   письмо автору
 
 

Здравствуйте!!!Подскажите пожалуйста,как работает суперглобальный массив $_FILES?

  Ответить  
 
 автор: BinLaden   (05.02.2009 в 00:49)   письмо автору
 
   для: jenvlasov   (05.02.2009 в 00:27)
 

http://ru.php.net/manual/ru/features.file-upload.post-method.php

  Ответить  
 
 автор: Trianon   (05.02.2009 в 00:50)   письмо автору
 
   для: jenvlasov   (05.02.2009 в 00:27)
 

массив не работает.
Массив хранит информацию о файлах, загруженных на сервер в процессе вызова скрипта.
методика работы с ними детально описана в руководстве

  Ответить  
 
 автор: jenvlasov   (06.02.2009 в 21:05)   письмо автору
 
   для: Trianon   (05.02.2009 в 00:50)
 

Спасибо,с теорией о массиве $_FILES я разобрался.Теперь следующее:у меня стоит задача загрузить большую картинку из шаблона, хранящегося в папке на одном из локальных дисков(например,диск E) в папку с уникальным именем foto,хранящейся на локальном сервере.Информацию,как реализовать эту задачу,я нашел и изучил.Но при ее реализации возникли некоторые трудности,ошибки.Вот,собственно,что я сделал:
Файл со скриптом modul.php:
(имеется форма)
<?
include ("dbase.php");
$res = mysql_query("SELECT * FROM template");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Модуль добавления шаблона</title>
<script language="javascript">

function a()
{
location = 'add.php';
}
</script>
</head>
<body>
<form method="POST" name="forma" action="add.php" enctype="multipart/form-data">
<? echo "<select name=\"temi\">";
while ($myrow = mysql_fetch_array ($res))
{
printf ("<option onclick=\"a()\">
%s", $myrow['kategory']);
}
echo "</select>";
?>&nbsp;
<input type=checkbox name="flash" value="Да">flash&nbsp;
<input type=checkbox name="psd" value="Да">psd<br>
Новая категория:<br>
<?
if (isset($_POST['kategory']))
{
$kategory = htmlspecialchars(stripslashes($_POST['kategory']));
}
else
{
$kategory = "";
}
?>
<input type=text name="kategory" value="<?=$kategory?>"><br>
Путь:<br>
<input type="file" name="kartinka"><br><br>
<input type=submit name="button" value="Добавить"><br><br>
</form>
</body>
</html>
В выпадающий список select добавляется значение поля Новая категория
Данные этой формы передаются обработчику-файлу add.php, который:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
</head>
<body>
<?php
if (isset($_POST['psd']))
{
$psd = "Да";
}
else
{
$psd = "Нет";
}
if (isset($_POST['flash']))
{
$flash = "Да";
}
else
{
$flash = "Нет";
}
if (isset($_POST['kategory']))
{
$kategory = htmlspecialchars(stripslashes($_POST['kategory']));
}
else
{
$kategory = "";
}
$dir = "c:/WebServers/home/jenua/www/jencars.ru/mashins/foto/";
//создаем папку foto на локальном сервере,куда будем загружать большую картинку и путь к ней/
$path = dirname ($_FILES ['kartinka']['name');
//имя папки.где первоначально хранилась эта картинка
$picture = $dir.basename ($_FILES ['kartinka']['name']);
//путь к загруженной картинке(в папку foto)
if (move_uploaded_file($_FILES ['kartinka']['tmp_name'], $picture))
{
$db = mysql_connect("localhost", "dgtu, evgeny");
mysql_select_db("avtomobili", $db);
//Далее вставляем в таблицу template БД следующие данные:
$result = mysql_query("INSERT INTO template (kategory, picture, flash, psd, path) VALUES ('$kategory', '$picture', '$flash','$psd', '$path')");
}
?>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="30%">
<ul>
<?php
echo "$path<br>";
?>
</ul>
</td>
<td width="70%" align="center">
<?php
echo "<img src=$picture>";
$res = mysql_query("SELECT * FROM template");
$myrow = mysql_fetch_array($res);

?>
</td>
</tr>
</table>
</body>
</html>
И тут возникают ошибки:обратный слэш выдает ошибку в PHP-коде;при заполнении поля type="file" name="kartinka" с помощью кнопки Обзор..
получаем путь к картинке(ее первоначльное нахождение)

  Ответить  
 
 автор: jenvlasov   (06.02.2009 в 23:06)   письмо автору
 
   для: jenvlasov   (06.02.2009 в 21:05)
 

и насколько я понял этот путь присваивается $_FILES['kartinka']['name']Но этого почему-то не происходит.И в итоге путь выглядит в виде точки,одной точки,что неправильно.И при взятии из таблицы БД очередной ее строки как массива картинка почему-то не выводится.ПОчему???

  Ответить  
 
 автор: nikita2206   (06.02.2009 в 23:15)   письмо автору
 
   для: jenvlasov   (06.02.2009 в 23:06)
 

посмотри вот эти строки:
//создаем папку foto на локальном сервере,куда будем загружать большую картинку и путь к ней/
$path = dirname ($_FILES ['kartinka']['name');
//имя папки.где первоначально хранилась эта картинка


там синтаксическая ошибка, dirname ($_FILES ['kartinka']['name');
вы забыли перед закрывающейся скобкой поставить квадратную...

скачайте какой нибудь ide для php, например Eclipse, он вам скажет где и какая ошибка...

  Ответить  
 
 автор: sim5   (07.02.2009 в 04:07)   письмо автору
 
   для: jenvlasov   (06.02.2009 в 21:05)
 

Так делать нельзя:
$dir = "c:/WebServers/home/jenua/www/jencars.ru/mashins/foto/";

если вы пишите код для последующего размещения на удаленном сервере.

  Ответить  
 
 автор: nikita2206   (07.02.2009 в 10:43)   письмо автору
 
   для: sim5   (07.02.2009 в 04:07)
 

да это походу он знает
Для jenvlasov:
вместо всей этой ***, пишите так: $dir = $_SERVER['DOCUMENT_ROOT'].'/mashins/foto/';

  Ответить  
 
 автор: sim5   (07.02.2009 в 10:44)   письмо автору
 
   для: nikita2206   (07.02.2009 в 10:43)
 

Если бы знал, не писал бы.

  Ответить  
 
 автор: jenvlasov   (07.02.2009 в 17:53)   письмо автору
 
   для: sim5   (07.02.2009 в 10:44)
 

Хорошо,с этим понятно.Как выводить картинки -я тоже разобрался,устранив ошибки.У меня такой вопрос:у меня есть форма:

<form method="POST" name="forma" action="add.php" enctype="multipart/form-data">
Путь:<br>
<input type="file" name="kartinka"><br><br>
<input type=submit name="button" value="Добавить"><br><br>
</form>

нажимая на кномпку Обзор..,я получаю список файлов.Выбрал один из них,допустим на диске E, получил к нему путь, например:"E:\Шаблоны\008\8.jpg",отсылаю этот путь файлу-обработчику add.php,который обрабатывает этот путь так:
как я понял в add.php переданный путь из формы присваивается элементу многомерного суперглобального массива $_FILES['kartinka']['name'].Для проверки я вывел этот элемент на экран и получил следующее:"8.jpg"НЕ понял,куда делся :E:\Шаблоны\008\,ведь моя задача -выводить исходный путь к картинке 8.jpg - E:\Шаблоны\008\. Где моя ошибка?

  Ответить  
 
 автор: jenvlasov   (07.02.2009 в 18:02)   письмо автору
 
   для: jenvlasov   (07.02.2009 в 17:53)
 

Конечно $_FILES['kartinka']['name'] содержит только оригинальное имя файла на компьютере клиента.Но как же путь к файлу,есть ли какие-нибудь способы предотвращения его потери?

  Ответить  
 
 автор: sim5   (07.02.2009 в 18:10)   письмо автору
 
   для: jenvlasov   (07.02.2009 в 17:53)
 

Путь к файлу на компьютере клиента вам совсем не нужен. Изображение от клиента будет загружено сперва в tmp кталог сервера, от куда вы его обязаны переместить. А вот тут, используйте пути сервера, а не клиента (потому и не нужен он вам). Путь вы можете указывать абсолютный (формируете с помощью $_SERVER), либо относительный (от корневой папки своих документов на сервере).

  Ответить  
 
 автор: jenvlasov   (07.02.2009 в 22:52)   письмо автору
 
   для: sim5   (07.02.2009 в 18:10)
 

С изображением все в поряде,эт я сразу понял,что и куда помещается,а вот с путем были трудности.Спасибо за консультацию

  Ответить  
 
 автор: sim5   (08.02.2009 в 05:44)   письмо автору
 
   для: jenvlasov   (07.02.2009 в 22:52)
 

Просто запомните простую вещь - у клиента на компьютере локальные пути, но путь, например, E:\Шаблоны\008\ может быть у клиента А, а у других клиетов даже диска Е может не быть, не говоря уже о папке "Шаблоны\008\". Это означает, что указав такой путь в качестве доступа к изображению, это изображение смог бы видеть только пользователь А, а другие нет.
Путь "E:\Шаблоны\008\" используется браузером только лишь для того, чтобы знать, от куда взять данные для отправки формой. А доступ для всех пользователей будет осуществляться из одного для всех места, по одному и тому же пути, и этот путь для них будет сетевым:
http://domain/path/filename.ext
Только не давайте в качестве путей (path) русских наименований да еще с пробелами, в различном регистре. Большой необходимости в этом нет, а головной боли будет меньше.

  Ответить  
 
 автор: jenvlasov   (08.02.2009 в 18:49)   письмо автору
 
   для: sim5   (08.02.2009 в 05:44)
 

Тогда подскажите как быть при работе с локальным сервером,расположенным у меня на компьютере.Как передать из формы,оснащенной кнопкой Обзор,т.е(<input type=file name=kartinka>)исходный путь к файлу (путь к файлу до его загрузки на локальный сервер(который расположен на диске С или Z)-например файл первоначально хранился на диске E или D-файлу-обработчику,чтобы он,например,вывел этот путь на экран.Я попробовал воспользоваться вашими рекомендациями по массиву $_SERVER-но данный массив работает только с документами, расположенными на сервере.$_FILES-возвращает только имя файла,а не его путь

  Ответить  
 
 автор: jenvlasov   (08.02.2009 в 18:51)   письмо автору
 
   для: jenvlasov   (08.02.2009 в 18:49)
 

ДЛя примера возьмем тот же путь к файлу E:\шаблоны\008\008.jpg

  Ответить  
 
 автор: sim5   (08.02.2009 в 20:06)   письмо автору
 
   для: jenvlasov   (08.02.2009 в 18:49)
 

А зачем он вам, даже на локальном сервере? Если вам так охота этот путь получить на сервере, то нужно воспользоваться услугами JS, получив у input type=file значение атрибута value, и передав его на сервер скрытым полем формы. Но еще раз повторяю - он вам совсем не к чему.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования