Проблема с загрузкой файлов размером более 10 Мб в IE6
Привет. Этот код работает в большинстве браузеров, и даже частично в IE6. Он загружает файлы менее 10 Мб (примерно), но не больше. Код указывает, что эти файлы разрешены.
Также обратите внимание, что кажется, что весь файл передается на серверы до того, как его игнорируют.
Веб-сайт находится по адресу: http://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;
2 ответа
Проверьте следующие настройки в php.ini
:
upload_max_filesize
должно быть больше 10 МБ (10M
).post_max_size
должно быть как минимум на 40% больше, чемupload_max_filesize
,
Причина, по которой это требуется, заключается в том, что некоторые старые пользовательские агенты будут загружать с использованием кодировки base64, что добавляет 37% накладных расходов к данным. Добавьте заголовки MIME, другие параметры сообщения, есть много причин, чтобы оно было выше, чем upload_max_filesize
,
max_input_time
должно быть не менее 900 (15 минут).
Вы хотите дать пользователю достаточно времени, чтобы загрузить свой файл.
Это может не исправить это, но в одном потоке, который я читал, сказано, что IE6 должен обработать строку MAX_FILE_SIZE до ввода имени файла. Поэтому попробуйте переместить следующую строку в верхнюю часть формы:
<input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
Я понятия не имею, работает ли он, и IE6 требует, чтобы он был проанализирован в таком порядке, но это то, о чем я читал в потоке, в котором говорилось о решении.
Также проверьте максимальный размер файла php.ini и время ожидания.