【问题标题】:Cakephp file upload problemCakephp文件上传问题
【发布时间】:2010-06-15 05:30:39
【问题描述】:

我使用 Cakephp 作为我的框架。我在通过表单上传文件时遇到问题。我正在使用来自 THIS 网站的上传器插件。

我的 php ini 文件有这段代码。

upload_max_filesize = 10M
post_max_size = 8M

这是来自 uploader.php --> 插件文件有

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

在我的 controller.php 文件中,我使用此代码在运行时将最大文件大小设置为 1 MB。

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 在运行时为 1MB。所以上传应该会失败。

问题是: 但它正在上传。

Landmark 1 未执行。 (以 cmets 为单位)...地标 2 似乎不起作用... upload_max_filesize 没有从 maxFileSize 中获取值。

请帮助我...谢谢

【问题讨论】:

    标签: php cakephp uploader


    【解决方案1】:

    在脚本执行期间设置upload_max_filesize 毫无意义,因为在脚本执行时文件已经上传并被服务器接受。如果您需要根据脚本中的大小拒绝文件(而不是 Apache 或 PHP 拒绝它),您需要评估上传文件的大小,如果文件太大,则“手动”忽略它。

    【讨论】:

      【解决方案2】:

      无论是否无意义,甚至都无法使用 ini_set 更改 upload_max_filesize

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 2010-10-17
        相关资源
        最近更新 更多