|
|
|
| Есть скрипт, который берет текстовый файл и через форму загружает его в базу данных:
<?
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'' - тоже не идет, пишет Файл не удалось скопировать. В чем проблема? | |
|
|
|
|
|
|
|
для: Лена
(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] (а) является массивом и (б) уже не имеет отношения к скопированному файлу. | |
|
|
|
|
|
|
|
для: 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. в таблице ничего не появляется,
Не будьте жестоки, наведите, пожалуйста, на мысль. Заранее спасибо. | |
|
|
|
|
|
|
|
для: Лена
(26.02.2008 в 13:56)
| | что говорит print_r($_FILES); ? | |
|
|
|
|
|
|
|
для: Trianon
(26.02.2008 в 14:40)
| | Ничего не говорит. По-прежнему появляется одна форма | |
|
|
|
|
|
|
|
для: Лена
(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МБ, то он не будет загружен, для этого нужно проверять, не вернулась ли вам ошибка. | |
|
|
|
|
|
|
|
для: 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>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(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(). | |
|
|
|
|
|
|
|
для: 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_ (); - извлечение ссылок на файлы из базы | |
|
|
|