2014-02-07 2 views
2

У меня есть форма, позволяющая пользователям загружать файлы, но у меня проблемы с обнаружением слишком больших файлов.Загрузка файла и определение файла PHP

У меня есть следующий набор в php.ini:

upload_max_filesize = 10M 
post_max_size = 20M 

Я понимаю, что стандартный способ обнаружения, если файлов больше, чем файл конфигурации позволяет это проверить $_FILES['file_name']['error']. Однако это работает только для меня, если фактический файл больше upload_max_filesize и меньше post_max_size.

Если фактический размер файла больше, чем post_max_size то переменная $_FILES удаляются, и я получаю сообщение журнала:

PHP Предупреждение: POST Content-Length ххх байт превышает предел их .. .

Таким образом, вопрос: как определить, загружен ли пользователь файл, размер которого превышает post_max_size? Если это произойдет, мне нужно отобразить действительное сообщение пользователя.

Спасибо.

+0

Может быть, вы могли бы проверить размер файла перед началом, чтобы загрузить его. См. Http://www.dotnet-tricks.com/Tutorial/jquery/HHLN180712-Get-file-size-before-upload-using-jquery.html – user1168095

+0

Проверьте этот [аналогичный вопрос] (http: // stackoverflow. ком/вопросы/2133652/как к изящно-ручка-файлы-что непревышение-ПГПС-пост-макс размера). – RDrazard

+0

Не могли бы вы рассказать о коде, который вы используете при загрузке? – SaidbakR

ответ

0

Я предлагаю вам использовать set_error_handler() и проверить на наличие ошибки E_USER_WARNING + соответствующее сообщение, а затем отправить его пользователю, возможно, путем выброса исключения, возможно, каким-либо другим способом.

+0

Также вы можете использовать @ для подавления сообщений об ошибках. См. Http://www.php.net/manual/en/language.operators.errorcontrol.php –

+0

@JhulianoMoreno: Но что бы вы хотели поставить '@' перед ...? В моем понимании это предупреждение не поднимается определенной строкой кода, но когда скрипт запущен ... – CBroe

+0

Эта ошибка не может быть подавлена, и первоначальный вопрос заключался в том, что OP хочет фактически представить эту ошибку пользователю, а не скрывать ее , – Eternal1

0

Как это:

$filesize = $_FILES['file']['size']; 
$limit = ini_get('post_max_size'); 
if($filesize > $limit) { 
    trigger_error("POST Content-Length of $filesize bytes exceeds the limit of $limit bytes.", E_WARNING); 
} 
else { 
    // upload file 
} 
+0

Спасибо, но глобальный $ _FILES пуст, если размер файла> post_max_size, поэтому я не могу выполнить эту проверку. – user3285377