Загрузка файлов с помощью php - отображение списка файлов - PullRequest
0 голосов
/ 20 апреля 2009

Я нахожусь в процессе создания скрипта для загрузки файлов через php. Что мне хотелось бы знать, так это как отображать уже загруженные файлы и при нажатии на них открывать их для скачивания. Должен ли я хранить имена и пути в базе данных или просто перечислить содержимое каталога с помощью php?

Ответы [ 4 ]

3 голосов
/ 20 апреля 2009

Проверить обработка загрузки файлов в PHP . Несколько баллов:

  • В идеале вы хотите разрешить пользователю загружать несколько файлов одновременно. Просто создайте дополнительные входные файлы динамически с помощью Javascript для этого;
  • Когда вы получаете загрузку, убедитесь, что вы проверяете, что это загрузка с is_uploaded_file ;
  • Используйте move_uploaded_file () , чтобы скопировать файл туда, куда вы собираетесь его сохранить;
  • Не полагайтесь на то, что клиент говорит вам, что тип MIME;
  • Отправить их обратно клиенту можно тривиально с помощью PHP-скрипта, но вам нужно знать правильный тип MIME;
  • Попробуйте и убедитесь, что вы получаете то, что ожидаете (например, если это PDF-файл, используйте библиотеку, чтобы убедиться в этом), особенно если вы используете файл для чего-либо или отправляете его кому-либо еще; и
  • Я бы порекомендовал вам сохранить имя файла с компьютера клиента и отобразить его для него независимо от того, как вы его сохраните. Пользователь с большей вероятностью узнает это, чем что-либо еще.
1 голос
/ 20 апреля 2009

Хранение путей в базе данных может быть нормальным, в зависимости от вашего конкретного приложения, но рассмотрите возможность хранения имен файлов в базе данных и сконструируйте ваши пути к этим файлам в PHP в одном месте. Таким образом, если вы в конечном итоге переместите все загруженные файлы позже, в вашем коде есть только одно место, в котором вам нужно изменить генерацию пути, и вы можете избежать большого объема преобразования данных в поле «путь» в базе данных.

Например, для файла 1234.txt вы можете сохранить его в:

/your_web_directory/uploaded_files/1/2/3/1234.txt

Вы можете использовать файл конфигурации или, если хотите, глобальный где-то, чтобы определить путь, в котором хранятся ваши загрузки (/ ваш веб-каталог / загруженные файлы /), а затем разделить символы из имени файла (в базе данных), чтобы вычислить в каком подкаталоге находится файл.

Что касается отображения ваших файлов, вы можете просто загрузить свой список файлов из базы данных и использовать функцию генерации пути, чтобы получить пути загрузки для каждого из них на основе их имен файлов. Если вы хотите разбить список файлов на страницы, попробуйте использовать что-то вроде START 0, LIMIT 50; в MySQL. Просто введите новый стартовый номер на каждой последующей странице результатов загрузки.

0 голосов
/ 18 декабря 2010

возможно, вам следует использовать файлы, в этом смысле:

myfile.txt

My Uploaded File||my_upload_dir/my_uploaded_file.pdf
Other Uploaded File||my_upload_dir/other_uploaded.html

и пройдите их так:

<?php
    $file = "myfile.txt";
    $lines = file($file);
    $files = array();
    for($i=0;$i<=count($lines)-1;$i++) {
        $parts = explode($lines[$i]);
        $name = parts[0];
        $filename = parts[1];
        $files[$i][0] = $name;
        $files[$i][1] = $filename;
    }
    print_r($files);
?>

надеюсь, это поможет. :)

0 голосов
/ 20 апреля 2009

То, что я всегда делал (в прошлом, я не писал сценарий загрузки целую вечность), я связывал сценарий загрузки (любой сценарий загрузки) с простой базой данных.

Это предлагает некоторые преимущества;

Вы не предлагаете своим пользователям непосредственное понимание вашей файловой системы (что, если в вашем скрипте browse есть утечка, и вы открываете весь жесткий диск? Вы можете хранить дополнительную информацию и метаданные простым и эффективным способом Вы можете запросить файлы / метаданные вместо того, чтобы просто просматривать все файлы Вы можете включить «безопасное удаление», при котором вы удаляете строку, но сохраняете файл (например) Вы можете включить ведение журнала проще Показывать файлы на страницах проще Вы можете «замаскировать» файлы. Использование базы данных позволяет хранить «замаскированное» имя файла и «настоящее» имя файла.

Очевидно, есть и некоторые недостатки;

Немного сложнее выполнить миграцию, поскольку ваша файловая система и база данных должны быть синхронизированы В случае сбоя операции (на одном из двух концов) у вас есть «поврежденная» база данных или файловая система

Как упоминалось ранее (но мы не можем упомянуть достаточно, я боюсь); _Сохраните загрузку! _

Проблема типа / расширения MIME - это проблема, которая существует целую вечность. Я думаю, что в настоящее время большая часть Интернета является надежной, но раньше были времена, когда разработчики проверяли либо тип MIME, либо расширение, но никогда не оба (зачем? ). Это привело к тому, что веб-сайты были очень, очень дырявыми.

Если сценарии написаны неправильно, загрузка скриптов - большая дыра в вашей безопасности. Прекрасным примером этого является сайт, который я взломал некоторое время назад (по их запросу, конечно). Они поддерживали загрузку изображений в фотоальбом, но проверяли только расширение файла. Поэтому я загрузил GIF со сканером каталогов внутри. Это позволило мне сканировать всю их систему (поскольку это был не выделенный сервер; я мог видеть чуть больше этого).

Надеюсь, я помог;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...