2015-07-01 11 views
1

Мне нужно php для работы с javascript ...: |Показать размер файла перед загрузкой ...?

Я хочу, чтобы пользователь, чтобы загрузить только макс 5MB файлы, но PHP обнаруживает это только после того, как загрузка будет сделана ... примера:

if ($_FILES["ftu"]["size"] > 5242880) { 
     echo "<br /><font color='#FF4747'>Sorry, but maximum size of the uploaded file must not exceed 5MB</font>"; 
} 

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

$(document).ready(function(){ 
     $('#upheadinp').bind('change', function() { 
      if(this.files[0].size > 5242880){ 
      $('#uploadspan').html("<font color='#FF4747'>Max file size is 5MB</font>"); 
      } 
     }); 
    }); 

Да так, это тоже работает, но это только, чтобы показать сообщение об ошибке ... Как я могу объединить php if function с этим javascript function?

Мои ожидания что-то вроде:

<?php 
if("<script>(this.files[0].size)</script>" > 5242880){ 
echo "error"; 
} 
?> 

Может кто-нибудь помочь мне? Благодаря!

+1

Вы не можете объединить PHP с JavaScript. Они выполняются в разных местах в разное время. –

+0

использовать js, чтобы отключить форму submit, после того, как файл выберет, если размер большой? –

+0

Несмотря на то, что вы не можете объединить эти два, вы можете направить ваш _JavaScript_ огонь на вызов _AJAX_ на ваш php-сервер, который говорит о размере файла и ждет ответа, прежде чем выполнять другой запрос на загрузку файла. Это увеличивает нагрузку на сервер, так как это будет означать 2 запроса на загрузку, а не только 1. –

ответ

2

Вышеуказанные комментарии, очевидно, верны. JS - это клиентский сценарий, а PHP - серверный. По очевидным причинам они не взаимодействуют напрямую.

Лучшим решением было бы предотвратить возможность отправки формы. Это позволит достичь того, что я интерпретирую как то, что вы ищете. Способ предотвращения того, чтобы кто-то подавал в дополнение к профилактике PHP. Правильное соглашение о программировании будет диктовать любые пользовательские данные (текст, закачки и т. Д.), Которые должны быть проверены как на клиенте, так и на сервере. Никогда не доверяйте данным клиента и никогда не предполагайте, что он был правильно проверен.

$("theformyouareusing").submit(function(e) { 
    if($('input[type=file]').files[0].size > 5242880){ 
     e.preventDefault(); 
     } 
    }); 

Вы также можете иметь проверку старых браузеров, которые не поддерживают .files.size и решить, как вы хотите обрабатывать эти случаи.

Для дополнительной безопасности, вы должны добавить эти строки в php.ini:

post_max_size = 5M 
upload_max_filesize = 5M 
+1

@Dave Correct; однако, как я уже сказал выше, никогда не доверяйте проверке на стороне клиента и ВСЕГДА выполняйте проверку на стороне сервера, а также –

+0

@Dave Sure. Вперед –

+1

Параметр 'post_max_size' указывает максимальный размер сообщения, включая любые загруженные файлы и любые другие поля, которые могут совпадать с ними. Установка значения 'upload_max_filesize' на одно и то же значение может привести к тому, что файл, находящийся только в пределах максимального предела загрузки, будет отклонен, потому что сопутствующие данные берут сообщение за максимальный пост-лимит. –