public function testGetUploadedFiles() { $request = new \Phalcon\Http\Request(); $_FILES = array('photo' => array('name' => array(0 => 'f0', 1 => 'f1', 2 => array(0 => 'f2', 1 => 'f3'), 3 => array(0 => array(0 => array(0 => array(0 => 'f4'))))), 'type' => array(0 => 'text/plain', 1 => 'text/csv', 2 => array(0 => 'image/png', 1 => 'image/gif'), 3 => array(0 => array(0 => array(0 => array(0 => 'application/octet-stream'))))), 'tmp_name' => array(0 => 't0', 1 => 't1', 2 => array(0 => 't2', 1 => 't3'), 3 => array(0 => array(0 => array(0 => array(0 => 't4'))))), 'error' => array(0 => 0, 1 => 0, 2 => array(0 => 0, 1 => 0), 3 => array(0 => array(0 => array(0 => array(0 => 8))))), 'size' => array(0 => 10, 1 => 20, 2 => array(0 => 30, 1 => 40), 3 => array(0 => array(0 => array(0 => array(0 => 50))))))); $all = $request->getUploadedFiles(false); $successful = $request->getUploadedFiles(true); $this->assertEquals(count($all), 5); $this->assertEquals(count($successful), 4); for ($i = 0; $i <= 4; ++$i) { $this->assertFalse($all[$i]->isUploadedFile()); } $keys = array('photo.0', 'photo.1', 'photo.2.0', 'photo.2.1', 'photo.3.0.0.0.0'); for ($i = 0; $i <= 4; ++$i) { $this->assertEquals($all[$i]->getKey(), $keys[$i]); } $this->assertEquals($all[0]->getName(), 'f0'); $this->assertEquals($all[1]->getName(), 'f1'); $this->assertEquals($all[2]->getName(), 'f2'); $this->assertEquals($all[3]->getName(), 'f3'); $this->assertEquals($all[4]->getName(), 'f4'); $this->assertEquals($all[0]->getTempName(), 't0'); $this->assertEquals($all[1]->getTempName(), 't1'); $this->assertEquals($all[2]->getTempName(), 't2'); $this->assertEquals($all[3]->getTempName(), 't3'); $this->assertEquals($all[4]->getTempName(), 't4'); $this->assertEquals($successful[0]->getName(), 'f0'); $this->assertEquals($successful[1]->getName(), 'f1'); $this->assertEquals($successful[2]->getName(), 'f2'); $this->assertEquals($successful[3]->getName(), 'f3'); $this->assertEquals($successful[0]->getTempName(), 't0'); $this->assertEquals($successful[1]->getTempName(), 't1'); $this->assertEquals($successful[2]->getTempName(), 't2'); $this->assertEquals($successful[3]->getTempName(), 't3'); }
/** * @requires extension fileinfo */ public function testIssues1442() { $request = new \Phalcon\Http\Request(); $_FILES = array('test' => array('name' => 'test', 'type' => 'text/plain', 'tmp_name' => 'unit-tests/assets/phalconphp.jpg', 'size' => 1, 'error' => 0)); foreach ($request->getUploadedFiles(TRUE) as $file) { $this->assertEquals($file->getType(), 'text/plain'); $this->assertEquals($file->getRealType(), 'image/jpeg'); } }
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; }