Как узнать полный путь к папке

Федор

Новичок
Как узнать полный путь к папке

Решил реализовать загрузку файла на сервер.

Нашел простейший скрипт загрузки. Поменял путь к папке, в которую надо загружать. Файл не грузится, выдает ошибку. Кажется я неправиль указал путь к папке куда надо грузить. Помогите его выяснить.

PHP:
<form enctype="multipart/form-data" action="/upload.php" method="post">      
<input type="hidden" name="MAX_FILE_SIZE" value="30000">      
Send this file: <input name="userfile" type="file">      
<input type="submit" value="Send File">      
</form>

  <?php

  $uploaddir = '/var/www/uploads/';

  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . 

         $_FILES['userfile']['name'])) {

      print "File is valid, and was successfully uploaded.";

  } else {

      print "There some errors!";

  }

  ?>
 

Федор

Новичок
СПАСИБО. Посмотрел, сделал uploaddir равной полному пути к папке для загрузки. Не грузится. Снова ошибка There some errors! из скрипта. Подскажите пожалуйста, может надо не полный путь писать, или может я что-нибудь еще не учел.
 

Вурдалак

Продвинутый новичок
Права за запись в указанную директорию могут отсутствовать. И вообще, сначала необходимо проверять $_FILES['userfile']['error']
 

AmdY

Пью пиво
Команда форума
и ещё.
не используй $_FILES['userfile']['name'], либо проверяй его.
после успешной обработки всегда делай редирект, чтобы пользователь по f5 не послал форму ещё раз.

неужели на просторе гугла нет ни одного нормального примера загрузки фалов?
 

Федор

Новичок
Страница мануала отсутствует:
http://ru.php.net/manual/ru/features.file-upload.errors.php

-~{}~ 08.10.09 00:10:

Есть примеры. Попробовал уже штук 5. Везде ошибка. Думаю это из-за путей или настроек сервера.

Вот что выдало на print_r($_FILES);

Array ( [userfile] => Array ( [name] => 147.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 ) )

-~{}~ 08.10.09 00:27:

Увеличил MAX_FILE_SIZE. Теперь при загрузке ошибок нет:
Array ( [userfile] => Array ( [name] => 147.jpg [type] => image/jpeg [tmp_name] => /var/tmp/phpIlxEGG [error] => 0 [size] => 38204 ))

Но проблема осталась. Файл не копируется в нужную папку.

-~{}~ 08.10.09 00:41:

ПОЛУЧИЛОСЬ ТАК:

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/upload/".$_FILES['userfile']['name'])) {

print "File is valid, and was successfully uploaded.";

Пишет ошибок нет! Только самих файлов в тотале не вижу.

-~{}~ 08.10.09 00:50:

Они появились, но позже. Спасибо всем за помощь!

-~{}~ 08.10.09 00:52:

PHP:
  <form enctype="multipart/form-data" action="upload.php" method="post">
   <input type="hidden" name="MAX_FILE_SIZE" value="8000000">

  Send this file: <input name="userfile" type="file">

  <input type="submit" value="Send File">

  </form>
и сам upload.php

PHP:
  <?php
  
  //Проверки 
 $imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
 if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
  echo "Sorry, we only accept GIF and JPEG images\n";
  exit;
 }
 $blacklist = array(".php", ".phtml", ".php3", ".php4");
 foreach ($blacklist as $item) {
  if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
   echo "We do not allow uploading PHP files\n";
   exit;
   }
  }
 //Конец проверок
  
  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/upload/".$_FILES['userfile']['name'])) {

      print "File is valid, and was successfully uploaded.";

  } else {

      print "There some errors!";

  }

  ?>
 

Вурдалак

Продвинутый новичок
PHP:
 $blacklist = array(".php", ".phtml", ".php3", ".php4");
 foreach ($blacklist as $item) {
  if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
   echo "We do not allow uploading PHP files\n";
   exit;
   }
Тут аккуратнее: необходимо писать '/' . preg_quote($item, '/') . '$/i', в противном случае тут дыра.

P.S. И не стоит сохранять файлы под пользовательскими именами вообще.
P.P.S. Ой, нет, тут вообще одна дыра.

Смотри, если пользователь загрузит файл с именем "script.php.unknown_extention", то Apache, вообще говоря, интерпретирует это как PHP-скрипт.
 
Сверху