Привет. Этот код работает в большинстве браузеров и даже частично в IE6. Он загружает файлы менее 10 Мб (приблизительно), но не больше. Код указывает, что эти файлы разрешены.
Кроме того, обратите внимание, что кажется, что весь файл, кажется, переносится на серверы перед игнорированием.
Веб-сайт находится по адресу: 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;
Проверьте следующие настройки в php.ini
:
upload_max_filesize
должен быть больше 10 MiB ( 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.