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

Форум PHP

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

 

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

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

тема: Не передается путь
 
 автор: Лена   (10.11.2008 в 17:40)   письмо автору
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/';
Почему? Параметры я все правильно передаю. Причем даже если пишу полный путь С:/... все равно не работает
Скрипт с формой прикрепляю

  Ответить  
 
 автор: Trianon   (10.11.2008 в 18:07)   письмо автору
 
   для: Лена   (10.11.2008 в 17:40)
 

Посмотрите, что у Вас там в $_SERVER[SERVER_NAME]
потом посмотрите, что в $_SERVER[DOCUMENT_ROOT]
сделайте выводы.

$_FILES['myfile']['name'] - это имя на клиентской стороне. Вы не должны его применять (как минимум для хнанения файла) .
Клиент может обозвать файл как угодно. На сервере его всё равно придется называть заново.

  Ответить  
 
 автор: Лена   (11.11.2008 в 13:04)   письмо автору
 
   для: 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";

  Ответить  
 
 автор: Trianon   (11.11.2008 в 13:27)   письмо автору
 
   для: Лена   (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
Вам стоит заглянуть.

  Ответить  
 
 автор: Лена   (11.11.2008 в 16:09)   письмо автору
 
   для: Trianon   (11.11.2008 в 13:27)
 

Прочитала, все ясно.

>В последнем случае, если два файла окажутся загруженными в пределах одной секунды - будет конфликт.

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

  Ответить  
 
 автор: Gemorroj   (11.11.2008 в 16:21)   письмо автору
 
   для: Лена   (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'];
}

я делал примерно так.

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

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