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

Форум PHP

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

 

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

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

тема: Закачка файлов на сервер
 
 автор: petter   (24.01.2009 в 23:12)   письмо автору
 
 

Здравствуйте!
Нашёл на этом сайте форму закачки - вроде бы всё логично и понятно. Наверное, многие её видели. Но там одна загвоздка - надо чтобы файл скопировался туда, куда мне надо.
Что я только не подставлял - PHP мне пишет, что нет такой директории!
Сервер реальный.
Скрипт такой:
<html>
<head>
<title>Результат загрузки файла</title>
</head>
<body>
<?php
if($_FILES["filename"]["size"] > 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
if(copy($_FILES["filename"]["tmp_name"],
"317/".$_FILES["filename"]["name"]))
{
echo("Файл успешно загружен <br>");
echo("Характеристики файла: <br>");
echo("Имя файла: ");
echo($_FILES["filename"]["name"]);
echo("<br>Размер файла: ");
echo($_FILES["filename"]["size"]);
echo("<br>Каталог для загрузки: ");
echo($_FILES["filename"]["tmp_name"]);
echo("<br>Тип файла: ");
echo($_FILES["filename"]["type"]);
} else {
echo("Ошибка загрузки файла");
}
?>
</body>
</html>

а форма такая:
<?php
echo '<html>
<head>
<title>Загрузка файлов на сервер</title>
</head>
<body>
<h2><p><b> Форма для загрузки файлов </b></p></h2>
<form action="uploading.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value="Загрузить"><br>
</form>
</body>
</html>';
?>

Мне нужно, чтобы файл копировался в папку "317", а php её не находит и пишет:
Warning: copy(317/for_sunrise_white.jpg): failed to open stream: No such file or directory in /www/lun/www/htdocs/baz/317/uploading.php on line 13

  Ответить  
 
 автор: Николай2357   (25.01.2009 в 01:32)   письмо автору
 
   для: petter   (24.01.2009 в 23:12)
 

Вообше то скрипт рабочий. Только стоит все таки сменить эту строчку
<?
if(copy($_FILES["filename"]["tmp_name"],

на эту
<?
if(move_uploaded_file($_FILES["filename"]["tmp_name"],
А каталог 317 точно существует?

  Ответить  
 
 автор: Petter   (25.01.2009 в 12:14)   письмо автору
 
   для: Николай2357   (25.01.2009 в 01:32)
 

Спасибо, я заменил, хотя результат тот же...

  Ответить  
 
 автор: Trianon   (25.01.2009 в 01:38)   письмо автору
 
   для: petter   (24.01.2009 в 23:12)
 

ну правильно.
нет каталога 317/ в каталоге /www/lun/www/htdocs/baz/317/

  Ответить  
 
 автор: Petter   (25.01.2009 в 10:58)   письмо автору
 
   для: Trianon   (25.01.2009 в 01:38)
 

Trianon, как же нет такого каталога? А что тогда есть?
я писал и /www/lun/www/htdocs/baz/317/ и тоже ошибку выдаёт что нет такой директории...

Непонятно, что писать в качестве "пункта назначения", то есть того места, куда надо на сайте вставить этот файл. Писал я и полный URL, и тоже ошибка. Неужели никто не делал подобную штуковину?

  Ответить  
 
 автор: sim5   (25.01.2009 в 11:08)   письмо автору
 
   для: Petter   (25.01.2009 в 10:58)
 

Делали такую штуковину, ну коли говорит что нет каталога, значит нет.

  Ответить  
 
 автор: Trianon   (25.01.2009 в 11:38)   письмо автору
 
   для: Petter   (25.01.2009 в 10:58)
 

>Trianon, как же нет такого каталога? А что тогда есть?
Файл uploading.php точно есть. Может еще какие файлы имеются.


>Непонятно, что писать в качестве "пункта назначения", то есть того места, куда надо на сайте вставить этот файл.

Кому писать? Функции файловой системы о сайте вообще ничего не знают. Они работают с каталоговой структурой сервера, а не сайта.

Перед тем, как говорить, что ничего не получается, имеет смысл вывести второй аргумент функции с помощью echo, и поглядеть, куда Вы бедный файл пытаетесь записать.

>я писал и /www/lun/www/htdocs/baz/317/ и тоже ошибку выдаёт что нет такой директории...

А вот это странно. Не то, что не пишет, а то, что ошибку ту же самую выдает.

  Ответить  
 
 автор: Petter   (25.01.2009 в 12:12)   письмо автору
 
   для: Trianon   (25.01.2009 в 11:38)
 

Когда я пишу в этой 13-й строчке, в пункте назначения
"/www/lun/www/htdocs/baz/317/".$_FILES["filename"]["name"]))

то нет проблем, файл загружается. Однако я не понимаю, почему. Я эту строчку взял наугад, просто скопировав её из сообщения об ошибке. Когда php мне писал, что нет такой директории в /www/lun/www/htdocs/baz/317/, то я и наугад и вставил в пункт назначения (destination) этот код:
"/www/lun/www/htdocs/baz/317/".$_FILES["filename"]["name"]))

Теперь файл загружается, но код, наверное, неграмотный? Наверное, надо как-то через переменные окружения его писать?

  Ответить  
 
 автор: Trianon   (25.01.2009 в 12:18)   письмо автору
 
   для: Petter   (25.01.2009 в 12:12)
 

dirname($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']).'/'.$_FILES["filename"]["name"]


только загружать файлы в каталог со скриптами - потенциальная дыра.
Тем более - давать им клиентское имя.

  Ответить  
 
 автор: Petter   (25.01.2009 в 12:39)   письмо автору
 
   для: Trianon   (25.01.2009 в 12:18)
 

Спасибо, Trianon.
Получилась destination из переменных окружения. Спасибо огромное!
Да, понимаю, что для закачиваемых файлов лучше отдельную папку upload завести...
А вот насчёт имён новых, не клиентских - очень интересная мысль, тем более что мне надо будет их как-то с кодом страницы связывать... Но это уже другая тема... Ещё раз спасибо за грамотную destination!

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

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