Проблема с загрузкой файлов размером более 10 Мб в IE6

Привет. Этот код работает в большинстве браузеров и даже частично в IE6. Он загружает файлы меньше 10Mb (примерно), но не больше. Код указывает, что эти файлы разрешены.

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

Веб-сайт находится по адресу: www.mgxvideo.com/mgxcopy-alpha-3/. и его можно получить, добавив товар в корзину, а затем нажав кнопку загрузки. Идеи?

Вот форма:

<form enctype="multipart/form-data" action="upload_files.php?order_id=<?php echo $_GET['order_id'] ?>" method="POST">
    <table style="width:100%">
        <tr>
            <td valign="top">
                <span class="style1">Choose a file to upload: </span> 
            </td>
            <td valign="top">
                <input name="uploadedfile" type="file" />
            </td>
        </tr>
    </table>
    <input type="submit" value="Upload File" />
    <input type="hidden" name="action" value="add"/>
    <input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
</form>

Вот строка вверху файла upload_files.php:

$upload_output = upload_file($customer_id, $_REQUEST['action'], $_GET['order_id'], $_FILES);

А вот код upload_file():

function upload_file($customer_id, $action, $upload_id, $FILES)
{
    $target_path = "uploads/";

    $target_path = $target_path . $customer_id . '_' . $upload_id . '_' . basename( $FILES['uploadedfile']['name']); 
    $str_output = '';

    if ($action == 'del' and file_exists($_POST['filepath']))
    {
        delete_file($customer_id, $_POST['filepath']);
        $str_output = '<span class="style1">File successfully deleted. If you are done uploading files, ' .
                '<a href="#" onclick="self.close();">click here</a> to close this window.</span>';
        setcookie("upload_out_txt", $str_output, time() + 300);
        setcookie("upload_out_b", "1", time() + 300);
    } else if ($action == 'add')
    {
        if (count_uploads($customer_id, $upload_id) >= 2)
        {
            $str_output = '<span class="style1">Problem: You have reached the maximum allowed uploads for this particular order. Please delete a file before continuing.</span>';
            setcookie("upload_out_txt", $str_output, time() + 300);
            setcookie("upload_out_b", "1", time() + 300);
        } else if (file_exists($target_path))
        {
            $str_output = '<span class="style1">Problem: A version of the file you are trying to upload already exists. Please delete the file from out servers before uploading again.</span>';
            setcookie("upload_out_txt", $str_output, time() + 300);
            setcookie("upload_out_b", "1", time() + 300);
        } else if (move_uploaded_file($FILES['uploadedfile']['tmp_name'], $target_path)) 
        {
            insert_to_database('uploaded_files', array($customer_id, $upload_id, 'now()', $target_path));
            $str_output = '<span class="style1">Success. The file was successfully uploaded. If you are done, <a href="" onclick="window.close();">click here to close the window</a></span>';
            setcookie("upload_out_txt", $str_output, time() + 300);
            setcookie("upload_out_b", "1", time() + 300);
        } else
        {
            $str_output = '<span class="style1">There was an error uploading the file, please try again!</span>';
            setcookie("upload_out_txt", $str_output, time() + 300);
            setcookie("upload_out_b", "1", time() + 300);
        }
    }



    return $str_output;
}

Вот мой файл php.ini после того, как я попытался реализовать исправление:

extension_dir="/kunden/homepages/30/d93769495/htdocs/extensions";
extension=uploadprogress.so;
upload_max_filesize=150M;
post_max_size=210M;
max_input_time=1800;
file_uploads=1;
memory_limit=240M;
max_execution_time=1800;

person montooner    schedule 24.07.2009    source источник


Ответы (2)


Проверьте следующие настройки в php.ini:

  1. Размер upload_max_filesize должен превышать 10 МиБ (10M).

  2. post_max_size должно быть как минимум на 40 % больше, чем upload_max_filesize.

Причина, по которой это требуется, заключается в том, что некоторые старые пользовательские агенты будут загружать данные с использованием кодировки base64, что увеличивает нагрузку на данные на 37 %. Добавьте заголовки пантомимы, другие параметры публикации, есть много причин, чтобы они были выше, чем upload_max_filesize.

  1. max_input_time должно быть не менее 900 (15 минут).

Вы хотите дать пользователю достаточно времени для загрузки файла.

person Andrew Moore    schedule 25.07.2009
comment
@montooner: Возможно, вам придется перезапустить Apache после изменения конфигурации. - person Andrew Moore; 25.07.2009

Это может не исправить, но в одном потоке, который я читал, говорилось, что IE6 должен обрабатывать строку MAX_FILE_SIZE перед вводом имени файла. Поэтому попробуйте переместить следующую строку в верхнюю часть формы:

<input type="hidden" name="MAX_FILE_SIZE" value="100000000" />

Я понятия не имею, работает ли это, и IE6 требует, чтобы он анализировался в таком порядке, но это то, что я читал, сказал, что это решение.

Также проверьте максимальный размер файла php.ini и время ожидания.

person Sean A.O. Harney    schedule 25.07.2009
comment
MAX_FILE_SIZE абсолютно не влияет на клиента. На самом деле, вы можете просто удалить его. - person Andrew Moore; 25.07.2009
comment
Правда, похоже, ни один браузер не обращает на это внимания. На каком-то форуме я читал: скрытое поле MAX_FILE_SIZE (измеряемое в байтах) должно предшествовать полю ввода файла, а его значение — максимально допустимый размер файла. Это совет для браузера, PHP также проверяет его. Обмануть этот параметр на стороне браузера довольно легко, поэтому никогда не полагайтесь на файлы большего размера, заблокированные этой функцией. - person Sean A.O. Harney; 25.07.2009