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

Форум MySQL

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

 

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

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

тема: не грузятся файлы на сервер
 
 автор: Лена   (21.02.2008 в 11:52)   письмо автору
 
 

Есть скрипт, который берет текстовый файл и через форму загружает его в базу данных:

<?
include ("dbopen.php");
function 
show_form()
{
    echo 
"<form enctype='multipart/form-data' action='' method='post'>\n";
    echo 
"<input type='hidden' name='MAX_FILE_SIZE' value='50000'>\n";
    echo 
"<input type='file' name='myfile'>\n";
    echo 
"<input type='submit' value='Send File' >\n";
    echo 
"</form>";
}

function 
upload ()
{
global 
$link;

    
$uploaddir 'C:/WebServers/home/localhost/www/index/uploads/'
    
$uploadfile $uploaddir.basename($_FILES['myfile']['tmp_name']).$_FILES['myfile']['name'];
    if (
move_uploaded_file($_FILES['myfile']['tmp_name'], $uploadfile))
    {
        
$name=$_FILES['myfile']['name'];
        
$type=$_FILES['myfile']['type'];
        
$size=$_FILES['myfile']['size'];
        
$tmp_name=$_FILES['myfile']['tmp_name'];
        
$error=$_FILES['myfile']['error'];
    }
    else 
    {
        return 
"<h2>Файл не удалось скопировать!</h2>";
    }
    
    if (!
get_magic_quotes_gpc())
    {
    
$_FILES['myfile'] = mysql_escape_string($_FILES['myfile']);
    }
    
    
$sql="INSERT INTO `myfiles` (name, type, size) VALUES('$_FILES[myfile]')";
     
mysql_query ($sql$link);
     return 
'';
 }


Но загрузка почему-то не происходит. Временные файлы не копируются . Путь $uploaddir = 'C:/WebServers/home/localhost/www/index/uploads'; - правильный, писала $uploaddir = 'index/uploads'' - тоже не идет, пишет Файл не удалось скопировать. В чем проблема?

   
 
 автор: Trianon   (21.02.2008 в 15:52)   письмо автору
 
   для: Лена   (21.02.2008 в 11:52)
 

Строка $uploadfile = $uploaddir.basename($_FILES['myfile']['tmp_name']).$_FILES['myfile']['name'];
посредством которой скрпт выбирает целевое имя файла на сервере, не поддается разумной интерпретации.
Попробуйте вывести echo $uploadfile; непосредственно перед if (move_uploaded_file(... и увидите сами.

На самом деле, скрипт нерабочий.
к примеру следующий код просто лишний
if (!get_magic_quotes_gpc())
{
$_FILES['myfile'] = mysql_escape_string($_FILES['myfile']);
}

А этот кусок недописан до конца.
$sql="INSERT INTO `myfiles` (name, type, size) VALUES('$_FILES[myfile]')";
поскольку $_FILES[myfile] (а) является массивом и (б) уже не имеет отношения к скопированному файлу.

   
 
 автор: Лена   (26.02.2008 в 13:56)   письмо автору
 
   для: Trianon   (21.02.2008 в 15:52)
 

Получилось вот что:

function upload ()
{
global $link;
    $uploaddir = 'C:/WebServers/home/localhost/www/index/uploads/';
    $uploadfile = $uploaddir.basename($_FILES['myfile']['name']);
    echo $uploadfile;
    if (move_uploaded_file($_FILES['myfile']['tmp_name'], $uploadfile))
    {
        $name=$_FILES['myfile']['name'];
        $type=$_FILES['myfile']['type'];
        $size=$_FILES['myfile']['size'];
        $tmp_name=$_FILES['myfile']['tmp_name'];
        $error=$_FILES['myfile']['error'];
    }
    else 
    {
        return "<h2>Файл не удалось скопировать!</h2>";
    }

    // загрузить линки в базу данных 
    if (!empty ($uploadfile))
    {
    $name=basename($uploadfile);
    $size=filesize ($name);
    $type=filetype ($name);
    
    // поле id - автоинкрементное
    $sql="INSERT INTO `myfiles`(id,name,size,type,source) VALUES('$name,$size,$type,$uploadfile')";
     mysql_query ($sql, $link);
     return '';
     }
 }

А проблемы вот в чем:
1. файлы не копируются в uploads, хотя путь верный
2. в таблице ничего не появляется,
Не будьте жестоки, наведите, пожалуйста, на мысль. Заранее спасибо.

   
 
 автор: Trianon   (26.02.2008 в 14:40)   письмо автору
 
   для: Лена   (26.02.2008 в 13:56)
 

что говорит print_r($_FILES); ?

   
 
 автор: Лена   (26.02.2008 в 14:54)   письмо автору
 
   для: Trianon   (26.02.2008 в 14:40)
 

Ничего не говорит. По-прежнему появляется одна форма

   
 
 автор: sim5   (26.02.2008 в 14:52)   письмо автору
 
   для: Лена   (26.02.2008 в 13:56)
 

$uploaddir = 'C:/WebServers/home/localhost/www/index/uploads/';
и
$uploadfile = $uploaddir.basename($_FILES['myfile']['name']); // $_FILES['myfile']['name'] подставляете до проверки, даже не убедившись, загружено ли.
Выбросить или изметь эти строки.
Папку для загрузки файлов указывайте относительно: index/uploads/, иначе будут проблемы с переносом на реальный сервер.
Перед загрузкой не мешало бы проверять, что вам загружается, а также, если размер загружаемого файла превысит лимит 2МБ, то он не будет загружен, для этого нужно проверять, не вернулась ли вам ошибка.

   
 
 автор: Лена   (26.02.2008 в 15:24)   письмо автору
 
   для: sim5   (26.02.2008 в 14:52)
 


function upload ()
{
global $link;
    
    $tmp_name=$_FILES['myfile']['tmp_name'];
    $name=$_FILES['myfile']['name'];
    $type=$_FILES['myfile']['type'];
    $size=$_FILES['myfile']['size'];
    $error=$_FILES['myfile']['error'];
    $uploaddir = 'index/uploads/';
    $uploadfile = $uploaddir.basename($name);

if (file_exists($uploadfile))
{
echo 'Файл уже существует...';
}
    elseif (is_uploaded_file($tmp_name)) 
    {
        if (filesize($tmp_name) > 2000000) 
        {
        echo 'Размер файла превышает 2Мб';
        }
    }
    elseif (!move_uploaded_file($tmp_name, $uploadfile)) 
    {
    move_uploaded_file($tmp_name, $uploadfile);     
    }
else 
{
return "<h2>Файл не удалось скопировать!</h2>";
}

}
 ?>

   
 
 автор: Shiva   (26.02.2008 в 16:32)   письмо автору
 
   для: Лена   (26.02.2008 в 13:56)
 

1.Уберите из запроса id, оно само подставится.
2.Поставьте одинарные кавычки не вокруг всех передаваемых значений (VALUES), а вокруг каждого.
3.Замените
mysql_query ($sql, $link); 

на

if(!mysql_query ($sql, $link))

    echo mysql_error()."<br />\r\n(SQL:  $sql )";


4.Выложите код, в котором вызываете функцию upload().

   
 
 автор: Лена   (26.02.2008 в 17:17)   письмо автору
 
   для: Shiva   (26.02.2008 в 16:32)
 

1.2.3. поменяла. Ничего не дало. Ошибка не вывелась.
Вот код, в котором я вызываю функцию upload():

if (isset($_POST) && count($_POST)>0)
{
    $str = upload();
    if (empty($str))
        header("Location: {$_SERVER['PHP_SELF']}"); // Redirect browser
    else
        echo $str;
}

else
{
    show_form();
    extract_ ();
}



extract_ (); - извлечение ссылок на файлы из базы

   
Rambler's Top100
вверх

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