|
|
|
| Здравствуйте!!!Подскажите пожалуйста,как работает суперглобальный массив $_FILES? | |
|
|
|
|
|
|
|
|
для: jenvlasov
(05.02.2009 в 00:27)
| | массив не работает.
Массив хранит информацию о файлах, загруженных на сервер в процессе вызова скрипта.
методика работы с ними детально описана в руководстве | |
|
|
|
|
|
|
|
для: 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>";
?>
<input type=checkbox name="flash" value="Да">flash
<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 в 21:05)
| | и насколько я понял этот путь присваивается $_FILES['kartinka']['name']Но этого почему-то не происходит.И в итоге путь выглядит в виде точки,одной точки,что неправильно.И при взятии из таблицы БД очередной ее строки как массива картинка почему-то не выводится.ПОчему??? | |
|
|
|
|
|
|
|
для: jenvlasov
(06.02.2009 в 23:06)
| | посмотри вот эти строки:
//создаем папку foto на локальном сервере,куда будем загружать большую картинку и путь к ней/
$path = dirname ($_FILES ['kartinka']['name');
//имя папки.где первоначально хранилась эта картинка
|
там синтаксическая ошибка, dirname ($_FILES ['kartinka']['name');
вы забыли перед закрывающейся скобкой поставить квадратную...
скачайте какой нибудь ide для php, например Eclipse, он вам скажет где и какая ошибка... | |
|
|
|
|
|
|
|
для: jenvlasov
(06.02.2009 в 21:05)
| | Так делать нельзя:
$dir = "c:/WebServers/home/jenua/www/jencars.ru/mashins/foto/";
|
если вы пишите код для последующего размещения на удаленном сервере. | |
|
|
|
|
|
|
|
для: sim5
(07.02.2009 в 04:07)
| | да это походу он знает
Для jenvlasov:
вместо всей этой ***, пишите так: $dir = $_SERVER['DOCUMENT_ROOT'].'/mashins/foto/'; | |
|
|
|
|
|
|
|
для: nikita2206
(07.02.2009 в 10:43)
| | Если бы знал, не писал бы. | |
|
|
|
|
|
|
|
для: 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 в 17:53)
| | Конечно $_FILES['kartinka']['name'] содержит только оригинальное имя файла на компьютере клиента.Но как же путь к файлу,есть ли какие-нибудь способы предотвращения его потери? | |
|
|
|
|
|
|
|
для: jenvlasov
(07.02.2009 в 17:53)
| | Путь к файлу на компьютере клиента вам совсем не нужен. Изображение от клиента будет загружено сперва в tmp кталог сервера, от куда вы его обязаны переместить. А вот тут, используйте пути сервера, а не клиента (потому и не нужен он вам). Путь вы можете указывать абсолютный (формируете с помощью $_SERVER), либо относительный (от корневой папки своих документов на сервере). | |
|
|
|
|
|
|
|
для: sim5
(07.02.2009 в 18:10)
| | С изображением все в поряде,эт я сразу понял,что и куда помещается,а вот с путем были трудности.Спасибо за консультацию | |
|
|
|
|
|
|
|
для: jenvlasov
(07.02.2009 в 22:52)
| | Просто запомните простую вещь - у клиента на компьютере локальные пути, но путь, например, E:\Шаблоны\008\ может быть у клиента А, а у других клиетов даже диска Е может не быть, не говоря уже о папке "Шаблоны\008\". Это означает, что указав такой путь в качестве доступа к изображению, это изображение смог бы видеть только пользователь А, а другие нет.
Путь "E:\Шаблоны\008\" используется браузером только лишь для того, чтобы знать, от куда взять данные для отправки формой. А доступ для всех пользователей будет осуществляться из одного для всех места, по одному и тому же пути, и этот путь для них будет сетевым:
http://domain/path/filename.ext
Только не давайте в качестве путей (path) русских наименований да еще с пробелами, в различном регистре. Большой необходимости в этом нет, а головной боли будет меньше. | |
|
|
|
|
|
|
|
для: sim5
(08.02.2009 в 05:44)
| | Тогда подскажите как быть при работе с локальным сервером,расположенным у меня на компьютере.Как передать из формы,оснащенной кнопкой Обзор,т.е(<input type=file name=kartinka>)исходный путь к файлу (путь к файлу до его загрузки на локальный сервер(который расположен на диске С или Z)-например файл первоначально хранился на диске E или D-файлу-обработчику,чтобы он,например,вывел этот путь на экран.Я попробовал воспользоваться вашими рекомендациями по массиву $_SERVER-но данный массив работает только с документами, расположенными на сервере.$_FILES-возвращает только имя файла,а не его путь | |
|
|
|
|
|
|
|
для: jenvlasov
(08.02.2009 в 18:49)
| | ДЛя примера возьмем тот же путь к файлу E:\шаблоны\008\008.jpg | |
|
|
|
|
|
|
|
для: jenvlasov
(08.02.2009 в 18:49)
| | А зачем он вам, даже на локальном сервере? Если вам так охота этот путь получить на сервере, то нужно воспользоваться услугами JS, получив у input type=file значение атрибута value, и передав его на сервер скрытым полем формы. Но еще раз повторяю - он вам совсем не к чему. | |
|
|
|