Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > ссылки на загруженные файлы


Автор: chay 31.5.2007, 11:23
Сделал загрузку файлов на сервер по примеру 

http://de3.php.net/manual/ru/features.file-upload.php

Код


<?php
// В PHP 4.1.0 и более ранних версиях следует использовать $HTTP_POST_FILES 
// вместо $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    print "File is valid, and was successfully uploaded. ";
    print "Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print "Possible file upload attack!  Дополнительная отладочная информация:\n";
    print_r($_FILES);
}
print "</pre>";

?>


как сделать, чтобы загруженные файлы на отдельной странице превращались в ссылки? 

Например - 

Загрузил через форму файл test.zip
На странице  files.html появляется ссылка - http://domain.ru/uploads/test.zip

?

Автор: teroni 31.5.2007, 12:44
Код

<?php
$uploaddir = '/var/www/uploads/';

if ($handle = opendir($uploaddir))
   {
   while (false !== ($file = readdir($handle)))
      {
      if (!is_dir($file)) echo "<a href=\"http://domain.ru/uploads/$file\">$file</a><br />";
      }
    closedir($handle);
    }
?>

Автор: chay 31.5.2007, 16:06
спасиб, сейчас попробую.

Автор: chay 1.6.2007, 08:48
не работает что-то..
как ссылки на странице сделать? 

Автор: Golda 1.6.2007, 10:40
chay, 

скрипт teroni предполагает, что у вашего сайта DOCUMENT_ROOT - в директории /var/www. В этой же директории находится поддиректория с именем uploads, в которую Вы и копируете файлы (например: скриптом из первого поста). Имя сайта - domain.ru. Приведите все данные в соответствии со своей реальной ситуацией:

имя домена,
путь к директории uploads в файловой системе,
путь к директории uploads в URL

и все у Вас получится. А если не получится, дайте более развернутую информацию о том, что происходит: выдаются ошибки при работе скрипта, 404-ошибка при нажатии на ссылку? Что происходит-то?

Автор: chay 1.6.2007, 16:54
Golda,
все заработало, видимо где-то был просто невнимателен.. сори)
Код

while (false !== ($file = readdir($handle)))

интересный момент, не совсем понятно как он работает..
Переменная $file равна значению функции readdir для переменной $handle и не идентично лжи.
Так? 
Код

if (!is_dir($file)) echo "<a href=\"http://domain.ru/uploads/$file\">$file</a><br />";  

если переменная $file не является директорией выполняет echo. 
Так? 

Автор: Golda 1.6.2007, 17:39
1) Да, так. оператор = возвращает значение, равное присвоеному. Поэтому его можно использовать в выражениях. readfile() возвращает имя следующего элемента директории (файла (возможно ссылки) или дирректории), пока находит. Когда вся дирректория будет перебрана, readfile() вернет false и Вы выйдете из цикла.

2) Из дирректории uploads нужно выдавать ссылки только на файлы. Даже если Вы специально не создавали там директорий, там есть, как минимум, 2 дирректории заглушки: '.' (ссылка на текущую директорию) и '..' (ссылка на родительскую директорию). Поэтому проверка нужна. Правда, вообще говоря, лучше делать проверку с абсолютным путем, а не относительным.

Код

is_dir($uploaddir . '/' . $file)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)