function testParseFileSizeString() { $this->assertEquals(parse_file_size_string("1234"), 1234); $this->assertEquals(parse_file_size_string("0b"), 0); $this->assertEquals(parse_file_size_string("5b"), 5); $this->assertEquals(parse_file_size_string("1k"), 1024); $this->assertEquals(parse_file_size_string("16k"), 16 * 1024); $this->assertEquals(parse_file_size_string("2M"), 2 * 1024 * 1024); $this->assertEquals(parse_file_size_string("123M"), 123 * 1024 * 1024); $this->assertEquals(parse_file_size_string("2G"), 2 * 1024 * 1024 * 1024); }
/** * Uploads the file * @access public * @params * $uploaddir : Directory Name in which uploaded file is placed * $name : file input type field name * $rename : you may pass string or boolean true : rename the file if it already exists and returns the renamed file name. * String : rename the file to given string. * $replace =true : replace the file if it is already existing * $file_max_size : file size in bytes. 0 for default * $check_type : checks file type exp ."(jpg|gif|jpeg)" * Example upload_file("temp","file",true,true,0,"jpg|jpeg|bmp|gif") * return : On success it will return file name else return (boolean)false */ public function upload_file($uploaddir, $name, $rename = null, $replace = false, $check_type = "") { $this->set_file_size($_FILES[$name]['size']); $this->error = $_FILES[$name]['error']; $this->set_temp_name($_FILES[$name]['tmp_name']); $this->set_directory($uploaddir); $this->check_for_directory(); $this->set_file_name($_FILES[$name]['name']); $file_size = $this->file_type_info[$check_type]['max_file_size'] / 1000000; if ($this->error == 1) { $this->error = sprintf(__("Your file is too large for the web server. The largest file you can upload here is %.1fM. If this is too small, please ask the administrator to increase the <code>upload_max_filesize</code> directive in <code>php.ini</code>."), floatval(parse_file_size_string(ini_get("upload_max_filesize"))) / 1048576.0); } elseif ($this->error == 3) { $this->error = __('The uploaded file was only partially uploaded.'); } elseif ($this->error == 4) { $this->error = __('No file was uploaded'); } elseif (!is_uploaded_file($this->tmp_name)) { $this->error = "File " . $this->tmp_name . " is not uploaded correctly."; } if (empty($this->file_name)) { $this->error = "File is not uploaded correctly."; } if ($this->error != "") { return false; } //check here for valid file if (!empty($check_type)) { // set max upload size if (array_key_exists($check_type, $this->file_type_info)) { $this->set_max_size($this->file_type_info[$check_type]['max_file_size']); } // check file size against maximum if ($this->file_size > $this->max_filesize) { $this->error = sprintf(__("File too large; %s file uploads are limited to %s. If this is too small, please ask the administrator to increase the limit."), $check_type, format_file_size($this->max_filesize)); return false; } //if $check_type is just image then we can check it via getImagesize() function if the file is valid or not // does this check always for image if ($check_type == 'image') { $sizeCheck = @getImagesize($this->tmp_name); if (!$sizeCheck) { $this->error = __("Invalid image file."); return false; } //additional check to see if the image has any extension $ext = explode('.', $this->file_name); $ext = strtolower(end($ext)); $img_mime = explode('/', $sizeCheck['mime']); $img_mime = strtolower(end($img_mime)); //jpeg and jpg may have different extension and mime so handled specially if ($ext == 'jpg' || $ext == 'jpeg') { } else { if ($ext != $img_mime) { //means there is no image extension so lets add it $this->file_name .= '.' . $img_mime; } } } //check for other media types // can be turned of from config.inc define('CHECK_MIME_TYPE',0); if ($check_type == 'audio' || $check_type == 'video') { if (CHECK_MIME_TYPE == 1) { $mime_type = exec('file -bi ' . $this->tmp_name); // TO DO:: enalbe for audio/video //application/octet-stream if (empty($mime_type)) { $this->error = __("Invalid media file."); return false; } if (strstr($mime_type, $check_type)) { } else { if (strstr($mime_type, 'media')) { } else { if (strstr($mime_type, 'octet-stream')) { // Temporarily added for .wav file -- need to do something else } else { $this->error = __("Invalid media file."); return false; } } } } } //special treatment for doc types if ($check_type == 'doc') { if (CHECK_MIME_TYPE == 1) { $mime_type = exec('file -bi ' . $this->tmp_name); if (strstr($mime_type, 'msword') || strstr($mime_type, 'pdf')) { } else { $this->error = sprintf(__("Invalid document type - supported formats are: %s"), ".doc, .pdf"); return false; } } } } //check_type if (!is_bool($rename) && !empty($rename)) { if (preg_match("/\\..*+\$/", $this->file_name, $matches)) { $this->set_file_name($rename . $matches[0]); } } elseif ($rename && file_exists($this->full_name)) { if (preg_match("/\\..*+\$/", $this->file_name, $matches)) { $this->set_file_name(substr_replace($this->file_name, "_" . rand(0, rand(0, 99)), -strlen($matches[0]), 0)); } } if (file_exists($this->full_name)) { if ($replace) { @unlink($this->full_name); } else { $this->error = __("File error: File already exists"); return false; } } $this->start_upload(); if ($this->error != "") { return false; } else { return $this->file_name; } }
private function collectSystemData() { // // collect server data // define('PA_DOCUMENT_ROOT', realpath($_SERVER['DOCUMENT_ROOT'])); $this->document_root = PA_DOCUMENT_ROOT; $dir_info = pathinfo(realpath($_SERVER['SCRIPT_FILENAME'])); $path_info = pathinfo($_SERVER['SCRIPT_NAME']); define('PA_SCRIPT_DIR', @$dir_info['dirname']); define('PA_SCRIPT_PATH', @$path_info['dirname']); $this->script_dir = PA_SCRIPT_DIR; $this->script_path = PA_SCRIPT_PATH; if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { define('PA_REQUEST_METHOD', 'AJAX'); } else { define('PA_REQUEST_METHOD', $_SERVER['REQUEST_METHOD']); } $this->request_method = PA_REQUEST_METHOD; $scheme = sprintf('http%s', isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == TRUE ? 's' : ''); define('PA_CURRENT_SCHEME', $scheme); $this->current_scheme = PA_CURRENT_SCHEME; isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? define('PA_HTTP_HOST', $_SERVER['HTTP_X_FORWARDED_HOST']) : define('PA_HTTP_HOST', $_SERVER['HTTP_HOST']); $this->http_host = PA_HTTP_HOST; isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? define('PA_SERVER_NAME', $_SERVER['HTTP_X_FORWARDED_SERVER']) : define('PA_SERVER_NAME', $_SERVER['SERVER_NAME']); $this->server_name = PA_SERVER_NAME; $domain_parts = explode(".", PA_SERVER_NAME); if (count($domain_parts) > 2 && !preg_match("|^\\d+\\.\\d+\\.\\d+\\.\\d+|", PA_SERVER_NAME)) { $domain_match = array(); if (preg_match("/([^\\.\\/]+).([^\\.\\/]+)\$/", PA_SERVER_NAME, $domain_match)) { $domain_suffix = $domain_match[0]; $domain_prefix = substr(PA_SERVER_NAME, 0, strlen(PA_SERVER_NAME) - strlen($domain_suffix) - 1); } else { throw new BootStrapException("BootStrap::collectSystemData() - Unable to detect load domain suffix!", 1); } } else { $domain_suffix = implode(".", $domain_parts); $domain_prefix = false; } define('PA_DOMAIN_SUFFIX', $domain_suffix); define('PA_DOMAIN_PREFIX', $domain_prefix); $this->domain_suffix = PA_DOMAIN_SUFFIX; $this->domain_prefix = PA_DOMAIN_PREFIX; $this->remote_addr = $this->getIP(); $this->request_uri = $this->_normalize_URI($_SERVER['REQUEST_URI']); $_SERVER['REQUEST_URI'] = $this->request_uri; define('PA_BASE_URL', PA_CURRENT_SCHEME . '://' . PA_SERVER_NAME); $this->base_url = PA_BASE_URL; define('PA_INSTALL_DIR', $this->install_dir); define('PA_USER_AGENT', implode(' ', $this->getUserAgent($_SERVER['HTTP_USER_AGENT']))); $this->user_agent = PA_USER_AGENT; $this->request_data = $_REQUEST; $this->upload_max_filesize = parse_file_size_string(ini_get("upload_max_filesize")); }