diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index 34415b33..be3ca27d 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -569,22 +569,35 @@ function pagination($page, $current) { */ function get_file($key, $decompress = false) { $file = $_FILES[$key]; - if (!$file || $file["error"]) { - return $file["error"]; + if (!$file) { + return null; } - $return = file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]" - : ($decompress && ereg('\\.bz2$', $file["name"]) ? "compress.bzip2://$file[tmp_name]" - : $file["tmp_name"] - )); //! may not be reachable because of open_basedir - if ($decompress) { - $start = substr($return, 0, 3); - if (function_exists("iconv") && ereg("^\xFE\xFF|^\xFF\xFE", $start, $regs)) { // not ternary operator to save memory - $return = iconv("utf-16", "utf-8", $return); - } elseif ($start == "\xEF\xBB\xBF") { // UTF-8 BOM - $return = substr($return, 3); + foreach ($file as $key => $val) { + $file[$key] = (array) $val; + } + $return = array(); + foreach ($file["error"] as $key => $error) { + if ($error) { + return $error; } + $name = $file["name"][$key]; + $tmp_name = $file["tmp_name"][$key]; + $content = file_get_contents($decompress && ereg('\\.gz$', $name) ? "compress.zlib://$tmp_name" + : ($decompress && ereg('\\.bz2$', $name) ? "compress.bzip2://$tmp_name" + : $tmp_name + )); //! may not be reachable because of open_basedir + if ($decompress) { + $start = substr($content, 0, 3); + if (function_exists("iconv") && ereg("^\xFE\xFF|^\xFF\xFE", $start, $regs)) { // not ternary operator to save memory + $content = iconv("utf-16", "utf-8", $content); + } elseif ($start == "\xEF\xBB\xBF") { // UTF-8 BOM + $content = substr($content, 3); + } + } + $return[] = $content; } - return $return; + //! support SQL files not ending with semicolon + return implode("\n\n\n", $return); } /** Determine upload error diff --git a/adminer/sql.inc.php b/adminer/sql.inc.php index b8c332cc..67d26d64 100644 --- a/adminer/sql.inc.php +++ b/adminer/sql.inc.php @@ -25,7 +25,7 @@ if (!$error && $_POST) { : "compress.bzip2://adminer.sql.bz2" )), "rb"); $query = ($fp ? fread($fp, 1e6) : false); - } elseif ($_FILES && $_FILES["sql_file"]["error"] != UPLOAD_ERR_NO_FILE) { + } elseif ($_FILES && $_FILES["sql_file"]["error"][0] != 4) { // 4 - UPLOAD_ERR_NO_FILE $query = get_file("sql_file", true); } if (is_string($query)) { // get_file() returns error as number, fread() as false @@ -180,7 +180,9 @@ if ($_POST) { textarea("query", $q, 20); echo ($_POST ? "" : "\n"); echo "

" . (ini_bool("file_uploads") - ? lang('File upload') . ': (< ' . ini_get("upload_max_filesize") . 'B)' // ignore post_max_size because it is for all form fields together and bytes computing would be necessary + ? lang('File upload') . ': (< ' . ini_get("upload_max_filesize") . 'B)' // ignore post_max_size because it is for all form fields together and bytes computing would be necessary : lang('File uploads are disabled.') ); diff --git a/changes.txt b/changes.txt index b7130137..c3264ad7 100644 --- a/changes.txt +++ b/changes.txt @@ -1,4 +1,5 @@ -Adminer 3.6.5-dev: +Adminer 3.7.0-dev: +Allow more SQL files to be uploaded at the same time Print run time next to executed queries Disable SQL export when applying functions in select Fix handling of POINT data type (bug #3582578)