Esempio n. 1
0
 public function testHasFiles()
 {
     $request = new \Phalcon\Http\Request();
     $_FILES = array('test' => array('name' => 'name', 'type' => 'text/plain', 'size' => 1, 'tmp_name' => 'tmp_name', 'error' => 0));
     $this->assertEquals($request->hasFiles(false), 1);
     $this->assertEquals($request->hasFiles(true), 1);
     $_FILES = array('test' => array('name' => array('name1', 'name2'), 'type' => array('text/plain', 'text/plain'), 'size' => array(1, 1), 'tmp_name' => array('tmp_name1', 'tmp_name2'), 'error' => array(0, 0)));
     $this->assertEquals($request->hasFiles(false), 2);
     $this->assertEquals($request->hasFiles(true), 2);
     $_FILES = array('photo' => array('name' => array(0 => '', 1 => '', 2 => array(0 => '', 1 => '', 2 => ''), 3 => array(0 => ''), 4 => array(0 => array(0 => '')), 5 => array(0 => array(0 => array(0 => array(0 => ''))))), 'type' => array(0 => '', 1 => '', 2 => array(0 => '', 1 => '', 2 => ''), 3 => array(0 => ''), 4 => array(0 => array(0 => '')), 5 => array(0 => array(0 => array(0 => array(0 => ''))))), 'tmp_name' => array(0 => '', 1 => '', 2 => array(0 => '', 1 => '', 2 => ''), 3 => array(0 => ''), 4 => array(0 => array(0 => '')), 5 => array(0 => array(0 => array(0 => array(0 => ''))))), 'error' => array(0 => 4, 1 => 4, 2 => array(0 => 4, 1 => 4, 2 => 4), 3 => array(0 => 4), 4 => array(0 => array(0 => 4)), 5 => array(0 => array(0 => array(0 => array(0 => 4))))), 'size' => array(0 => 0, 1 => 0, 2 => array(0 => 0, 1 => 0, 2 => 0), 3 => array(0 => 0), 4 => array(0 => array(0 => 0)), 5 => array(0 => array(0 => array(0 => array(0 => 0)))))), 'test' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0));
     $this->assertEquals($request->hasFiles(false), 9);
     $this->assertEquals($request->hasFiles(true), 0);
 }
Esempio n. 2
0
function uploads($upload_dir, $size = 2097152, $type = array('jpg', 'png'))
{
    $request = new \Phalcon\Http\Request();
    if (true != $request->isPost()) {
        return false;
    }
    if ($request->hasFiles()) {
        $upload_dir = trim($upload_dir, '/\\') . DIRECTORY_SEPARATOR . date('Y-m-d');
        if (!file_exists($upload_dir)) {
            mkdir($upload_dir, 777, true);
        }
        $php_post_max_size = (int) ini_get('post_max_size') * 1024 * 1024;
        $php_upload_max_filesize = (int) ini_get('upload_max_filesize') * 1024 * 1024;
        if ($php_post_max_size < $size) {
            logWarning('PHP php_post_max_size < uploads\'s Size');
            throw new \Exception('php.ini php_post_max_size 上传文件大小未设置');
        }
        if ($php_upload_max_filesize < $size) {
            logWarning('PHP php_upload_max_filesize < uploads\'s Size');
            throw new \Exception('php.ini php_upload_max_filesize 上传文件大小未设置');
        }
        foreach ($request->getUploadedFiles() as $file) {
            if ($file->getError() != 0) {
                continue;
            }
            if (!in_array($file->getExtension(), $type)) {
                $upload_errors[] = array('error' => UPLOADS_ERROR_10001, 'key' => $file->getKey());
                break;
            }
            if ($file->getSize() > $size) {
                $upload_errors[] = array('error' => UPLOADS_ERROR_10002, 'key' => $file->getKey());
                break;
            }
            $file_name = uniqid() . time() . mt_rand(10000, 999999) . '.' . $file->getExtension();
            if ($file->moveTo($upload_dir . DIRECTORY_SEPARATOR . $file_name)) {
                $files[$file->getKey()] = $upload_dir . DIRECTORY_SEPARATOR . $file_name;
            }
        }
        if (isset($upload_errors)) {
            if (isset($files)) {
                foreach ($files as $val) {
                    if (!unlink(ROOT_DIR . DIRECTORY_SEPARATOR . $val)) {
                        logWarning('delete upload file error ::' . $val);
                    }
                }
            }
            return $upload_errors;
        }
        if (isset($files) && is_array($files) && count($files) > 0) {
            return $files;
        }
    }
    return false;
}