|
 2.4 Кб |
|
|
<?php
function upload (){
global $link; //cоединение с базой
switch($mod){
case 1: $uploaddir = $_SERVER['SERVER_NAME']. '/content/menu/';
break;
case 11:
$uploaddir = $_SERVER['SERVER_NAME'].'/content/advices/';
break;
case 13:
$uploaddir = $_SERVER['SERVER_NAME'].'/content/quest/';
break;
case 4:
$uploaddir = $_SERVER['SERVER_NAME'].'/content/contact/';
break;
}
if (isset($_FILES['myfile']['name'])) {
$uploadfile = $uploaddir . $_FILES['myfile']['name'];
if (move_uploaded_file($_FILES['myfile']['tmp_name'], $uploadfile)){
$name=$_FILES['myfile']['name'];
$size=$_FILES['myfile']['size'];
$name=basename($uploadfile);
/*$sql = "INSERT INTO `pages`(page_pid,page_name,id_mod,id_menu)
VALUES('$page','$name','$dist','$mod')";
mysql_query ($sql);
$auto_page = mysql_insert_id();
$sql2 = "INSERT INTO `texts`(id_menu,id_mod,page_id,main_text)
VALUES('$mod','$dist','$auto_page','$name')";
mysql_query ($sql2);*/
return $uploadfile;
}else{
$error=$_FILES['myfile']['error'];
return $error;
return "<h2>Файл не удалось скопировать!</h2>";
}
}
}
if (isset($_POST['send'])) {
$mod = intval($_POST['modul']);
$page = intval($_POST['page']);
if ($mod && $page) echo upload($mod,$page);
else echo "ERROR!";
}
?>
|
Почему-то файл, который загружается, грузится в корень проекта, а дальше по папкам не идет, вот эти пути не срабатывают: $uploaddir = $_SERVER['SERVER_NAME']. '/content/menu/';
Почему? Параметры я все правильно передаю. Причем даже если пишу полный путь С:/... все равно не работает
Скрипт с формой прикрепляю | |
|
|
|
|
|
|
|
для: Лена
(10.11.2008 в 17:40)
| | Посмотрите, что у Вас там в $_SERVER[SERVER_NAME]
потом посмотрите, что в $_SERVER[DOCUMENT_ROOT]
сделайте выводы.
$_FILES['myfile']['name'] - это имя на клиентской стороне. Вы не должны его применять (как минимум для хнанения файла) .
Клиент может обозвать файл как угодно. На сервере его всё равно придется называть заново. | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2008 в 18:07)
| | Если 'SERVER_NAME' - добавляется только имя хоста сервера.
Если 'DOCUMENT_ROOT' - должна быть корневая директория, в которой находится выполняемый скрипт. У меня добавляется полный путь, куда нужно загрузить файл.
Еще что. В конфиг-файле у меня : doc_root = и дальше пусто. Надо ли специально прописывать, какая у меня корневая директория? Поменяла 'SERVER_NAME' на 'DOCUMENT_ROOT', и файл грузится куда надо.
А почему в данном случае не срабатывают относительные пути, вроде $uploaddir = "/content/contact/"?
Если файл на стороне сервера называть заново, это все вручную придется делать? Например, клиент берет файл, посылает его, и уже на сервере каждый файл нужно переименовывать? Например, $uploadfile = $uploaddir . "1.txt"; Тогда удобно названием файла сделать дату и время, когда он был создан.
$uploadfile = $uploaddir . date("m.d.y_H.i") . ".txt"; | |
|
|
|
|
|
|
|
для: Лена
(11.11.2008 в 13:04)
| | >А почему в данном случае не срабатывают относительные пути, вроде $uploaddir = "/content/contact/"?
Потому что /content/contact/ - путь абсолютный. Так как начинается с косой черты.
>Если файл на стороне сервера называть заново, это все вручную придется делать?
>Например, клиент берет файл, посылает его, и уже на сервере каждый файл нужно переименовывать?
Вам в любом случае приходится давать файлу имя.
Например, $uploadfile = $uploaddir . "1.txt"; Тогда удобно названием файла сделать дату и время, когда он был создан.
>$uploadfile = $uploaddir . date("m.d.y_H.i") . ".txt";
Вы мыслите в верном направлении. Имя нужно делать уникальным.
В последнем случае, если два файла окажутся загруженными в пределах одной секунды - будет конфликт.
В этой теме я попытался разобрать ситуацию с генерацией имени более детально
http://softtime.ru/forum/read.php?id_forum=1&id_theme=57057
Вам стоит заглянуть. | |
|
|
|
|
|
|
|
для: Trianon
(11.11.2008 в 13:27)
| | Прочитала, все ясно.
>В последнем случае, если два файла окажутся загруженными в пределах одной секунды - будет конфликт.
Мне кажется, можно проверить: если в данную секунду был уже загружен файл, то как-то притормозить загрузку второго файла, чтобы названия не совпали. | |
|
|
|
|
|
|
|
для: Лена
(11.11.2008 в 16:09)
| |
if(is_file($_FILES['file']['name'])){
$i = 0;
while(is_file((++$i).'_'.$_FILES['file']['name'])){}
$_FILES['file']['name'] = $i.'_'.$_FILES['file']['name'];
}
|
я делал примерно так. | |
|
|
|