2010-06-15 1 views
0

Я использую Cakephp в качестве рамки. У меня проблема с загрузкой файлов через форму. Я использую плагин Uploader с сайта THIS.Проблема с загрузкой файла CakePHP

У моего php ini-файла есть этот кусок кода.

upload_max_filesize = 10M 
post_max_size = 8M 

это из uploader.php -> плагин файл имеет

var $maxFileSize = '5M'; //default max file size 

В моем файле controller.php, я использую этот код, чтобы установить максимальный размер файла в 1 МБ во время выполнения.

function beforeFilter() { 
    parent::beforeFilter(); 

     $this->Uploader->maxFileSize = '1M'; 
} 

В uploader.php мы выполняем это ...

if (empty($this->maxFileSize)) { 
    $this->maxFileSize = ini_get('upload_max_filesize'); //landmark 1 
} 

$byte = preg_replace('/[^0-9]/i', '', $this->maxFileSize); 
$last = $this->bytes($this->maxFileSize, 'byte'); 

if ($last == 'T' || $last == 'TB') { 
    $multiplier = 1; 
    $execTime = 20; 
} else if ($last == 'G' || $last == 'GB') { 
    $multiplier = 3; 
    $execTime = 10; 
} else if ($last == 'M' || $last == 'MB') { 
    $multiplier = 5; 
    $execTime = 5; 
} else { 
    $multiplier = 10; 
    $execTime = 3; 
} 


ini_set('memore_limit', (($byte * $multiplier) * $multiplier) . $last); 
ini_set('post_max_size', ($byte * $multiplier) . $last); //error suspected here 
ini_set('upload_tmp_dir', $this->tempDir); 
ini_set('upload_max_filesize', $this->maxFileSize); //landmark 2 

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ: При попытке загрузить файл, который является 2MB размера, оно не должно иметь место, потому что MaxFileSize 1 МБ во время выполнения. Поэтому загрузка должна завершиться неудачей.

ПРОБЛЕМА: Но она загружается.

Ориентир 1 не выполнен. (в комментариях) ... метка земли 2, похоже, не работает ... upload_max_filesize не получает значение от maxFileSize.

Пожалуйста, помогите мне ... спасибо

ответ

2

Установка upload_max_filesize во время выполнения сценария довольно бессмысленно, так как к тому времени, когда сценарий выполняет файл уже загружен и принят сервером. Если вам нужно отклонить файл по размеру в вашем скрипте (в отличие от Apache или PHP, отклоняющего его), вам нужно оценить размер загруженного файла и «вручную» игнорировать его, если он слишком большой.

0

бессмысленно или нет, его даже нельзя изменить upload_max_filesize с ini_set.

upload_max_filesize имеет переменчивый флаг PHP_INI_PERDIR которым означает Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini (since PHP 5.3)

как дополнительный комментарий помните, что post_max_size должна быть равна или больше, то upload_max_filesize