Что лучший способ состоит в том, чтобы создать однофайловую форму загрузки с помощью PHP?

Ошибка говорит само за себя ... clasNotFoundException ... Проверьте ваш путь к классу, похоже, DataImportHandler не находится на вашем пути к классам ...

<lib dir="../../../dist/" regex="apache-solr-dataimporthandler-.*\.jar" />

После изменения конфигурации перезапустите сервер Jetty.

21
задан Drew Noakes 13 October 2008 в 17:30
поделиться

4 ответа

Учебное руководство по загрузке файла

HTML

<form enctype="multipart/form-data" action="action.php" method="POST">
  <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
  <input name="userfile" type="file" />
  <input type="submit" value="Go" />
</form>
  • action.php название файла PHP, который обработает загрузку (показанный ниже)
  • MAX_FILE_SIZE должен сразу появиться перед входом с типом file. Этим значением можно легко управлять на клиенте, так не должен быть положен. Его основное преимущество состоит в том, чтобы предоставить пользователю дальнее обнаружение, что их файл является слишком большим, прежде чем они загрузили его.
  • Можно изменить имя входа с типом file, но удостоверьтесь, что это не содержит пробелов. Необходимо также обновить соответствующее значение в файле PHP (ниже).

PHP

<?php
$uploaddir = "/www/uploads/";
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "Success.\n";
} else {
    echo "Failure.\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>

Загрузка - к папке не должна быть расположена в месте, это доступно через HTTP, иначе было бы возможно загрузить Сценарий PHP и выполнить его на сервер.

Печать значения $_FILES может дать подсказку относительно того, что продолжается. Например:

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

Эта структура дает некоторую информацию относительно имени файла, типа MIME, размера и кода ошибки.

Коды ошибок

0 Указывает, что не было никаких ошибок, и файл был загружен успешно
1 Указывает, что файл превышает максимальный размер файла, определенный в php.ini. Если требуется изменить максимальный размер файла, необходимо открыть файл php.ini, определить строку, которая читает: upload_max_filesize = 2M и изменение значение от 2M (2 МБ) к тому, в чем Вы нуждаетесь
2 Указывает, что максимальный размер файла, определенный вручную, в на сценарии страницы, был превышен
3 Указывает, что файл был только загружен частично
4 Указывает, что файл не был указан (пустое поле файла)
5 Не определенный все же
6 Указывает, что нет никакой временной папки
7 Указывает, что файл не может быть записан в диск

php.ini Конфигурация

При выполнении этой установки с большими файлами можно получить ошибки. Проверьте Ваш php.ini файл для этих ключей:

max_execution_time = 30
upload_max_filesize = 2M

Увеличивание этих значений как соответствующие может помочь. При использовании Apache изменения в этом файле требуют перезапуска.

Максимальная память разрешила значение (набор через memory_limit) не играет роль здесь, поскольку файл записан в tmp каталог, поскольку это загружается. Через местоположение tmp каталога дополнительно управляют upload_tmp_dir.

Проверка файла mimetypes

Необходимо проверить тип файла того, что пользователь загружает - лучшая практика должна проверить против списка позволенных типов файлов. Потенциальный риск разрешения любого файла состоит в том, что пользователь мог потенциально загрузить код PHP на сервер и затем выполнить его.

Можно использовать очень полезное fileinfo расширение (который заменяет более старое mime_content_type функция) для проверки типов пантомимы.

// FILEINFO_MIME set to return MIME types, will return string of info otherwise
$fileinfo = new finfo(FILEINFO_MIME);
$file = $fileinfo->file($_FILE['filename']);

$allowed_types = array('image/jpeg', 'image/png');
if(!in_array($file, $allowed_types))
{
    die('Files of type' . $file . ' are not allowed to be uploaded.');
}
// Continue

Больше информации

Можно читать больше при обработке загрузок файла в руководстве PHP.net.

Для PHP 5.3 +

//For those who are using PHP 5.3, the code varies.
$fileinfo = new finfo(FILEINFO_MIME_TYPE);
$file = $fileinfo->file($_FILE['filename']['tmp_name']);
$allowed_types = array('image/jpeg', 'image/png');
if(!in_array($file, $allowed_types))
{
    die('Files of type' . $file . ' are not allowed to be uploaded.');
}
// Continue

Больше информации

Можно читать больше на FILEINFO_MIME_TYPE в документации PHP.net.

33
ответ дан 29 November 2019 в 20:21
поделиться

Имейте чтение это введение , который должен сказать Вам все, что необходимо знать. Комментарии пользователей довольно полезны также.

5
ответ дан 29 November 2019 в 20:21
поделиться

Основное преимущество Flash - он, позволяет Вам загружать несколько файлов. Основное преимущество Java - он, позволяет перетаскивание от файловой системы. Извините за не ответ на центральный вопрос, но я думал, что добавлю это, поскольку это довольно просто.

4
ответ дан 29 November 2019 в 20:21
поделиться

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

Ссылка .htaccess

Options -Indexes
Options -ExecCGI
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi 

: http://www.mysql-apache-php.com/fileupload-security.htm

3
ответ дан 29 November 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: