diff --git a/phpMyAdmin/CONTRIBUTING.md b/phpMyAdmin/CONTRIBUTING.md
new file mode 100644
index 0000000..62c9798
--- /dev/null
+++ b/phpMyAdmin/CONTRIBUTING.md
@@ -0,0 +1,21 @@
+# Contributing to phpMyAdmin
+
+As an open source project, phpMyAdmin welcomes contributions of many forms.
+
+## Bug reporting
+
+Please report [bugs on SourceForge.net][1].
+
+[1]: https://sourceforge.net/p/phpmyadmin/bugs/new/
+
+## Patches submission
+
+Patches are welcome either as [pull requests on GitHub][2].
+
+[2]: https://github.com/phpmyadmin/phpmyadmin/pulls
+
+## More information
+
+You can find more information on our website:
+
+http://www.phpmyadmin.net/home_page/improve.php
diff --git a/phpMyAdmin/ChangeLog b/phpMyAdmin/ChangeLog
index 0ec6062..619fb44 100644
--- a/phpMyAdmin/ChangeLog
+++ b/phpMyAdmin/ChangeLog
@@ -1,555 +1,61 @@
phpMyAdmin - ChangeLog
======================
-3.5.7.0 (2013-02-15)
-- bug #3779 [core] Problem with backslash in enum fields
-- bug #3816 Missing server_processlist.php
-- bug #3821 Safari: white page
-- Correct detection of the Chrome browser
-
-3.5.6.0 (2013-01-28)
-- bug #3593604 [status] Erroneous advisor rule
-- bug #3596070 [status] localStorage broken in server status monitor
-- bug #3598736 [routines] Editing a procedure with special characters
-- bug #3600322 [core] Visualize GIS data throws Fatal Error
-- bug #3599362 [core] Double-escaped error message
-- bug #3776 [cookies] Login without auth on second server
-
-3.5.5.0 (2012-12-21)
-- bug #3563824 [export] Support Apache's mod_deflate
-- bug #3585523 [interface] Inline query editing broken after row update
-- bug #3586389 [setup] Cannot switch language in /setup
-- bug #3585695 [CSS] Font size in inline query editor is way too big
-- bug #3588354 [l10n] Portuguese Language not displaying correctly
-- bug #3591412 [status] Live charts don't work for non-default server
-- bug [core] Proxy ajax calls to pma.net to avoid browser notices
-- bug #3593534 [tracking] Structure Snapshot on tracked view renders invalid
-SQL
-- bug #3544366 [events] Event comments not saved
-
-3.5.4.0 (2012-11-16)
-- bug #3570212 [edit] uuid_short() is a no-arguments function
-- bug #3569577 [edit] Add routine parameter headers not valid for "function"
-- bug #3575799 [search] Various search operators not working as expected
-- bug #3576322 [search] Invalid select query generated for tables with ENUM fields
-- bug #3577468 [display] Incorrect imagejpeg Syntax Breaks Image Transformation
-- bug #3578776 [search] Editing SQL not possible when no records found
-- bug #3571970 [interface] Display chart and number of rows to plot
-- bug #3582631 [core] Wrong redirect url caused cookies error with ForceSSL
-
-3.5.3.0 (2012-10-08)
-- bug #3539044 [interface] Browse mode "Show" button gives blank page if no results anymore
-- bug #3534979 [interface] Copy Database Ajax feedback vanishes long before copying is done
-- bug #3527531 [interface] GC-maxlifetime warning incorrectly displayed
-- bug #3526916 [interface] Search fails with JS error when tooltips disabled
-- bug #3544366 [interface] Event comments not saved
-- bug #3549084 [edit] Can't enter date directly when editing inline
-- bug #3548491 [interface] Inline query editor doesn't work from search results
-- bug #3547825 [edit] BLOB download no longer works
-- bug #3541966 [config] Error in generated configuration arrray
-- bug #3553551 [GUI] Invalid HTML code in multi submits confirmation form
-- [interface] Designer sometimes places tables on the top menu
-- bug #3546277 [core] Call to undefined function __() when config file has wrong permissions
-- bug #3540922 [edit] Error searching table with many fields
-- bug #3555104 [edit] Cannot copy a DB with table & views
-- bug #3559925 [privileges] Incorrect updating of the list of users
-- bug #3561224 [edit] cell edit date field with empty date fills in current date
-- bug #3559955 [edit] current_date from function drop down fails on update
-- bug #3562472 add support for Solaris and FreeBSD system load and memory display in server status
-- bug #3553068 [import] Table import from XML file fails
-- replace Highcharts with jqplot for Display chart
-- bug #3567684 [edit] Pasting value doesn't clear null checkbox
-- bug #3570786 [edit] Datepicker for date and datetime fields is broken
-
-3.5.2.2 (2012-08-12)
-- [security] Fixed XSS vulnerabilities, see PMASA-2012-4
-
-3.5.2.1 (2012-08-03)
-- [security] Fixed local path disclosure vulnerability, see PMASA-2012-3
-
-3.5.2.0 (2012-07-07)
-- bug #3521416 [interface] JS error when editing index
-- bug #3521313 [core] Call to undefined function __()
-- bug #3521016 [edit] NOW() function incorrectly selected
-- bug [GUI] Invalid HTML code on transformation_overview.php
-- bug #3522930 [browse] Missing validation in Ajax mode
-- bug Fix popup message on build SQL of import
-- bug #3523499 [core] Make X-WebKit-CSP work better
-- replace Highcharts with jqplot for query profiling, zoom search
-- bug #3531584 [interface] No form validation in change password dialog
-- bug #3531585 [interface] Broken password validation in copy user form
-- bug #3531586 [unterface] Add user form prints JSON when user presses enter
-- bug #3534121 [config] duplicate line in config.sample.inc.php
-- bug #3534311 [interface] Grid editing incorrectly parses ENUM/SET values
-- bug #3510196 [core] More clever URL rewriting with ForceSSL
-
-3.5.1.0 (2012-05-03)
-- bug #3510784 [edit] Limit clause ignored when sort order is remembered
-- bug #3511471 [interface] View name not seen in navi panel (MySQL 5.1)
-- bug #3512916 [display] Right frame reloads after displaying SQL result(zero rows)
-- bug [interface] Fixed missing Codemirror for inline query edit when exporting a result set
-- bug #3514490 [auth] Multiple Navigation panels bug still present
-- bug #3515181 [users] Error in create user + underscore + create database
-- bug #3515666 [display] Profiling chart shows wrong data
-- bug #3516037 [auth] JS includes missing in auth config error page
-- bug #3516183 [display] Missing image extension
-- bug [display] Added missing icons in original theme
-- bug #3516761 [edit] Query error after search
-- bug #3516405 [display] Chart title is getting wrong within chart export
-- bug #3517021 [interface] Header links except 'More' hide after closing dialog
-- bug #3516817 [interface] "More" actions in table structure
-- bug #3518484 [privileges] PMA_sqlAddSlashes() does not quote the table names correctly
-- bug #3518983 [designer] Error messages do not appear in the Designer
-- bug #3519747 [interface] Suhosin patch warning incorrectly displayed
-- bug #3520107 [interface] Server status page: Incorrect dialog box titles
-- bug #3516089 [structure] DROP does not work on defective VIEWs
-
-3.5.0.0 (2012-04-07)
-+ rfe #2021981 [interface] Add support for mass prefix change.
-+ "up to date" message on main page when current version is up to date
-+ Update to jQuery 1.6.2
-+ Patch #3256122 [search] Show/hide db search results
-+ Patch #3302354 Add gettext wrappers around a message
-+ Remove deprecated function PMA_DBI_get_fields
-+ rfe #2098927 Remember recent tables
-+ rfe #3078542 Remember the last sort order for each table
-+ AJAX for Create table in navigation panel
-+ rfe #3310562 Wording about Column
-+ AJAX for Add a user in Database privileges
-+ Patch #3271804 for rfe #3177495, new DisableMultiTableMaintenance directive
-+ [interface] Reorganised server status page.
-+ [interface] Changed way of generating charts.
-+ rfe #939233 [interface] Flexible column width
-+ [interface] Mouse-based column reordering in query results
-+ AJAX for Insert to a table from database Structure page
-- Patch #3316969 PMA_ajaxShowMessage() does not respect timeout
-+ AJAX for Change on multiple rows in table Browse
-+ [interface] Improved support for stored routines
-+ [display] More options for browsing GIS data
-+ [interface] Support for spatial indexes
-+ [display] GIS data visualization
-+ AJAX for table structure multiple-column change
-+ AJAX for table structure index edit
-+ Show/hide indexes in table Structure
-+ More compact navigation bar
-+ Display direction (horizontal/vertical) no longer displayed by default
-+ Shift/click support in database Structure
-+ Show/hide column in table Browse
-- bug #3353856 [AJAX] AJAX dialogs use wrong font-size
-- bug #3354356 [interface] Timepicker does not work in AJAX dialogs
-+ AJAX for table Structure Indexes Edit
-+ AJAX for table Structure column Change
-+ [interface] Improved support for events
-+ [interface] Improved support for triggers
-+ [interface] Improved server monitoring
-+ AJAX for table Structure column Add
-+ AJAX for table Operations copy table
-- bug #3380946 [export] no uid Query result export (Suhosin limit)
-+ Grid editing in browse mode (replaces row inline edit)
-+ Zoom-search in table Search
-+ [interface] Editor for GIS data
-+ [import] Import GIS data from ESRI Shapefiles
-+ [interface] 'Function based search' for GIS data
-+ Support Drizzle database
-- bug #3356456 [interface] Interface problems for queries having LIMIT clauses
-+ [interface] Remove DefaultPropDisplay feature
-- bug #3299486 [prettyprint] Order By in a query containing comment character
-+ [interface] Improved ENUM/SET editor
-+ patch #3428376 [pmadb] pmadb on a different MySQL server
-+ patch #3410688 [interface] Improving field size for character columns
-- [usability] Removed an unnecessary AJAX request from database search
-- bug #3302419 [navi] Tabs break when squeezing page
-+ rfe #3406797 [navi] Stick table tools to top of page on scroll
-+ rfe #1632106 [interface] Improved error handling
-+ patch #3432835 [interface] Add useful intermediate pages to pageselector
-+ [interface] Improved index editor
-+ View editing via a generated ALTER VIEW
-- bug #3408377 [interface] Deleting table from the DB does not change the table counter
-+ rfe #3438266 [designer] Toggle for relation lines
-- bug #3442069 [AJAX] database list not updated after adding/deleting a user + database
-- bug #3461750 [edit] Sort by key generates wrong sql with limit clause
-- bug #3340842 [structure] Error dropping index of non-existing column
-- bug #3093145 [display] Page through rows returned from a view
-+ patch #3303195 [interface] Checkbox to have SQL input remain
-- patch #3472899 [export] Fixed CSV escape for the export
-- patch #3475424 [import] Fixed CSV escape for the import
-- bug #3482734 [interface] No warning on syntax error in search form
-- bug #3423717 [core] Improved detection of SSL connection
-+ FULLTEXT support for InnoDB, starting with MySQL 5.6.4
-- bug #3497151 [interface] Duplicate inline query edit box
-- bug #3504567 [mime] Description of the transformation missing in the tooltip
-
-3.4.11.1 (2012-08-12)
-- [security] Fixed XSS vulnerabilities, see PMASA-2012-4
-
-3.4.11.0 (2012-04-14)
-- bug #3486970 [import] Exception on XML import
-- bug #3488777 [navi] $cfg['ShowTooltipAliasTB'] and blank names in navigation
-
-3.4.10.2 (2012-03-28)
-- [security] Fixed local path disclosure vulnerability, see PMASA-2012-2
-
-3.4.10.1 (2012-02-18)
-- [security] XSS in replication setup, see PMASA-2012-1
-
-3.4.10.0 (2012-02-14)
-- bug #3460090 [interface] TextareaAutoSelect feature broken
-- patch #3375984 [export] PHP Array export might generate invalid php code
-- bug #3049209 [import] Import from ODS ignores cell that is the same as cell before
-- bug #3463933 [display] SELECT DISTINCT displays wrong total records found
-- patch #3458944 [operations] copy table data missing SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO'
-- bug #3469254 [edit] Setting data to NULL and drop-downs
-- bug #3477063 [edit] Missing set fields and values in generated INSERT query
-- bug #3460867 [libraries] license issue with TCPDF (updated to 5.9.145)
-
-3.4.9.0 (2011-12-21)
-- bug #3442028 [edit] Inline editing enum fields with null shows no dropdown
-- bug #3442004 [interface] DB suggestion not correct for user with underscore
-- bug #3438420 [core] Magic quotes removed in PHP 5.4
-- bug #3398788 [session] No feedback when result is empty (signon auth_type)
-- bug #3384035 [display] Problems regarding ShowTooltipAliasTB
-- bug #3306875 [edit] Can't rename a database that contains views
-- bug #3452506 [edit] Unable to move tables with triggers
-- bug #3449659 [navi] Fast filter broken with table tree
-- bug #3448485 [GUI] Firefox favicon frameset regression
-- [core] Better compatibility with mysql extension
-- [security] Self-XSS on export options (export server/database/table), see PMASA-2011-20
-- [security] Self-XSS in setup (host parameter), see PMASA-2011-19
-
-3.4.8.0 (2011-12-01)
-- bug #3425230 [interface] enum data split at space char (more space to edit)
-- bug #3426840 [interface] ENUM/SET editor can't handle commas in values
-- bug #3427256 [interface] no links to browse/empty views and tables
-- bug #3430377 [interface] Deleted search results remain visible
-- bug #3428627 [import] ODS import ignores memory limits
-- bug #3426836 [interface] Visual column separation
-- bug #3428065 [parser] TRUE not recognized by parser
-+ patch #3433770 [config] Make location of php-gettext configurable
-- patch #3430291 [import] Handle conflicts in some open_basedir situations
-- bug #3431427 [display] Dropdown results - setting NULL does not work
-- patch #3428764 [edit] Inline edit on multi-server configuration
-- patch #3437354 [core] Notice: Array to string conversion in PHP 5.4
-- [interface] When ShowTooltipAliasTB is true, VIEW is wrongly shown as the
- view name in main panel db Structure page
-- bug #3439292 [core] Fail to synchronize column with name of keyword
-- bug #3425156 [interface] Add column after drop
-- [interface] Avoid showing the password in phpinfo()'s output
-- bug #3441572 [GUI] 'newer version of phpMyAdmin' message not shown in IE8
-- bug #3407235 [interface] Entering the key through a lookup window does not reset NULL
-- [security] Self-XSS on database names (Synchronize), see PMASA-2011-18
-- [security] Self-XSS on database names (Operations/rename), see PMASA-2011-18
-- [security] Self-XSS on column type (Create index), see PMASA-2011-18
-- [security] Self-XSS on column type (table Search), see PMASA-2011-18
-- [security] Self-XSS on invalid query (table overview), see PMASA-2011-18
-
-3.4.7.1 (2011-11-10)
-- [security] Fixed possible local file inclusion in XML import
-(CVE-2011-4107).
-
-3.4.7.0 (2011-10-23)
-- bug #3418610 [interface] Links in navigation when $cfg['MainPageIconic'] = false
-- bug #3418849 [interface] Inline edit shows dropdowns even after closing
-- bug [view] View renaming did not work
-- bug [navi] Wrong icon for view (MySQL 5.5)
-- bug #3420229 [doc] Missing documentation section
-- bug #3423725 [pdf] Broken PDF file when exporting database to PDF
-- [core] Allow to set language in URL
-- bug #3425184 [doc] Fix links to PHP documentation
-- bug #3426031 [export] Export to bzip2 is not working
-
-3.4.6.0 (2011-10-16)
-- patch #3404173 InnoDB comment display with tooltips/aliases
-- bug #3404886 [navi] Edit SQL statement after error
-- bug #3403165 [interface] Collation not displayed for long enum fields
-- bug #3399951 [export] Config for export compression not used
-- bug #3400690 [privileges] DB-specific privileges won't submit
-- bug #3410604 [config] Configuration storage incorrect suggested table name
-- bug #3383572 [interface] Cannot execute saved query
-- bug #3411535 [display] Full text button unchecks results display options
-- bug #3411224 [display] Broken binary column when 'Show binary contents' is not set
-- bug #3411633 [core] Call to undefined function PMA_isSuperuser()
-- bug #3413743 [interface] Display options link missing after search
-- bug #3324161 [core] CSP policy causing designer JS buttons to fail
-- bug #3412862 [relation] Relations/constraints are dropped/created on every change
-- bug #3390832 [display] Delete records from last page breaks search
-- bug #3392150 [schema] PMA_User_Schema::processUserChoice() is broken
-- bug #3414744 [core] External link fails in 3.4.5
-- patch #3314626 [display] CharTextareaRows is not respected
-- bug #3417089 [synchronize] Extraneous db choices
-- [security] Fixed local path disclosure vulnerability, see PMASA-2011-15
-- [security] Fixed XSS in setup (host/verbose parameter), see PMASA-2011-16
-
-3.4.5.0 (2011-09-14)
-- bug #3375325 [interface] Page list in navigation frame looks odd
-- bug #3313235 [interface] Error div misplaced
-- bug #3374802 [interface] Comment on a column breaks inline editing
-- patch #3383711 [display] Order by a column in a view doesn't work in some cases
-- bug #3386434 [interface] Add missing space to server status
-- [core] Remove library PHPExcel, due to license issues
-- [export] Remove native Excel export modules (xls and xlsx formats)
-- [import] Remove native Excel import modules (xls and xlsx formats)
-- bug #3392920 [edit] BLOB emptied after editing another column
-- [security] Fixed XSS in Inline Edit on save action, see PMASA-2011-14
-- [security] Fixed XSS with db/table/column names, see PMASA-2011-14
-
-3.4.4.0 (2011-08-24)
-- bug #3323060 [parser] SQL parser breaks AJAX requests if query has unclosed quotes
-- bug #3323101 [parser] Invalid escape sequence in SQL parser
-- bug #3348995 [config] $cfg['Export']['asfile'] set to false does not select asText option
-- bug #3340151 [export] Working SQL query exports error page
-- bug #3353649 [interface] "Create an index on X columns" form not validated
-- bug #3350790 [interface] JS error in Table->Structure->Index->Edit
-- bug #3353811 [interface] Info message has "error" class
-- bug #3357837 [interface] TABbing through a NULL field in the inline mode resets NULL
-- remove version number in /setup
-- bug #3367993 [usability] Missing "Generate Password" button
-- bug #3363221 [display] Missing Server Parameter on inline sql query
-- bug #3367986 [navi] Drop field -> lost active table
-- remove misleading comment on the "Rename database" interface
-- bug #3374374 [interface] Fix footnote for inexact count while browsing
-- bug #3372807 [interface] Fix security warning link in setup
-- bug #3374347 [display] Backquotes in normal text on import page
-- bug #3358750 [core] With Suhosin, urls are too long in edit links
-- [security] Missing sanitization on the table, column and index names leads to XSS vulnerabilities, see PMASA-2011-13
-
-3.4.3.2 (2011-07-23)
-- [security] Fixed XSS vulnerability, see PMASA-2011-9
-- [security] Fixed local file inclusion vulnerability, see PMASA-2011-10
-- [security] Fixed local file inclusion vulnerability and code execution, see PMASA-2011-11
-- [security] Fixed possible session manipulation in swekey authentication, see PMASA-2011-12
-
-3.4.3.1 (2011-07-02)
-- [security] Fixed possible session manipulation in swekey authentication, see PMASA-2011-5
-- [security] Fixed possible code injection incase session variables are compromised, see PMASA-2011-6
-- [security] Fixed regexp quoting issue in Synchronize code, see PMASA-2011-7
-- [security] Fixed filtering of a file path, which allowed for directory traversal, see PMASA-2011-8
-
-3.4.3.0 (2011-06-27)
-- bug #3311170 [sync] Missing helper icons in Synchronize
-- patch #3304473 [setup] Redefine a lable that was wrong
-- bug #3304544 [parser] master is not a reserved word
-- bug #3307616 [edit] Inline edit updates multiple duplicate rows
-- patch #3311539 [edit] Inline edit does not escape backslashes
-- bug #3313210 [interface] Columns class sometimes changed for nothing
-- patch #3313326 [interface] Some tooltips do not disappear
-- bug #3315720 [search] Fix search in non unicode tables
-- bug #3315741 [display] Inline query edit broken
-- patch #3317206 [privileges] Generate password option missing on new accounts
-- bug #3317293 [edit] Inline edit places HTML line breaks in edit area
-- bug #3319466 [interface] Inline query edit does not escape special characters
-- minor XSS (require a valid token)
-
-3.4.2.0 (2011-06-07)
-- bug #3301249 [interface] Iconic table operations does not remove inline edit label
-- bug #3303869 [interface] Unnecessary scrolling on Databases page
-- patch #3303813 [setup] Define a label that was missing
-- bug #3305606 [interface] Show all button wraps on privileges page
-- bug #3305517 [config] Config for export compression not used
-- bug #3305883 [interface] Table is dropped regardless of confirmation
-- [auth] Fixed error handling for signon auth method.
-- bug #3276001 [core] Avoid caching of index.php.
-- bug #3306958 [interface] Unnecessary Details slider
-- bug #3308476 [interface] "Show all" not persistent after a sort
-- bug #3308072 [auth] Version disclosure to anonymous visitors
-- bug #3306981 [interface] pmahomme and table statistics
-
-3.4.1.0 (2011-05-20)
-- bug #3301108 [interface] Synchronize and already configured host
-- bug #3302457 Inline edit and $cfg['PropertiesIconic']
-- Patch #3302313 Show a translated label
-- bug #3300981 [navi] Table filter is case sensitive
-- bug #3285929 [privileges] Revert temporary fix
-- bug #3302872 [synchronize] Synchronize and user name
-- bug #3302733 [core] Some browsers report an insecure https connection
-- [security] Make redirector require valid token
-
-3.4.0.0 (2011-05-11)
-+ rfe #2890226 [view] Enable VIEW rename
-+ rfe #838637 [privileges] Export a user's privileges
-- [core] Updated mootools to fix some glitches with Safari.
-+ rfe #2816943 [interface] Add REGEXP ^...$ to select dialog.
-+ rfe #2924956 [interface] Add insert ignore option to editing row.
-+ rfe #2838080 [interface] Show warning when javascript is disabled.
-+ rfe #2823707 [edit] Call UUID function separately to show it in insert.
-+ rfe #2420684 [export] Allow export of timestamps in UTC.
-+ [core] Remove config data from session as it brings chicken-egg problem.
-+ [core] Cookie path now honors PmaAbsoluteUri.
-+ rfe #2393597 [core] phpMyAdmin honors https in PmaAbsoluteUri.
-+ rfe #1778337 [core] Try moving tables by RENAME and fail to CREATE/INSERT if that fails.
-+ rfe #1721189 [core] Force reload js on code change.
-+ rfe #1954161 [interface] Do not display long numbers in server status.
-+ rfe #2033616 [edit] Add option to just display insert query.
-+ rfe #1435032 [interface] Move SSL status to the end, it is usually empty.
-+ rfe #1340812 [interface] Show numbers of columns in table structure.
-+ rfe #1186511 [inrerface] Add link to reload navigation frame.
-+ rfe #2936156 [auth] Signon authentication forwards error message through session data.
-+ rfe #2835109 [interface] Move ^1 to the end of message.
-+ rfe #854911 [interface] Grey out non applicable actions in structure
-+ [interface] Allow to create new table from navigation frame (in light mode).
-+ rfe #1025696 [browse] Add direct download of binary fields.
-- [browse] Properly display NULL value for BLOB.
-- rfe #1516803 [edit] Allow to set BLOB to/from NULL with ProtectBinary.
-- [edit] Do not default to UNHEX when using file upload.
-- rfe #1379201 [core] Add option to configure session_save_path.
-+ [interface] Provide links to documentation in highlighted SQL.
-+ [interface] It is now possible to bookmark most pages in JS capable browser.
-- bug #2936482 [core] Fix SSL detection.
-+ rfe #2937850 [doc] Add some hints to chk_rel.php for quick setup.
-+ rfe #2938579 [interface] Add class to some elements for easier theming.
-+ rfe #2937840 [doc] Add some interesting configs to config.sample.inc.php.
-+ rfe #2792992 [doc] Added advice to re-login after changing pmadb settings
-+ patch #2952353 [interface] Prefill "Copy table to" in tbl_operations.php, thanks to iinl
-+ [lang] Add English (United Kingdom) translation, thanks to Robert Readman.
-+ patch #2948421 [auth] HTTP Basic auth realm name,
- thanks to Harald Jenny - haraldj
-- bug #2954916 [interface] Do not insert doc links to not formatted SQL.
-+ [lang] Chinese Simplified update, thanks to Shanyan Baishui - rimyxp
-+ [lang] Turkish update, thanks to Burak Yavuz
-+ rfe #2963310 [interface] Focus TEXTAREA "sql_query" on click on "SQL" link
-+ [lang] Uzbek update, thanks to Orzu Samarqandiy
-+ rfe #2958013 [import] After import, also list uploaded filename, thanks
- to Pavel Konnikov and Herman van Rink
-+ patch #2974341 [structure] Clicking on table name in db Structure should
- Browse the table if possible, thanks to bhdouglass - dougboybhd
-+ patch #2975533 [search] New search operators, thanks to
- Martynas Mickevičius
-+ patch #2967320 [designer] Colored relations based on the primary key,
- thanks to GreenRover - greenrover
-- [core] Provide way for vendors to easily change paths to config files.
-+ patch #2979922, rfe #2804874 [interface] Add inline query editing, thanks to Muhammd Adnan.
-- bug #2966752 [setup] Allow to configure changes tracking in setup script.
-+ patch #2981165 [edit] Optionally disable the Type column,
- thanks to Brian Douglass - bhdouglass
-+ patch #2984058 [edit] Buttons for quicky creating common SQL queries, thanks
- to sutharshan.
-+ patch #2984337 [interface] Convert loading of export/import to jQuery ready
- event, thanks to sutharshan.
-- [edit] CURRENT_TIMESTAMP is also valid for datetime fields.
-- patch #2985068 [engines] Fix parsing of PBXT status, thanks to Madhura Jayaratne.
-- patch #2986073 [interface] Convert upload progress bar to jQuery, thanks to
- Philip Frank.
-- patch #2983960 [interface] Add javascript validation of datetime input,
- thanks to Sutharshan Balachandren.
-- rfe #2981999 [interface] Default sort order is now SMART.
-- rfe #2972969 [interface] Fix flipping of headers in non-IE browsers.
-+ rfe #2964518 [interface] Allow to choose servers from configuration for
- synchronisation.
-+ rfe #2988633 [relation] Improve ON DELETE/ON UPDATE drop-downs
-+ rfe #2988629 [relation] Improve labels in relation view
-+ rfe #2983207, patch #2988715 [interface] Use jQuery calendar dialog, thanks
- to Muhammad Adnan.
-+ [doc] Incorporate synchronisation docs into main document.
-+ [core] Include Content Security Policy HTTP headers.
-- bug #3004216 [CSS] Field attributes use inline CSS
-- patch #2999595, rfe #2998130 [interface] Cleanup navigation frame.
-- patch #3025161 [core] Prevent sending of unnecessary cookies,
- thanks to Piotr Przybylski - crackpl
-- bug [password] Generate password only available if JS is enabled
- (fixed for Privileges and Change password)
-- [core] RecodingEngine now accepts none as valid option.
-+ [core] Dropped AllowAnywhereRecoding configuration variable.
-- rfe #3016457 [interface] Define tab order in SQL form to allow easier tab
- navigation.
-+ [core] Centralized format string expansion, @VARIABLES@ are recommended way
- now, used by file name templates, default queries, export and title
- generating.
-+ [validator] SQL validator works also with SOAP PHP extension.
-- [interface] Better formatting for SQL validator results.
-- [doc] The linked-tables infrastructure is now called phpMyAdmin
- configuration storage.
-- [interface] Move drop/empty links from being tabs to Operations tab.
-- [interface] Fixed rendering of error/notice/info titles background.
-- patch #3038293 [doc] Language and grammar fixes,
- thanks to Isaac Bennetch - ibennetch
-- patch #3038312 [export] JSON export,
- thanks to Hauke Henningsen - blubberkeks152
-- rfe #1494550 [interface] Editor for SET/ENUM fields.
-- rfe #2649375 [interface] Simplified interface to backup/restore.
-- rfe #2973909 Users preferences
-- [relations] Dropped WYSIWYG-PDF configuration variable.
-- rfe #806035, #686260 [relations] Export relations to Dia, SVG and others
-+ [interface] Added charts to status tab, profiling page and query results
-+ [interface] AJAXification on various pages
-- [core] Remove last remaining parts of profiling code which was removed in 2006.
-- bug #3042665 [parser] Add workaround for MySQL way of handling backtick.
-- bug #3056610 [interface] Removed modification options for information_schema
-+ patch #3055886 [config] Add Left frame table filter visibility config option, thanks to eesau
-- [core] Force generating of new session on login
-+ rfe #1105678 [interface] Drop page-break-before as it is useless for smaller
- tables.
-+ rfe #2956556 [interface] Allow to wrap enum values.
-- bug #1669459 [interface] Do not automatically mark PDF schema rows to delete
-- bug #3087682 [interface] Do not apply LeftFrameDBSeparator on first character.
-+ rfe #3111455 [interface] Column highlighting and marking in table view
-+ Visual query builder
-- bug #3115519 [interface] Prevent long queries from being shown in confirmation popup
-- patch #3112792 [navi] Left panel table grouping incorrect,
- thanks to garas - garas
-- bug #3123433 [interface] Avoid double escaping of MySQL errors.
-- [interface] Use less noisy message and remove disable link on server charts and database statistics.
-+ rfe #3141330 [relation] When displaying results, show a link to the foreign
- table even when phpMyAdmin configuration storage is not active
-- bug #3141327 [relation] Foreign key input options
-- [export] Better handling of export to PHP array.
-- rfe #3158867 [privileges] No DROP DATABASE warning if you delete a user
-- [interface] Add link to documentation for status variables.
-- [security] Redirect external links to avoid Referer leakage.
-- [interface] Default to not count tables in database.
-- patch #3172172 [interface] Shortcut for copying table row.
-- bug #3175227 [auth] Reset user cache on login.
-- rfe #3148361 [interface] Replace hard coded limit with $cfg['LimitChars'].
-- bug #3177136 [interface] Indicate that bookmark is being used on browse.
-- [interface] Indicate shared bookmarks in interface.
-- patch #3176420 [Search] Ajaxify browse and delete criteria in DB Search,
- thanks to Thilanka Kaushalya
-- [interface] New default theme pmahomme, dropped darkblue_orange theme.
-- rfe #2936155 [auth] Allow to pass additional parameters using signon method.
-- rfe #1640812 [auth] Add example for OpenID authentication using signon method.
-- rfe #1312657 [dbi] Default to mysqli extension.
-- rfe #1168350 [interface] Add clear button to SQL edit box.
-- [core] Update library PHPExcel to version 1.7.6
-- bug #3206876 [core] Work without mbstring installed.
-- rfe #3196075, patch #3212068 [interface] Add links to variables documentation.
-- bug #3208723 [import] Fix import of utf-8 XML files.
-- bug #3039384 [auth] Force signon auth on signon URL change.
-- bug #3168733 [core] Synchronization does not honor AllowArbitraryServer
-- bug #3134495 [synchronization] Data containing single quotes prevents sync,
- thanks to jviewer
-- Remove the custom color picker feature
-- bug #3285929 [privileges] Don't fail silently on missing priviledge to execute REVOKE ALL PRIVILEGES
-
-3.3.11.0 (not yet released)
-
-3.3.10.1 (2011-05-20)
-- [security] XSS on Tracking page
-
-3.3.10.0 (2011-03-19)
-- patch #3147400 [structure] Aria table size printed as unknown,
- thanks to erickoh75 - erickoh75
-- patch #3150164 [structure] Ordering by size gives incorrect results,
- thanks to Madhura Jayaratne - madhuracj
-- bug #3153409 [core] 0 row(s) affected
-- bug #3155842 [core] Edit relational page and page number
-- [security] Minor security fixes, see PMASA-2010-9 and PMASA-2010-10
-- [lang] German update, thanks to to jannicars@users.sourceforge.net.
-
-3.3.9.2 (2011-02-11)
-- [security] SQL injection, see PMASA-2011-2
-
-3.3.9.1 (2011-02-08)
-- [security] Path disclosure, see PMASA-2011-1
-
-3.3.9.0 (2011-01-03)
-- bug [doc] Fix references to MySQL doc
-- patch #3101490 Default function for TIMESTAMP, thanks to jirand - jirand
-- bug #3103853 [js] Double quotes were not escaped in generated js
-- bug #3077463 [core] Events were not copied when copying/renaming database
-- bug #1762306 [core] Copy database with view of a view
-- patch #3117535 [replication] Add quotes to database in initial statement,
- thanks to Craig Duncan - duncan3dc
-- bug #3112614 [pdf schema] Scratchboard for PDF pages not working
-- bug #3125606 [parser] Query for table "level" causes strange display
-- bug #3127904 [parser] Close all opened round brackets indents
+4.1.7.0 (2014-02-09)
+- bug #4245 initial Browse query does not match sorting order
+- bug #4250 Notice on export page
+- bug #4253 "New" text in navigation frame acts like a database
+- bug #4262 Cannot define a column with fractional seconds
+- bug #4265 Missing datepicker icon for DATETIME(length)
+- bug #4257 Hide fractional seconds when applicable
+- bug #4264 Uncheck "Ignore" while inserting, upon leaving a textarea
+- bug #4260 reCaptcha is ignoring language settings
+- bug #4259 reCaptcha sound session expired problem
+- bug #4263 Japanese character encoding not working properly when exporting
+- bug #4269 Notice on table relation page
+- bug #4270 Bad text-color for table comments
+- bug #4278 reCaptcha re-login requires double effort
+- bug #4272 Incorrect tabindex
+- bug #4271 Query by example and the second criteria line
+- bug #4242 Wildcard-containing only_db failure in sidebar
+
+4.1.6.0 (2014-01-26)
+- bug #4232 User not found after creating the user
+- bug #4241 Confusing dialog when trying to create an already existing user
+- bug #4239 Missing LIMIT clause for some queries
+- rfe #1489 Do not show create icon when user has no privileges
+- bug #4218 Chrome behavior with date fields
+- bug #3579 NOW() function incorrectly selected (regression)
+- bug #4244 Advisor complaints about MariaDB 10.x is version less than 5.1
+- bug #3889 When login fails and error display is active, login data is
+displayed (regression)
+- bug #4247 open_basedir warnings on export page
+- bug #4013 AJAX request waiting until version info is retrieved
+- bug #4248 js error when changing number of columns in status monitor
+
+4.1.5.0 (2014-01-17)
+- bug #3780 Allow aborting loading pages
+- bug #4223 Database list: Create database misses collation column
+- bug #4224 Empty table names when a table is "inuse"
+- bug #4225 Partition maintenance broken
+- bug #4219 Table list (left panel) does not reload when table renamed
+- bug #4230 "in use" displayed for all views in database print view
+- bug #4226 Notice: Undefined index: pma_config_loading
+- bug #4221 Bzip2 export cannot be directly imported (so withdraw bz2 export)
+- bug #4204 Reloading user privileges hides user groups submenu
+- bug #4231 DATE columns quick edit decrement by one day
+
+4.1.4.0 (2014-01-07)
+- bug #3840 (additional fix) When exporting to gzip format, the data is compressed 2 times
+- bug #4209 Missing compression in one case
+- bug #4208 Can't browse tables after sorting on columns with fieldnames that have a '-'
+- bug #4184 Switch to wrong page after adding an index
+- bug #3885 Additional fix for this bug
+- bug #4212 Table "disappears" if it has the same name as its tablegroup
+- bug #4213 Datetime Quick Edit decrements by one day
+- bug #4217 Current value not highlighted when browsing foreign values
+- bug #4220 Incorrect key values in foreign key browser
+- bug #4215 MariaDB 5.5: error in Drizzle detection
--- Older ChangeLogs can be found on our project website ---
http://www.phpmyadmin.net/old-stuff/ChangeLogs/
diff --git a/phpMyAdmin/README b/phpMyAdmin/README
index 19a9c73..1aaff94 100644
--- a/phpMyAdmin/README
+++ b/phpMyAdmin/README
@@ -1,7 +1,7 @@
phpMyAdmin - Readme
===================
-Version 3.5.7
+Version 4.1.7
A set of PHP-scripts to manage MySQL over the web.
@@ -13,7 +13,7 @@ Copyright
Copyright (C) 1998-2000
Tobias Ratschiller
-Copyright (C) 2001-2013
+Copyright (C) 2001-2014
Marc Delisle
Olivier Müller
Robin Johnson
@@ -22,7 +22,7 @@ Copyright (C) 2001-2013
Garvin Hicking
Michael Keck
Sebastian Mendel
- [check Documentation.txt/.html file for more details]
+ [check documentation for more details]
License
-------
@@ -39,10 +39,30 @@ details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
+Third party licenses
+--------------------
+
+phpMyAdmin includes several third party libraries which come under their
+respective licenses.
+
+jQuery's license, which is where we got the files under js/jquery/ is
+(MIT|GPL), a copy of each license is available in this repository (GPL
+is available as LICENSE, MIT as js/jquery/MIT-LICENSE.txt).
+
+TCPDF which is located under libraries/tcpdf is released under GPL
+version 3 and the license is available as libraries/tcpdf/LICENSE.TXT.
+
+DejaVu fonts which are located under libraries/tcpdf/fonts/ and their
+license is documented in
+libraries/tcpdf/fonts/dejavu-fonts-ttf-2.33/LICENSE.
+
+PHP-gettext which is located under libraries/php-gettext/ is released
+under GPL version 2 license which is available in the LICENSE file.
+
Requirements
------------
-* PHP 5.2 or later
+* PHP 5.3 or later
* MySQL 5.0 or later
* a web-browser (doh!)
@@ -50,7 +70,7 @@ Summary
-------
phpMyAdmin is intended to handle the administration of MySQL over the web.
-For a summary of features, please see the Documentation.txt/.html file.
+For a summary of features, please see the documentation in the doc folder.
Download
--------
@@ -60,7 +80,7 @@ You can get the newest version at http://www.phpmyadmin.net/.
More Information
----------------
-Please see the Documentation.txt/.html file.
+Please see the documentation in the doc folder.
Support
-------
@@ -80,5 +100,5 @@ Please, don't send us emails with question like "How do I compile PHP with
MySQL-support". We just don't have the time to be your free help desk.
Please send your questions to the appropriate mailing lists / forums. Before
-contacting us, please read the Documentation.html (esp. the FAQ part).
+contacting us, please read the documentation (especially the FAQ part).
diff --git a/phpMyAdmin/RELEASE-DATE-4.1.7 b/phpMyAdmin/RELEASE-DATE-4.1.7
new file mode 100644
index 0000000..7cdc65f
--- /dev/null
+++ b/phpMyAdmin/RELEASE-DATE-4.1.7
@@ -0,0 +1 @@
+Sun Feb 9 12:39:08 UTC 2014
diff --git a/phpMyAdmin/browse_foreigners.php b/phpMyAdmin/browse_foreigners.php
index 3eff09f..0384350 100644
--- a/phpMyAdmin/browse_foreigners.php
+++ b/phpMyAdmin/browse_foreigners.php
@@ -6,297 +6,61 @@
* @package PhpMyAdmin
*/
+require_once 'libraries/common.inc.php';
+require_once 'libraries/transformations.lib.php';
+require_once 'libraries/browse_foreigners.lib.php';
+
/**
- * Gets a core script and starts output buffering work
+ * Sets globals from $_REQUEST
*/
-require_once './libraries/common.inc.php';
-
-PMA_checkParameters(array('db', 'table', 'field'));
+$request_params = array(
+ 'data',
+ 'field'
+);
+
+foreach ($request_params as $one_request_param) {
+ if (isset($_REQUEST[$one_request_param])) {
+ $GLOBALS[$one_request_param] = $_REQUEST[$one_request_param];
+ }
+}
-require_once './libraries/ob.lib.php';
-PMA_outBufferPre();
+PMA_Util::checkParameters(array('db', 'table', 'field'));
-require_once './libraries/header_http.inc.php';
+$response = PMA_Response::getInstance();
+$response->getFooter()->setMinimal();
+$header = $response->getHeader();
+$header->disableMenu();
+$header->setBodyId('body_browse_foreigners');
/**
* Displays the frame
*/
-require_once './libraries/transformations.lib.php'; // Transformations
+
$cfgRelation = PMA_getRelationsParam();
$foreigners = ($cfgRelation['relwork'] ? PMA_getForeigners($db, $table) : false);
+$foreign_limit = PMA_getForeignLimit(
+ isset($foreign_navig) ? $foreign_navig : null
+);
-$override_total = true;
-
-if (! isset($pos)) {
- $pos = 0;
-}
-
-$foreign_limit = 'LIMIT ' . $pos . ', ' . $GLOBALS['cfg']['MaxRows'] . ' ';
-if (isset($foreign_navig) && $foreign_navig == __('Show all')) {
- unset($foreign_limit);
-}
+$foreignData = PMA_getForeignData(
+ $foreigners, $_REQUEST['field'], true,
+ isset($_REQUEST['foreign_filter'])
+ ? $_REQUEST['foreign_filter']
+ : '',
+ isset($foreign_limit) ? $foreign_limit : null
+);
-$foreignData = PMA_getForeignData($foreigners, $field, $override_total, isset($foreign_filter) ? $foreign_filter : '', $foreign_limit);
-if (isset($rownumber)) {
- $rownumber_param = '&rownumber=' . urlencode($rownumber);
-} else {
- $rownumber_param = '';
-}
-
-$gotopage = '';
-$showall = '';
+$code = PMA_getJsScriptToHandleSelectRelationalFields();
-if (is_array($foreignData['disp_row'])) {
+$header->getScripts()->addCode($code);
- if ($cfg['ShowAll'] && ($foreignData['the_total'] > $GLOBALS['cfg']['MaxRows'])) {
- $showall = ' ';
- }
+// HTML output
+$html = PMA_getHtmlForRelationalFieldSelection(
+ $db, $table, $_REQUEST['field'], $foreignData,
+ isset($fieldkey) ? $fieldkey : null,
+ isset($data) ? $data : null
+);
- $session_max_rows = $GLOBALS['cfg']['MaxRows'];
- $pageNow = @floor($pos / $session_max_rows) + 1;
- $nbTotalPage = @ceil($foreignData['the_total'] / $session_max_rows);
-
- if ($foreignData['the_total'] > $GLOBALS['cfg']['MaxRows']) {
- $gotopage = PMA_pageselector(
- $session_max_rows,
- $pageNow,
- $nbTotalPage,
- 200,
- 5,
- 5,
- 20,
- 10,
- __('Page number:')
- );
- }
-}
-?>
-
-
-
-
- phpMyAdmin
-
-
-addHtml($html);
?>
-
-
-
-
-
-
-
-
-
- ' . __('Keyname') . '
- ' . __('Description') . '
-
- ' . __('Description') . '
- ' . __('Keyname') . '
- ';
-
- echo '' . $header . ' ' . "\n"
- .'' . $header . ' ' . "\n"
- .'' . "\n";
-
- $values = array();
- $keys = array();
- foreach ($foreignData['disp_row'] as $relrow) {
- if ($foreignData['foreign_display'] != false) {
- $values[] = $relrow[$foreignData['foreign_display']];
- } else {
- $values[] = '';
- }
-
- $keys[] = $relrow[$foreignData['foreign_field']];
- }
-
- asort($keys);
-
- $hcount = 0;
- $odd_row = true;
- $val_ordered_current_row = 0;
- $val_ordered_current_equals_data = false;
- $key_ordered_current_equals_data = false;
- foreach ($keys as $key_ordered_current_row => $value) {
- //for ($i = 0; $i < $count; $i++) {
- $hcount++;
-
- if ($cfg['RepeatCells'] > 0 && $hcount > $cfg['RepeatCells']) {
- echo $header;
- $hcount = 0;
- $odd_row = true;
- }
-
- $key_ordered_current_key = $keys[$key_ordered_current_row];
- $key_ordered_current_val = $values[$key_ordered_current_row];
-
- $val_ordered_current_key = $keys[$val_ordered_current_row];
- $val_ordered_current_val = $values[$val_ordered_current_row];
-
- $val_ordered_current_row++;
-
- if (PMA_strlen($val_ordered_current_val) <= $cfg['LimitChars']) {
- $val_ordered_current_val = htmlspecialchars($val_ordered_current_val);
- $val_ordered_current_val_title = '';
- } else {
- $val_ordered_current_val_title
- = htmlspecialchars($val_ordered_current_val);
- $val_ordered_current_val = htmlspecialchars(
- PMA_substr($val_ordered_current_val, 0, $cfg['LimitChars'])
- . '...'
- );
- }
- if (PMA_strlen($key_ordered_current_val) <= $cfg['LimitChars']) {
- $key_ordered_current_val = htmlspecialchars($key_ordered_current_val);
- $key_ordered_current_val_title = '';
- } else {
- $key_ordered_current_val_title
- = htmlspecialchars($key_ordered_current_val);
- $key_ordered_current_val
- = htmlspecialchars(
- PMA_substr($key_ordered_current_val, 0, $cfg['LimitChars']) . '...'
- );
- }
-
- if (! empty($data)) {
- $val_ordered_current_equals_data = $val_ordered_current_key == $data;
- $key_ordered_current_equals_data = $key_ordered_current_key == $data;
- }
-
- ?>
-
-
- ' : '')
- .''
- .htmlspecialchars($key_ordered_current_key) . ' ' . ($key_ordered_current_equals_data ? '' : '');
- ?>
-
- ' : '')
- . ''
- . $key_ordered_current_val . ' ' . ($key_ordered_current_equals_data ? '' : '');
- ?>
-
-
-
-
- ' : '')
- . ''
- . $val_ordered_current_val . ' ' . ($val_ordered_current_equals_data ? '' : '');
- ?>
-
- ' : '') . '' . htmlspecialchars($val_ordered_current_key)
- . ' ' . ($val_ordered_current_equals_data ? '' : '');
- ?>
-
-
-
-
-
-
-
diff --git a/phpMyAdmin/changelog.php b/phpMyAdmin/changelog.php
index fcd727f..5066ffe 100644
--- a/phpMyAdmin/changelog.php
+++ b/phpMyAdmin/changelog.php
@@ -9,7 +9,10 @@
/**
* Gets core libraries and defines some variables
*/
-require './libraries/common.inc.php';
+require 'libraries/common.inc.php';
+
+$response = PMA_Response::getInstance();
+$response->disable();
$filename = CHANGELOG_FILE;
@@ -29,7 +32,10 @@
$changelog = file_get_contents($filename);
}
} else {
- printf(__('The %s file is not available on this system, please visit www.phpmyadmin.net for more information.'), $filename);
+ printf(
+ __('The %s file is not available on this system, please visit www.phpmyadmin.net for more information.'),
+ $filename
+ );
exit;
}
@@ -38,6 +44,13 @@
*/
$changelog = htmlspecialchars($changelog);
+$tracker_url = 'https://sourceforge.net/support/tracker.php?aid=\\1';
+$tracker_url_bug = 'https://sourceforge.net/p/phpmyadmin/bugs/\\1/';
+$tracker_url_rfe = 'https://sourceforge.net/p/phpmyadmin/feature-requests/\\1/';
+$tracker_url_patch = 'https://sourceforge.net/p/phpmyadmin/patches/\\1/';
+$github_url = 'https://github.com/phpmyadmin/phpmyadmin/';
+$faq_url = 'http://docs.phpmyadmin.net/en/latest/faq.html';
+
$replaces = array(
'@(http://[./a-zA-Z0-9.-_-]*[/a-zA-Z0-9_])@'
=> '\\1 ',
@@ -50,13 +63,13 @@
'/thanks to ([^\(\r\n]+) -\s+([-\w]+)/i'
=> 'thanks to \\1 ',
- // mail adresse
+ // mail address
'/([0-9]{4}-[0-9]{2}-[0-9]{2}) (.+[^ ]) +<(.*@.*)>/i'
=> '\\1 \\2 ',
// linking patches
'/patch\s*#?([0-9]{6,})/i'
- => 'patch #\\1 ',
+ => 'patch #\\1 ',
// linking RFE
'/(?:rfe|feature)\s*#?([0-9]{6,})/i'
@@ -64,11 +77,11 @@
// linking files
'/(\s+)([\\/a-z_0-9\.]+\.(?:php3?|html|pl|js|sh))/i'
- => '\\1\\2 ',
+ => '\\1\\2 ',
// FAQ entries
'/FAQ ([0-9]+)\.([0-9a-z]+)/i'
- => 'FAQ \\1.\\2 ',
+ => 'FAQ \\1.\\2 ',
// linking bugs
'/bug\s*#?([0-9]{6,})/i'
@@ -76,7 +89,18 @@
// all other 6+ digit numbers are treated as bugs
'/(? ' bug #\\1 ',
+ => 'bug #\\1 ',
+
+ // transitioned SF.net project bug/rfe/patch links
+ // by the time we reach 6-digit numbers, we can probably retire the above links
+ '/patch\s*#?([0-9]{4,5}) /i'
+ => 'patch #\\1 ',
+ '/(?:rfe|feature)\s*#?([0-9]{4,5}) /i'
+ => 'RFE #\\1 ',
+ '/bug\s*#?([0-9]{4,5}) /i'
+ => 'bug #\\1 ',
+ '/(? 'bug #\\1 ',
// CVE/CAN entries
'/((CAN|CVE)-[0-9]+-[0-9]+)/'
@@ -88,9 +112,13 @@
// Highlight releases (with links)
'/([0-9]+)\.([0-9]+)\.([0-9]+)\.0 (\([0-9-]+\))/'
- => '\\1.\\2.\\3.0 \\4 ',
+ => ' '
+ . ''
+ . '\\1.\\2.\\3.0 \\4 ',
'/([0-9]+)\.([0-9]+)\.([0-9]+)\.([1-9][0-9]*) (\([0-9-]+\))/'
- => '\\1.\\2.\\3.\\4 \\5 ',
+ => ' '
+ . ''
+ . '\\1.\\2.\\3.\\4 \\5 ',
// Highlight releases (not linkable)
'/( ### )(.*)/'
@@ -99,16 +127,14 @@
);
header('Content-type: text/html; charset=utf-8');
-echo '';
?>
-
-
+
+
-
-
-phpMyAdmin - ChangeLog
-
+
+
+ phpMyAdmin - ChangeLog
+
phpMyAdmin - ChangeLog
@@ -117,5 +143,11 @@
echo preg_replace(array_keys($replaces), $replaces, $changelog);
echo '';
?>
+
diff --git a/phpMyAdmin/chk_rel.php b/phpMyAdmin/chk_rel.php
index e838d2e..915e8b2 100644
--- a/phpMyAdmin/chk_rel.php
+++ b/phpMyAdmin/chk_rel.php
@@ -1,25 +1,15 @@
addHTML(
+ PMA_getRelationsParamDiagnostic(PMA_getRelationsParam())
+);
-/**
- * Gets the relation settings
- */
-$cfgRelation = PMA_getRelationsParam(true);
-
-
-/**
- * Displays the footer
- */
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/composer.json b/phpMyAdmin/composer.json
new file mode 100644
index 0000000..7b58ed7
--- /dev/null
+++ b/phpMyAdmin/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "phpmyadmin/phpmyadmin",
+ "type": "application",
+ "description": "MySQL web administration tool",
+ "keywords": ["phpmyadmin","mysql","web"],
+ "homepage": "http://www.phpmyadmin.net/",
+ "license": "GPL-2.0+",
+ "authors": [
+ {
+ "name": "The phpMyAdmin Team",
+ "email": "phpmyadmin-devel@lists.sourceforge.net",
+ "homepage": "http://www.phpmyadmin.net/home_page/team.php"
+ }
+ ],
+ "support": {
+ "forum": "https://sourceforge.net/p/phpmyadmin/discussion/Help",
+ "issues": "https://sourceforge.net/p/phpmyadmin/bugs/",
+ "wiki": "http://wiki.phpmyadmin.net/",
+ "source": "https://github.com/phpmyadmin/phpmyadmin"
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "satooshi/php-coveralls": "dev-master"
+ }
+}
diff --git a/phpMyAdmin/config.sample.inc.php b/phpMyAdmin/config.sample.inc.php
index da61640..07047ac 100644
--- a/phpMyAdmin/config.sample.inc.php
+++ b/phpMyAdmin/config.sample.inc.php
@@ -4,8 +4,8 @@
* phpMyAdmin sample configuration, you can use it as base for
* manual configuration. For easier setup you can use setup/
*
- * All directives are explained in Documentation.html and on phpMyAdmin
- * wiki .
+ * All directives are explained in documentation in the doc/ folder
+ * or at .
*
* @package PhpMyAdmin
*/
@@ -41,23 +41,27 @@
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
+// $cfg['Servers'][$i]['controlport'] = '';
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
/* Storage database and tables */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
-// $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
-// $cfg['Servers'][$i]['relation'] = 'pma_relation';
-// $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
-// $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
-// $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
-// $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
-// $cfg['Servers'][$i]['history'] = 'pma_history';
-// $cfg['Servers'][$i]['table_uiprefs'] = 'pma_table_uiprefs';
-// $cfg['Servers'][$i]['tracking'] = 'pma_tracking';
-// $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
-// $cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';
-// $cfg['Servers'][$i]['recent'] = 'pma_recent';
+// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
+// $cfg['Servers'][$i]['relation'] = 'pma__relation';
+// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
+// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
+// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
+// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
+// $cfg['Servers'][$i]['history'] = 'pma__history';
+// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
+// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
+// $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
+// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
+// $cfg['Servers'][$i]['recent'] = 'pma__recent';
+// $cfg['Servers'][$i]['users'] = 'pma__users';
+// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
+// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
/* Contrib / Swekey authentication */
// $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';
@@ -85,18 +89,13 @@
*/
//$cfg['MaxRows'] = 50;
-/**
- * Use graphically less intense menu tabs
- * default = false
- */
-//$cfg['LightTabs'] = true;
-
/**
* disallow editing of binary fields
* valid values are:
- * false allow editing
- * 'blob' allow editing except for BLOB fields
- * 'all' disallow editing
+ * false allow editing
+ * 'blob' allow editing except for BLOB fields
+ * 'noblob' disallow editing except for BLOB fields
+ * 'all' disallow editing
* default = blob
*/
//$cfg['ProtectBinary'] = 'false';
@@ -139,8 +138,15 @@
*/
//$cfg['QueryHistoryMax'] = 100;
+/**
+ * Should error reporting be enabled for JavaScript errors
+ *
+ * default = 'ask'
+ */
+//$cfg['SendErrorReports'] = 'ask';
+
/*
- * You can find more configuration options in Documentation.html
- * or here: http://wiki.phpmyadmin.net/pma/Config
+ * You can find more configuration options in the documentation
+ * in the doc/ folder or at .
*/
?>
diff --git a/phpMyAdmin/db_create.php b/phpMyAdmin/db_create.php
index 2bebe0e..85443a4 100644
--- a/phpMyAdmin/db_create.php
+++ b/phpMyAdmin/db_create.php
@@ -1,6 +1,7 @@
tryQuery($sql_query);
if (! $result) {
- $message = PMA_Message::rawError(PMA_DBI_getError());
+ $message = PMA_Message::rawError($GLOBALS['dbi']->getError());
// avoid displaying the not-created db name in header or navi panel
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
/**
- * If in an Ajax request, just display the message with {@link PMA_ajaxResponse}
+ * If in an Ajax request, just display the message with {@link PMA_Response}
*/
if ($GLOBALS['is_ajax_request'] == true) {
- PMA_ajaxResponse($message, false);
+ $response = PMA_Response::getInstance();
+ $response->isSuccess(false);
+ $response->addJSON('message', $message);
+ } else {
+ include_once 'index.php';
}
-
- include_once './libraries/header.inc.php';
- include_once './main.php';
} else {
$message = PMA_Message::success(__('Database %1$s has been created.'));
- $message->addParam($new_db);
- $GLOBALS['db'] = $new_db;
+ $message->addParam($_POST['new_db']);
+ $GLOBALS['db'] = $_POST['new_db'];
/**
* If in an Ajax request, build the output and send it
*/
if ($GLOBALS['is_ajax_request'] == true) {
+ //Construct the html for the new database, so that it can be appended to
+ // the list of databases on server_databases.php
/**
- * String containing the SQL Query formatted in pretty HTML
- * @global array $GLOBALS['extra_data']
- * @name $extra_data
- */
- $extra_data['sql_query'] = PMA_showMessage(null, $sql_query, 'success');
-
- //Construct the html for the new database, so that it can be appended to the list of databases on server_databases.php
-
- /**
- * Build the array to be passed to {@link PMA_generate_common_url} to generate the links
+ * Build the array to be passed to {@link PMA_URL_getCommon}
+ * to generate the links
+ *
* @global array $GLOBALS['db_url_params']
* @name $db_url_params
*/
- $db_url_params['db'] = $new_db;
+ $db_url_params['db'] = $_POST['new_db'];
- $is_superuser = PMA_isSuperuser();
+ $is_superuser = $GLOBALS['dbi']->isSuperuser();
$column_order = PMA_getColumnOrder();
- $url_query = PMA_generate_common_url($new_db);
+ $url_query = PMA_URL_getCommon($_POST['new_db']);
/**
* String that will contain the output HTML
@@ -99,7 +95,7 @@
// $dbstats comes from the create table dialog
if (! empty($dbstats)) {
$current = array(
- 'SCHEMA_NAME' => $new_db,
+ 'SCHEMA_NAME' => $_POST['new_db'],
'DEFAULT_COLLATION_NAME' => $db_collation_for_ajax,
'SCHEMA_TABLES' => '0',
'SCHEMA_TABLE_ROWS' => '0',
@@ -111,21 +107,30 @@
);
} else {
$current = array(
- 'SCHEMA_NAME' => $new_db
+ 'SCHEMA_NAME' => $_POST['new_db'],
+ 'DEFAULT_COLLATION_NAME' => $db_collation_for_ajax
);
}
- list($column_order, $generated_html) = PMA_buildHtmlForDb($current, $is_superuser, (isset($checkall) ? $checkall : ''), $url_query, $column_order, $replication_types, $replication_info);
+ list($column_order, $generated_html) = PMA_buildHtmlForDb(
+ $current, $is_superuser, $url_query,
+ $column_order, $replication_types, $replication_info
+ );
$new_db_string .= $generated_html;
$new_db_string .= '';
- $extra_data['new_db_string'] = $new_db_string;
-
- PMA_ajaxResponse($message, true, $extra_data);
+ $response = PMA_Response::getInstance();
+ $response->addJSON('message', $message);
+ $response->addJSON('new_db_string', $new_db_string);
+ $response->addJSON(
+ 'sql_query',
+ PMA_Util::getMessage(
+ null, $sql_query, 'success'
+ )
+ );
+ } else {
+ include_once '' . $cfg['DefaultTabDatabase'];
}
-
- include_once './libraries/header.inc.php';
- include_once './' . $cfg['DefaultTabDatabase'];
}
?>
diff --git a/phpMyAdmin/db_datadict.php b/phpMyAdmin/db_datadict.php
index 1f62a09..f08a5c4 100644
--- a/phpMyAdmin/db_datadict.php
+++ b/phpMyAdmin/db_datadict.php
@@ -1,6 +1,7 @@
getHeader();
+$header->enablePrintView();
/**
* Gets the relations settings
*/
$cfgRelation = PMA_getRelationsParam();
-require_once './libraries/transformations.lib.php';
-
+require_once 'libraries/transformations.lib.php';
+require_once 'libraries/Index.class.php';
/**
* Check parameters
*/
-PMA_checkParameters(array('db'));
+PMA_Util::checkParameters(array('db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
if (strlen($table)) {
- $err_url = 'tbl_sql.php?' . PMA_generate_common_url($db, $table);
+ $err_url = 'tbl_sql.php?' . PMA_URL_getCommon($db, $table);
} else {
- $err_url = 'db_sql.php?' . PMA_generate_common_url($db);
+ $err_url = 'db_sql.php?' . PMA_URL_getCommon($db);
}
if ($cfgRelation['commwork']) {
@@ -45,18 +49,16 @@
* Displays DB comment
*/
if ($comment) {
- ?>
-
-
- ' . __('Database comment: ')
+ . '' . htmlspecialchars($comment) . '
';
} // end if
}
/**
* Selects the database and gets tables names
*/
-PMA_DBI_select_db($db);
-$tables = PMA_DBI_get_tables($db);
+$GLOBALS['dbi']->selectDb($db);
+$tables = $GLOBALS['dbi']->getTables($db);
$count = 0;
foreach ($tables as $table) {
@@ -75,8 +77,8 @@
* Gets table keys and retains them
*/
- PMA_DBI_select_db($db);
- $indexes = PMA_DBI_get_table_indexes($db, $table);
+ $GLOBALS['dbi']->selectDb($db);
+ $indexes = $GLOBALS['dbi']->getTableIndexes($db, $table);
$primary = '';
$indexes = array();
$lastIndex = '';
@@ -95,19 +97,21 @@
$indexes[] = $row['Key_name'];
$lastIndex = $row['Key_name'];
}
- $indexes_info[$row['Key_name']]['Sequences'][] = $row['Seq_in_index'];
- $indexes_info[$row['Key_name']]['Non_unique'] = $row['Non_unique'];
+ $indexes_info[$row['Key_name']]['Sequences'][] = $row['Seq_in_index'];
+ $indexes_info[$row['Key_name']]['Non_unique'] = $row['Non_unique'];
if (isset($row['Cardinality'])) {
$indexes_info[$row['Key_name']]['Cardinality'] = $row['Cardinality'];
}
// I don't know what does following column mean....
// $indexes_info[$row['Key_name']]['Packed'] = $row['Packed'];
- $indexes_info[$row['Key_name']]['Comment'] = $row['Comment'];
+ $indexes_info[$row['Key_name']]['Comment'] = $row['Comment'];
- $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Column_name'] = $row['Column_name'];
+ $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Column_name']
+ = $row['Column_name'];
if (isset($row['Sub_part'])) {
- $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Sub_part'] = $row['Sub_part'];
+ $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Sub_part']
+ = $row['Sub_part'];
}
} // end while
@@ -115,8 +119,7 @@
/**
* Gets columns properties
*/
- $columns = PMA_DBI_get_columns($db, $table);
- $fields_cnt = count($columns);
+ $columns = $GLOBALS['dbi']->getColumns($db, $table);
if (PMA_MYSQL_INT_VERSION < 50025) {
// We need this to correctly learn if a TIMESTAMP is NOT NULL, since
@@ -124,9 +127,12 @@
// and SHOW CREATE TABLE says NOT NULL
// http://bugs.mysql.com/20910.
- $show_create_table = PMA_DBI_fetch_value(
- 'SHOW CREATE TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table),
- 0, 1);
+ $show_create_table_query = 'SHOW CREATE TABLE '
+ . PMA_Util::backquote($db) . '.'
+ . PMA_Util::backquote($table);
+ $show_create_table = $GLOBALS['dbi']->fetchValue(
+ $show_create_table_query, 0, 1
+ );
$analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table));
}
@@ -150,22 +156,19 @@
* Displays the comments of the table if MySQL >= 3.23
*/
if (!empty($show_comment)) {
- echo __('Table comments') . ': ' . htmlspecialchars($show_comment) . ' ';
+ echo __('Table comments:') . ' ';
+ echo htmlspecialchars($show_comment) . ' ';
}
/**
* Displays the table structure
*/
- ?>
-
-
-
-
-*/ ?>
-
-
-*/ ?>
- ';
+ echo '' . __('Column') . ' ';
+ echo '' . __('Type') . ' ';
+ echo '' . __('Null') . ' ';
+ echo '' . __('Default') . ' ';
if ($have_rel) {
echo ' ' . __('Links to') . ' ' . "\n";
}
@@ -173,26 +176,28 @@
if ($cfgRelation['mimework']) {
echo ' MIME ' . "\n";
}
- ?>
-
- ';
$odd_row = true;
foreach ($columns as $row) {
if ($row['Null'] == '') {
$row['Null'] = 'NO';
}
- $extracted_fieldspec = PMA_extractFieldSpec($row['Type']);
+ $extracted_columnspec
+ = PMA_Util::extractColumnSpec($row['Type']);
+
// reformat mysql query output
// set or enum types: slashes single quotes inside options
- if ('set' == $extracted_fieldspec['type'] || 'enum' == $extracted_fieldspec['type']) {
+ if ('set' == $extracted_columnspec['type']
+ || 'enum' == $extracted_columnspec['type']
+ ) {
$type_nowrap = '';
} else {
- $type_nowrap = ' nowrap="nowrap"';
+ $type_nowrap = ' class="nowrap"';
}
- $type = htmlspecialchars($extracted_fieldspec['print_type']);
- $attribute = $extracted_fieldspec['attribute'];
+ $type = htmlspecialchars($extracted_columnspec['print_type']);
+ $attribute = $extracted_columnspec['attribute'];
if (! isset($row['Default'])) {
if ($row['Null'] != 'NO') {
$row['Default'] = 'NULL ';
@@ -200,76 +205,87 @@
} else {
$row['Default'] = htmlspecialchars($row['Default']);
}
- $field_name = $row['Field'];
+ $column_name = $row['Field'];
+ $tmp_column = $analyzed_sql[0]['create_table_fields'][$column_name];
if (PMA_MYSQL_INT_VERSION < 50025
- && ! empty($analyzed_sql[0]['create_table_fields'][$field_name]['type'])
- && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP'
- && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
- // here, we have a TIMESTAMP that SHOW FULL COLUMNS reports as having the
- // NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
- // the latter.
+ && ! empty($tmp_column['type'])
+ && $tmp_column['type'] == 'TIMESTAMP'
+ && $tmp_column['timestamp_not_null']
+ ) {
+ // here, we have a TIMESTAMP that SHOW FULL COLUMNS reports as
+ // having the NULL attribute, but SHOW CREATE TABLE says the
+ // contrary. Believe the latter.
/**
* @todo merge this logic with the one in tbl_structure.php
- * or move it in a function similar to PMA_DBI_get_columns_full()
+ * or move it in a function similar to $GLOBALS['dbi']->getColumnsFull()
* but based on SHOW CREATE TABLE because information_schema
* cannot be trusted in this case (MySQL bug)
*/
$row['Null'] = 'NO';
}
- ?>
-
-
- ';
+ echo ' ';
+
if (isset($pk_array[$row['Field']])) {
- echo '' . htmlspecialchars($field_name) . ' ';
+ echo '' . htmlspecialchars($column_name) . ' ';
} else {
- echo htmlspecialchars($field_name);
+ echo htmlspecialchars($column_name);
}
- ?>
-
- xml:lang="en" dir="ltr">
->*/ ?>
-
-
->*/ ?>
- ';
+ echo '' . $type . ' ';
+ echo '';
+ echo (($row['Null'] == 'NO') ? __('No') : __('Yes'));
+ echo ' ';
+ echo '';
+ if (isset($row['Default'])) {
+ echo $row['Default'];
+ }
+ echo ' ';
+
if ($have_rel) {
echo ' ';
- if (isset($res_rel[$field_name])) {
- echo htmlspecialchars($res_rel[$field_name]['foreign_table'] . ' -> ' . $res_rel[$field_name]['foreign_field']);
+ if (isset($res_rel[$column_name])) {
+ echo htmlspecialchars(
+ $res_rel[$column_name]['foreign_table']
+ . ' -> '
+ . $res_rel[$column_name]['foreign_field']
+ );
}
echo ' ' . "\n";
}
echo ' ';
- if (isset($comments[$field_name])) {
- echo htmlspecialchars($comments[$field_name]);
+ if (isset($comments[$column_name])) {
+ echo htmlspecialchars($comments[$column_name]);
}
echo ' ' . "\n";
if ($cfgRelation['mimework']) {
$mime_map = PMA_getMIME($db, $table, true);
echo ' ';
- if (isset($mime_map[$field_name])) {
- echo htmlspecialchars(str_replace('_', '/', $mime_map[$field_name]['mimetype']));
+ if (isset($mime_map[$column_name])) {
+ echo htmlspecialchars(
+ str_replace('_', '/', $mime_map[$column_name]['mimetype'])
+ );
}
echo ' ' . "\n";
}
- ?>
-
- ';
} // end foreach
$count++;
- ?>
-
-
- ';
+ // display indexes information
+ if (count(PMA_Index::getFromTable($table, $db)) > 0) {
+ echo PMA_Index::getView($table, $db, true);
+ }
+ echo '';
} //ends main while
/**
* Displays the footer
*/
-PMA_printButton();
+echo PMA_Util::getButton();
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/db_events.php b/phpMyAdmin/db_events.php
index 7716fb0..917778b 100644
--- a/phpMyAdmin/db_events.php
+++ b/phpMyAdmin/db_events.php
@@ -9,28 +9,18 @@
/**
* Include required files
*/
-require_once './libraries/common.inc.php';
-require_once './libraries/common.lib.php';
-
-/**
- * Include JavaScript libraries
- */
-$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.16.custom.js';
-$GLOBALS['js_include'][] = 'jquery/timepicker.js';
-$GLOBALS['js_include'][] = 'rte/common.js';
-$GLOBALS['js_include'][] = 'rte/events.js';
-$GLOBALS['js_include'][] = 'codemirror/lib/codemirror.js';
-$GLOBALS['js_include'][] = 'codemirror/mode/mysql/mysql.js';
+require_once 'libraries/common.inc.php';
+require_once 'libraries/Util.class.php';
/**
* Include all other files
*/
-require_once './libraries/rte/rte_events.lib.php';
+require_once 'libraries/rte/rte_events.lib.php';
/**
* Do the magic
*/
$_PMA_RTE = 'EVN';
-require_once './libraries/rte/rte_main.inc.php';
+require_once 'libraries/rte/rte_main.inc.php';
?>
diff --git a/phpMyAdmin/db_export.php b/phpMyAdmin/db_export.php
index 326b73a..5313e0e 100644
--- a/phpMyAdmin/db_export.php
+++ b/phpMyAdmin/db_export.php
@@ -9,16 +9,19 @@
/**
* Gets some core libraries
*/
-require_once './libraries/common.inc.php';
+require_once 'libraries/common.inc.php';
-$GLOBALS['js_include'][] = 'export.js';
+$response = PMA_Response::getInstance();
+$header = $response->getHeader();
+$scripts = $header->getScripts();
+$scripts->addFile('export.js');
// $sub_part is also used in db_info.inc.php to see if we are coming from
// db_export.php, in which case we don't obey $cfg['MaxTableList']
$sub_part = '_export';
-require_once './libraries/db_common.inc.php';
+require_once 'libraries/db_common.inc.php';
$url_query .= '&goto=db_export.php';
-require_once './libraries/db_info.inc.php';
+require_once 'libraries/db_info.inc.php';
/**
* Displays the form
@@ -28,27 +31,33 @@
// exit if no tables in db found
if ($num_tables < 1) {
PMA_Message::error(__('No tables found in database.'))->display();
- include './libraries/footer.inc.php';
exit;
} // end if
-$checkall_url = 'db_export.php?'
- . PMA_generate_common_url($db)
- . '&goto=db_export.php';
+$multi_values = '';
+$multi_values .= '
';
+$multi_values .= __('Select All');
+$multi_values .= ' ';
+$multi_values .= ' / ';
+$multi_values .= '
';
+$multi_values .= __('Unselect All');
+$multi_values .= ' ';
-$multi_values = '
';
-$multi_values .= '
' . __('Select All') . '
- /
-
' . __('Unselect All') . ' ';
-
-$multi_values .= '
';
+$multi_values .= '';
$multi_values .= "\n";
-if (!empty($selected_tbl) && empty($table_select)) {
- $table_select = $selected_tbl;
+// when called by libraries/mult_submits.inc.php
+if (!empty($_POST['selected_tbl']) && empty($table_select)) {
+ $table_select = $_POST['selected_tbl'];
}
-// Check if the selected tables are defined in $_GET (from clicking Back button on export.php)
+// Check if the selected tables are defined in $_GET
+// (from clicking Back button on export.php)
if (isset($_GET['table_select'])) {
$_GET['table_select'] = urldecode($_GET['table_select']);
$_GET['table_select'] = explode(",", $_GET['table_select']);
@@ -61,9 +70,12 @@
} else {
$is_selected = '';
}
- } elseif (! empty($unselectall)
- || (! empty($table_select) && !in_array($each_table['Name'], $table_select))) {
- $is_selected = '';
+ } elseif (isset($table_select)) {
+ if (in_array($each_table['Name'], $table_select)) {
+ $is_selected = ' selected="selected"';
+ } else {
+ $is_selected = '';
+ }
} else {
$is_selected = ' selected="selected"';
}
@@ -77,10 +89,6 @@
$multi_values .= ' ';
$export_type = 'database';
-require_once './libraries/display_export.lib.php';
+require_once 'libraries/display_export.inc.php';
-/**
- * Displays the footer
- */
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/db_import.php b/phpMyAdmin/db_import.php
index fcf56b6..70425b2 100644
--- a/phpMyAdmin/db_import.php
+++ b/phpMyAdmin/db_import.php
@@ -1,29 +1,25 @@
getHeader();
+$scripts = $header->getScripts();
+$scripts->addFile('import.js');
/**
* Gets tables informations and displays top links
*/
-require './libraries/db_common.inc.php';
-require './libraries/db_info.inc.php';
+require 'libraries/db_common.inc.php';
+require 'libraries/db_info.inc.php';
$import_type = 'database';
-require './libraries/display_import.lib.php';
+require 'libraries/display_import.inc.php';
-/**
- * Displays the footer
- */
-require './libraries/footer.inc.php';
?>
-
diff --git a/phpMyAdmin/db_operations.php b/phpMyAdmin/db_operations.php
index e4c5591..6d0db19 100644
--- a/phpMyAdmin/db_operations.php
+++ b/phpMyAdmin/db_operations.php
@@ -15,59 +15,42 @@
/**
* requirements
*/
-require_once './libraries/common.inc.php';
-require_once './libraries/mysql_charsets.lib.php';
+require_once 'libraries/common.inc.php';
+require_once 'libraries/mysql_charsets.inc.php';
-// add blobstreaming library functions
-require_once "./libraries/blobstreaming.lib.php";
+/**
+ * functions implementation for this script
+ */
+require_once 'libraries/operations.lib.php';
// add a javascript file for jQuery functions to handle Ajax actions
-// also add jQueryUI
-$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.16.custom.js';
-$GLOBALS['js_include'][] = 'db_operations.js';
+$response = PMA_Response::getInstance();
+$header = $response->getHeader();
+$scripts = $header->getScripts();
+$scripts->addFile('db_operations.js');
/**
* Rename/move or copy database
*/
-if (strlen($db) && (! empty($db_rename) || ! empty($db_copy))) {
-
- if (! empty($db_rename)) {
+if (strlen($db)
+ && (! empty($_REQUEST['db_rename']) || ! empty($_REQUEST['db_copy']))
+) {
+ if (! empty($_REQUEST['db_rename'])) {
$move = true;
} else {
$move = false;
}
- if (! isset($newname) || ! strlen($newname)) {
+ if (! isset($_REQUEST['newname']) || ! strlen($_REQUEST['newname'])) {
$message = PMA_Message::error(__('The database name is empty!'));
} else {
$sql_query = ''; // in case target db exists
$_error = false;
- if ($move || (isset($create_database_before_copying) && $create_database_before_copying)) {
- // lower_case_table_names=1 `DB` becomes `db`
- if (!PMA_DRIZZLE) {
- $lower_case_table_names = PMA_DBI_fetch_value('SHOW VARIABLES LIKE "lower_case_table_names"', 0, 1);
- if ($lower_case_table_names === '1') {
- $newname = PMA_strtolower($newname);
- }
- }
-
- $local_query = 'CREATE DATABASE ' . PMA_backquote($newname);
- if (isset($db_collation)) {
- $local_query .= ' DEFAULT' . PMA_generateCharsetQueryPart($db_collation);
- }
- $local_query .= ';';
- $sql_query = $local_query;
- // save the original db name because Tracker.class.php which
- // may be called under PMA_DBI_query() changes $GLOBALS['db']
- // for some statements, one of which being CREATE DATABASE
- $original_db = $db;
- PMA_DBI_query($local_query);
- $db = $original_db;
- unset($original_db);
-
- // rebuild the database list because PMA_Table::moveCopy
- // checks in this list if the target db exists
- $GLOBALS['pma']->databases->build();
+ if ($move
+ || (isset($_REQUEST['create_database_before_copying'])
+ && $_REQUEST['create_database_before_copying'])
+ ) {
+ $sql_query = PMA_getSqlQueryAndCreateDbBeforeCopy();
}
// here I don't use DELIMITER because it's not part of the
@@ -76,224 +59,96 @@
// to avoid selecting alternatively the current and new db
// we would need to modify the CREATE definitions to qualify
// the db name
- $procedure_names = PMA_DBI_get_procedures_or_functions($db, 'PROCEDURE');
- if ($procedure_names) {
- foreach ($procedure_names as $procedure_name) {
- PMA_DBI_select_db($db);
- $tmp_query = PMA_DBI_get_definition($db, 'PROCEDURE', $procedure_name);
- // collect for later display
- $GLOBALS['sql_query'] .= "\n" . $tmp_query;
- PMA_DBI_select_db($newname);
- PMA_DBI_query($tmp_query);
- }
- }
-
- $function_names = PMA_DBI_get_procedures_or_functions($db, 'FUNCTION');
- if ($function_names) {
- foreach ($function_names as $function_name) {
- PMA_DBI_select_db($db);
- $tmp_query = PMA_DBI_get_definition($db, 'FUNCTION', $function_name);
- // collect for later display
- $GLOBALS['sql_query'] .= "\n" . $tmp_query;
- PMA_DBI_select_db($newname);
- PMA_DBI_query($tmp_query);
- }
- }
+ PMA_runProcedureAndFunctionDefinitions($db);
// go back to current db, just in case
- PMA_DBI_select_db($db);
+ $GLOBALS['dbi']->selectDb($db);
- $GLOBALS['sql_constraints_query_full_db'] = array();
-
- $tables_full = PMA_DBI_get_tables_full($db);
- $views = array();
+ $tables_full = $GLOBALS['dbi']->getTablesFull($db);
+ include_once "libraries/plugin_interface.lib.php";
// remove all foreign key constraints, otherwise we can get errors
- include_once './libraries/export/sql.php';
- foreach ($tables_full as $each_table => $tmp) {
- $sql_constraints = '';
- $sql_drop_foreign_keys = '';
- $sql_structure = PMA_getTableDef($db, $each_table, "\n", '', false, false);
- if ($move && ! empty($sql_drop_foreign_keys)) {
- PMA_DBI_query($sql_drop_foreign_keys);
- }
- // keep the constraint we just dropped
- if (! empty($sql_constraints)) {
- $GLOBALS['sql_constraints_query_full_db'][] = $sql_constraints;
- }
- }
- unset($sql_constraints, $sql_drop_foreign_keys, $sql_structure);
-
- foreach ($tables_full as $each_table => $tmp) {
- // to be able to rename a db containing views,
- // first all the views are collected and a stand-in is created
- // the real views are created after the tables
- if (PMA_Table::isView($db, $each_table)) {
- $views[] = $each_table;
- // Create stand-in definition to resolve view dependencies
- $sql_view_standin = PMA_getTableDefStandIn($db, $each_table, "\n");
- PMA_DBI_select_db($newname);
- PMA_DBI_query($sql_view_standin);
- $GLOBALS['sql_query'] .= "\n" . $sql_view_standin;
- }
- }
+ $export_sql_plugin = PMA_getPlugin(
+ "export",
+ "sql",
+ 'libraries/plugins/export/',
+ array(
+ 'single_table' => isset($single_table),
+ 'export_type' => 'database'
+ )
+ );
+ $GLOBALS['sql_constraints_query_full_db']
+ = PMA_getSqlConstraintsQueryForFullDb(
+ $tables_full, $export_sql_plugin, $move, $db
+ );
- foreach ($tables_full as $each_table => $tmp) {
- // skip the views; we have creted stand-in definitions
- if (PMA_Table::isView($db, $each_table)) {
- continue;
- }
- $back = $sql_query;
- $sql_query = '';
-
- // value of $what for this table only
- $this_what = $what;
-
- // do not copy the data from a Merge table
- // note: on the calling FORM, 'data' means 'structure and data'
- if (PMA_Table::isMerge($db, $each_table)) {
- if ($this_what == 'data') {
- $this_what = 'structure';
- }
- if ($this_what == 'dataonly') {
- $this_what = 'nocopy';
- }
- }
+ $views = PMA_getViewsAndCreateSqlViewStandIn(
+ $tables_full, $export_sql_plugin, $db
+ );
- if ($this_what != 'nocopy') {
- // keep the triggers from the original db+table
- // (third param is empty because delimiters are only intended
- // for importing via the mysql client or our Import feature)
- $triggers = PMA_DBI_get_triggers($db, $each_table, '');
-
- if (! PMA_Table::moveCopy(
- $db, $each_table, $newname, $each_table,
- isset($this_what) ? $this_what : 'data', $move, 'db_copy')
- ) {
- $_error = true;
- // $sql_query is filled by PMA_Table::moveCopy()
- $sql_query = $back . $sql_query;
- break;
- }
- // apply the triggers to the destination db+table
- if ($triggers) {
- PMA_DBI_select_db($newname);
- foreach ($triggers as $trigger) {
- PMA_DBI_query($trigger['create']);
- $GLOBALS['sql_query'] .= "\n" . $trigger['create'] . ';';
- }
- unset($trigger);
- }
- unset($triggers);
-
- // this does not apply to a rename operation
- if (isset($GLOBALS['add_constraints']) && !empty($GLOBALS['sql_constraints_query'])) {
- $GLOBALS['sql_constraints_query_full_db'][] = $GLOBALS['sql_constraints_query'];
- unset($GLOBALS['sql_constraints_query']);
- }
- }
- // $sql_query is filled by PMA_Table::moveCopy()
- $sql_query = $back . $sql_query;
- } // end (foreach)
- unset($each_table);
+ list($sql_query, $_error) = PMA_getSqlQueryForCopyTable(
+ $tables_full, $sql_query, $move, $db
+ );
// handle the views
if (! $_error) {
- // temporarily force to add DROP IF EXIST to CREATE VIEW query,
- // to remove stand-in VIEW that was created earlier
- if (isset($GLOBALS['drop_if_exists'])) {
- $temp_drop_if_exists = $GLOBALS['drop_if_exists'];
- }
- $GLOBALS['drop_if_exists'] = 'true';
-
- foreach ($views as $view) {
- if (! PMA_Table::moveCopy($db, $view, $newname, $view, 'structure', $move, 'db_copy')) {
- $_error = true;
- break;
- }
- }
- unset($GLOBALS['drop_if_exists']);
- if (isset($temp_drop_if_exists)) {
- // restore previous value
- $GLOBALS['drop_if_exists'] = $temp_drop_if_exists;
- unset($temp_drop_if_exists);
- }
+ $_error = PMA_handleTheViews($views, $move, $db);
}
- unset($view, $views);
+ unset($views);
// now that all tables exist, create all the accumulated constraints
if (! $_error && count($GLOBALS['sql_constraints_query_full_db']) > 0) {
- PMA_DBI_select_db($newname);
- foreach ($GLOBALS['sql_constraints_query_full_db'] as $one_query) {
- PMA_DBI_query($one_query);
- // and prepare to display them
- $GLOBALS['sql_query'] .= "\n" . $one_query;
- }
-
- unset($GLOBALS['sql_constraints_query_full_db'], $one_query);
+ PMA_createAllAccumulatedConstraints();
}
- if (!PMA_DRIZZLE && PMA_MYSQL_INT_VERSION >= 50100) {
+ if (! PMA_DRIZZLE && PMA_MYSQL_INT_VERSION >= 50100) {
// here DELIMITER is not used because it's not part of the
// language; each statement is sent one by one
- // to avoid selecting alternatively the current and new db
- // we would need to modify the CREATE definitions to qualify
- // the db name
- $event_names = PMA_DBI_fetch_result('SELECT EVENT_NAME FROM information_schema.EVENTS WHERE EVENT_SCHEMA= \'' . PMA_sqlAddSlashes($db, true) . '\';');
- if ($event_names) {
- foreach ($event_names as $event_name) {
- PMA_DBI_select_db($db);
- $tmp_query = PMA_DBI_get_definition($db, 'EVENT', $event_name);
- // collect for later display
- $GLOBALS['sql_query'] .= "\n" . $tmp_query;
- PMA_DBI_select_db($newname);
- PMA_DBI_query($tmp_query);
- }
- }
+ PMA_runEventDefinitionsForDb($db);
}
// go back to current db, just in case
- PMA_DBI_select_db($db);
+ $GLOBALS['dbi']->selectDb($db);
// Duplicate the bookmarks for this db (done once for each db)
- if (! $_error && $db != $newname) {
- $get_fields = array('user', 'label', 'query');
- $where_fields = array('dbase' => $db);
- $new_fields = array('dbase' => $newname);
- PMA_Table::duplicateInfo('bookmarkwork', 'bookmark', $get_fields,
- $where_fields, $new_fields);
- }
+ PMA_duplicateBookmarks($_error, $db);
if (! $_error && $move) {
/**
* cleanup pmadb stuff for this db
*/
- include_once './libraries/relation_cleanup.lib.php';
+ include_once 'libraries/relation_cleanup.lib.php';
PMA_relationsCleanupDatabase($db);
// if someday the RENAME DATABASE reappears, do not DROP
- $local_query = 'DROP DATABASE ' . PMA_backquote($db) . ';';
+ $local_query = 'DROP DATABASE ' . PMA_Util::backquote($db) . ';';
$sql_query .= "\n" . $local_query;
- PMA_DBI_query($local_query);
+ $GLOBALS['dbi']->query($local_query);
- $message = PMA_Message::success(__('Database %s has been renamed to %s'));
+ $message = PMA_Message::success(
+ __('Database %1$s has been renamed to %2$s')
+ );
$message->addParam($db);
- $message->addParam($newname);
+ $message->addParam($_REQUEST['newname']);
} elseif (! $_error) {
- $message = PMA_Message::success(__('Database %s has been copied to %s'));
+ $message = PMA_Message::success(
+ __('Database %1$s has been copied to %2$s')
+ );
$message->addParam($db);
- $message->addParam($newname);
+ $message->addParam($_REQUEST['newname']);
}
$reload = true;
/* Change database to be used */
if (! $_error && $move) {
- $db = $newname;
+ $db = $_REQUEST['newname'];
} elseif (! $_error) {
- if (isset($switch_to_new) && $switch_to_new == 'true') {
+ if (isset($_REQUEST['switch_to_new'])
+ && $_REQUEST['switch_to_new'] == 'true'
+ ) {
$GLOBALS['PMA_Config']->setCookie('pma_switch_to_new', 'true');
- $db = $newname;
+ $db = $_REQUEST['newname'];
} else {
$GLOBALS['PMA_Config']->setCookie('pma_switch_to_new', '');
}
@@ -306,16 +161,22 @@
/**
* Database has been successfully renamed/moved. If in an Ajax request,
- * generate the output with {@link PMA_ajaxResponse} and exit
+ * generate the output with {@link PMA_Response} and exit
*/
- if ( $GLOBALS['is_ajax_request'] == true) {
- $extra_data['newname'] = $newname;
- $extra_data['sql_query'] = PMA_showMessage(null, $sql_query);
- PMA_ajaxResponse($message, $message->isSuccess(), $extra_data);
- };
+ if ($GLOBALS['is_ajax_request'] == true) {
+ $response = PMA_Response::getInstance();
+ $response->isSuccess($message->isSuccess());
+ $response->addJSON('message', $message);
+ $response->addJSON('newname', $_REQUEST['newname']);
+ $response->addJSON(
+ 'sql_query',
+ PMA_Util::getMessage(null, $sql_query)
+ );
+ $response->addJSON('db', $db);
+ exit;
+ }
}
-
/**
* Settings for relations stuff
*/
@@ -327,276 +188,113 @@
* (must be done before displaying the menu tabs)
*/
if (isset($_REQUEST['comment'])) {
- PMA_setDbComment($db, $comment);
+ PMA_setDbComment($db, $_REQUEST['comment']);
}
-/**
- * Prepares the tables list if the user where not redirected to this script
- * because there is no table in the database ($is_info is true)
- */
-if (empty($is_info)) {
- include './libraries/db_common.inc.php';
- $url_query .= '&goto=db_operations.php';
-
- // Gets the database structure
- $sub_part = '_structure';
- include './libraries/db_info.inc.php';
- echo "\n";
-
- if (isset($message)) {
- PMA_showMessage($message, $sql_query);
- unset($message);
- }
+require 'libraries/db_common.inc.php';
+$url_query .= '&goto=db_operations.php';
+
+// Gets the database structure
+$sub_part = '_structure';
+require 'libraries/db_info.inc.php';
+echo "\n";
+
+if (isset($message)) {
+ echo PMA_Util::getMessage($message, $sql_query);
+ unset($message);
}
-$db_collation = PMA_getDbCollation($db);
-$is_information_schema = PMA_is_system_schema($db);
+$_REQUEST['db_collation'] = PMA_getDbCollation($db);
+$is_information_schema = $GLOBALS['dbi']->isSystemSchema($db);
+
+$response->addHTML('
');
if (!$is_information_schema) {
if ($cfgRelation['commwork']) {
/**
* database comment
*/
- ?>
-
-
-
- addHTML(PMA_getHtmlForDatabaseComment($db));
}
- ?>
-
-
-
- addHTML('
');
+ ob_start();
+ include 'libraries/display_create_table.lib.php';
+ $content = ob_get_contents();
+ ob_end_clean();
+ $response->addHTML($content);
+ $response->addHTML('
');
+
/**
* rename database
*/
-if ($db != 'mysql') {
- ?>
-
-
-
-
-
-
-
-
-
- $this_sql_query,
- 'back' => 'db_operations.php',
- 'goto' => 'main.php',
- 'reload' => '1',
- 'purge' => '1',
- 'message_to_show' => sprintf(__('Database %s has been dropped.'), htmlspecialchars(PMA_backquote($db))),
- 'db' => null,
- );
- ?>
- >
-
-
-
-
-
-
-
- addHTML(PMA_getHtmlForDropDatabaseLink($db));
+ }
/**
* Copy database
*/
- ?>
-
-
-
- addHTML(PMA_getHtmlForCopyDatabase($db));
/**
* Change database charset
*/
- echo '
' . "\n";
+ $response->addHTML(PMA_getHtmlForChangeDatabaseCharset($db, $table));
if ($num_tables > 0
- && ! $cfgRelation['allworks'] && $cfg['PmaNoRelation_DisableWarning'] == false) {
- $message = PMA_Message::notice(__('The phpMyAdmin configuration storage has been deactivated. To find out why click %shere%s.'));
- $message->addParam('
', false);
+ && ! $cfgRelation['allworks']
+ && $cfg['PmaNoRelation_DisableWarning'] == false
+ ) {
+ $message = PMA_Message::notice(
+ __('The phpMyAdmin configuration storage has been deactivated. To find out why click %shere%s.')
+ );
+ $message->addParam(
+ ' ',
+ false
+ );
$message->addParam(' ', false);
/* Show error if user has configured something, notice elsewhere */
if (!empty($cfg['Servers'][$server]['pmadb'])) {
$message->isError(true);
}
- echo '
';
- $message->display();
- echo '
';
+ $response->addHTML('
');
+ $response->addHTML($message->getDisplay());
+ $response->addHTML('
');
} // end if
} // end if (!$is_information_schema)
+$response->addHTML('
');
// not sure about displaying the PDF dialog in case db is information_schema
-if ($cfgRelation['pdfwork'] && $num_tables > 0) { ?>
-
-
- 0) {
// We only show this if we find something in the new pdf_pages table
-
$test_query = '
SELECT *
- FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages']) . '
- WHERE db_name = \'' . PMA_sqlAddSlashes($db) . '\'';
- $test_rs = PMA_query_as_controluser($test_query, null, PMA_DBI_QUERY_STORE);
+ FROM ' . PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
+ . '.' . PMA_Util::backquote($cfgRelation['pdf_pages']) . '
+ WHERE db_name = \'' . PMA_Util::sqlAddSlashes($db) . '\'';
+ $test_rs = PMA_queryAsControlUser(
+ $test_query,
+ null,
+ PMA_DatabaseInterface::QUERY_STORE
+ );
/*
* Export Relational Schema View
*/
- echo '
';
+ $response->addHTML(PMA_getHtmlForExportRelationalSchemaView($url_query));
} // end if
-/**
- * Displays the footer
- */
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/db_printview.php b/phpMyAdmin/db_printview.php
index 5512fa6..137bdaa 100644
--- a/phpMyAdmin/db_printview.php
+++ b/phpMyAdmin/db_printview.php
@@ -1,6 +1,7 @@
getHeader();
+$header->enablePrintView();
-PMA_checkParameters(array('db'));
+PMA_Util::checkParameters(array('db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
-$err_url = 'db_sql.php?' . PMA_generate_common_url($db);
+$err_url = 'db_sql.php?' . PMA_URL_getCommon($db);
/**
* Settings for relations stuff
*/
$cfgRelation = PMA_getRelationsParam();
-/**
- * Gets the list of the table in the current db and informations about these
- * tables if possible
- *
- * @todo merge this speedup _optionaly_ into PMA_DBI_get_tables_full()
- *
-// speedup view on locked tables
-// Special speedup for newer MySQL Versions (in 4.0 format changed)
-if ($cfg['SkipLockedTables'] == true) {
- $result = PMA_DBI_query('SHOW OPEN TABLES FROM ' . PMA_backquote($db) . ';');
- // Blending out tables in use
- if ($result != false && PMA_DBI_num_rows($result) > 0) {
- while ($tmp = PMA_DBI_fetch_row($result)) {
- // if in use memorize tablename
- if (preg_match('@in_use=[1-9]+@i', $tmp[0])) {
- $sot_cache[$tmp[0]] = true;
- }
- }
- PMA_DBI_free_result($result);
-
- if (isset($sot_cache)) {
- $result = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
- if ($result != false && PMA_DBI_num_rows($result) > 0) {
- while ($tmp = PMA_DBI_fetch_row($result)) {
- if (! isset($sot_cache[$tmp[0]])) {
- $sts_result = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_backquote($db) . ' LIKE \'' . PMA_sqlAddSlashes($tmp[0], true) . '\';');
- $sts_tmp = PMA_DBI_fetch_assoc($sts_result);
- $tables[] = $sts_tmp;
- } else { // table in use
- $tables[] = array('Name' => $tmp[0]);
- }
- }
- PMA_DBI_free_result($result);
- $sot_ready = true;
- }
- }
- unset($tmp, $result);
- }
-}
-
-if (! isset($sot_ready)) {
- $result = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_backquote($db) . ';');
- if (PMA_DBI_num_rows($result) > 0) {
- while ($sts_tmp = PMA_DBI_fetch_assoc($result)) {
- $tables[] = $sts_tmp;
- }
- PMA_DBI_free_result($result);
- unset($res);
- }
-}
- */
-
/**
* If there is at least one table, displays the printer friendly view, else
* an error message
*/
-$tables = PMA_DBI_get_tables_full($db);
+$tables = $GLOBALS['dbi']->getTablesFull($db);
$num_tables = count($tables);
echo '
';
@@ -93,76 +40,66 @@
if ($num_tables == 0) {
echo __('No tables found in database.');
} else {
-// 2. Shows table information
- ?>
-
-
-
-
-
-
- ';
+ echo '';
+ echo '';
+ echo '' . __('Table') . ' ';
+ echo '' . __('Rows') . ' ';
+ echo '' . __('Type') . ' ';
if ($cfg['ShowStats']) {
echo '' . __('Size') . ' ';
}
- ?>
-
-
-
-
- ' . __('Comments') . '';
+ echo '';
+ echo '';
+ echo ' ';
$sum_entries = $sum_size = 0;
$odd_row = true;
foreach ($tables as $sts_data) {
if (PMA_Table::isMerge($db, $sts_data['TABLE_NAME'])
- || strtoupper($sts_data['ENGINE']) == 'FEDERATED') {
+ || strtoupper($sts_data['ENGINE']) == 'FEDERATED'
+ ) {
$merged_size = true;
} else {
$merged_size = false;
}
$sum_entries += $sts_data['TABLE_ROWS'];
- ?>
-
-
-
-
- ';
+ echo '';
+ echo htmlspecialchars($sts_data['TABLE_NAME']);
+ echo ' ';
if (isset($sts_data['TABLE_ROWS'])) {
- ?>
-
- ';
if ($merged_size) {
- echo '' . PMA_formatNumber($sts_data['TABLE_ROWS'], 0) . ' ' . "\n";
+ echo '';
+ echo PMA_Util::formatNumber($sts_data['TABLE_ROWS'], 0);
+ echo ' ';
} else {
- echo PMA_formatNumber($sts_data['TABLE_ROWS'], 0) . "\n";
+ echo PMA_Util::formatNumber($sts_data['TABLE_ROWS'], 0);
}
- ?>
-
-
-
-
- ';
+ echo '';
+ echo $sts_data['ENGINE'];
+ echo ' ';
if ($cfg['ShowStats']) {
$tblsize = $sts_data['Data_length'] + $sts_data['Index_length'];
$sum_size += $tblsize;
- list($formated_size, $unit) = PMA_formatByteDown($tblsize, 3, 1);
- ?>
-
-
-
- ';
+ echo $formated_size . ' ' . $unit;
+ echo '';
} // end if
} else {
- ?>
-
-
-
- ';
+ if (! PMA_Table::isView($db, $sts_data['TABLE_NAME'])) {
+ echo __('in use');
+ }
+ echo '';
}
- ?>
-
- ';
if (! empty($sts_data['Comment'])) {
echo htmlspecialchars($sts_data['Comment']);
$needs_break = ' ';
@@ -171,82 +108,73 @@
}
if (! empty($sts_data['Create_time'])
- || ! empty($sts_data['Update_time'])
- || ! empty($sts_data['Check_time'])) {
+ || ! empty($sts_data['Update_time'])
+ || ! empty($sts_data['Check_time'])
+ ) {
echo $needs_break;
- ?>
-
- ';
if (! empty($sts_data['Create_time'])) {
- ?>
-
-
-
-
- ';
+ echo '' . __('Creation:') . ' ';
+ echo '';
+ echo PMA_Util::localisedDate(strtotime($sts_data['Create_time']));
+ echo ' ';
+ echo '';
}
if (! empty($sts_data['Update_time'])) {
- ?>
-
-
-
-
- ';
+ echo '' . __('Last update:') . ' ';
+ echo '';
+ echo PMA_Util::localisedDate(strtotime($sts_data['Update_time']));
+ echo ' ';
+ echo '';
}
if (! empty($sts_data['Check_time'])) {
- ?>
-
-
-
-
- ';
+ echo '' . __('Last check:') . ' ';
+ echo '';
+ echo PMA_Util::localisedDate(strtotime($sts_data['Check_time']));
+ echo ' ';
+ echo '';
}
- ?>
-
- ';
}
- ?>
-
-
- ';
+ echo '';
}
- ?>
-
-
-
-
-
-
-
-
- --
-
- ';
+ echo '';
+ printf(
+ _ngettext('%s table', '%s tables', $num_tables),
+ PMA_Util::formatNumber($num_tables, 0)
+ );
+ echo ' ';
+ echo '';
+ echo PMA_Util::formatNumber($sum_entries, 0);
+ echo ' ';
+ echo '';
+ echo '--';
+ echo ' ';
if ($cfg['ShowStats']) {
- list($sum_formated, $unit) = PMA_formatByteDown($sum_size, 3, 1);
- ?>
-
-
-
- ';
+ echo $sum_formated . ' ' . $unit;
+ echo '';
}
- ?>
-
-
-
-
- ';
+ echo '';
+ echo '';
+ echo '';
}
/**
* Displays the footer
*/
-PMA_printButton();
+echo PMA_Util::getButton();
echo "\n";
-
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/db_qbe.php b/phpMyAdmin/db_qbe.php
index b4249bf..7fad34d 100644
--- a/phpMyAdmin/db_qbe.php
+++ b/phpMyAdmin/db_qbe.php
@@ -9,13 +9,15 @@
/**
* requirements
*/
-require_once './libraries/common.inc.php';
+require_once 'libraries/common.inc.php';
+require_once 'libraries/DBQbe.class.php';
+require_once 'libraries/bookmark.lib.php';
+require_once 'libraries/sql.lib.php';
-/**
- * Gets the relation settings
- */
-$cfgRelation = PMA_getRelationsParam();
+$response = PMA_Response::getInstance();
+// Gets the relation settings
+$cfgRelation = PMA_getRelationsParam();
/**
* A query has been submitted -> (maybe) execute it
@@ -26,941 +28,51 @@
$message_to_display = true;
} else {
$goto = 'db_sql.php';
- include './sql.php';
- exit;
+
+ // Parse and analyze the query
+ include_once 'libraries/parse_analyze.inc.php';
+
+ PMA_executeQueryAndSendQueryResponse(
+ $analyzed_sql_results, false, $_REQUEST['db'], null, null, null, null,
+ false, null, null, null, null, $goto, $pmaThemeImage, null, null, null,
+ $sql_query, null, null
+ );
}
}
$sub_part = '_qbe';
-require './libraries/db_common.inc.php';
+require 'libraries/db_common.inc.php';
$url_query .= '&goto=db_qbe.php';
$url_params['goto'] = 'db_qbe.php';
-require './libraries/db_info.inc.php';
+require 'libraries/db_info.inc.php';
if ($message_to_display) {
PMA_Message::error(__('You have to choose at least one column to display'))->display();
}
unset($message_to_display);
-/**
- * Initialize some variables
- */
-$col_cnt = PMA_ifSetOr($_REQUEST['col_cnt'], 3, 'numeric');
-$add_col = PMA_ifSetOr($_REQUEST['add_col'], 0, 'numeric');
-$add_row = PMA_ifSetOr($_REQUEST['add_row'], 0, 'numeric');
-
-$rows = PMA_ifSetOr($_REQUEST['rows'], 0, 'numeric');
-$ins_col = PMA_ifSetOr($_REQUEST['ins_col'], null, 'array');
-$del_col = PMA_ifSetOr($_REQUEST['del_col'], null, 'array');
-
-$prev_criteria = isset($_REQUEST['prev_criteria'])
- ? $_REQUEST['prev_criteria']
- : array();
-$criteria = isset($_REQUEST['criteria'])
- ? $_REQUEST['criteria']
- : array_fill(0, $col_cnt, '');
-
-$ins_row = isset($_REQUEST['ins_row'])
- ? $_REQUEST['ins_row']
- : array_fill(0, $col_cnt, '');
-$del_row = isset($_REQUEST['del_row'])
- ? $_REQUEST['del_row']
- : array_fill(0, $col_cnt, '');
-$and_or_row = isset($_REQUEST['and_or_row'])
- ? $_REQUEST['and_or_row']
- : array_fill(0, $col_cnt, '');
-$and_or_col = isset($_REQUEST['and_or_col'])
- ? $_REQUEST['and_or_col']
- : array_fill(0, $col_cnt, '');
-
-// minimum width
-$form_column_width = 12;
-$col = max($col_cnt + $add_col, 0);
-$row = max($rows + $add_row, 0);
-
-
-// The tables list sent by a previously submitted form
-if (PMA_isValid($_REQUEST['TableList'], 'array')) {
- foreach ($_REQUEST['TableList'] as $each_table) {
- $tbl_names[$each_table] = ' selected="selected"';
- }
-} // end if
-
-
-// this was a work in progress, deactivated for now
-//$columns = PMA_DBI_get_columns_full($GLOBALS['db']);
-//$tables = PMA_DBI_get_columns_full($GLOBALS['db']);
-
-
-/**
- * Prepares the form
- */
-$tbl_result = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
-$tbl_result_cnt = PMA_DBI_num_rows($tbl_result);
-if (0 == $tbl_result_cnt) {
- PMA_Message::error(__('No tables found in database.'))->display();
- include './libraries/footer.inc.php';
- exit;
-}
-
-// The tables list gets from MySQL
-while (list($tbl) = PMA_DBI_fetch_row($tbl_result)) {
- $fld_results = PMA_DBI_get_columns($db, $tbl);
-
- if (empty($tbl_names[$tbl]) && !empty($_REQUEST['TableList'])) {
- $tbl_names[$tbl] = '';
- } else {
- $tbl_names[$tbl] = ' selected="selected"';
- } // end if
-
- // The fields list per selected tables
- if ($tbl_names[$tbl] == ' selected="selected"') {
- $each_table = PMA_backquote($tbl);
- $fld[] = $each_table . '.*';
- foreach ($fld_results as $each_field) {
- $each_field = $each_table . '.' . PMA_backquote($each_field['Field']);
- $fld[] = $each_field;
-
- // increase the width if necessary
- $form_column_width = max(strlen($each_field), $form_column_width);
- } // end foreach
- } // end if
-} // end while
-PMA_DBI_free_result($tbl_result);
-
-// largest width found
-$realwidth = $form_column_width . 'ex';
-
+// create new qbe search instance
+$db_qbe = new PMA_DBQbe($GLOBALS['db']);
/**
* Displays the Query by example form
*/
-
-/**
- * Enter description here...
- *
- * @param array $columns
- * @param integer $column_number
- * @param string $selected
- */
-function showColumnSelectCell($columns, $column_number, $selected = '')
-{
- ?>
-
-
-
- '
- . str_replace(' ', ' ', htmlspecialchars($column)) . '' . "\n";
- }
- ?>
-
-
-
- $value) {
- $tab_designer['link'] .= PMA_get_arg_separator('html') . urlencode($param) . '='
- . urlencode($value);
- }
- }
- }
- if (! empty($tab['fragment'])) {
- $tab['link'] .= $tab['fragment'];
- }
- if (isset($tab_designer['link'])) {
-?>
-
-
-
-
-
-addHTML($db_qbe->getSelectionForm($cfgRelation));
?>
diff --git a/phpMyAdmin/db_routines.php b/phpMyAdmin/db_routines.php
index 1d4ee0c..a58d4c0 100644
--- a/phpMyAdmin/db_routines.php
+++ b/phpMyAdmin/db_routines.php
@@ -9,34 +9,19 @@
/**
* Include required files
*/
-require_once './libraries/common.inc.php';
-require_once './libraries/common.lib.php';
-require_once './libraries/mysql_charsets.lib.php';
-if (PMA_DRIZZLE) {
- include_once './libraries/data_drizzle.inc.php';
-} else {
- include_once './libraries/data_mysql.inc.php';
-}
-
-/**
- * Include JavaScript libraries
- */
-$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.16.custom.js';
-$GLOBALS['js_include'][] = 'jquery/timepicker.js';
-$GLOBALS['js_include'][] = 'rte/common.js';
-$GLOBALS['js_include'][] = 'rte/routines.js';
-$GLOBALS['js_include'][] = 'codemirror/lib/codemirror.js';
-$GLOBALS['js_include'][] = 'codemirror/mode/mysql/mysql.js';
+require_once 'libraries/common.inc.php';
+require_once 'libraries/Util.class.php';
+require_once 'libraries/mysql_charsets.inc.php';
/**
* Include all other files
*/
-require_once './libraries/rte/rte_routines.lib.php';
+require_once 'libraries/rte/rte_routines.lib.php';
/**
* Do the magic
*/
$_PMA_RTE = 'RTN';
-require_once './libraries/rte/rte_main.inc.php';
+require_once 'libraries/rte/rte_main.inc.php';
?>
diff --git a/phpMyAdmin/db_search.php b/phpMyAdmin/db_search.php
index 68cb463..acfec8e 100644
--- a/phpMyAdmin/db_search.php
+++ b/phpMyAdmin/db_search.php
@@ -9,353 +9,49 @@
*/
/**
- *
+ * Gets some core libraries
*/
-require_once './libraries/common.inc.php';
+require_once 'libraries/common.inc.php';
+require_once 'libraries/DbSearch.class.php';
-$GLOBALS['js_include'][] = 'db_search.js';
-$GLOBALS['js_include'][] = 'sql.js';
-$GLOBALS['js_include'][] = 'makegrid.js';
-$GLOBALS['js_include'][] = 'jquery/timepicker.js';
+$response = PMA_Response::getInstance();
+$header = $response->getHeader();
+$scripts = $header->getScripts();
+$scripts->addFile('db_search.js');
+$scripts->addFile('sql.js');
+$scripts->addFile('makegrid.js');
+$scripts->addFile('jquery/jquery-ui-timepicker-addon.js');
-/**
- * Gets some core libraries and send headers
- */
-require './libraries/db_common.inc.php';
+require 'libraries/db_common.inc.php';
-/**
- * init
- */
// If config variable $GLOBALS['cfg']['Usedbsearch'] is on false : exit.
if (! $GLOBALS['cfg']['UseDbSearch']) {
- PMA_mysqlDie(__('Access denied'), '', false, $err_url);
+ PMA_Util::mysqlDie(
+ __('Access denied'), '', false, $err_url
+ );
} // end if
$url_query .= '&goto=db_search.php';
$url_params['goto'] = 'db_search.php';
-/**
- * @global array list of tables from the current database
- * but do not clash with $tables coming from db_info.inc.php
- */
-$tables_names_only = PMA_DBI_get_tables($GLOBALS['db']);
-
-$search_options = array(
- '1' => __('at least one of the words'),
- '2' => __('all words'),
- '3' => __('the exact phrase'),
- '4' => __('as regular expression'),
-);
-
-if (empty($_REQUEST['search_option']) || ! is_string($_REQUEST['search_option'])
- || ! array_key_exists($_REQUEST['search_option'], $search_options)) {
- $search_option = 1;
- unset($_REQUEST['submit_search']);
-} else {
- $search_option = (int) $_REQUEST['search_option'];
- $option_str = $search_options[$_REQUEST['search_option']];
-}
-
-if (empty($_REQUEST['search_str']) || ! is_string($_REQUEST['search_str'])) {
- unset($_REQUEST['submit_search']);
- $searched = '';
-} else {
- $searched = htmlspecialchars($_REQUEST['search_str']);
- // For "as regular expression" (search option 4), we should not treat
- // this as an expression that contains a LIKE (second parameter of
- // PMA_sqlAddSlashes()).
- //
- // Usage example: If user is seaching for a literal $ in a regexp search,
- // he should enter \$ as the value.
- $search_str = PMA_sqlAddSlashes($_REQUEST['search_str'], ($search_option == 4 ? false : true));
-}
-
-$tables_selected = array();
-if (empty($_REQUEST['table_select']) || ! is_array($_REQUEST['table_select'])) {
- unset($_REQUEST['submit_search']);
-} elseif (! isset($_REQUEST['selectall']) && ! isset($_REQUEST['unselectall'])) {
- $tables_selected = array_intersect($_REQUEST['table_select'], $tables_names_only);
-}
-
-if (isset($_REQUEST['selectall'])) {
- $tables_selected = $tables_names_only;
-} elseif (isset($_REQUEST['unselectall'])) {
- $tables_selected = array();
-}
-
-if (empty($_REQUEST['field_str']) || ! is_string($_REQUEST['field_str'])) {
- unset($field_str);
-} else {
- $field_str = PMA_sqlAddSlashes($_REQUEST['field_str'], true);
-}
-
-/**
- * Displays top links if we are not in an Ajax request
- */
-$sub_part = '';
+// Create a database search instance
+$db_search = new PMA_DbSearch($GLOBALS['db']);
+// Display top links if we are not in an Ajax request
if ( $GLOBALS['is_ajax_request'] != true) {
- include './libraries/db_info.inc.php';
- echo '
';
+ include 'libraries/db_info.inc.php';
}
+$response->addHTML('
');
-/**
- * 1. Main search form has been submitted
- */
+// Main search form has been submitted, get results
if (isset($_REQUEST['submit_search'])) {
+ $response->addHTML($db_search->getSearchResults());
+}
- /**
- * Builds the SQL search query
- *
- * @todo can we make use of fulltextsearch IN BOOLEAN MODE for this?
- * PMA_backquote
- * PMA_DBI_free_result
- * PMA_DBI_fetch_assoc
- * $GLOBALS['db']
- * explode
- * count
- * strlen
- * @param string the table name
- * @param string restrict the search to this field
- * @param string the string to search
- * @param integer type of search (1 -> 1 word at least, 2 -> all words,
- * 3 -> exact string, 4 -> regexp)
- *
- * @return array 3 SQL querys (for count, display and delete results)
- */
- function PMA_getSearchSqls($table, $field, $search_str, $search_option)
- {
- // Statement types
- $sqlstr_select = 'SELECT';
- $sqlstr_delete = 'DELETE';
-
- // Fields to select
- $tblfields = PMA_DBI_get_columns($GLOBALS['db'], $table);
-
- // Table to use
- $sqlstr_from = ' FROM ' . PMA_backquote($GLOBALS['db']) . '.' . PMA_backquote($table);
-
- $search_words = (($search_option > 2) ? array($search_str) : explode(' ', $search_str));
-
- $like_or_regex = (($search_option == 4) ? 'REGEXP' : 'LIKE');
- $automatic_wildcard = (($search_option < 3) ? '%' : '');
-
- $fieldslikevalues = array();
- foreach ($search_words as $search_word) {
- // Eliminates empty values
- if (strlen($search_word) === 0) {
- continue;
- }
-
- $thefieldlikevalue = array();
- foreach ($tblfields as $tblfield) {
- if (! isset($field) || strlen($field) == 0 || $tblfield['Field'] == $field) {
- // Drizzle has no CONVERT and all text columns are UTF-8
- if (PMA_DRIZZLE) {
- $thefieldlikevalue[] = PMA_backquote($tblfield['Field'])
- . ' ' . $like_or_regex . ' '
- . "'" . $automatic_wildcard
- . $search_word
- . $automatic_wildcard . "'";
- } else {
- $thefieldlikevalue[] = 'CONVERT(' . PMA_backquote($tblfield['Field']) . ' USING utf8)'
- . ' ' . $like_or_regex . ' '
- . "'" . $automatic_wildcard
- . $search_word
- . $automatic_wildcard . "'";
- }
- }
- } // end for
-
- if (count($thefieldlikevalue) > 0) {
- $fieldslikevalues[] = implode(' OR ', $thefieldlikevalue);
- }
- } // end for
-
- $implode_str = ($search_option == 1 ? ' OR ' : ' AND ');
- if ( empty($fieldslikevalues)) {
- // this could happen when the "inside field" does not exist
- // in any selected tables
- $sqlstr_where = ' WHERE FALSE';
- } else {
- $sqlstr_where = ' WHERE (' . implode(') ' . $implode_str . ' (', $fieldslikevalues) . ')';
- }
- unset($fieldslikevalues);
-
- // Builds complete queries
- $sql['select_fields'] = $sqlstr_select . ' * ' . $sqlstr_from . $sqlstr_where;
- // here, I think we need to still use the COUNT clause, even for
- // VIEWs, anyway we have a WHERE clause that should limit results
- $sql['select_count'] = $sqlstr_select . ' COUNT(*) AS `count`' . $sqlstr_from . $sqlstr_where;
- $sql['delete'] = $sqlstr_delete . $sqlstr_from . $sqlstr_where;
-
- return $sql;
- } // end of the "PMA_getSearchSqls()" function
-
-
- /**
- * Displays the results
- */
- $this_url_params = array(
- 'db' => $GLOBALS['db'],
- 'goto' => 'db_sql.php',
- 'pos' => 0,
- 'is_js_confirmed' => 0,
- );
-
- // Displays search string
- echo '
' . "\n"
- .'
' . "\n"
- .'' . "\n";
-
- $num_search_result_total = 0;
- $odd_row = true;
-
- foreach ($tables_selected as $each_table) {
- // Gets the SQL statements
- $newsearchsqls = PMA_getSearchSqls($each_table, (! empty($field_str) ? $field_str : ''), $search_str, $search_option);
-
- // Executes the "COUNT" statement
- $res_cnt = PMA_DBI_fetch_value($newsearchsqls['select_count']);
- $num_search_result_total += $res_cnt;
-
- $sql_query .= $newsearchsqls['select_count'];
-
- echo ''
- .'' . sprintf(_ngettext('%s match inside table %s ', '%s matches inside table %s ', $res_cnt), $res_cnt,
- htmlspecialchars($each_table)) . " \n";
-
- if ($res_cnt > 0) {
- $this_url_params['sql_query'] = $newsearchsqls['select_fields'];
- $browse_result_path = 'sql.php' . PMA_generate_common_url($this_url_params);
- ?>
-
-
-
- ' . "\n"
- .' ' . "\n";
- }// end if else
- $odd_row = ! $odd_row;
- echo ' ' . "\n";
- } // end for
-
- echo '
' . "\n";
-
- if (count($tables_selected) > 1) {
- echo '
' . sprintf(_ngettext('Total: %s match', 'Total: %s matches', $num_search_result_total),
- $num_search_result_total) . '
' . "\n";
- }
-} // end 1.
-
-/**
- * If we are in an Ajax request, we need to exit after displaying all the HTML
- */
-if ($GLOBALS['is_ajax_request'] == true) {
+// If we are in an Ajax request, we need to exit after displaying all the HTML
+if ($GLOBALS['is_ajax_request'] == true && empty($_REQUEST['ajax_page_request'])) {
exit;
-} else {
- echo '
';//end searchresults div
}
-/**
- * 2. Displays the main search form
- */
-?>
-
-
method="post" action="db_search.php" name="db_search">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-addHTML($db_search->getSelectionForm($url_params));
?>
diff --git a/phpMyAdmin/db_sql.php b/phpMyAdmin/db_sql.php
index 9b4e74d..67bbbb5 100644
--- a/phpMyAdmin/db_sql.php
+++ b/phpMyAdmin/db_sql.php
@@ -1,6 +1,7 @@
getHeader();
+$scripts = $header->getScripts();
+$scripts->addFile('functions.js');
+$scripts->addFile('makegrid.js');
+$scripts->addFile('sql.js');
-require './libraries/db_common.inc.php';
-require_once './libraries/sql_query_form.lib.php';
+require 'libraries/db_common.inc.php';
+require_once 'libraries/sql_query_form.lib.php';
// After a syntax error, we return to this script
// with the typed query in the textarea.
$goto = 'db_sql.php';
$back = 'db_sql.php';
-/**
- * Gets informations about the database and, if it is empty, move to the
- * "db_structure.php" script where table can be created
- */
-require './libraries/db_info.inc.php';
-if ($num_tables == 0 && empty($db_query_force)) {
- $sub_part = '';
- $is_info = true;
- include './db_structure.php';
- exit();
-}
-
/**
* Query box, bookmark, insert data from textfile
*/
-PMA_sqlQueryForm(true, false, isset($_REQUEST['delimiter']) ? htmlspecialchars($_REQUEST['delimiter']) : ';');
+$response->addHTML(
+ PMA_getHtmlForSqlQueryForm(
+ true, false,
+ isset($_REQUEST['delimiter'])
+ ? htmlspecialchars($_REQUEST['delimiter'])
+ : ';'
+ )
+);
-/**
- * Displays the footer
- */
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/db_structure.php b/phpMyAdmin/db_structure.php
index 43fa401..0eed9ad 100644
--- a/phpMyAdmin/db_structure.php
+++ b/phpMyAdmin/db_structure.php
@@ -1,6 +1,7 @@
libraries/mult_submits.inc.php -> sql.php
- // -> db_structure.php and if we got an error on the multi submit,
- // we must display it here and not call again mult_submits.inc.php
- if (! isset($error) || false === $error) {
- include './libraries/mult_submits.inc.php';
- }
- if (empty($message)) {
- $message = PMA_Message::success();
- }
+require_once 'libraries/structure.lib.php';
+
+$response = PMA_Response::getInstance();
+$header = $response->getHeader();
+$scripts = $header->getScripts();
+$scripts->addFile('db_structure.js');
+$scripts->addFile('tbl_change.js');
+$scripts->addFile('jquery/jquery-ui-timepicker-addon.js');
+
+// Drops/deletes/etc. multiple tables if required
+if ((!empty($_POST['submit_mult']) && isset($_POST['selected_tbl']))
+ || isset($_POST['mult_btn'])
+) {
+ $action = 'db_structure.php';
+ $err_url = 'db_structure.php?'. PMA_URL_getCommon($db);
+
+ // see bug #2794840; in this case, code path is:
+ // db_structure.php -> libraries/mult_submits.inc.php -> sql.php
+ // -> db_structure.php and if we got an error on the multi submit,
+ // we must display it here and not call again mult_submits.inc.php
+ if (! isset($_POST['error']) || false === $_POST['error']) {
+ include 'libraries/mult_submits.inc.php';
}
- include './libraries/db_common.inc.php';
- $url_query .= '&goto=db_structure.php';
+ if (empty($_POST['message'])) {
+ $_POST['message'] = PMA_Message::success();
+ }
+}
+require 'libraries/db_common.inc.php';
+$url_query .= '&goto=db_structure.php';
- // Gets the database structure
- $sub_part = '_structure';
- include './libraries/db_info.inc.php';
+// Gets the database structure
+$sub_part = '_structure';
+require 'libraries/db_info.inc.php';
- if (!PMA_DRIZZLE) {
- include_once './libraries/replication.inc.php';
- } else {
- $server_slave_status = false;
- }
+if (!PMA_DRIZZLE) {
+ include_once 'libraries/replication.inc.php';
+} else {
+ $server_slave_status = false;
}
-require_once './libraries/bookmark.lib.php';
+require_once 'libraries/bookmark.lib.php';
-require_once './libraries/mysql_charsets.lib.php';
+require_once 'libraries/mysql_charsets.inc.php';
$db_collation = PMA_getDbCollation($db);
-// in a separate file to avoid redeclaration of functions in some code paths
-require_once './libraries/db_structure.lib.php';
-$titles = PMA_buildActionTitles();
+$titles = PMA_Util::buildActionTitles();
// 1. No tables
if ($num_tables == 0) {
- echo '
' . __('No tables found in database') . '
' . "\n";
-
+ $response->addHTML(
+ '
' . __('No tables found in database.') . '
' . "\n"
+ );
if (empty($db_is_information_schema)) {
- include './libraries/display_create_table.lib.php';
+ ob_start();
+ include 'libraries/display_create_table.lib.php';
+ $content = ob_get_contents();
+ ob_end_clean();
+ $response->addHTML($content);
+ unset($content);
} // end if (Create Table dialog)
-
- /**
- * Displays the footer
- */
- include_once './libraries/footer.inc.php';
exit;
}
@@ -84,7 +84,7 @@
/**
* Displays the tables list
*/
-echo '
';
+$response->addHTML('
');
$_url_params = array(
'pos' => $pos,
'db' => $db);
@@ -98,176 +98,119 @@
$_url_params['sort_order'] = $_REQUEST['sort_order'];
}
-PMA_listNavigator(
- $total_num_tables, $pos, $_url_params, 'db_structure.php',
- 'frame_content', $GLOBALS['cfg']['MaxTableList']
+$response->addHTML(
+ PMA_Util::getListNavigator(
+ $total_num_tables, $pos, $_url_params, 'db_structure.php',
+ 'frame_content', $GLOBALS['cfg']['MaxTableList']
+ )
);
-?>
-
-addHTML(
+ ' '
+);
+
+$response->addHTML(PMA_URL_getHiddenInputs($db));
-PMA_TableHeader($db_is_information_schema, $server_slave_status);
+$response->addHTML(
+ PMA_tableHeader($db_is_information_schema, $server_slave_status)
+);
$i = $sum_entries = 0;
-$sum_size = (double) 0;
-$overhead_size = (double) 0;
$overhead_check = '';
-$checked = !empty($checkall) ? ' checked="checked"' : '';
+$create_time_all = '';
+$update_time_all = '';
+$check_time_all = '';
$num_columns = $cfg['PropertiesNumColumns'] > 1
? ceil($num_tables / $cfg['PropertiesNumColumns']) + 1
: 0;
$row_count = 0;
-
+$sum_size = (double) 0;
+$overhead_size = (double) 0;
$hidden_fields = array();
$odd_row = true;
$sum_row_count_pre = '';
-$tableReductionCount = 0; // the amount to reduce the table count by
-
-foreach ($tables as $keyname => $each_table) {
- if (PMA_BS_IsHiddenTable($keyname)) {
- $tableReductionCount++;
- continue;
- }
-
+foreach ($tables as $keyname => $current_table) {
// Get valid statistics whatever is the table type
+ $drop_query = '';
+ $drop_message = '';
+ $overhead = '';
+
$table_is_view = false;
- $table_encoded = urlencode($each_table['TABLE_NAME']);
+ $table_encoded = urlencode($current_table['TABLE_NAME']);
// Sets parameters for links
$tbl_url_query = $url_query . '&table=' . $table_encoded;
// do not list the previous table's size info for a view
- $formatted_size = '-';
- $unit = '';
-
- switch ( $each_table['ENGINE']) {
- // MyISAM, ISAM or Heap table: Row count, data size and index size
- // are accurate; data size is accurate for ARCHIVE
- case 'MyISAM' :
- case 'ISAM' :
- case 'HEAP' :
- case 'MEMORY' :
- case 'ARCHIVE' :
- case 'Aria' :
- case 'Maria' :
- if ($db_is_information_schema) {
- $each_table['Rows'] = PMA_Table::countRecords(
- $db, $each_table['Name']
- );
- }
-
- if ($is_show_stats) {
- $tblsize = doubleval($each_table['Data_length']) + doubleval($each_table['Index_length']);
- $sum_size += $tblsize;
- list($formatted_size, $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0);
- if (isset($each_table['Data_free']) && $each_table['Data_free'] > 0) {
- list($formatted_overhead, $overhead_unit) = PMA_formatByteDown($each_table['Data_free'], 3, ($each_table['Data_free'] > 0) ? 1 : 0);
- $overhead_size += $each_table['Data_free'];
- }
- }
- break;
- case 'InnoDB' :
- case 'PBMS' :
- // InnoDB table: Row count is not accurate but data and index sizes are.
- // PBMS table in Drizzle: TABLE_ROWS is taken from table cache, so it may be unavailable
-
- if (($each_table['ENGINE'] == 'InnoDB'
- && $each_table['TABLE_ROWS'] < $GLOBALS['cfg']['MaxExactCount'])
- || !isset($each_table['TABLE_ROWS'])
- ) {
- $each_table['COUNTED'] = true;
- $each_table['TABLE_ROWS'] = PMA_Table::countRecords(
- $db, $each_table['TABLE_NAME'],
- $force_exact = true, $is_view = false
- );
- } else {
- $each_table['COUNTED'] = false;
- }
- // Drizzle doesn't provide data and index length, check for null
- if ($is_show_stats && $each_table['Data_length'] !== null) {
- $tblsize = $each_table['Data_length'] + $each_table['Index_length'];
- $sum_size += $tblsize;
- list($formatted_size, $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0);
- }
- //$display_rows = ' - ';
- break;
- // Mysql 5.0.x (and lower) uses MRG_MyISAM and MySQL 5.1.x (and higher) uses MRG_MYISAM
- // Both are aliases for MERGE
- case 'MRG_MyISAM' :
- case 'MRG_MYISAM' :
- case 'MERGE' :
- case 'BerkeleyDB' :
- // Merge or BerkleyDB table: Only row count is accurate.
- if ($is_show_stats) {
- $formatted_size = ' - ';
- $unit = '';
- }
- break;
- // for a view, the ENGINE is sometimes reported as null,
- // or on some servers it's reported as "SYSTEM VIEW"
- case null :
- case 'SYSTEM VIEW' :
- case 'FunctionEngine' :
- // if table is broken, Engine is reported as null, so one more test
- if ($each_table['TABLE_TYPE'] == 'VIEW') {
- // countRecords() takes care of $cfg['MaxExactCountViews']
- $each_table['TABLE_ROWS'] = PMA_Table::countRecords(
- $db, $each_table['TABLE_NAME'],
- $force_exact = true, $is_view = true
+ list($current_table, $formatted_size, $unit, $formatted_overhead,
+ $overhead_unit, $overhead_size, $table_is_view, $sum_size)
+ = PMA_getStuffForEngineTypeTable(
+ $current_table, $db_is_information_schema,
+ $is_show_stats, $table_is_view, $sum_size, $overhead_size
);
- $table_is_view = true;
- }
- break;
- default :
- // Unknown table type.
- if ($is_show_stats) {
- $formatted_size = __('unknown');
- $unit = '';
- }
- } // end switch
- if (! PMA_Table::isMerge($db, $each_table['TABLE_NAME'])) {
- $sum_entries += $each_table['TABLE_ROWS'];
+ if (! PMA_Table::isMerge($db, $current_table['TABLE_NAME'])) {
+ $sum_entries += $current_table['TABLE_ROWS'];
}
- if (isset($each_table['Collation'])) {
+ if (isset($current_table['Collation'])) {
$collation = ''
- . $each_table['Collation'] . ' ';
+ . PMA_getCollationDescr($current_table['Collation']) . '">'
+ . $current_table['Collation'] . '';
} else {
$collation = '---';
}
if ($is_show_stats) {
- if (isset($formatted_overhead)) {
+ if ($formatted_overhead != '') {
$overhead = '' . $formatted_overhead
- . ' ' . $overhead_unit . ' ' . "\n";
- unset($formatted_overhead);
+ . $tbl_url_query . '#showusage">'
+ . '' . $formatted_overhead . ' '
+ . '' . $overhead_unit . ' '
+ . '' . "\n";
$overhead_check .=
- "document.getElementById('checkbox_tbl_" . ($i + 1) . "').checked = true;";
+ "markAllRows('row_tbl_" . ($i + 1) . "');";
} else {
$overhead = '-';
}
} // end if
- $alias = (!empty($tooltip_aliasname) && isset($tooltip_aliasname[$each_table['TABLE_NAME']]))
- ? str_replace(' ', ' ', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']]))
- : str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME']));
- $truename = (!empty($tooltip_truename) && isset($tooltip_truename[$each_table['TABLE_NAME']]))
- ? str_replace(' ', ' ', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']]))
- : str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME']));
+ unset($showtable);
+
+ if ($GLOBALS['cfg']['ShowDbStructureCreation']) {
+ list($create_time, $create_time_all) = PMA_getTimeForCreateUpdateCheck(
+ $current_table, 'Create_time', $create_time_all
+ );
+ }
+
+ if ($GLOBALS['cfg']['ShowDbStructureLastUpdate']) {
+ // $showtable might already be set from ShowDbStructureCreation, see above
+ list($update_time, $update_time_all) = PMA_getTimeForCreateUpdateCheck(
+ $current_table, 'Update_time', $update_time_all
+ );
+ }
+
+ if ($GLOBALS['cfg']['ShowDbStructureLastCheck']) {
+ // $showtable might already be set from ShowDbStructureCreation, see above
+ list($check_time, $check_time_all) = PMA_getTimeForCreateUpdateCheck(
+ $current_table, 'Check_time', $check_time_all
+ );
+ }
+
+ list($alias, $truename) = PMA_getAliasAndTrueName(
+ $tooltip_aliasname, $current_table, $tooltip_truename
+ );
$i++;
$row_count++;
if ($table_is_view) {
$hidden_fields[] = ' ';
+ . htmlspecialchars($current_table['TABLE_NAME']) . '" />';
}
/*
@@ -280,69 +223,15 @@
* I could have used the PHP ternary conditional operator but I find
* the code easier to read without this operator.
*/
- if ($each_table['TABLE_ROWS'] > 0 || $table_is_view) {
- $may_have_rows = true;
- } else {
- $may_have_rows = false;
- }
- $browse_table = '';
- if ($may_have_rows) {
- $browse_table .= $titles['Browse'];
- } else {
- $browse_table .= $titles['NoBrowse'];
- }
- $browse_table .= ' ';
-
- $search_table = '';
- if ($may_have_rows) {
- $search_table .= $titles['Search'];
- } else {
- $search_table .= $titles['NoSearch'];
- }
- $search_table .= ' ';
-
- $browse_table_label = '' . $truename . ' ';
-
- if (! $db_is_information_schema) {
- $empty_table = '';
- if ($may_have_rows) {
- $empty_table .= $titles['Empty'];
- } else {
- $empty_table .= $titles['NoEmpty'];
- }
- $empty_table .= ' ';
-
- $drop_query = 'DROP '
- . (($table_is_view || $each_table['ENGINE'] == null) ? 'VIEW' : 'TABLE')
- . ' ' . PMA_backquote($each_table['TABLE_NAME']);
- $drop_message = sprintf(
- ($table_is_view || $each_table['ENGINE'] == null)? __('View %s has been dropped') : __('Table %s has been dropped'),
- str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME']))
+ list($browse_table, $search_table, $browse_table_label, $empty_table,
+ $tracking_icon) = PMA_getHtmlForActionLinks(
+ $current_table, $table_is_view, $tbl_url_query,
+ $titles, $truename, $db_is_information_schema, $url_query
);
- }
- $tracking_icon = '';
- if (PMA_Tracker::isActive()) {
- if (PMA_Tracker::isTracked($GLOBALS["db"], $truename)) {
- $tracking_icon = ''
- . PMA_getImage('eye.png', __('Tracking is active.'))
- . ' ';
- } elseif (PMA_Tracker::getVersion($GLOBALS["db"], $truename) > 0) {
- $tracking_icon = ''
- . PMA_getImage('eye.png', __('Tracking is not active.'))
- . ' ';
- }
+ if (! $db_is_information_schema) {
+ list($drop_query, $drop_message)
+ = PMA_getTableDropQueryAndMessage($table_is_view, $current_table);
}
if ($num_columns > 0
@@ -351,313 +240,78 @@
) {
$row_count = 1;
$odd_row = true;
- ?>
-
-
-
- addHTML(
+ ''
+ );
- if ((strlen(array_search($truename, $server_slave_Do_Table)) > 0)
- || (strlen(array_search($db, $server_slave_Do_DB)) > 0)
- || (count($server_slave_Do_DB) == 1 && count($server_slave_Ignore_DB) == 1)
- ) {
- $do = true;
- }
- foreach ($server_slave_Wild_Do_Table as $db_table) {
- $table_part = PMA_extract_db_or_table($db_table, 'table');
- if (($db == PMA_extract_db_or_table($db_table, 'db'))
- && (preg_match("@^" . substr($table_part, 0, strlen($table_part) - 1) . "@", $truename))
- ) {
- $do = true;
- }
- }
- ////////////////////////////////////////////////////////////////////
- if ((strlen(array_search($truename, $server_slave_Ignore_Table)) > 0)
- || (strlen(array_search($db, $server_slave_Ignore_DB)) > 0)
- ) {
- $ignored = true;
- }
- foreach ($server_slave_Wild_Ignore_Table as $db_table) {
- $table_part = PMA_extract_db_or_table($db_table, 'table');
- if (($db == PMA_extract_db_or_table($db_table))
- && (preg_match("@^" . substr($table_part, 0, strlen($table_part) - 1) . "@", $truename))
- ) {
- $ignored = true;
- }
- }
- unset($table_part);
+ $response->addHTML(PMA_tableHeader(false, $server_slave_status));
}
- ?>
-
-
- />
-
-
-
-
-
-
-
-
-
-
-
- href="tbl_change.php?">
-
-
-
- href="sql.php?&reload=1&purge=1&sql_query=&message_to_show=" >
-
- = $GLOBALS['cfg']['MaxExactCountViews']
- && $each_table['ENGINE'] != 'FunctionEngine'
- ) {
- $row_count_pre = '~';
- $sum_row_count_pre = '~';
- $show_superscript = PMA_showHint(
- PMA_sanitize(
- sprintf(
- __('This view has at least this number of rows. Please refer to %sdocumentation%s.'),
- '[a@./Documentation.html#cfg_MaxExactCountViews@_blank]',
- '[/a]'
- )
- )
- );
- }
- } elseif ($each_table['ENGINE'] == 'InnoDB' && (! $each_table['COUNTED'])) {
- // InnoDB table: we did not get an accurate row count
- $row_count_pre = '~';
- $sum_row_count_pre = '~';
- $show_superscript = '';
- }
- ?>
-
- 1)) { ?>
-
-
-
-
-
-
-
- ' . $formatted_size . ' ' . $unit . ' '; ?>
-
-
-
- -
-
- ---
-
- -
- -
-
-
-
-
-
-
- addHTML($html_output);
+
} // end foreach
// Show Summary
-if ($is_show_stats) {
- list($sum_formatted, $unit) = PMA_formatByteDown($sum_size, 3, 1);
- list($overhead_formatted, $overhead_unit)
- = PMA_formatByteDown($overhead_size, 3, 1);
-}
-?>
-
-
-
-
-
-
- ' . __('Replication') . '' . "\n";
- }
- ?>
-
-
-
- 1)) {
- $default_engine = PMA_DBI_fetch_value('SHOW VARIABLES LIKE \'storage_engine\';', 0, 1);
- echo ' ' . "\n"
- . ' ' .$default_engine . ' ' . "\n";
- // we got a case where $db_collation was empty
- echo ' ' . "\n";
- if (! empty($db_collation)) {
- echo ' ' . $db_collation
- . ' ';
- }
- echo ' ';
-}
-
-if ($is_show_stats) {
- ?>
-
-
-
-
-
-
+$response->addHTML('');
+$response->addHTML(
+ PMA_getHtmlBodyForTableSummary(
+ $num_tables, $server_slave_status, $db_is_information_schema, $sum_entries,
+ $db_collation, $is_show_stats, $sum_size, $overhead_size, $create_time_all,
+ $update_time_all, $check_time_all, $sum_row_count_pre
+ )
+);
+$response->addHTML('');
+//check all
+$response->addHTML(
+ PMA_getHtmlForCheckAllTables(
+ $pmaThemeImage, $text_dir, $overhead_check,
+ $db_is_information_schema, $hidden_fields
+ )
+);
+$response->addHTML(' '); //end of form
-
-
-
-
-
-/
-
-
-
-/
-
-
-
-
-
-'
- . __('With selected:') . '' . "\n";
-echo ' '
- . __('Export') . ' ' . "\n";
-echo ' '
- . __('Print view') . ' ' . "\n";
-
-if (!$db_is_information_schema && !$cfg['DisableMultiTableMaintenance']) {
- echo ' '
- . __('Empty') . ' ' . "\n";
- echo ' '
- . __('Drop') . ' ' . "\n";
- echo ' '
- . __('Check table') . ' ' . "\n";
- if (!PMA_DRIZZLE) {
- echo ' '
- . __('Optimize table') . ' ' . "\n";
- echo ' '
- . __('Repair table') . ' ' . "\n";
- }
- echo ' '
- . __('Analyze table') . ' ' . "\n";
- echo ' '
- . __('Add prefix to table') . ' ' . "\n";
- echo ' '
- . __('Replace table prefix') . ' ' . "\n";
- echo ' '
- . __('Copy table with prefix') . ' ' . "\n";
-}
-?>
-
-
-
-
-
-
-
-
-addHTML(
+ PMA_Util::getListNavigator(
+ $total_num_tables, $pos, $_url_params, 'db_structure.php',
+ 'frame_content', $GLOBALS['cfg']['MaxTableList']
+ )
);
-?>
-
-
-addHTML('
');
/**
* Work on the database
*/
/* DATABASE WORK */
/* Printable view of a table */
-echo '
';
-echo '';
-echo PMA_getIcon('b_print.png', __('Print view'), true) . ' ';
-
-echo '';
-echo PMA_getIcon('b_tblanalyse.png', __('Data Dictionary'), true) . ' ';
-echo '
';
+$response->addHTML(
+ PMA_getHtmlForTablePrintViewLink($url_query)
+ . PMA_getHtmlForDataDictionaryLink($url_query)
+);
if (empty($db_is_information_schema)) {
- include './libraries/display_create_table.lib.php';
+ ob_start();
+ include 'libraries/display_create_table.lib.php';
+ $content = ob_get_contents();
+ ob_end_clean();
+ $response->addHTML($content);
} // end if (Create Table dialog)
-/**
- * Displays the footer
- */
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/db_tracking.php b/phpMyAdmin/db_tracking.php
index 6fd9a9c..bcd552c 100644
--- a/phpMyAdmin/db_tracking.php
+++ b/phpMyAdmin/db_tracking.php
@@ -1,29 +1,31 @@
getHeader();
+$scripts = $header->getScripts();
+$scripts->addFile('db_structure.js');
/**
* If we are not in an Ajax request, then do the common work and show the links etc.
*/
-if ($GLOBALS['is_ajax_request'] != true) {
- include './libraries/db_common.inc.php';
-}
+require 'libraries/db_common.inc.php';
$url_query .= '&goto=tbl_tracking.php&back=db_tracking.php';
// Get the database structure
$sub_part = '_structure';
-require './libraries/db_info.inc.php';
+require 'libraries/db_info.inc.php';
// Work to do?
// (here, do not use $_REQUEST['db] as it can be crafted)
@@ -32,11 +34,12 @@
/**
* If in an Ajax request, generate the success message and use
- * {@link PMA_ajaxResponse()} to send the output
+ * {@link PMA_Response()} to send the output
*/
if ($GLOBALS['is_ajax_request'] == true) {
- $message = PMA_Message::success();
- PMA_ajaxResponse($message, true);
+ $response = PMA_Response::getInstance();
+ $response->addJSON('message', PMA_Message::success());
+ exit;
}
}
@@ -48,34 +51,26 @@
echo '
' . __('No tables found in database.') . '
' . "\n";
if (empty($db_is_information_schema)) {
- include './libraries/display_create_table.lib.php';
+ include 'libraries/display_create_table.lib.php';
}
-
- // Display the footer
- include './libraries/footer.inc.php';
exit;
}
// ---------------------------------------------------------------------------
-/*
- * Display top menu links
- */
-require_once './libraries/db_links.inc.php';
-
// Prepare statement to get HEAD version
$all_tables_query = ' SELECT table_name, MAX(version) as version FROM ' .
- PMA_backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
- PMA_backquote($GLOBALS['cfg']['Server']['tracking']) .
- ' WHERE db_name = \'' . PMA_sqlAddSlashes($_REQUEST['db']) . '\' ' .
- ' GROUP BY table_name' .
- ' ORDER BY table_name ASC';
+ PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
+ PMA_Util::backquote($GLOBALS['cfg']['Server']['tracking']) .
+ ' WHERE db_name = \'' . PMA_Util::sqlAddSlashes($_REQUEST['db']) . '\' ' .
+ ' GROUP BY table_name' .
+ ' ORDER BY table_name ASC';
-$all_tables_result = PMA_query_as_controluser($all_tables_query);
+$all_tables_result = PMA_queryAsControlUser($all_tables_query);
// If a HEAD version exists
-if (PMA_DBI_num_rows($all_tables_result) > 0) {
-?>
+if ($GLOBALS['dbi']->numRows($all_tables_result) > 0) {
+ ?>
@@ -98,31 +93,39 @@
// Print out information about versions
$drop_image_or_text = '';
- if (true == $GLOBALS['cfg']['PropertiesIconic']) {
- $drop_image_or_text .= PMA_getImage('b_drop.png', __('Delete tracking data for this table'));
+ if (PMA_Util::showIcons('ActionLinksMode')) {
+ $drop_image_or_text .= PMA_Util::getImage(
+ 'b_drop.png',
+ __('Delete tracking data for this table')
+ );
}
- if ('both' === $GLOBALS['cfg']['PropertiesIconic'] || false === $GLOBALS['cfg']['PropertiesIconic']) {
+ if (PMA_Util::showText('ActionLinksMode')) {
$drop_image_or_text .= __('Drop');
}
$style = 'odd';
- while ($one_result = PMA_DBI_fetch_array($all_tables_result)) {
+ while ($one_result = $GLOBALS['dbi']->fetchArray($all_tables_result)) {
list($table_name, $version_number) = $one_result;
$table_query = ' SELECT * FROM ' .
- PMA_backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
- PMA_backquote($GLOBALS['cfg']['Server']['tracking']) .
- ' WHERE `db_name` = \'' . PMA_sqlAddSlashes($_REQUEST['db']) . '\' AND `table_name` = \'' . PMA_sqlAddSlashes($table_name) . '\' AND `version` = \'' . $version_number . '\'';
+ PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
+ PMA_Util::backquote($GLOBALS['cfg']['Server']['tracking']) .
+ ' WHERE `db_name` = \'' . PMA_Util::sqlAddSlashes($_REQUEST['db'])
+ . '\' AND `table_name` = \'' . PMA_Util::sqlAddSlashes($table_name)
+ . '\' AND `version` = \'' . $version_number . '\'';
- $table_result = PMA_query_as_controluser($table_query);
- $version_data = PMA_DBI_fetch_array($table_result);
+ $table_result = PMA_queryAsControlUser($table_query);
+ $version_data = $GLOBALS['dbi']->fetchArray($table_result);
if ($version_data['tracking_active'] == 1) {
$version_status = __('active');
} else {
$version_status = __('not active');
}
- $tmp_link = 'tbl_tracking.php?' . $url_query . '&table=' . htmlspecialchars($version_data['table_name']);
- $delete_link = 'db_tracking.php?' . $url_query . '&table=' . htmlspecialchars($version_data['table_name']) . '&delete_tracking=true&';
+ $tmp_link = 'tbl_tracking.php?' . $url_query . '&table='
+ . htmlspecialchars($version_data['table_name']);
+ $delete_link = 'db_tracking.php?' . $url_query . '&table='
+ . htmlspecialchars($version_data['table_name'])
+ . '&delete_tracking=true&';
?>
@@ -131,12 +134,22 @@
- href="" >
-
- |
- |
-
+
+
+
'
+ . ' '
+ . '' . __('Versions') . ' '
+ . ' | '
+ . '' . __('Tracking report') . ' '
+ . ' | '
+ . '' . __('Structure snapshot')
+ . ' '
+ . ' '
+ . '';
if ($style == 'even') {
$style = 'odd';
} else {
@@ -148,29 +161,36 @@
- $value) {
// If $value is a table group.
- if (array_key_exists(('is' . $sep . 'group'), $value) && $value['is' . $sep . 'group']) {
+ if (array_key_exists(('is' . $sep . 'group'), $value)
+ && $value['is' . $sep . 'group']
+ ) {
foreach ($value as $temp_table) {
// If $temp_table is a table with the value for 'Name' is set,
// rather than a propery of the table group.
- if (is_array($temp_table) && array_key_exists('Name', $temp_table)) {
- if (PMA_Tracker::getVersion($GLOBALS['db'], $temp_table['Name']) == -1) {
+ if (is_array($temp_table)
+ && array_key_exists('Name', $temp_table)
+ ) {
+ $tracking_version = PMA_Tracker::getVersion(
+ $GLOBALS['db'],
+ $temp_table['Name']
+ );
+ if ($tracking_version == -1) {
$my_tables[] = $temp_table['Name'];
}
}
}
- // If $value is a table.
- } else {
+ } else { // If $value is a table.
if (PMA_Tracker::getVersion($GLOBALS['db'], $value['Name']) == -1) {
$my_tables[] = $value['Name'];
}
@@ -179,32 +199,34 @@
// If untracked tables exist
if (isset($my_tables)) {
-?>
+ ?>
-
- 0) {
$log = '';
foreach ($data['ddlog'] as $entry) {
- $log .= '# ' . $entry['date'] . ' ' . $entry['username'] . "\n" . $entry['statement'] . "\n";
+ $log .= '# ' . $entry['date'] . ' ' . $entry['username'] . "\n"
+ . $entry['statement'] . "\n";
}
- PMA_showMessage(__('Database Log'), $log);
+ echo PMA_Util::getMessage(__('Database Log'), $log);
}
-/**
- * Display the footer
- */
-require './libraries/footer.inc.php';
?>
diff --git a/phpMyAdmin/db_triggers.php b/phpMyAdmin/db_triggers.php
index 210dbfd..d1a2a8c 100644
--- a/phpMyAdmin/db_triggers.php
+++ b/phpMyAdmin/db_triggers.php
@@ -9,27 +9,17 @@
/**
* Include required files
*/
-require_once './libraries/common.inc.php';
-require_once './libraries/common.lib.php';
-
-/**
- * Include JavaScript libraries
- */
-$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.16.custom.js';
-$GLOBALS['js_include'][] = 'rte/common.js';
-$GLOBALS['js_include'][] = 'rte/triggers.js';
-$GLOBALS['js_include'][] = 'codemirror/lib/codemirror.js';
-$GLOBALS['js_include'][] = 'codemirror/mode/mysql/mysql.js';
+require_once 'libraries/common.inc.php';
/**
* Include all other files
*/
-require_once './libraries/rte/rte_triggers.lib.php';
+require_once 'libraries/rte/rte_triggers.lib.php';
/**
* Do the magic
*/
$_PMA_RTE = 'TRI';
-require_once './libraries/rte/rte_main.inc.php';
+require_once 'libraries/rte/rte_main.inc.php';
?>
diff --git a/phpMyAdmin/doc/Makefile b/phpMyAdmin/doc/Makefile
new file mode 100644
index 0000000..1ee62c8
--- /dev/null
+++ b/phpMyAdmin/doc/Makefile
@@ -0,0 +1,153 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS =
+SPHINXBUILD = sphinx-build
+PAPER =
+BUILDDIR = .
+
+# Internal variables.
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+ @echo "Please use \`make
' where is one of"
+ @echo " html to make standalone HTML files"
+ @echo " dirhtml to make HTML files named index.html in directories"
+ @echo " singlehtml to make a single large HTML file"
+ @echo " pickle to make pickle files"
+ @echo " json to make JSON files"
+ @echo " htmlhelp to make HTML files and a HTML help project"
+ @echo " qthelp to make HTML files and a qthelp project"
+ @echo " devhelp to make HTML files and a Devhelp project"
+ @echo " epub to make an epub"
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+ @echo " latexpdf to make LaTeX files and run them through pdflatex"
+ @echo " text to make text files"
+ @echo " man to make manual pages"
+ @echo " texinfo to make Texinfo files"
+ @echo " info to make Texinfo files and run them through makeinfo"
+ @echo " gettext to make PO message catalogs"
+ @echo " changes to make an overview of all changed/added/deprecated items"
+ @echo " linkcheck to check all external links for integrity"
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+ -rm -rf $(BUILDDIR)/*
+
+html:
+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+ @echo
+ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+ @echo
+ @echo "Build finished; now you can process the pickle files."
+
+json:
+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+ @echo
+ @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+ @echo
+ @echo "Build finished; now you can run HTML Help Workshop with the" \
+ ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+ @echo
+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/phpMyAdmin.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/phpMyAdmin.qhc"
+
+devhelp:
+ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+ @echo
+ @echo "Build finished."
+ @echo "To view the help file:"
+ @echo "# mkdir -p $$HOME/.local/share/devhelp/phpMyAdmin"
+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/phpMyAdmin"
+ @echo "# devhelp"
+
+epub:
+ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+ @echo
+ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+ @echo "Run \`make' in that directory to run these through (pdf)latex" \
+ "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo "Running LaTeX files through pdflatex..."
+ $(MAKE) -C $(BUILDDIR)/latex all-pdf
+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+ @echo
+ @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+ @echo
+ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+ @echo
+ @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+ @echo "Run \`make' in that directory to run these through makeinfo" \
+ "(use \`make info' here to do that automatically)."
+
+info:
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+ @echo "Running Texinfo files through makeinfo..."
+ make -C $(BUILDDIR)/texinfo info
+ @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+ $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+ @echo
+ @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+ @echo
+ @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+ @echo
+ @echo "Link check complete; look for any errors in the above output " \
+ "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+ @echo "Testing of doctests in the sources finished, look at the " \
+ "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/phpMyAdmin/doc/_ext/configext.py b/phpMyAdmin/doc/_ext/configext.py
new file mode 100644
index 0000000..fdf3314
--- /dev/null
+++ b/phpMyAdmin/doc/_ext/configext.py
@@ -0,0 +1,189 @@
+from sphinx.locale import l_, _
+from sphinx.domains import Domain, ObjType
+from sphinx.roles import XRefRole
+from sphinx.domains.std import GenericObject, StandardDomain
+from sphinx.directives import ObjectDescription
+from sphinx.util.nodes import clean_astext, make_refnode
+from sphinx.util import ws_re
+from sphinx import addnodes
+from sphinx.util.docfields import Field
+from docutils import nodes
+
+def get_id_from_cfg(text):
+ '''
+ Formats anchor ID from config option.
+ '''
+ if text[:6] == '$cfg[\'':
+ text = text[6:]
+ if text[-2:] == '\']':
+ text = text[:-2]
+ text = text.replace('[$i]', '')
+ parts = text.split("']['")
+ return parts
+
+
+class ConfigOption(ObjectDescription):
+ indextemplate = l_('configuration option; %s')
+ parse_node = None
+
+ has_arguments = True
+
+ doc_field_types = [
+ Field('default', label=l_('Default value'), has_arg=False,
+ names=('default', )),
+ Field('type', label=l_('Type'), has_arg=False,
+ names=('type',)),
+ ]
+
+
+ def handle_signature(self, sig, signode):
+ signode.clear()
+ signode += addnodes.desc_name(sig, sig)
+ # normalize whitespace like XRefRole does
+ name = ws_re.sub('', sig)
+ return name
+
+ def add_target_and_index(self, name, sig, signode):
+ targetparts = get_id_from_cfg(name)
+ targetname = 'cfg_%s' % '_'.join(targetparts)
+ signode['ids'].append(targetname)
+ self.state.document.note_explicit_target(signode)
+ indextype = 'single'
+
+ # Generic index entries
+ indexentry = self.indextemplate % (name,)
+ self.indexnode['entries'].append((indextype, indexentry,
+ targetname, targetname))
+ self.indexnode['entries'].append((indextype, name,
+ targetname, targetname))
+
+ # Server section
+ if targetparts[0] == 'Servers' and len(targetparts) > 1:
+ indexname = ', '.join(targetparts[1:])
+ self.indexnode['entries'].append((indextype, l_('server configuration; %s') % indexname,
+ targetname, targetname))
+ self.indexnode['entries'].append((indextype, indexname,
+ targetname, targetname))
+ else:
+ indexname = ', '.join(targetparts)
+ self.indexnode['entries'].append((indextype, indexname,
+ targetname, targetname))
+
+ self.env.domaindata['config']['objects'][self.objtype, name] = \
+ self.env.docname, targetname
+
+
+class ConfigSectionXRefRole(XRefRole):
+ """
+ Cross-referencing role for configuration sections (adds an index entry).
+ """
+
+ def result_nodes(self, document, env, node, is_ref):
+ if not is_ref:
+ return [node], []
+ varname = node['reftarget']
+ tgtid = 'index-%s' % env.new_serialno('index')
+ indexnode = addnodes.index()
+ indexnode['entries'] = [
+ ('single', varname, tgtid, varname),
+ ('single', _('configuration section; %s') % varname, tgtid, varname)
+ ]
+ targetnode = nodes.target('', '', ids=[tgtid])
+ document.note_explicit_target(targetnode)
+ return [indexnode, targetnode, node], []
+
+class ConfigSection(ObjectDescription):
+ indextemplate = l_('configuration section; %s')
+ parse_node = None
+
+ def handle_signature(self, sig, signode):
+ if self.parse_node:
+ name = self.parse_node(self.env, sig, signode)
+ else:
+ signode.clear()
+ signode += addnodes.desc_name(sig, sig)
+ # normalize whitespace like XRefRole does
+ name = ws_re.sub('', sig)
+ return name
+
+ def add_target_and_index(self, name, sig, signode):
+ targetname = '%s-%s' % (self.objtype, name)
+ signode['ids'].append(targetname)
+ self.state.document.note_explicit_target(signode)
+ if self.indextemplate:
+ colon = self.indextemplate.find(':')
+ if colon != -1:
+ indextype = self.indextemplate[:colon].strip()
+ indexentry = self.indextemplate[colon+1:].strip() % (name,)
+ else:
+ indextype = 'single'
+ indexentry = self.indextemplate % (name,)
+ self.indexnode['entries'].append((indextype, indexentry,
+ targetname, targetname))
+ self.env.domaindata['config']['objects'][self.objtype, name] = \
+ self.env.docname, targetname
+
+
+class ConfigOptionXRefRole(XRefRole):
+ """
+ Cross-referencing role for configuration options (adds an index entry).
+ """
+
+ def result_nodes(self, document, env, node, is_ref):
+ if not is_ref:
+ return [node], []
+ varname = node['reftarget']
+ tgtid = 'index-%s' % env.new_serialno('index')
+ indexnode = addnodes.index()
+ indexnode['entries'] = [
+ ('single', varname, tgtid, varname),
+ ('single', _('configuration option; %s') % varname, tgtid, varname)
+ ]
+ targetnode = nodes.target('', '', ids=[tgtid])
+ document.note_explicit_target(targetnode)
+ return [indexnode, targetnode, node], []
+
+
+class ConfigFileDomain(Domain):
+ name = 'config'
+ label = 'Config'
+
+ object_types = {
+ 'option': ObjType(l_('config option'), 'option'),
+ 'section': ObjType(l_('config section'), 'section'),
+ }
+ directives = {
+ 'option': ConfigOption,
+ 'section': ConfigSection,
+ }
+ roles = {
+ 'option': ConfigOptionXRefRole(),
+ 'section': ConfigSectionXRefRole(),
+ }
+
+ initial_data = {
+ 'objects': {}, # (type, name) -> docname, labelid
+ }
+
+ def clear_doc(self, docname):
+ for key, (fn, _) in self.data['objects'].items():
+ if fn == docname:
+ del self.data['objects'][key]
+
+ def resolve_xref(self, env, fromdocname, builder,
+ typ, target, node, contnode):
+ docname, labelid = self.data['objects'].get((typ, target), ('', ''))
+ if not docname:
+ return None
+ else:
+ return make_refnode(builder, fromdocname, docname,
+ labelid, contnode)
+
+ def get_objects(self):
+ for (type, name), info in self.data['objects'].iteritems():
+ yield (name, name, type, info[0], info[1],
+ self.object_types[type].attrs['searchprio'])
+
+def setup(app):
+ app.add_domain(ConfigFileDomain)
+
diff --git a/phpMyAdmin/doc/_ext/configext.pyc b/phpMyAdmin/doc/_ext/configext.pyc
new file mode 100644
index 0000000..a46d58f
Binary files /dev/null and b/phpMyAdmin/doc/_ext/configext.pyc differ
diff --git a/phpMyAdmin/doc/conf.py b/phpMyAdmin/doc/conf.py
new file mode 100644
index 0000000..3c2ba48
--- /dev/null
+++ b/phpMyAdmin/doc/conf.py
@@ -0,0 +1,292 @@
+# -*- coding: utf-8 -*-
+#
+# phpMyAdmin documentation build configuration file, created by
+# sphinx-quickstart on Wed Sep 26 14:04:48 2012.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext")))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['configext']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'phpMyAdmin'
+copyright = u'2012 - 2013, The phpMyAdmin devel team'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '4.1.7'
+# The full version, including alpha/beta/rc tags.
+release = version
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build', 'html', 'doctrees']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# " v documentation".
+#html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'phpMyAdmindoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+ ('index', 'phpMyAdmin.tex', u'phpMyAdmin Documentation',
+ u'The phpMyAdmin devel team', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ ('index', 'phpmyadmin', u'phpMyAdmin Documentation',
+ [u'The phpMyAdmin devel team'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ ('index', 'phpMyAdmin', u'phpMyAdmin Documentation',
+ u'The phpMyAdmin devel team', 'phpMyAdmin', 'One line description of project.',
+ 'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+
+# -- Options for Epub output ---------------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = u'phpMyAdmin'
+epub_author = u'The phpMyAdmin devel team'
+epub_publisher = u'The phpMyAdmin devel team'
+epub_copyright = copyright
+
+# The language of the text. It defaults to the language option
+# or en if the language is not set.
+#epub_language = ''
+
+# The scheme of the identifier. Typical schemes are ISBN or URL.
+#epub_scheme = ''
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#epub_identifier = ''
+
+# A unique identification for the text.
+#epub_uid = ''
+
+# A tuple containing the cover image and cover page html template filenames.
+#epub_cover = ()
+
+# HTML files that should be inserted before the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_pre_files = []
+
+# HTML files shat should be inserted after the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_post_files = []
+
+# A list of files that should not be packed into the epub file.
+#epub_exclude_files = []
+
+# The depth of the table of contents in toc.ncx.
+#epub_tocdepth = 3
+
+# Allow duplicate toc entries.
+#epub_tocdup = True
+
+# Highlight PHP without starting `_).
+
+ A good test is to browse a table, edit a row and save it. There should be
+ an error message if phpMyAdmin is having trouble auto–detecting the correct
+ value. If you get an error that this must be set or if the autodetect code
+ fails to detect your path, please post a bug report on our bug tracker so
+ we can improve the code.
+
+ .. seealso:: :ref:`faq1_40`
+
+.. config:option:: $cfg['PmaNoRelation_DisableWarning']
+
+ :type: boolean
+ :default: false
+
+ Starting with version 2.3.0 phpMyAdmin offers a lot of features to
+ work with master / foreign – tables (see :config:option:`$cfg['Servers'][$i]['pmadb']`).
+
+ If you tried to set this
+ up and it does not work for you, have a look on the :guilabel:`Structure` page
+ of one database where you would like to use it. You will find a link
+ that will analyze why those features have been disabled.
+
+ If you do not want to use those features set this variable to ``true`` to
+ stop this message from appearing.
+
+.. config:option:: $cfg['SuhosinDisableWarning']
+
+ :type: boolean
+ :default: false
+
+ A warning is displayed on the main page if Suhosin is detected.
+
+ You can set this parameter to ``true`` to stop this message from appearing.
+
+.. config:option:: $cfg['McryptDisableWarning']
+
+ :type: boolean
+ :default: false
+
+ Disable the default warning that is displayed if mcrypt is missing for
+ cookie authentication.
+
+ You can set this parameter to ``true`` to stop this message from appearing.
+
+.. config:option:: $cfg['ServerLibraryDifference_DisableWarning']
+
+ :type: boolean
+ :default: false
+
+ A warning is displayed on the main page if there is a difference
+ between the MySQL library and server version.
+
+ You can set this parameter to ``true`` to stop this message from appearing.
+
+.. config:option:: $cfg['ReservedWordDisableWarning']
+
+ :type: boolean
+ :default: false
+
+ This warning is displayed on the Structure page of a table if one or more
+ column names match with words which are MySQL reserved.
+
+ If you want to turn off this warning, you can set it to ``true`` and
+ warning will no longer be displayed.
+
+.. config:option:: $cfg['TranslationWarningThreshold']
+
+ :type: integer
+ :default: 80
+
+ Show warning about incomplete translations on certain threshold.
+
+.. config:option:: $cfg['SendErrorReports']
+
+ :type: string
+ :default: ``'ask'``
+
+ Sets the default behavior for JavaScript error reporting.
+
+ Whenever an error is detected in the JavaScript execution, an error report
+ may be sent to the phpMyAdmin team if the user agrees.
+
+ The default setting of ``'ask'`` will ask the user everytime there is a new
+ error report. However you can set this parameter to ``'always'`` to send error
+ reports without asking for confirmation or you can set it to ``'never'`` to
+ never send error reports.
+
+ This directive is available both in the configuration file and in users
+ preferences. If the person in charge of a multi-user installation prefers
+ to disable this feature for all users, a value of ``'never'`` should be
+ set, and the :config:option:`$cfg['UserprefsDisallow']` directive should
+ contain ``'SendErrorReports'`` in one of its array values.
+
+.. config:option:: $cfg['AllowThirdPartyFraming']
+
+ :type: boolean
+ :default: false
+
+ Setting this to ``true`` allows phpMyAdmin to be included inside a frame,
+ and is a potential security hole allowing cross-frame scripting attacks or
+ clickjacking.
+
+Server connection settings
+--------------------------
+
+.. config:option:: $cfg['Servers']
+
+ :type: array
+ :default: one server array with settings listed bellow
+
+ Since version 1.4.2, phpMyAdmin supports the administration of multiple
+ MySQL servers. Therefore, a :config:option:`$cfg['Servers']`-array has been
+ added which contains the login information for the different servers. The
+ first :config:option:`$cfg['Servers'][$i]['host']` contains the hostname of
+ the first server, the second :config:option:`$cfg['Servers'][$i]['host']`
+ the hostname of the second server, etc. In
+ :file:`libraries/config.default.php`, there is only one section for server
+ definition, however you can put as many as you need in
+ :file:`config.inc.php`, copy that block or needed parts (you don't have to
+ define all settings, just those you need to change).
+
+ .. note::
+
+ The :config:option:`$cfg['Servers']` array starts with
+ $cfg['Servers'][1]. Do not use $cfg['Servers'][0]. If you want more
+ than one server, just copy following section (including $i
+ incrementation) serveral times. There is no need to define full server
+ array, just define values you need to change.
+
+
+.. config:option:: $cfg['Servers'][$i]['host']
+
+ :type: string
+ :default: ``'localhost'``
+
+ The hostname or :term:`IP` address of your $i-th MySQL-server. E.g.
+ ``localhost``.
+
+ Possible values are:
+
+ * hostname, e.g., ``'localhost'`` or ``'mydb.example.org'``
+ * IP address, e.g., ``'127.0.0.1'`` or ``'192.168.10.1'``
+ * dot - ``'.'``, i.e., use named pipes on windows systems
+ * empty - ``''``, disables this server
+
+ .. note::
+
+ phpMyAdmin supports connecting to MySQL servers reachable via IPv6 only.
+ To connect to an IPv6 MySQL server, enter its IPv6 address in this field.
+
+.. config:option:: $cfg['Servers'][$i]['port']
+
+ :type: string
+ :default: ``''``
+
+ The port-number of your $i-th MySQL-server. Default is 3306 (leave
+ blank).
+
+ .. note::
+
+ If you use ``localhost`` as the hostname, MySQL ignores this port number
+ and connects with the socket, so if you want to connect to a port
+ different from the default port, use ``127.0.0.1`` or the real hostname
+ in :config:option:`$cfg['Servers'][$i]['host']`.
+
+.. config:option:: $cfg['Servers'][$i]['socket']
+
+ :type: string
+ :default: ``''``
+
+ The path to the socket to use. Leave blank for default. To determine
+ the correct socket, check your MySQL configuration or, using the
+ :command:`mysql` command–line client, issue the ``status`` command. Among the
+ resulting information displayed will be the socket used.
+
+.. config:option:: $cfg['Servers'][$i]['ssl']
+
+ :type: boolean
+ :default: false
+
+ Whether to enable SSL for the connection between phpMyAdmin and the MySQL server.
+
+ When using :config:option:`$cfg['Servers'][$i]['extension']` = ``'mysql'``,
+ none of the remaining ``'ssl...'`` configuration options apply.
+
+ We strongly recommend using :config:option:`$cfg['Servers'][$i]['extension']` = ``'mysqli'``
+ when using this option.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_key']
+
+ :type: string
+ :default: NULL
+
+ Path to the key file when using SSL for connecting to the MySQL server.
+
+ For example:
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['ssl_key'] = '/etc/mysql/server-key.pem';
+
+.. config:option:: $cfg['Servers'][$i]['ssl_cert']
+
+ :type: string
+ :default: NULL
+
+ Path to the cert file when using SSL for connecting to the MySQL server.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_ca']
+
+ :type: string
+ :default: NULL
+
+ Path to the CA file when using SSL for connecting to the MySQL server.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_ca_path']
+
+ :type: string
+ :default: NULL
+
+ Directory containing trusted SSL CA certificates in PEM format.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_ciphers']
+
+ :type: string
+ :default: NULL
+
+ List of allowable ciphers for SSL connections to the MySQL server.
+
+.. config:option:: $cfg['Servers'][$i]['connect_type']
+
+ :type: string
+ :default: ``'tcp'``
+
+ What type connection to use with the MySQL server. Your options are
+ ``'socket'`` and ``'tcp'``. It defaults to tcp as that is nearly guaranteed
+ to be available on all MySQL servers, while sockets are not supported on
+ some platforms. To use the socket mode, your MySQL server must be on the
+ same machine as the Web server.
+
+.. config:option:: $cfg['Servers'][$i]['extension']
+
+ :type: string
+ :default: ``'mysqli'``
+
+ What php MySQL extension to use for the connection. Valid options are:
+
+ ``mysql``
+ The classic MySQL extension.
+
+ ``mysqli``
+ The improved MySQL extension. This extension became available with PHP
+ 5.0.0 and is the recommended way to connect to a server running MySQL
+ 4.1.x or newer.
+
+.. config:option:: $cfg['Servers'][$i]['compress']
+
+ :type: boolean
+ :default: false
+
+ Whether to use a compressed protocol for the MySQL server connection
+ or not (experimental).
+
+.. _controlhost:
+.. config:option:: $cfg['Servers'][$i]['controlhost']
+
+ :type: string
+ :default: ``''``
+
+ Permits to use an alternate host to hold the configuration storage
+ data.
+
+.. _controlport:
+.. config:option:: $cfg['Servers'][$i]['controlport']
+
+ :type: string
+ :default: ``''``
+
+ Permits to use an alternate port to connect to the host that
+ holds the configuration storage.
+
+.. _controluser:
+.. config:option:: $cfg['Servers'][$i]['controluser']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['Servers'][$i]['controlpass']
+
+ :type: string
+ :default: ``''``
+
+ This special account is used for 2 distinct purposes: to make possible all
+ relational features (see :config:option:`$cfg['Servers'][$i]['pmadb']`) and,
+ for a MySQL server running with ``--skip-show-database``, to enable a
+ multi-user installation (:term:`HTTP` or cookie
+ authentication mode).
+
+ When using :term:`HTTP` or
+ cookie authentication modes (or 'config' authentication mode since phpMyAdmin
+ 2.2.1), you need to supply the details of a MySQL account that has ``SELECT``
+ privilege on the *mysql.user (all columns except "Password")*, *mysql.db (all
+ columns)* and *mysql.tables\_priv (all columns except "Grantor" and
+ "Timestamp")* tables. This account is used to check what databases the user
+ will see at login.
+
+ .. versionchanged:: 2.2.5
+ those were called ``stduser`` and ``stdpass``
+
+ .. seealso:: :ref:`setup`, :ref:`authentication_modes`
+
+.. config:option:: $cfg['Servers'][$i]['auth_type']
+
+ :type: string
+ :default: ``'cookie'``
+
+ Whether config or cookie or :term:`HTTP` or signon authentication should be
+ used for this server.
+
+ * 'config' authentication (``$auth_type = 'config'``) is the plain old
+ way: username and password are stored in :file:`config.inc.php`.
+ * 'cookie' authentication mode (``$auth_type = 'cookie'``) as
+ introduced in 2.2.3 allows you to log in as any valid MySQL user with
+ the help of cookies. Username and password are stored in cookies
+ during the session and password is deleted when it ends. This can also
+ allow you to log in in arbitrary server if :config:option:`$cfg['AllowArbitraryServer']` enabled.
+ * 'http' authentication (was
+ called 'advanced' in previous versions and can be written also as
+ 'http') (``$auth_type = 'http';'``) as introduced in 1.3.0 allows you to log in as any
+ valid MySQL user via HTTP-Auth.
+ * 'signon' authentication mode (``$auth_type = 'signon'``) as
+ introduced in 2.10.0 allows you to log in from prepared PHP session
+ data or using supplied PHP script. This is useful for implementing
+ single signon from another application. Sample way how to seed session
+ is in signon example: :file:`examples/signon.php`. There is also
+ alternative example using OpenID - :file:`examples/openid.php` and example
+ for scripts based solution - :file:`examples/signon-script.php`. You need
+ to configure :config:option:`$cfg['Servers'][$i]['SignonSession']` or
+ :config:option:`$cfg['Servers'][$i]['SignonScript']` and
+ :config:option:`$cfg['Servers'][$i]['SignonURL']` to use this authentication
+ method.
+
+ .. seealso:: :ref:`authentication_modes`
+
+.. _servers_auth_http_realm:
+.. config:option:: $cfg['Servers'][$i]['auth_http_realm']
+
+ :type: string
+ :default: ``''``
+
+ When using auth\_type = ``http``, this field allows to define a custom
+ :term:`HTTP` Basic Auth Realm which will be displayed to the user. If not
+ explicitly specified in your configuration, a string combined of
+ "phpMyAdmin " and either :config:option:`$cfg['Servers'][$i]['verbose']` or
+ :config:option:`$cfg['Servers'][$i]['host']` will be used.
+
+.. _servers_auth_swekey_config:
+.. config:option:: $cfg['Servers'][$i]['auth_swekey_config']
+
+ :type: string
+ :default: ``''``
+
+ The name of the file containing :ref:`swekey` ids and login names for hardware
+ authentication. Leave empty to deactivate this feature.
+
+.. _servers_user:
+.. config:option:: $cfg['Servers'][$i]['user']
+
+ :type: string
+ :default: ``'root'``
+
+.. config:option:: $cfg['Servers'][$i]['password']
+
+ :type: string
+ :default: ``''``
+
+ When using :config:option:`$cfg['Servers'][$i]['auth_type']` set to
+ 'config', this is the user/password-pair which phpMyAdmin will use to
+ connect to the MySQL server. This user/password pair is not needed when
+ :term:`HTTP` or cookie authentication is used
+ and should be empty.
+
+.. _servers_nopassword:
+.. config:option:: $cfg['Servers'][$i]['nopassword']
+
+ :type: boolean
+ :default: false
+
+ Allow attempt to log in without password when a login with password
+ fails. This can be used together with http authentication, when
+ authentication is done some other way and phpMyAdmin gets user name
+ from auth and uses empty password for connecting to MySQL. Password
+ login is still tried first, but as fallback, no password method is
+ tried.
+
+.. _servers_only_db:
+.. config:option:: $cfg['Servers'][$i]['only_db']
+
+ :type: string or array
+ :default: ``''``
+
+ If set to a (an array of) database name(s), only this (these)
+ database(s) will be shown to the user. Since phpMyAdmin 2.2.1,
+ this/these database(s) name(s) may contain MySQL wildcards characters
+ ("\_" and "%"): if you want to use literal instances of these
+ characters, escape them (I.E. use ``'my\_db'`` and not ``'my_db'``).
+
+ This setting is an efficient way to lower the server load since the
+ latter does not need to send MySQL requests to build the available
+ database list. But **it does not replace the privileges rules of the
+ MySQL database server**. If set, it just means only these databases
+ will be displayed but **not that all other databases can't be used.**
+
+ An example of using more that one database:
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['only_db'] = array('db1', 'db2');
+
+ .. versionchanged:: 4.0.0
+ Previous versions permitted to specify the display order of
+ the database names via this directive.
+
+.. config:option:: $cfg['Servers'][$i]['hide_db']
+
+ :type: string
+ :default: ``''``
+
+ Regular expression for hiding some databases from unprivileged users.
+ This only hides them from listing, but a user is still able to access
+ them (using, for example, the SQL query area). To limit access, use
+ the MySQL privilege system. For example, to hide all databases
+ starting with the letter "a", use
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['hide_db'] = '^a';
+
+ and to hide both "db1" and "db2" use
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['hide_db'] = '^(db1|db2)$';
+
+ More information on regular expressions can be found in the `PCRE
+ pattern syntax
+ `_ portion
+ of the PHP reference manual.
+
+.. config:option:: $cfg['Servers'][$i]['verbose']
+
+ :type: string
+ :default: ``''``
+
+ Only useful when using phpMyAdmin with multiple server entries. If
+ set, this string will be displayed instead of the hostname in the
+ pull-down menu on the main page. This can be useful if you want to
+ show only certain databases on your system, for example. For HTTP
+ auth, all non-US-ASCII characters will be stripped.
+
+.. config:option:: $cfg['Servers'][$i]['pmadb']
+
+ :type: string
+ :default: ``''``
+
+ The name of the database containing the phpMyAdmin configuration
+ storage.
+
+ See the :ref:`linked-tables` section in this document to see the benefits of
+ this feature, and for a quick way of creating this database and the needed
+ tables.
+
+ If you are the only user of this phpMyAdmin installation, you can use your
+ current database to store those special tables; in this case, just put your
+ current database name in :config:option:`$cfg['Servers'][$i]['pmadb']`. For a
+ multi-user installation, set this parameter to the name of your central
+ database containing the phpMyAdmin configuration storage.
+
+.. _bookmark:
+.. config:option:: $cfg['Servers'][$i]['bookmarktable']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.2.0 phpMyAdmin allows users to bookmark queries. This
+ can be useful for queries you often run. To allow the usage of this
+ functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * enter the table name in :config:option:`$cfg['Servers'][$i]['bookmarktable']`
+
+
+.. _relation:
+.. config:option:: $cfg['Servers'][$i]['relation']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.2.4 you can describe, in a special 'relation' table,
+ which column is a key in another table (a foreign key). phpMyAdmin
+ currently uses this to:
+
+ * make clickable, when you browse the master table, the data values that
+ point to the foreign table;
+ * display in an optional tool-tip the "display column" when browsing the
+ master table, if you move the mouse to a column containing a foreign
+ key (use also the 'table\_info' table); (see :ref:`faqdisplay`)
+ * in edit/insert mode, display a drop-down list of possible foreign keys
+ (key value and "display column" are shown) (see :ref:`faq6_21`)
+ * display links on the table properties page, to check referential
+ integrity (display missing foreign keys) for each described key;
+ * in query-by-example, create automatic joins (see :ref:`faq6_6`)
+ * enable you to get a :term:`PDF` schema of
+ your database (also uses the table\_coords table).
+
+ The keys can be numeric or character.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the relation table name in :config:option:`$cfg['Servers'][$i]['relation']`
+ * now as normal user open phpMyAdmin and for each one of your tables
+ where you want to use this feature, click :guilabel:`Structure/Relation view/`
+ and choose foreign columns.
+
+ .. note::
+
+ In the current version, ``master_db`` must be the same as ``foreign_db``.
+ Those columns have been put in future development of the cross-db
+ relations.
+
+.. _table_info:
+.. config:option:: $cfg['Servers'][$i]['table_info']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.3.0 you can describe, in a special 'table\_info'
+ table, which column is to be displayed as a tool-tip when moving the
+ cursor over the corresponding key. This configuration variable will
+ hold the name of this special table. To allow the usage of this
+ functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['table\_info']` (e.g.
+ ``pma__table_info``)
+ * then for each table where you want to use this feature, click
+ "Structure/Relation view/Choose column to display" to choose the
+ column.
+
+ .. seealso:: :ref:`faqdisplay`
+
+.. _table_coords:
+.. config:option:: $cfg['Servers'][$i]['table_coords']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['Servers'][$i]['pdf_pages']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.3.0 you can have phpMyAdmin create :term:`PDF` pages
+ showing the relations between your tables. To do this it needs two tables
+ "pdf\_pages" (storing information about the available :term:`PDF` pages)
+ and "table\_coords" (storing coordinates where each table will be placed on
+ a :term:`PDF` schema output). You must be using the "relation" feature.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the correct table names in
+ :config:option:`$cfg['Servers'][$i]['table\_coords']` and
+ :config:option:`$cfg['Servers'][$i]['pdf\_pages']`
+
+ .. seealso:: :ref:`faqpdf`.
+
+.. _col_com:
+.. config:option:: $cfg['Servers'][$i]['column_info']
+
+ :type: string
+ :default: ``''``
+
+ This part requires a content update! Since release 2.3.0 you can
+ store comments to describe each column for each table. These will then
+ be shown on the "printview".
+
+ Starting with release 2.5.0, comments are consequently used on the table
+ property pages and table browse view, showing up as tool-tips above the
+ column name (properties page) or embedded within the header of table in
+ browse view. They can also be shown in a table dump. Please see the
+ relevant configuration directives later on.
+
+ Also new in release 2.5.0 is a MIME- transformation system which is also
+ based on the following table structure. See :ref:`transformations` for
+ further information. To use the MIME- transformation system, your
+ column\_info table has to have the three new columns 'mimetype',
+ 'transformation', 'transformation\_options'.
+
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['column\_info']` (e.g.
+ ``pma__column_info``)
+ * to update your PRE-2.5.0 Column\_comments Table use this: and
+ remember that the Variable in :file:`config.inc.php` has been renamed from
+ :config:option:`$cfg['Servers'][$i]['column\_comments']` to
+ :config:option:`$cfg['Servers'][$i]['column\_info']`
+
+ .. code-block:: mysql
+
+ ALTER TABLE `pma__column_comments`
+ ADD `mimetype` VARCHAR( 255 ) NOT NULL,
+ ADD `transformation` VARCHAR( 255 ) NOT NULL,
+ ADD `transformation_options` VARCHAR( 255 ) NOT NULL;
+
+.. _history:
+.. config:option:: $cfg['Servers'][$i]['history']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.5.0 you can store your :term:`SQL` history, which means all
+ queries you entered manually into the phpMyAdmin interface. If you don't
+ want to use a table-based history, you can use the JavaScript-based
+ history.
+
+ Using that, all your history items are deleted when closing the window.
+ Using :config:option:`$cfg['QueryHistoryMax']` you can specify an amount of
+ history items you want to have on hold. On every login, this list gets cut
+ to the maximum amount.
+
+ The query history is only available if JavaScript is enabled in
+ your browser.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['history']` (e.g.
+ ``pma__history``)
+
+.. _recent:
+.. config:option:: $cfg['Servers'][$i]['recent']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.5.0 you can show recently used tables in the
+ navigation panel. It helps you to jump across table directly, without
+ the need to select the database, and then select the table. Using
+ :config:option:`$cfg['NumRecentTables']` you can configure the maximum number
+ of recent tables shown. When you select a table from the list, it will jump to
+ the page specified in :config:option:`$cfg['NavigationTreeDefaultTabTable']`.
+
+
+ Without configuring the storage, you can still access the recently used tables,
+ but it will disappear after you logout.
+
+ To allow the usage of this functionality persistently:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['recent']` (e.g.
+ ``pma__recent``)
+
+.. _table_uiprefs:
+.. config:option:: $cfg['Servers'][$i]['table_uiprefs']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.5.0 phpMyAdmin can be configured to remember several
+ things (sorted column :config:option:`$cfg['RememberSorting']`, column order,
+ and column visibility from a database table) for browsing tables. Without
+ configuring the storage, these features still can be used, but the values will
+ disappear after you logout.
+
+ To allow the usage of these functionality persistently:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['table\_uiprefs']` (e.g.
+ ``pma__table_uiprefs``)
+
+.. _configurablemenus:
+.. config:option:: $cfg['Servers'][$i]['users']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['Servers'][$i]['usergroups']
+
+ :type: string
+ :default: ``''``
+
+ Since release 4.1.0 you can create different user groups with menu items
+ attached to them. Users can be assigned to these groups and the logged in
+ user would only see menu items configured to the usergroup he is assigned to.
+ To do this it needs two tables "usergroups" (storing allowed menu items for each
+ user group) and "users" (storing users and their assignments to user groups).
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the correct table names in
+ :config:option:`$cfg['Servers'][$i]['users']` (e.g. ``pma__users``) and
+ :config:option:`$cfg['Servers'][$i]['usergroups']` (e.g. ``pma__usergroups``)
+
+.. _navigationhiding:
+.. config:option:: $cfg['Servers'][$i]['navigationhiding']
+
+ :type: string
+ :default: ``''``
+
+ Since release 4.1.0 you can hide/show items in the navigation tree.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['navigationhiding']` (e.g.
+ ``pma__navigationhiding``)
+
+.. _tracking:
+.. config:option:: $cfg['Servers'][$i]['tracking']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.3.x a tracking mechanism is available. It helps you to
+ track every :term:`SQL` command which is
+ executed by phpMyAdmin. The mechanism supports logging of data
+ manipulation and data definition statements. After enabling it you can
+ create versions of tables.
+
+ The creation of a version has two effects:
+
+ * phpMyAdmin saves a snapshot of the table, including structure and
+ indexes.
+ * phpMyAdmin logs all commands which change the structure and/or data of
+ the table and links these commands with the version number.
+
+ Of course you can view the tracked changes. On the :guilabel:`Tracking`
+ page a complete report is available for every version. For the report you
+ can use filters, for example you can get a list of statements within a date
+ range. When you want to filter usernames you can enter \* for all names or
+ you enter a list of names separated by ','. In addition you can export the
+ (filtered) report to a file or to a temporary database.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['tracking']` (e.g.
+ ``pma__tracking``)
+
+
+.. _tracking2:
+.. config:option:: $cfg['Servers'][$i]['tracking_version_auto_create']
+
+ :type: boolean
+ :default: false
+
+ Whether the tracking mechanism creates versions for tables and views
+ automatically.
+
+ If this is set to true and you create a table or view with
+
+ * CREATE TABLE ...
+ * CREATE VIEW ...
+
+ and no version exists for it, the mechanism will create a version for
+ you automatically.
+
+.. _tracking3:
+.. config:option:: $cfg['Servers'][$i]['tracking_default_statements']
+
+ :type: string
+ :default: ``'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,DROP INDEX,INSERT,UPDATE,DELETE,TRUNCATE,REPLACE,CREATE VIEW,ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE'``
+
+ Defines the list of statements the auto-creation uses for new
+ versions.
+
+.. _tracking4:
+.. config:option:: $cfg['Servers'][$i]['tracking_add_drop_view']
+
+ :type: boolean
+ :default: true
+
+ Whether a DROP VIEW IF EXISTS statement will be added as first line to
+ the log when creating a view.
+
+.. _tracking5:
+.. config:option:: $cfg['Servers'][$i]['tracking_add_drop_table']
+
+ :type: boolean
+ :default: true
+
+ Whether a DROP TABLE IF EXISTS statement will be added as first line
+ to the log when creating a table.
+
+.. _tracking6:
+.. config:option:: $cfg['Servers'][$i]['tracking_add_drop_database']
+
+ :type: boolean
+ :default: true
+
+ Whether a DROP DATABASE IF EXISTS statement will be added as first
+ line to the log when creating a database.
+
+.. _userconfig:
+.. config:option:: $cfg['Servers'][$i]['userconfig']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.4.x phpMyAdmin allows users to set most preferences by
+ themselves and store them in the database.
+
+ If you don't allow for storing preferences in
+ :config:option:`$cfg['Servers'][$i]['pmadb']`, users can still personalize
+ phpMyAdmin, but settings will be saved in browser's local storage, or, it
+ is is unavailable, until the end of session.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['userconfig']`
+
+
+
+.. _designer_coords:
+.. config:option:: $cfg['Servers'][$i]['designer_coords']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.10.0 a Designer interface is available; it permits to
+ visually manage the relations.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['designer\_coords']`
+ (e.g. ``pma__designer_coords``)
+
+
+
+.. config:option:: $cfg['Servers'][$i]['MaxTableUiprefs']
+
+ :type: integer
+ :default: 100
+
+ Maximum number of rows saved in
+ :config:option:`$cfg['Servers'][$i]['table_uiprefs']` table.
+
+ When tables are dropped or renamed,
+ :config:option:`$cfg['Servers'][$i]['table_uiprefs']` may contain invalid data
+ (referring to tables which no longer exist). We only keep this number of newest
+ rows in :config:option:`$cfg['Servers'][$i]['table_uiprefs']` and automatically
+ delete older rows.
+
+.. config:option:: $cfg['Servers'][$i]['AllowRoot']
+
+ :type: boolean
+ :default: true
+
+ Whether to allow root access. This is just a shortcut for the
+ :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` below.
+
+.. config:option:: $cfg['Servers'][$i]['AllowNoPassword']
+
+ :type: boolean
+ :default: false
+
+ Whether to allow logins without a password. The default value of
+ ``false`` for this parameter prevents unintended access to a MySQL
+ server with was left with an empty password for root or on which an
+ anonymous (blank) user is defined.
+
+.. _servers_allowdeny_order:
+.. config:option:: $cfg['Servers'][$i]['AllowDeny']['order']
+
+ :type: string
+ :default: ``''``
+
+ If your rule order is empty, then :term:`IP`
+ authorization is disabled.
+
+ If your rule order is set to
+ ``'deny,allow'`` then the system applies all deny rules followed by
+ allow rules. Access is allowed by default. Any client which does not
+ match a Deny command or does match an Allow command will be allowed
+ access to the server.
+
+ If your rule order is set to ``'allow,deny'``
+ then the system applies all allow rules followed by deny rules. Access
+ is denied by default. Any client which does not match an Allow
+ directive or does match a Deny directive will be denied access to the
+ server.
+
+ If your rule order is set to ``'explicit'``, authorization is
+ performed in a similar fashion to rule order 'deny,allow', with the
+ added restriction that your host/username combination **must** be
+ listed in the *allow* rules, and not listed in the *deny* rules. This
+ is the **most** secure means of using Allow/Deny rules, and was
+ available in Apache by specifying allow and deny rules without setting
+ any order.
+
+ Please also see :config:option:`$cfg['TrustedProxies']` for
+ detecting IP address behind proxies.
+
+.. _servers_allowdeny_rules:
+.. config:option:: $cfg['Servers'][$i]['AllowDeny']['rules']
+
+ :type: array of strings
+ :default: array()
+
+ The general format for the rules is as such:
+
+ .. code-block:: none
+
+ <'allow' | 'deny'> [from]
+
+ If you wish to match all users, it is possible to use a ``'%'`` as a
+ wildcard in the *username* field.
+
+ There are a few shortcuts you can
+ use in the *ipmask* field as well (please note that those containing
+ SERVER\_ADDRESS might not be available on all webservers):
+
+ .. code-block:: none
+
+
+ 'all' -> 0.0.0.0/0
+ 'localhost' -> 127.0.0.1/8
+ 'localnetA' -> SERVER_ADDRESS/8
+ 'localnetB' -> SERVER_ADDRESS/16
+ 'localnetC' -> SERVER_ADDRESS/24
+
+ Having an empty rule list is equivalent to either using ``'allow %
+ from all'`` if your rule order is set to ``'deny,allow'`` or ``'deny %
+ from all'`` if your rule order is set to ``'allow,deny'`` or
+ ``'explicit'``.
+
+ For the :term:`IP address` matching
+ system, the following work:
+
+ * ``xxx.xxx.xxx.xxx`` (an exact :term:`IP address`)
+ * ``xxx.xxx.xxx.[yyy-zzz]`` (an :term:`IP address` range)
+ * ``xxx.xxx.xxx.xxx/nn`` (CIDR, Classless Inter-Domain Routing type :term:`IP` addresses)
+
+ But the following does not work:
+
+ * ``xxx.xxx.xxx.xx[yyy-zzz]`` (partial :term:`IP` address range)
+
+ For :term:`IPv6` addresses, the following work:
+
+ * ``xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx`` (an exact :term:`IPv6` address)
+ * ``xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:[yyyy-zzzz]`` (an :term:`IPv6` address range)
+ * ``xxxx:xxxx:xxxx:xxxx/nn`` (CIDR, Classless Inter-Domain Routing type :term:`IPv6` addresses)
+
+ But the following does not work:
+
+ * ``xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx[yyy-zzz]`` (partial :term:`IPv6` address range)
+
+.. config:option:: $cfg['Servers'][$i]['SignonScript']
+
+ :type: string
+ :default: ``''``
+
+ Name of PHP script to be sourced and executed to obtain login
+ credentials. This is alternative approach to session based single
+ signon. The script needs to provide function
+ ``get_login_credentials`` which returns list of username and
+ password, accepting single parameter of existing username (can be
+ empty). See :file:`examples/signon-script.php` for an example.
+
+.. config:option:: $cfg['Servers'][$i]['SignonSession']
+
+ :type: string
+ :default: ``''``
+
+ Name of session which will be used for signon authentication method.
+ You should use something different than ``phpMyAdmin``, because this
+ is session which phpMyAdmin uses internally. Takes effect only if
+ :config:option:`$cfg['Servers'][$i]['SignonScript']` is not configured.
+
+.. config:option:: $cfg['Servers'][$i]['SignonURL']
+
+ :type: string
+ :default: ``''``
+
+ :term:`URL` where user will be redirected
+ to log in for signon authentication method. Should be absolute
+ including protocol.
+
+.. config:option:: $cfg['Servers'][$i]['LogoutURL']
+
+ :type: string
+ :default: ``''``
+
+ :term:`URL` where user will be redirected
+ after logout (doesn't affect config authentication method). Should be
+ absolute including protocol.
+
+.. config:option:: $cfg['Servers'][$i]['StatusCacheDatabases']
+
+ :type: array of strings
+ :default: array()
+
+ Enables caching of ``TABLE STATUS`` outputs for specific databases on
+ this server (in some cases ``TABLE STATUS`` can be very slow, so you
+ may want to cache it). APC is used (if the PHP extension is available,
+ if not, this setting is ignored silently). You have to provide
+ :config:option:`$cfg['Servers'][$i]['StatusCacheLifetime']`.
+
+.. config:option:: $cfg['Servers'][$i]['StatusCacheLifetime']
+
+ :type: integer
+ :default: 0
+
+ Lifetime in seconds of the ``TABLE STATUS`` cache if
+ :config:option:`$cfg['Servers'][$i]['StatusCacheDatabases']` is used.
+
+Generic settings
+----------------
+
+.. config:option:: $cfg['ServerDefault']
+
+ :type: integer
+ :default: 1
+
+ If you have more than one server configured, you can set
+ :config:option:`$cfg['ServerDefault']` to any one of them to autoconnect to that
+ server when phpMyAdmin is started, or set it to 0 to be given a list
+ of servers without logging in.
+
+ If you have only one server configured,
+ :config:option:`$cfg['ServerDefault']` MUST be set to that server.
+
+.. config:option:: $cfg['VersionCheck']
+
+ :type: boolean
+ :default: true
+
+ Enables check for latest versions using javascript on main phpMyAdmin
+ page.
+
+ .. note::
+
+ This setting can be adjusted by your vendor.
+
+.. config:option:: $cfg['ProxyUrl']
+
+ :type: string
+ :default: ""
+
+ The url of the proxy to be used when phpmyadmin needs to access the outside
+ intenet such as when retrieving the latest version info or submitting error
+ reports. You need this if the server where phpMyAdmin is installed does not
+ have direct access to the internet.
+ The format is: "hostname:portnumber"
+
+.. config:option:: $cfg['ProxyUser']
+
+ :type: string
+ :default: ""
+
+ The username for authenticating with the proxy. By default, no
+ authentication is performed. If a username is supplied, Basic
+ Authentication will be performed. No other types of authentication
+ are currently supported.
+
+.. config:option:: $cfg['ProxyPass']
+
+ :type: string
+ :default: ""
+
+ The password for authenticating with the proxy.
+
+.. config:option:: $cfg['MaxDbList']
+
+ :type: integer
+ :default: 100
+
+ The maximum number of database names to be displayed in the main panel's
+ database list.
+
+.. config:option:: $cfg['MaxTableList']
+
+ :type: integer
+ :default: 250
+
+ The maximum number of table names to be displayed in the main panel's
+ list (except on the Export page). This limit is also enforced in the
+ navigation panel when in Light mode.
+
+.. config:option:: $cfg['ShowHint']
+
+ :type: boolean
+ :default: true
+
+ Whether or not to show hints (for example, hints when hovering over
+ table headers).
+
+.. config:option:: $cfg['MaxCharactersInDisplayedSQL']
+
+ :type: integer
+ :default: 1000
+
+ The maximum number of characters when a :term:`SQL` query is displayed. The
+ default limit of 1000 should be correct to avoid the display of tons of
+ hexadecimal codes that represent BLOBs, but some users have real
+ :term:`SQL` queries that are longer than 1000 characters. Also, if a
+ query's length exceeds this limit, this query is not saved in the history.
+
+.. config:option:: $cfg['PersistentConnections']
+
+ :type: boolean
+ :default: false
+
+ Whether `persistent connections `_ should be used or not. Works with
+ following extensions:
+
+ * mysql (`mysql\_pconnect `_),
+ * mysqli (requires PHP 5.3.0 or newer, `more information
+ `_).
+
+.. config:option:: $cfg['ForceSSL']
+
+ :type: boolean
+ :default: false
+
+ Whether to force using https while accessing phpMyAdmin.
+
+ .. note::
+
+ In some setups (like separate SSL proxy or load balancer) you might
+ have to set :config:option:`$cfg['PmaAbsoluteUri']` for correct
+ redirection.
+
+.. config:option:: $cfg['ExecTimeLimit']
+
+ :type: integer [number of seconds]
+ :default: 300
+
+ Set the number of seconds a script is allowed to run. If seconds is
+ set to zero, no time limit is imposed. This setting is used while
+ importing/exporting dump files but has
+ no effect when PHP is running in safe mode.
+
+.. config:option:: $cfg['SessionSavePath']
+
+ :type: string
+ :default: ``''``
+
+ Path for storing session data (`session\_save\_path PHP parameter
+ `_).
+
+.. config:option:: $cfg['MemoryLimit']
+
+ :type: string [number of bytes]
+ :default: ``'-1'``
+
+ Set the number of bytes a script is allowed to allocate. If set to
+ ``'-1'``, no limit is imposed.
+
+ This setting is used while importing/exporting dump files and at some other
+ places in phpMyAdmin so you definitely don't want to put here a too low
+ value. It has no effect when PHP is running in safe mode.
+
+ You can also use any string as in :file:`php.ini`, eg. '16M'. Ensure you
+ don't omit the suffix (16 means 16 bytes!)
+
+.. config:option:: $cfg['SkipLockedTables']
+
+ :type: boolean
+ :default: false
+
+ Mark used tables and make it possible to show databases with locked
+ tables (since MySQL 3.23.30).
+
+.. config:option:: $cfg['ShowSQL']
+
+ :type: boolean
+ :default: true
+
+ Defines whether :term:`SQL` queries
+ generated by phpMyAdmin should be displayed or not.
+
+.. config:option:: $cfg['RetainQueryBox']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the :term:`SQL` query box
+ should be kept displayed after its submission.
+
+.. config:option:: $cfg['CodemirrorEnable']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to use a Javascript code editor for SQL query boxes.
+ CodeMirror provides syntax highlighting and line numbers. However,
+ middle-clicking for pasting the clipboard contents in some Linux
+ distributions (such as Ubuntu) is not supported by all browsers.
+
+.. config:option:: $cfg['AllowUserDropDatabase']
+
+ :type: boolean
+ :default: false
+
+ Defines whether normal users (non-administrator) are allowed to delete
+ their own database or not. If set as false, the link :guilabel:`Drop
+ Database` will not be shown, and even a ``DROP DATABASE mydatabase`` will
+ be rejected. Quite practical for :term:`ISP` 's with many customers.
+
+ .. note::
+
+ This limitation of :term:`SQL` queries is not
+ as strict as when using MySQL privileges. This is due to nature of
+ :term:`SQL` queries which might be quite
+ complicated. So this choice should be viewed as help to avoid accidental
+ dropping rather than strict privilege limitation.
+
+.. config:option:: $cfg['Confirm']
+
+ :type: boolean
+ :default: true
+
+ Whether a warning ("Are your really sure...") should be displayed when
+ you're about to lose data.
+
+.. config:option:: $cfg['UseDbSearch']
+
+ :type: boolean
+ :default: true
+
+ Define whether the "search string inside database" is enabled or not.
+
+.. config:option:: $cfg['IgnoreMultiSubmitErrors']
+
+ :type: boolean
+ :default: false
+
+ Define whether phpMyAdmin will continue executing a multi-query
+ statement if one of the queries fails. Default is to abort execution.
+
+Cookie authentication options
+-----------------------------
+
+.. config:option:: $cfg['blowfish_secret']
+
+ :type: string
+ :default: ``''``
+
+ The "cookie" auth\_type uses blowfish algorithm to encrypt the
+ password. If you are using the "cookie" auth\_type, enter here a
+ random passphrase of your choice. It will be used internally by the
+ blowfish algorithm: you won’t be prompted for this passphrase. There
+ is no maximum length for this secret.
+
+ .. versionchanged:: 3.1.0
+ Since version 3.1.0 phpMyAdmin can generate this on the fly, but it
+ makes a bit weaker security as this generated secret is stored in
+ session and furthermore it makes impossible to recall user name from
+ cookie.
+
+.. config:option:: $cfg['LoginCookieRecall']
+
+ :type: boolean
+ :default: true
+
+ Define whether the previous login should be recalled or not in cookie
+ authentication mode.
+
+ This is automatically disabled if you do not have
+ configured :config:option:`$cfg['blowfish_secret']`.
+
+.. config:option:: $cfg['LoginCookieValidity']
+
+ :type: integer [number of seconds]
+ :default: 1440
+
+ Define how long a login cookie is valid. Please note that php
+ configuration option `session.gc\_maxlifetime
+ `_ might limit session validity and if the session is lost,
+ the login cookie is also invalidated. So it is a good idea to set
+ ``session.gc_maxlifetime`` at least to the same value of
+ :config:option:`$cfg['LoginCookieValidity']`.
+
+.. config:option:: $cfg['LoginCookieStore']
+
+ :type: integer [number of seconds]
+ :default: 0
+
+ Define how long login cookie should be stored in browser. Default 0
+ means that it will be kept for existing session. This is recommended
+ for not trusted environments.
+
+.. config:option:: $cfg['LoginCookieDeleteAll']
+
+ :type: boolean
+ :default: true
+
+ If enabled (default), logout deletes cookies for all servers,
+ otherwise only for current one. Setting this to false makes it easy to
+ forget to log out from other server, when you are using more of them.
+
+.. _AllowArbitraryServer:
+.. config:option:: $cfg['AllowArbitraryServer']
+
+ :type: boolean
+ :default: false
+
+ If enabled, allows you to log in to arbitrary servers using cookie
+ authentication.
+
+ .. note::
+
+ Please use this carefully, as this may allow users access to MySQL servers
+ behind the firewall where your :term:`HTTP`
+ server is placed.
+
+.. config:option:: $cfg['CaptchaLoginPublicKey']
+
+ :type: string
+ :default: ``''``
+
+ The public key for the reCaptcha service that can be obtain from
+ http://www.google.com/recaptcha.
+
+ reCaptcha will be then used in :ref:`cookie`.
+
+.. config:option:: $cfg['CaptchaLoginPrivateKey']
+
+ :type: string
+ :default: ``''``
+
+ The private key for the reCaptcha service that can be obtain from
+ http://www.google.com/recaptcha.
+
+ reCaptcha will be then used in :ref:`cookie`.
+
+Navigation panel setup
+----------------------
+
+.. config:option:: $cfg['MaxNavigationItems']
+
+ :type: integer
+ :default: 250
+
+ The number of items that can be displayed on each page of the
+ navigation tree.
+
+.. config:option:: $cfg['NavigationTreeEnableGrouping']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to group the databases based on a common prefix
+ in their name :config:option:`$cfg['NavigationTreeDbSeparator']`.
+
+.. config:option:: $cfg['NavigationTreeDbSeparator']
+
+ :type: string or array
+ :default: ``'_'``
+
+ The string used to separate the parts of the database name when
+ showing them in a tree. Alternatively you can specify more strings in
+ an array and all of them will be used as a separator.
+
+.. config:option:: $cfg['NavigationTreeTableSeparator']
+
+ :type: string or array
+ :default: ``'__'``
+
+ Defines a string to be used to nest table spaces. This means if you have
+ tables like ``first__second__third`` this will be shown as a three-level
+ hierarchy like: first > second > third. If set to false or empty, the
+ feature is disabled. NOTE: You should not use this separator at the
+ beginning or end of a table name or multiple times after another without
+ any other characters in between.
+
+.. config:option:: $cfg['NavigationTreeTableLevel']
+
+ :type: integer
+ :default: 1
+
+ Defines how many sublevels should be displayed when splitting up
+ tables by the above separator.
+
+.. config:option:: $cfg['NumRecentTables']
+
+ :type: integer
+ :default: 10
+
+ The maximum number of recently used tables shown in the navigation
+ panel. Set this to 0 (zero) to disable the listing of recent tables.
+
+.. config:option:: $cfg['NavigationDisplayLogo']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not to display the phpMyAdmin logo at the top of
+ the navigation panel.
+
+.. config:option:: $cfg['NavigationLogoLink']
+
+ :type: string
+ :default: ``'index.php'``
+
+ Enter :term:`URL` where logo in the
+ navigation panel will point to. For use especially with self made
+ theme which changes this.
+
+.. config:option:: $cfg['NavigationLogoLinkWindow']
+
+ :type: string
+ :default: ``'main'``
+
+ Whether to open the linked page in the main window (``main``) or in a
+ new one (``new``). Note: use ``new`` if you are linking to
+ ``phpmyadmin.net``.
+
+.. config:option:: $cfg['NavigationTreeDisplayItemFilterMinimum']
+
+ :type: integer
+ :default: 30
+
+ Defines the minimum number of items (tables, views, routines and
+ events) to display a JavaScript filter box above the list of items in
+ the navigation tree.
+
+ To disable the filter completely some high number can be used (e.g. 9999)
+
+.. config:option:: $cfg['NavigationTreeDisplayDbFilterMinimum']
+
+ :type: integer
+ :default: 30
+
+ Defines the minimum number of databases to display a JavaScript filter
+ box above the list of databases in the navigation tree.
+
+ To disable the filter completely some high number can be used
+ (e.g. 9999)
+
+.. config:option:: $cfg['NavigationDisplayServers']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not to display a server choice at the top of the
+ navigation panel.
+
+.. config:option:: $cfg['DisplayServersList']
+
+ :type: boolean
+ :default: false
+
+ Defines whether to display this server choice as links instead of in a
+ drop-down.
+
+.. config:option:: $cfg['NavigationTreeDefaultTabTable']
+
+ :type: string
+ :default: ``'tbl_structure.php'``
+
+ Defines the tab displayed by default when clicking the small icon next
+ to each table name in the navigation panel. Possible values:
+
+ * ``tbl_structure.php``
+ * ``tbl_sql.php``
+ * ``tbl_select.php``
+ * ``tbl_change.php``
+ * ``sql.php``
+
+Main panel
+----------
+
+.. config:option:: $cfg['ShowStats']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not to display space usage and statistics about
+ databases and tables. Note that statistics requires at least MySQL
+ 3.23.3 and that, at this date, MySQL doesn't return such information
+ for Berkeley DB tables.
+
+.. config:option:: $cfg['ShowServerInfo']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to display detailed server information on main page.
+ You can additionally hide more information by using
+ :config:option:`$cfg['Servers'][$i]['verbose']`.
+
+.. config:option:: $cfg['ShowPhpInfo']
+
+ :type: boolean
+ :default: false
+
+.. config:option:: $cfg['ShowChgPassword']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['ShowCreateDb']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to display the :guilabel:`PHP information` and
+ :guilabel:`Change password` links and form for creating database or not at
+ the starting main (right) frame. This setting does not check MySQL commands
+ entered directly.
+
+ Please note that to block the usage of ``phpinfo()`` in scripts, you have to
+ put this in your :file:`php.ini`:
+
+ .. code-block:: ini
+
+ disable_functions = phpinfo()
+
+ Also note that enabling the :guilabel:`Change password` link has no effect
+ with config authentication mode: because of the hard coded password value
+ in the configuration file, end users can't be allowed to change their
+ passwords.
+
+Database structure
+------------------
+
+.. config:option:: $cfg['ShowDbStructureCreation']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the database structure page (tables list) has a
+ "Creation" column that displays when each table was created.
+
+.. config:option:: $cfg['ShowDbStructureLastUpdate']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the database structure page (tables list) has a "Last
+ update" column that displays when each table was last updated.
+
+.. config:option:: $cfg['ShowDbStructureLastCheck']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the database structure page (tables list) has a "Last
+ check" column that displays when each table was last checked.
+
+.. config:option:: $cfg['HideStructureActions']
+
+ :type: boolean
+ :default: true
+
+ Defines whether the table structure actions are hidden under a "More"
+ drop-down.
+
+Browse mode
+-----------
+
+.. config:option:: $cfg['TableNavigationLinksMode']
+
+ :type: string
+ :default: ``'icons'``
+
+ Defines whether the table navigation links contain ``'icons'``, ``'text'``
+ or ``'both'``.
+
+.. config:option:: $cfg['ShowAll']
+
+ :type: boolean
+ :default: false
+
+ Defines whether a user should be displayed a "Show all" button in browse
+ mode or not in all cases. By default it is shown only on small tables (less
+ than 500 rows) to avoid performance issues while getting too many rows.
+
+.. config:option:: $cfg['MaxRows']
+
+ :type: integer
+ :default: 25
+
+ Number of rows displayed when browsing a result set and no LIMIT
+ clause is used. If the result set contains more rows, "Previous" and
+ "Next" links will be shown. Possible values: 25,50,100,250,500.
+
+.. config:option:: $cfg['Order']
+
+ :type: string
+ :default: ``'SMART'``
+
+ Defines whether columns are displayed in ascending (``ASC``) order, in
+ descending (``DESC``) order or in a "smart" (``SMART``) order - I.E.
+ descending order for columns of type TIME, DATE, DATETIME and
+ TIMESTAMP, ascending order else- by default.
+
+.. config:option:: $cfg['DisplayBinaryAsHex']
+
+ :type: boolean
+ :default: true
+
+ Defines whether the "Show binary contents as HEX" browse option is
+ ticked by default.
+
+.. config:option:: $cfg['GridEditing']
+
+ :type: string
+ :default: ``'double-click'``
+
+ Defines which action (``double-click`` or ``click``) triggers grid
+ editing. Can be deactived with the ``disabled`` value.
+
+.. config:option:: $cfg['SaveCellsAtOnce']
+
+ :type: boolean
+ :default: false
+
+ Defines whether or not to save all edited cells at once for grid
+ editing.
+
+Editing mode
+------------
+
+.. config:option:: $cfg['ProtectBinary']
+
+ :type: boolean or string
+ :default: ``'blob'``
+
+ Defines whether ``BLOB`` or ``BINARY`` columns are protected from
+ editing when browsing a table's content. Valid values are:
+
+ * ``false`` to allow editing of all columns;
+ * ``'blob'`` to allow editing of all columns except ``BLOBS``;
+ * ``'noblob'`` to disallow editing of all columns except ``BLOBS`` (the
+ opposite of ``'blob'``);
+ * ``'all'`` to disallow editing of all ``BINARY`` or ``BLOB`` columns.
+
+.. config:option:: $cfg['ShowFunctionFields']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not MySQL functions fields should be initially
+ displayed in edit/insert mode. Since version 2.10, the user can toggle
+ this setting from the interface.
+
+.. config:option:: $cfg['ShowFieldTypesInDataEditView']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not type fields should be initially displayed in
+ edit/insert mode. The user can toggle this setting from the interface.
+
+.. config:option:: $cfg['InsertRows']
+
+ :type: integer
+ :default: 2
+
+ Defines the maximum number of concurrent entries for the Insert page.
+
+.. config:option:: $cfg['ForeignKeyMaxLimit']
+
+ :type: integer
+ :default: 100
+
+ If there are fewer items than this in the set of foreign keys, then a
+ drop-down box of foreign keys is presented, in the style described by
+ the :config:option:`$cfg['ForeignKeyDropdownOrder']` setting.
+
+.. config:option:: $cfg['ForeignKeyDropdownOrder']
+
+ :type: array
+ :default: array('content-id', 'id-content')
+
+ For the foreign key drop-down fields, there are several methods of
+ display, offering both the key and value data. The contents of the
+ array should be one or both of the following strings: ``content-id``,
+ ``id-content``.
+
+Export and import settings
+--------------------------
+
+.. config:option:: $cfg['ZipDump']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['GZipDump']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['BZipDump']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to allow the use of zip/GZip/BZip2 compression when
+ creating a dump file
+
+.. config:option:: $cfg['CompressOnFly']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to allow on the fly compression for GZip/BZip2
+ compressed exports. This doesn't affect smaller dumps and allows users
+ to create larger dumps that won't otherwise fit in memory due to php
+ memory limit. Produced files contain more GZip/BZip2 headers, but all
+ normal programs handle this correctly.
+
+.. config:option:: $cfg['Export']
+
+ :type: array
+ :default: array(...)
+
+ In this array are defined default parameters for export, names of
+ items are similar to texts seen on export page, so you can easily
+ identify what they mean.
+
+.. config:option:: $cfg['Export']['method']
+
+ :type: string
+ :default: ``'quick'``
+
+ Defines how the export form is displayed when it loads. Valid values
+ are:
+
+ * ``quick`` to display the minimum number of options to configure
+ * ``custom`` to display every available option to configure
+ * ``custom-no-form`` same as ``custom`` but does not display the option
+ of using quick export
+
+
+
+.. config:option:: $cfg['Import']
+
+ :type: array
+ :default: array(...)
+
+ In this array are defined default parameters for import, names of
+ items are similar to texts seen on import page, so you can easily
+ identify what they mean.
+
+
+Tabs display settings
+---------------------
+
+.. config:option:: $cfg['TabsMode']
+
+ :type: string
+ :default: ``'both'``
+
+ Defines whether the menu tabs contain ``'icons'``, ``'text'`` or ``'both'``.
+
+.. config:option:: $cfg['ActionLinksMode']
+
+ :type: string
+ :default: ``'both'``
+
+ If set to ``icons``, will display icons instead of text for db and table
+ properties links (like :guilabel:`Browse`, :guilabel:`Select`,
+ :guilabel:`Insert`, ...). Can be set to ``'both'``
+ if you want icons AND text. When set to ``text``, will only show text.
+
+.. config:option:: $cfg['PropertiesNumColumns']
+
+ :type: integer
+ :default: 1
+
+ How many columns will be utilized to display the tables on the database
+ property view? When setting this to a value larger than 1, the type of the
+ database will be omitted for more display space.
+
+.. config:option:: $cfg['DefaultTabServer']
+
+ :type: string
+ :default: ``'index.php'``
+
+ Defines the tab displayed by default on server view. Possible values:
+
+ * ``main.php`` (recommended for multi-user setups)
+ * ``server_databases.php``,
+ * ``server_status.php``
+ * ``server_variables.php``
+ * ``server_privileges.php``
+
+.. config:option:: $cfg['DefaultTabDatabase']
+
+ :type: string
+ :default: ``'db_structure.php'``
+
+ Defines the tab displayed by default on database view. Possible
+ values:
+
+ * ``db_structure.php``
+ * ``db_sql.php``
+ * ``db_search.php``.
+
+.. config:option:: $cfg['DefaultTabTable']
+
+ :type: string
+ :default: ``'sql.php'``
+
+ Defines the tab displayed by default on table view. Possible values:
+
+ * ``tbl_structure.php``
+ * ``tbl_sql.php``
+ * ``tbl_select.php``
+ * ``tbl_change.php``
+ * ``sql.php``
+
+PDF Options
+-----------
+
+.. config:option:: $cfg['PDFPageSizes']
+
+ :type: array
+ :default: ``array('A3', 'A4', 'A5', 'letter', 'legal')``
+
+ Array of possible paper sizes for creating PDF pages.
+
+ You should never need to change this.
+
+.. config:option:: $cfg['PDFDefaultPageSize']
+
+ :type: string
+ :default: ``'A4'``
+
+ Default page size to use when creating PDF pages. Valid values are any
+ listed in :config:option:`$cfg['PDFPageSizes']`.
+
+Languages
+---------
+
+.. config:option:: $cfg['DefaultLang']
+
+ :type: string
+ :default: ``'en'``
+
+ Defines the default language to use, if not browser-defined or user-
+ defined. The corresponding language file needs to be in
+ locale/*code*/LC\_MESSAGES/phpmyadmin.mo.
+
+.. config:option:: $cfg['DefaultConnectionCollation']
+
+ :type: string
+ :default: ``'utf8_general_ci'``
+
+ Defines the default connection collation to use, if not user-defined.
+ See the `MySQL documentation `_ for list of possible values. This setting is
+ ignored when connected to Drizzle server.
+
+.. config:option:: $cfg['Lang']
+
+ :type: string
+ :default: not set
+
+ Force language to use. The corresponding language file needs to be in
+ locale/*code*/LC\_MESSAGES/phpmyadmin.mo.
+
+.. config:option:: $cfg['FilterLanguages']
+
+ :type: string
+ :default: ``''``
+
+ Limit list of available languages to those matching the given regular
+ expression. For example if you want only Czech and English, you should
+ set filter to ``'^(cs|en)'``.
+
+.. config:option:: $cfg['RecodingEngine']
+
+ :type: string
+ :default: ``'auto'``
+
+ You can select here which functions will be used for character set
+ conversion. Possible values are:
+
+ * auto - automatically use available one (first is tested iconv, then
+ recode)
+ * iconv - use iconv or libiconv functions
+ * recode - use recode\_string function
+ * mb - use mbstring extension
+ * none - disable encoding conversion
+
+ Enabled charset conversion activates a pull-down menu in the Export
+ and Import pages, to choose the character set when exporting a file.
+ The default value in this menu comes from
+ :config:option:`$cfg['Export']['charset']` and :config:option:`$cfg['Import']['charset']`.
+
+.. config:option:: $cfg['IconvExtraParams']
+
+ :type: string
+ :default: ``'//TRANSLIT'``
+
+ Specify some parameters for iconv used in charset conversion. See
+ `iconv documentation `_ for details. By default
+ ``//TRANSLIT`` is used, so that invalid characters will be
+ transliterated.
+
+.. config:option:: $cfg['AvailableCharsets']
+
+ :type: array
+ :default: array(..._
+
+ Available character sets for MySQL conversion. You can add your own
+ (any of supported by recode/iconv) or remove these which you don't
+ use. Character sets will be shown in same order as here listed, so if
+ you frequently use some of these move them to the top.
+
+Web server settings
+-------------------
+
+.. config:option:: $cfg['OBGzip']
+
+ :type: string/boolean
+ :default: ``'auto'``
+
+ Defines whether to use GZip output buffering for increased speed in
+ :term:`HTTP` transfers. Set to
+ true/false for enabling/disabling. When set to 'auto' (string),
+ phpMyAdmin tries to enable output buffering and will automatically
+ disable it if your browser has some problems with buffering. IE6 with
+ a certain patch is known to cause data corruption when having enabled
+ buffering.
+
+.. config:option:: $cfg['TrustedProxies']
+
+ :type: array
+ :default: array()
+
+ Lists proxies and HTTP headers which are trusted for
+ :config:option:`$cfg['Servers'][$i]['AllowDeny']['order']`. This list is by
+ default empty, you need to fill in some trusted proxy servers if you
+ want to use rules for IP addresses behind proxy.
+
+ The following example specifies that phpMyAdmin should trust a
+ HTTP\_X\_FORWARDED\_FOR (``X -Forwarded-For``) header coming from the proxy
+ 1.2.3.4:
+
+ .. code-block:: php
+
+ $cfg['TrustedProxies'] = array('1.2.3.4' => 'HTTP_X_FORWARDED_FOR');
+
+ The :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` directive uses the
+ client's IP address as usual.
+
+.. config:option:: $cfg['GD2Available']
+
+ :type: string
+ :default: ``'auto'``
+
+ Specifies whether GD >= 2 is available. If yes it can be used for MIME
+ transformations. Possible values are:
+
+ * auto - automatically detect
+ * yes - GD 2 functions can be used
+ * no - GD 2 function cannot be used
+
+.. config:option:: $cfg['CheckConfigurationPermissions']
+
+ :type: boolean
+ :default: true
+
+ We normally check the permissions on the configuration file to ensure
+ it's not world writable. However, phpMyAdmin could be installed on a
+ NTFS filesystem mounted on a non-Windows server, in which case the
+ permissions seems wrong but in fact cannot be detected. In this case a
+ sysadmin would set this parameter to ``false``.
+
+.. config:option:: $cfg['LinkLengthLimit']
+
+ :type: integer
+ :default: 1000
+
+ Limit for length of :term:`URL` in links. When length would be above this
+ limit, it is replaced by form with button. This is required as some web
+ servers (:term:`IIS`) have problems with long :term:`URL` .
+
+.. config:option:: $cfg['CSPAllow']
+
+ :type: string
+ :default: ``''``
+
+ Additional string to include in allowed script and image sources in Content
+ Security Policy header.
+
+ This can be useful when you want to include some external javascript files
+ in :file:`config.footer.inc.php` or :file:`config.header.inc.php`, which
+ would be normally not allowed by Content Security Policy.
+
+ To allow some sites, just list them within the string:
+
+ .. code-block:: php
+
+ $cfg['CSPAllow'] = 'example.com example.net';
+
+ .. versionadded:: 4.0.4
+
+.. config:option:: $cfg['DisableMultiTableMaintenance']
+
+ :type: boolean
+ :default: false
+
+ In the database Structure page, it's possible to mark some tables then
+ choose an operation like optimizing for many tables. This can slow
+ down a server; therefore, setting this to ``true`` prevents this kind
+ of multiple maintenance operation.
+
+Theme settings
+--------------
+
+.. config:option:: $cfg['NaviWidth']
+
+ :type: integer
+ :default:
+
+ Navigation panel width in pixels. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['NaviBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+.. config:option:: $cfg['MainBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+ The background styles used for both the frames. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['NaviPointerBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+.. config:option:: $cfg['NaviPointerColor']
+
+ :type: string [CSS color]
+ :default:
+
+ The style used for the pointer in the navigation panel. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['Border']
+
+ :type: integer
+ :default:
+
+ The size of a table's border. See :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['ThBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+.. config:option:: $cfg['ThColor']
+
+ :type: string [CSS color]
+ :default:
+
+ The style used for table headers. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. _cfg_BgcolorOne:
+.. config:option:: $cfg['BgOne']
+
+ :type: string [CSS color]
+ :default:
+
+ The color (HTML) #1 for table rows. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. _cfg_BgcolorTwo:
+.. config:option:: $cfg['BgTwo']
+
+ :type: string [CSS color]
+ :default:
+
+ The color (HTML) #2 for table rows. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['BrowsePointerBackground']
+
+ :type: string [CSS color]
+ :default:
+
+.. config:option:: $cfg['BrowsePointerColor']
+
+ :type: string [CSS color]
+ :default:
+
+.. config:option:: $cfg['BrowseMarkerBackground']
+
+ :type: string [CSS color]
+ :default:
+
+.. config:option:: $cfg['BrowseMarkerColor']
+
+ :type: string [CSS color]
+ :default:
+
+ The colors (HTML) uses for the pointer and the marker in browse mode.
+ The former feature highlights the row over which your mouse is passing
+ and the latter lets you visually mark/unmark rows by clicking on the
+ corresponding checkbox. Highlighting / marking a column is done by
+ hovering over / clicking the column's header (outside of the text).
+ See :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['FontFamily']
+
+ :type: string
+ :default:
+
+ You put here a valid CSS font family value, for example ``arial, sans-
+ serif``. See :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['FontFamilyFixed']
+
+ :type: string
+ :default:
+
+ You put here a valid CSS font family value, for example ``monospace``.
+ This one is used in textarea. See :file:`themes/themename/layout.inc.php`.
+
+Design customization
+--------------------
+
+.. config:option:: $cfg['NavigationTreePointerEnable']
+
+ :type: boolean
+ :default: true
+
+ A value of ``true`` activates the navi pointer.
+
+.. config:option:: $cfg['BrowsePointerEnable']
+
+ :type: boolean
+ :default: true
+
+ Whether to activate the browse pointer or not.
+
+.. config:option:: $cfg['BrowseMarkerEnable']
+
+ :type: boolean
+ :default: true
+
+ Whether to activate the browse marker or not.
+
+.. config:option:: $cfg['LimitChars']
+
+ :type: integer
+ :default: 50
+
+ Maximum number of characters shown in any non-numeric field on browse
+ view. Can be turned off by a toggle button on the browse page.
+
+.. config:option:: $cfg['RowActionLinks']
+
+ :type: string
+ :default: ``'left'``
+
+ Defines the place where table row links (Edit, Copy, Delete) would be
+ put when tables contents are displayed (you may have them displayed at
+ the left side, right side, both sides or nowhere). "left" and "right"
+ are parsed as "top" and "bottom" with vertical display mode.
+
+.. config:option:: $cfg['DefaultDisplay']
+
+ :type: string
+ :default: ``'horizonta'``
+
+ There are 3 display modes: horizontal, horizontalflipped and vertical.
+ Define which one is displayed by default. The first mode displays each
+ row on a horizontal line, the second rotates the headers by 90
+ degrees, so you can use descriptive headers even though columns only
+ contain small values and still print them out. The vertical mode sorts
+ each row on a vertical lineup.
+
+.. config:option:: $cfg['RememberSorting']
+
+ :type: boolean
+ :default: true
+
+ If enabled, remember the sorting of each table when browsing them.
+
+.. config:option:: $cfg['HeaderFlipType']
+
+ :type: string
+ :default: ``'auto'``
+
+ The HeaderFlipType can be set to 'auto', 'css' or 'fake'. When using
+ 'css' the rotation of the header for horizontalflipped is done via
+ CSS. The CSS transformation currently works only in Internet
+ Explorer.If set to 'fake' PHP does the transformation for you, but of
+ course this does not look as good as CSS. The 'auto' option enables
+ CSS transformation when browser supports it and use PHP based one
+ otherwise.
+
+.. config:option:: $cfg['ShowBrowseComments']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['ShowPropertyComments']
+
+ :type: boolean
+ :default: true
+
+ By setting the corresponding variable to ``true`` you can enable the
+ display of column comments in Browse or Property display. In browse
+ mode, the comments are shown inside the header. In property mode,
+ comments are displayed using a CSS-formatted dashed-line below the
+ name of the column. The comment is shown as a tool-tip for that
+ column.
+
+Text fields
+-----------
+
+.. config:option:: $cfg['CharEditing']
+
+ :type: string
+ :default: ``'input'``
+
+ Defines which type of editing controls should be used for CHAR and
+ VARCHAR columns. Possible values are:
+
+ * input - this allows to limit size of text to size of columns in MySQL,
+ but has problems with newlines in columns
+ * textarea - no problems with newlines in columns, but also no length
+ limitations
+
+.. config:option:: $cfg['MinSizeForInputField']
+
+ :type: integer
+ :default: 4
+
+ Defines the minimum size for input fields generated for CHAR and
+ VARCHAR columns.
+
+.. config:option:: $cfg['MaxSizeForInputField']
+
+ :type: integer
+ :default: 60
+
+ Defines the maximum size for input fields generated for CHAR and
+ VARCHAR columns.
+
+.. config:option:: $cfg['TextareaCols']
+
+ :type: integer
+ :default: 40
+
+.. config:option:: $cfg['TextareaRows']
+
+ :type: integer
+ :default: 15
+
+.. config:option:: $cfg['CharTextareaCols']
+
+ :type: integer
+ :default: 40
+
+.. config:option:: $cfg['CharTextareaRows']
+
+ :type: integer
+ :default: 2
+
+ Number of columns and rows for the textareas. This value will be
+ emphasized (\*2) for :term:`SQL` query
+ textareas and (\*1.25) for :term:`SQL`
+ textareas inside the query window.
+
+ The Char\* values are used for CHAR
+ and VARCHAR editing (if configured via :config:option:`$cfg['CharEditing']`).
+
+.. config:option:: $cfg['LongtextDoubleTextarea']
+
+ :type: boolean
+ :default: true
+
+ Defines whether textarea for LONGTEXT columns should have double size.
+
+.. config:option:: $cfg['TextareaAutoSelect']
+
+ :type: boolean
+ :default: false
+
+ Defines if the whole textarea of the query box will be selected on
+ click.
+
+
+SQL query box settings
+----------------------
+
+.. config:option:: $cfg['SQLQuery']['Edit']
+
+ :type: boolean
+ :default: true
+
+ Whether to display an edit link to change a query in any SQL Query
+ box.
+
+.. config:option:: $cfg['SQLQuery']['Explain']
+
+ :type: boolean
+ :default: true
+
+ Whether to display a link to explain a SELECT query in any SQL Query
+ box.
+
+.. config:option:: $cfg['SQLQuery']['ShowAsPHP']
+
+ :type: boolean
+ :default: true
+
+ Whether to display a link to wrap a query in PHP code in any SQL Query
+ box.
+
+.. config:option:: $cfg['SQLQuery']['Validate']
+
+ :type: boolean
+ :default: false
+
+ Whether to display a link to validate a query in any SQL Query box.
+
+ .. seealso:: :config:option:`$cfg['SQLValidator']`
+
+.. config:option:: $cfg['SQLQuery']['Refresh']
+
+ :type: boolean
+ :default: true
+
+ Whether to display a link to refresh a query in any SQL Query box.
+
+Web server upload/save/import directories
+-----------------------------------------
+
+.. config:option:: $cfg['UploadDir']
+
+ :type: string
+ :default: ``''``
+
+ The name of the directory where :term:`SQL` files have been uploaded by
+ other means than phpMyAdmin (for example, ftp). Those files are available
+ under a drop-down box when you click the database or table name, then the
+ Import tab.
+
+ If
+ you want different directory for each user, %u will be replaced with
+ username.
+
+ Please note that the file names must have the suffix ".sql"
+ (or ".sql.bz2" or ".sql.gz" if support for compressed formats is
+ enabled).
+
+ This feature is useful when your file is too big to be
+ uploaded via :term:`HTTP`, or when file
+ uploads are disabled in PHP.
+
+ .. note::
+
+ If PHP is running in safe mode, this directory must be owned by the same
+ user as the owner of the phpMyAdmin scripts. See also :ref:`faq1_16` for
+ alternatives.
+
+.. config:option:: $cfg['SaveDir']
+
+ :type: string
+ :default: ``''``
+
+ The name of the directory where dumps can be saved.
+
+ If you want different directory for each user, %u will be replaced with
+ username.
+
+ Please note that the directory must exist and has to be writable for
+ the user running webserver.
+
+ .. note::
+
+ If PHP is running in safe mode, this directory must be owned by the same
+ user as the owner of the phpMyAdmin scripts.
+
+.. config:option:: $cfg['TempDir']
+
+ :type: string
+ :default: ``''``
+
+ The name of the directory where temporary files can be stored.
+
+ This is needed for importing ESRI Shapefiles, see :ref:`faq6_30` and to
+ work around limitations of ``open_basedir`` for uploaded files, see
+ :ref:`faq1_11`.
+
+ If the directory where phpMyAdmin is installed is
+ subject to an ``open_basedir`` restriction, you need to create a
+ temporary directory in some directory accessible by the web server.
+ However for security reasons, this directory should be outside the
+ tree published by webserver. If you cannot avoid having this directory
+ published by webserver, place at least an empty :file:`index.html` file
+ there, so that directory listing is not possible.
+
+ This directory should have as strict permissions as possible as the only
+ user required to access this directory is the one who runs the webserver.
+ If you have root privileges, simply make this user owner of this directory
+ and make it accessible only by it:
+
+ .. code-block:: sh
+
+
+ chown www-data:www-data tmp
+ chmod 700 tmp
+
+ If you cannot change owner of the directory, you can achieve a similar
+ setup using :term:`ACL`:
+
+ .. code-block:: sh
+
+ chmod 700 tmp
+ setfacl -m "g:www-data:rwx" tmp
+ setfacl -d -m "g:www-data:rwx" tmp
+
+ If neither of above works for you, you can still make the directory
+ :command:`chmod 777`, but it might impose risk of other users on system
+ reading and writing data in this directory.
+
+Various display setting
+-----------------------
+
+.. config:option:: $cfg['ShowDisplayDirection']
+
+ :type: boolean
+ :default: false
+
+ Defines whether or not type display direction option is shown when
+ browsing a table.
+
+.. config:option:: $cfg['RepeatCells']
+
+ :type: integer
+ :default: 100
+
+ Repeat the headers every X cells, or 0 to deactivate.
+
+.. config:option:: $cfg['EditInWindow']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['QueryWindowWidth']
+
+ :type: integer
+ :default: 550
+
+.. config:option:: $cfg['QueryWindowHeight']
+
+ :type: integer
+ :default: 310
+
+.. config:option:: $cfg['QueryHistoryDB']
+
+ :type: boolean
+ :default: false
+
+.. config:option:: $cfg['QueryWindowDefTab']
+
+ :type: string
+ :default: ``'sql'``
+
+.. config:option:: $cfg['QueryHistoryMax']
+
+ :type: integer
+ :default: 25
+
+ All those variables affect the query window feature. A :term:`SQL` link or
+ icon is always displayed in the navigation panel. If JavaScript is enabled
+ in your browser, a click on this opens a distinct query window, which is a
+ direct interface to enter :term:`SQL` queries. Otherwise, the right panel
+ changes to display a query box.
+
+ The size of this query window can be customized with
+ :config:option:`$cfg['QueryWindowWidth']` and
+ :config:option:`$cfg['QueryWindowHeight']` - both integers for the size in
+ pixels. Note that normally, those parameters will be modified in
+ :file:`layout.inc.php`` for the theme you are using.
+
+ If :config:option:`$cfg['EditInWindow']` is set to true, a click on [Edit]
+ from the results page (in the :guilabel:`Showing Rows` section) opens the
+ query window and puts the current query inside it. If set to false,
+ clicking on the link puts the :term:`SQL` query
+ in the right panel's query box.
+
+ If :config:option:`$cfg['QueryHistoryDB']` is set to ``true``, all your
+ Queries are logged to a table, which has to be created by you (see
+ :config:option:`$cfg['Servers'][$i]['history']`). If set to false, all your
+ queries will be appended to the form, but only as long as your window is
+ opened they remain saved.
+
+ When using the JavaScript based query window, it will always get updated
+ when you click on a new table/db to browse and will focus if you click on
+ :guilabel:`Edit SQL` after using a query. You can suppress updating the
+ query window by checking the box :guilabel:`Do not overwrite this query
+ from outside the window` below the query textarea. Then you can browse
+ tables/databases in the background without losing the contents of the
+ textarea, so this is especially useful when composing a query with tables
+ you first have to look in. The checkbox will get automatically checked
+ whenever you change the contents of the textarea. Please uncheck the button
+ whenever you definitely want the query window to get updated even though
+ you have made alterations.
+
+ If :config:option:`$cfg['QueryHistoryDB']` is set to ``true`` you can
+ specify the amount of saved history items using
+ :config:option:`$cfg['QueryHistoryMax']`.
+
+ The query window also has a custom tabbed look to group the features.
+ Using the variable :config:option:`$cfg['QueryWindowDefTab']` you can
+ specify the default tab to be used when opening the query window. It can be
+ set to either ``sql``, ``files``, ``history`` or ``full``.
+
+.. config:option:: $cfg['BrowseMIME']
+
+ :type: boolean
+ :default: true
+
+ Enable :ref:`transformations`.
+
+.. config:option:: $cfg['MaxExactCount']
+
+ :type: integer
+ :default: 0
+
+ For InnoDB tables, determines for how large tables phpMyAdmin should
+ get the exact row count using ``SELECT COUNT``. If the approximate row
+ count as returned by ``SHOW TABLE STATUS`` is smaller than this value,
+ ``SELECT COUNT`` will be used, otherwise the approximate count will be
+ used.
+
+.. config:option:: $cfg['MaxExactCountViews']
+
+ :type: integer
+ :default: 0
+
+ For VIEWs, since obtaining the exact count could have an impact on
+ performance, this value is the maximum to be displayed, using a
+ ``SELECT COUNT ... LIMIT``. Setting this to 0 bypasses any row
+ counting.
+
+.. config:option:: $cfg['NaturalOrder']
+
+ :type: boolean
+ :default: true
+
+ Sorts database and table names according to natural order (for
+ example, t1, t2, t10). Currently implemented in the navigation panel
+ and in Database view, for the table list.
+
+.. config:option:: $cfg['InitialSlidersState']
+
+ :type: string
+ :default: ``'closed'``
+
+ If set to ``'closed'``, the visual sliders are initially in a closed
+ state. A value of ``'open'`` does the reverse. To completely disable
+ all visual sliders, use ``'disabled'``.
+
+.. config:option:: $cfg['UserprefsDisallow']
+
+ :type: array
+ :default: array()
+
+ Contains names of configuration options (keys in ``$cfg`` array) that
+ users can't set through user preferences. For possible values, refer
+ to :file:`libraries/config/user_preferences.forms.php`.
+
+.. config:option:: $cfg['UserprefsDeveloperTab']
+
+ :type: boolean
+ :default: false
+
+ Activates in the user preferences a tab containing options for
+ developers of phpMyAdmin.
+
+Page titles
+-----------
+
+.. config:option:: $cfg['TitleTable']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@'``
+
+.. config:option:: $cfg['TitleDatabase']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@'``
+
+.. config:option:: $cfg['TitleServer']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@'``
+
+.. config:option:: $cfg['TitleDefault']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ | @PHPMYADMIN@'``
+
+ Allows you to specify window's title bar. You can use :ref:`faq6_27`.
+
+Theme manager settings
+----------------------
+
+.. config:option:: $cfg['ThemePath']
+
+ :type: string
+ :default: ``'./themes'``
+
+ If theme manager is active, use this as the path of the subdirectory
+ containing all the themes.
+
+.. config:option:: $cfg['ThemeManager']
+
+ :type: boolean
+ :default: true
+
+ Enables user-selectable themes. See :ref:`faqthemes`.
+
+.. config:option:: $cfg['ThemeDefault']
+
+ :type: string
+ :default: ``'pmahomme'``
+
+ The default theme (a subdirectory under :config:option:`$cfg['ThemePath']`).
+
+.. config:option:: $cfg['ThemePerServer']
+
+ :type: boolean
+ :default: false
+
+ Whether to allow different theme for each server.
+
+Default queries
+---------------
+
+.. config:option:: $cfg['DefaultQueryTable']
+
+ :type: string
+ :default: ``'SELECT * FROM @TABLE@ WHERE 1'``
+
+.. config:option:: $cfg['DefaultQueryDatabase']
+
+ :type: string
+ :default: ``''``
+
+ Default queries that will be displayed in query boxes when user didn't
+ specify any. You can use standard :ref:`faq6_27`.
+
+SQL validator settings
+----------------------
+
+.. config:option:: $cfg['SQLValidator']
+
+ :type: array
+ :default: array(...)
+
+
+
+.. config:option:: $cfg['SQLValidator']['use']
+
+ :type: boolean
+ :default: false
+
+ phpMyAdmin now supports use of the `Mimer SQL Validator
+ `_ service, as originally
+ published on `Slashdot
+ `_. For
+ help in setting up your system to use the service, see the
+ :ref:`faqsqlvalidator`.
+
+.. config:option:: $cfg['SQLValidator']['username']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['SQLValidator']['password']
+
+ :type: string
+ :default: ``''``
+
+ The SOAP service allows you to log in with ``anonymous`` and any password,
+ so we use those by default. Instead, if you have an account with them, you
+ can put your login details here, and it will be used in place of the
+ anonymous login.
+
+MySQL settings
+--------------
+
+.. config:option:: $cfg['DefaultFunctions']
+
+ :type: array
+ :default: array(...)
+
+ Functions selected by default when inserting/changing row, Functions
+ are defined for meta types as (FUNC\_NUMBER, FUNC\_DATE, FUNC\_CHAR,
+ FUNC\_SPATIAL, FUNC\_UUID) and for ``first_timestamp``, which is used
+ for first timestamp column in table.
+
+
+Developer
+---------
+
+.. warning::
+
+ These settings might have huge effect on performance or security.
+
+.. config:option:: $cfg['DBG']
+
+ :type: array
+ :default: array(...)
+
+.. config:option:: $cfg['DBG']['sql']
+
+ :type: boolean
+ :default: false
+
+ Enable logging queries and execution times to be
+ displayed in the bottom of main page (right frame).
+
+.. config:option:: $cfg['DBG']['demo']
+
+ :type: boolean
+ :default: false
+
+ Enable to let server present itself as demo server.
+ This is used for .
+
+.. config:option:: $cfg['Error_Handler']['display']
+
+ :type: boolean
+ :default: false
+
+ Whether to display errors from PHP or not.
+
diff --git a/phpMyAdmin/doc/copyright.rst b/phpMyAdmin/doc/copyright.rst
new file mode 100644
index 0000000..cfcb863
--- /dev/null
+++ b/phpMyAdmin/doc/copyright.rst
@@ -0,0 +1,30 @@
+.. _copyright:
+
+Copyright
+=========
+
+.. code-block:: none
+
+ Copyright (C) 1998-2000 Tobias Ratschiller
+ Copyright (C) 2001-2013 Marc Delisle
+ Olivier Müller
+ Robin Johnson
+ Alexander M. Turek
+ Michal Čihař
+ Garvin Hicking
+ Michael Keck
+ Sebastian Mendel
+ [check credits for more details]
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 2, as
+published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see `http://www.gnu.org/licenses/
+ `_.
diff --git a/phpMyAdmin/doc/credits.rst b/phpMyAdmin/doc/credits.rst
new file mode 100644
index 0000000..61c7758
--- /dev/null
+++ b/phpMyAdmin/doc/credits.rst
@@ -0,0 +1,626 @@
+.. _credits:
+
+Credits
+=======
+
+
+Credits, in chronological order
++++++++++++++++++++++++++++++++
+
+* Tobias Ratschiller
+
+ * creator of the phpmyadmin project
+
+ * maintainer from 1998 to summer 2000
+
+* Marc Delisle
+
+ * multi-language version in December 1998
+
+ * various fixes and improvements
+
+ * :term:`SQL` analyser (most of it)
+
+ * current project maintainer
+
+ * maintains content on our website
+
+* Olivier Müller
+
+ * started SourceForge phpMyAdmin project in March 2001
+
+ * sync'ed different existing CVS trees with new features and bugfixes
+
+ * multi-language improvements, dynamic language selection
+
+ * many bugfixes and improvements
+
+* Loïc Chapeaux
+
+ * rewrote and optimized javascript, DHTML and DOM stuff
+
+ * rewrote the scripts so they fit the :term:`PEAR` coding standards and
+ generate XHTML1.0 and CSS2 compliant codes
+
+ * improved the language detection system
+
+ * many bugfixes and improvements
+
+* Robin Johnson
+
+ * database maintenance controls
+
+ * table type code
+
+ * Host authentication :term:`IP` Allow/Deny
+
+ * DB-based configuration (Not completed)
+
+ * :term:`SQL` parser and pretty-printer
+
+ * :term:`SQL` validator
+
+ * many bugfixes and improvements
+
+* Armel Fauveau
+
+ * bookmarks feature
+
+ * multiple dump feature
+
+ * gzip dump feature
+
+ * zip dump feature
+
+* Geert Lund
+
+ * various fixes
+
+ * moderator of the phpMyAdmin former users forum at phpwizard.net
+
+* Korakot Chaovavanich
+
+ * "insert as new row" feature
+
+* Pete Kelly
+
+ * rewrote and fix dump code
+
+ * bugfixes
+
+* Steve Alberty
+
+ * rewrote dump code for PHP4
+
+ * mySQL table statistics
+
+ * bugfixes
+
+* Benjamin Gandon
+
+ * main author of the version 2.1.0.1
+
+ * bugfixes
+
+* Alexander M. Turek
+
+ * MySQL 4.0 / 4.1 / 5.0 compatibility
+
+ * abstract database interface (PMA\_DBI) with MySQLi support
+
+ * privileges administration
+
+ * :term:`XML` exports
+
+ * various features and fixes
+
+ * German language file updates
+
+* Mike Beck
+
+ * automatic joins in QBE
+
+ * links column in printview
+
+ * Relation view
+
+* Michal Čihař
+
+ * enhanced index creation/display feature
+
+ * feature to use a different charset for HTML than for MySQL
+
+ * improvements of export feature
+
+ * various features and fixes
+
+ * Czech language file updates
+
+ * created current website for phpMyAdmin
+
+* Christophe Gesché from the "MySQL Form Generator for PHPMyAdmin"
+ (http://sf.net/projects/phpmysqlformgen/)
+
+ * suggested the patch for multiple table printviews
+
+* Garvin Hicking
+
+ * built the patch for vertical display of table rows
+
+ * built the Javascript based Query window + :term:`SQL` history
+
+ * Improvement of column/db comments
+
+ * (MIME)-Transformations for columns
+
+ * Use custom alias names for Databases in left frame
+
+ * hierarchical/nested table display
+
+ * :term:`PDF`-scratchboard for WYSIWYG-
+ distribution of :term:`PDF` relations
+
+ * new icon sets
+
+ * vertical display of column properties page
+
+ * some bugfixes, features, support, German language additions
+
+* Yukihiro Kawada
+
+ * japanese kanji encoding conversion feature
+
+* Piotr Roszatycki and Dan Wilson
+
+ * the Cookie authentication mode
+
+* Axel Sander
+
+ * table relation-links feature
+
+* Maxime Delorme
+
+ * :term:`PDF` schema output, thanks also to
+ Olivier Plathey for the "FPDF" library (see ), Steven
+ Wittens for the "UFPDF" library (see ) and
+ Nicola Asuni for the "TCPDF" library (see ).
+
+* Olof Edlund
+
+ * :term:`SQL` validator server
+
+* Ivan R. Lanin
+
+ * phpMyAdmin logo (until June 2004)
+
+* Mike Cochrane
+
+ * blowfish library from the Horde project (withdrawn in release 4.0)
+
+* Marcel Tschopp
+
+ * mysqli support
+
+ * many bugfixes and improvements
+
+* Nicola Asuni (Tecnick.com)
+
+ * TCPDF library (`http://www.tcpdf.org `_)
+
+* Michael Keck
+
+ * redesign for 2.6.0
+
+ * phpMyAdmin sailboat logo (June 2004)
+
+* Mathias Landhäußer
+
+ * Representation at conferences
+
+* Sebastian Mendel
+
+ * interface improvements
+
+ * various bugfixes
+
+* Ivan A Kirillov
+
+ * new relations Designer
+
+* Raj Kissu Rajandran (Google Summer of Code 2008)
+
+ * BLOBstreaming support (withdrawn in release 4.0)
+
+* Piotr Przybylski (Google Summer of Code 2008, 2010 and 2011)
+
+ * improved setup script
+
+ * user preferences
+
+ * Drizzle support
+
+* Derek Schaefer (Google Summer of Code 2009)
+
+ * Improved the import system
+
+* Alexander Rutkowski (Google Summer of Code 2009)
+
+ * Tracking mechanism
+
+* Zahra Naeem (Google Summer of Code 2009)
+
+ * Synchronization feature (removed in release 4.0)
+
+* Tomáš Srnka (Google Summer of Code 2009)
+
+ * Replication support
+
+* Muhammad Adnan (Google Summer of Code 2010)
+
+ * Relation schema export to multiple formats
+
+* Lori Lee (Google Summer of Code 2010)
+
+ * User interface improvements
+
+ * ENUM/SET editor
+
+ * Simplified interface for export/import
+
+* Ninad Pundalik (Google Summer of Code 2010)
+
+ * AJAXifying the interface
+
+* Martynas Mickevičius (Google Summer of Code 2010)
+
+ * Charts
+
+* Barrie Leslie
+
+ * BLOBstreaming support with PBMS PHP extension (withdrawn in release
+ 4.0)
+
+* Ankit Gupta (Google Summer of Code 2010)
+
+ * Visual query builder
+
+* Madhura Jayaratne (Google Summer of Code 2011)
+
+ * OpenGIS support
+
+* Ammar Yasir (Google Summer of Code 2011)
+
+ * Zoom search
+
+* Aris Feryanto (Google Summer of Code 2011)
+
+ * Browse-mode improvements
+
+* Thilanka Kaushalya (Google Summer of Code 2011)
+
+ * AJAXification
+
+* Tyron Madlener (Google Summer of Code 2011)
+
+ * Query statistics and charts for the status page
+
+* Zarubin Stas (Google Summer of Code 2011)
+
+ * Automated testing
+
+* Rouslan Placella (Google Summer of Code 2011 and 2012)
+
+ * Improved support for Stored Routines, Triggers and Events
+
+ * Italian translation updates
+
+ * Removal of frames, new navigation
+
+* Dieter Adriaenssens
+
+ * Various bugfixes
+
+ * Dutch translation updates
+
+* Alex Marin (Google Summer of Code 2012)
+
+ * New plugins and properties system
+
+* Thilina Buddika Abeyrathna (Google Summer of Code 2012)
+
+ * Refactoring
+
+* Atul Pratap Singh (Google Summer of Code 2012)
+
+ * Refactoring
+
+* Chanaka Indrajith (Google Summer of Code 2012)
+
+ * Refactoring
+
+* Yasitha Pandithawatta (Google Summer of Code 2012)
+
+ * Automated testing
+
+* Jim Wigginton (phpseclib.sourceforge.net)
+
+ * phpseclib
+
+* Bin Zu (Google Summer of Code 2013)
+
+ * Refactoring
+
+* Supun Nakandala (Google Summer of Code 2013)
+
+ * Refactoring
+
+* Mohamed Ashraf (Google Summer of Code 2013)
+
+ * AJAX error reporting
+
+* Adam Kang (Google Summer of Code 2013)
+
+ * Automated testing
+
+* Ayush Chaudhary (Google Summer of Code 2013)
+
+ * Automated testing
+
+* Kasun Chathuranga (Google Summer of Code 2013)
+
+ * Interface improvements
+
+
+And also to the following people who have contributed minor changes,
+enhancements, bugfixes or support for a new language since version
+2.1.0:
+
+Bora Alioglu, Ricardo ?, Sven-Erik Andersen, Alessandro Astarita,
+Péter Bakondy, Borges Botelho, Olivier Bussier, Neil Darlow, Mats
+Engstrom, Ian Davidson, Laurent Dhima, Kristof Hamann, Thomas Kläger,
+Lubos Klokner, Martin Marconcini, Girish Nair, David Nordenberg,
+Andreas Pauley, Bernard M. Piller, Laurent Haas, "Sakamoto", Yuval
+Sarna, www.securereality.com.au, Alexis Soulard, Alvar Soome, Siu Sun,
+Peter Svec, Michael Tacelosky, Rachim Tamsjadi, Kositer Uros, Luís V.,
+Martijn W. van der Lee, Algis Vainauskas, Daniel Villanueva, Vinay,
+Ignacio Vazquez-Abrams, Chee Wai, Jakub Wilk, Thomas Michael
+Winningham, Vilius Zigmantas, "Manuzhai".
+
+
+Translators
++++++++++++
+
+Following people have contributed to translation of phpMyAdmin:
+
+* Arabic
+
+ * Abdullah Al-Saedi
+
+* Bulgarian
+
+ * stoyanster
+
+* Catalan
+
+ * Xavier Navarro
+
+* Czech
+
+ * Michal Čihař
+
+* Danish
+
+ * opensource
+ * Jørgen Thomsen
+
+* German
+
+ * mrbendig
+ * torsten.funck
+ * Sven Strickroth
+ * typo3
+ * Jo Michael
+
+* Greek
+
+ * Panagiotis Papazoglou
+
+* English (United Kingdom)
+
+ * Robert Readman
+
+* Spanish
+
+ * Matías Bellone
+
+* French
+
+ * Marc Delisle
+
+* Hindi
+
+ * u4663530
+ * rsedwardian
+
+* Hungarian
+
+ * gergo314
+
+* Italian
+
+ * Rouslan Placella
+
+* Japanese
+
+ * Yuichiro
+
+* Lithuanian
+
+ * Kęstutis
+
+* Norwegian Bokmål
+
+ * Sven-Erik Andersen
+
+* Dutch
+
+ * Dieter Adriaenssens
+ * Herman van Rink
+
+* Polish
+
+ * Stanisław Krukowski
+ * Marcin Kozioł
+
+* Portuguese
+
+ * JoaoTMDias
+
+* Portuguese (Brazil)
+
+ * wiltave
+ * emerson4br
+
+* Romanian
+
+ * alexukf
+
+* Russian
+
+ * Victor Volkov
+
+* Sinhala
+
+ * Madhura Jayaratne
+
+* Slovak
+
+ * Martin Lacina
+
+* Slovenian
+
+ * Domen
+
+* Swedish
+
+ * stefan
+
+* Tamil
+
+ * ysajeepan
+
+* Telugu
+
+ * veeven
+
+* Thai
+
+ * kanitchet
+
+* Turkish
+
+ * Burak Yavuz
+
+* Uighur
+
+ * gheni
+
+* Ukrainian
+
+ * typim
+ * oleg-ilnytskyi
+
+* Urdu
+
+ * Mehbooob Khan
+
+* Simplified Chinese
+
+ * shanyan baishui
+
+* Traditional Chinese
+
+ * star
+
+Documentation translators
++++++++++++++++++++++++++
+
+Following people have contributed to translation of phpMyAdmin documentation:
+
+* Czech
+
+ * Michal Čihař
+
+* Greek
+
+ * Panagiotis Papazoglou
+
+* English (United Kingdom)
+
+ * Robert Readman
+
+* French
+
+ * Cédric Corazza
+
+* Japanese
+
+ * Yuichiro Takahashi
+
+* Polish
+
+ * Stanisław Krukowski
+
+* Portuguese (Brazil)
+
+ * mjaning
+
+* Slovenian
+
+ * Domen
+
+Original Credits of Version 2.1.0
++++++++++++++++++++++++++++++++++
+
+This work is based on Peter Kuppelwieser's MySQL-Webadmin. It was his
+idea to create a web-based interface to MySQL using PHP3. Although I
+have not used any of his source-code, there are some concepts I've
+borrowed from him. phpMyAdmin was created because Peter told me he
+wasn't going to further develop his (great) tool.
+
+Thanks go to
+
+* Amalesh Kempf who contributed the
+ code for the check when dropping a table or database. He also
+ suggested that you should be able to specify the primary key on
+ tbl\_create.php3. To version 1.1.1 he contributed the ldi\_\*.php3-set
+ (Import text-files) as well as a bug-report. Plus many smaller
+ improvements.
+* Jan Legenhausen : He made many of the changes that
+ were introduced in 1.3.0 (including quite significant ones like the
+ authentication). For 1.4.1 he enhanced the table-dump feature. Plus
+ bug-fixes and help.
+* Marc Delisle made phpMyAdmin
+ language-independent by outsourcing the strings to a separate file. He
+ also contributed the French translation.
+* Alexandr Bravo who contributed
+ tbl\_select.php3, a feature to display only some columns from a table.
+* Chris Jackson added support for MySQL functions
+ in tbl\_change.php3. He also added the "Query by Example" feature in
+ 2.0.
+* Dave Walton added support for multiple
+ servers and is a regular contributor for bug-fixes.
+* Gabriel Ash contributed the random access
+ features for 2.0.6.
+
+The following people have contributed minor changes, enhancements,
+bugfixes or support for a new language:
+
+Jim Kraai, Jordi Bruguera, Miquel Obrador, Geert Lund, Thomas
+Kleemann, Alexander Leidinger, Kiko Albiol, Daniel C. Chao, Pavel
+Piankov, Sascha Kettler, Joe Pruett, Renato Lins, Mark Kronsbein,
+Jannis Hermanns, G. Wieggers.
+
+And thanks to everyone else who sent me email with suggestions, bug-
+reports and or just some feedback.
+
diff --git a/phpMyAdmin/doc/developers.rst b/phpMyAdmin/doc/developers.rst
new file mode 100644
index 0000000..5574527
--- /dev/null
+++ b/phpMyAdmin/doc/developers.rst
@@ -0,0 +1,12 @@
+.. _developers:
+
+Developers Information
+======================
+
+phpMyAdmin is Open Source, so you're invited to contribute to it. Many
+great features have been written by other people and you too can help
+to make phpMyAdmin a useful tool.
+
+You can check out all the possibilities to contribute in the
+`contribute section on our website
+`_.
\ No newline at end of file
diff --git a/phpMyAdmin/doc/doctrees/config.doctree b/phpMyAdmin/doc/doctrees/config.doctree
new file mode 100644
index 0000000..4acf48f
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/config.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/copyright.doctree b/phpMyAdmin/doc/doctrees/copyright.doctree
new file mode 100644
index 0000000..b2e8dd4
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/copyright.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/credits.doctree b/phpMyAdmin/doc/doctrees/credits.doctree
new file mode 100644
index 0000000..882133e
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/credits.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/developers.doctree b/phpMyAdmin/doc/doctrees/developers.doctree
new file mode 100644
index 0000000..87a3a19
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/developers.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/environment.pickle b/phpMyAdmin/doc/doctrees/environment.pickle
new file mode 100644
index 0000000..29bcba8
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/environment.pickle differ
diff --git a/phpMyAdmin/doc/doctrees/faq.doctree b/phpMyAdmin/doc/doctrees/faq.doctree
new file mode 100644
index 0000000..6efeec3
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/faq.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/glossary.doctree b/phpMyAdmin/doc/doctrees/glossary.doctree
new file mode 100644
index 0000000..a1766e4
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/glossary.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/index.doctree b/phpMyAdmin/doc/doctrees/index.doctree
new file mode 100644
index 0000000..8a26ff8
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/index.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/intro.doctree b/phpMyAdmin/doc/doctrees/intro.doctree
new file mode 100644
index 0000000..e65bbcb
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/intro.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/other.doctree b/phpMyAdmin/doc/doctrees/other.doctree
new file mode 100644
index 0000000..e6cb843
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/other.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/privileges.doctree b/phpMyAdmin/doc/doctrees/privileges.doctree
new file mode 100644
index 0000000..eb3f45a
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/privileges.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/require.doctree b/phpMyAdmin/doc/doctrees/require.doctree
new file mode 100644
index 0000000..9992c69
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/require.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/setup.doctree b/phpMyAdmin/doc/doctrees/setup.doctree
new file mode 100644
index 0000000..c1e83ee
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/setup.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/transformations.doctree b/phpMyAdmin/doc/doctrees/transformations.doctree
new file mode 100644
index 0000000..bfc854a
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/transformations.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/user.doctree b/phpMyAdmin/doc/doctrees/user.doctree
new file mode 100644
index 0000000..cc07264
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/user.doctree differ
diff --git a/phpMyAdmin/doc/doctrees/vendors.doctree b/phpMyAdmin/doc/doctrees/vendors.doctree
new file mode 100644
index 0000000..11a8b76
Binary files /dev/null and b/phpMyAdmin/doc/doctrees/vendors.doctree differ
diff --git a/phpMyAdmin/doc/faq.rst b/phpMyAdmin/doc/faq.rst
new file mode 100644
index 0000000..4265c5b
--- /dev/null
+++ b/phpMyAdmin/doc/faq.rst
@@ -0,0 +1,2015 @@
+.. _faq:
+
+FAQ - Frequently Asked Questions
+================================
+
+Please have a look at our `Link section
+`_ on the official
+phpMyAdmin homepage for in-depth coverage of phpMyAdmin's features and
+or interface.
+
+.. _faqserver:
+
+Server
+++++++
+
+.. _faq1_1:
+
+1.1 My server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page full of cryptic characters to my browser, what can I do?
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+Try to set the :config:option:`$cfg['OBGzip']` directive to ``false`` in your
+:file:`config.inc.php` file and the ``zlib.output_compression`` directive to
+``Off`` in your php configuration file.
+
+.. _faq1_2:
+
+1.2 My Apache server crashes when using phpMyAdmin.
+---------------------------------------------------
+
+You should first try the latest versions of Apache (and possibly MySQL). If
+your server keeps crashing, please ask for help in the various Apache support
+groups.
+
+.. seealso:: :ref:`faq1_1`
+
+.. _faq1_3:
+
+1.3 (withdrawn).
+----------------
+
+.. _faq1_4:
+
+1.4 Using phpMyAdmin on IIS, I'm displayed the error message: "The specified CGI application misbehaved by not returning a complete set of HTTP headers ...".
+-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+You just forgot to read the *install.txt* file from the PHP
+distribution. Have a look at the last message in this `PHP bug report #12061
+`_ from the official PHP bug
+database.
+
+.. _faq1_5:
+
+1.5 Using phpMyAdmin on IIS, I'm facing crashes and/or many error messages with the HTTP.
+-----------------------------------------------------------------------------------------
+
+This is a known problem with the PHP :term:`ISAPI` filter: it's not so stable.
+Please use instead the cookie authentication mode.
+
+.. _faq1_6:
+
+1.6 I can't use phpMyAdmin on PWS: nothing is displayed!
+--------------------------------------------------------
+
+This seems to be a PWS bug. Filippo Simoncini found a workaround (at
+this time there is no better fix): remove or comment the ``DOCTYPE``
+declarations (2 lines) from the scripts :file:`libraries/Header.class.php`
+and :file:`index.php`.
+
+.. _faq1_7:
+
+1.7 How can I GZip a dump or a CSV export? It does not seem to work.
+--------------------------------------------------------------------
+
+This feature is based on the ``gzencode()``
+PHP function to be more independent of the platform (Unix/Windows,
+Safe Mode or not, and so on). So, you must have Zlib support
+(``--with-zlib``).
+
+.. _faq1_8:
+
+1.8 I cannot insert a text file in a table, and I get an error about safe mode being in effect.
+-----------------------------------------------------------------------------------------------
+
+Your uploaded file is saved by PHP in the "upload dir", as defined in
+:file:`php.ini` by the variable ``upload_tmp_dir`` (usually the system
+default is */tmp*). We recommend the following setup for Apache
+servers running in safe mode, to enable uploads of files while being
+reasonably secure:
+
+* create a separate directory for uploads: :command:`mkdir /tmp/php`
+* give ownership to the Apache server's user.group: :command:`chown
+ apache.apache /tmp/php`
+* give proper permission: :command:`chmod 600 /tmp/php`
+* put ``upload_tmp_dir = /tmp/php`` in :file:`php.ini`
+* restart Apache
+
+.. _faq1_9:
+
+1.9 (withdrawn).
+----------------
+
+.. _faq1_10:
+
+1.10 I'm having troubles when uploading files with phpMyAdmin running on a secure server. My browser is Internet Explorer and I'm using the Apache server.
+----------------------------------------------------------------------------------------------------------------------------------------------------------
+
+As suggested by "Rob M" in the phpWizard forum, add this line to your
+*httpd.conf*:
+
+.. code-block:: apache
+
+ SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
+
+It seems to clear up many problems between Internet Explorer and SSL.
+
+.. _faq1_11:
+
+1.11 I get an 'open\_basedir restriction' while uploading a file from the query box.
+------------------------------------------------------------------------------------
+
+Since version 2.2.4, phpMyAdmin supports servers with open\_basedir
+restrictions. However you need to create temporary directory and configure it
+as :config:option:`$cfg['TempDir']`. The uploaded files will be moved there,
+and after execution of your :term:`SQL` commands, removed.
+
+.. _faq1_12:
+
+1.12 I have lost my MySQL root password, what can I do?
+-------------------------------------------------------
+
+The MySQL manual explains how to `reset the permissions
+`_.
+
+.. _faq1_13:
+
+1.13 (withdrawn).
+-----------------
+
+.. _faq1_14:
+
+1.14 (withdrawn).
+-----------------
+
+.. _faq1_15:
+
+1.15 I have problems with *mysql.user* column names.
+----------------------------------------------------
+
+In previous MySQL versions, the ``User`` and ``Password``columns were
+named ``user`` and ``password``. Please modify your column names to
+align with current standards.
+
+.. _faq1_16:
+
+1.16 I cannot upload big dump files (memory, HTTP or timeout problems).
+-----------------------------------------------------------------------
+
+Starting with version 2.7.0, the import engine has been re–written and
+these problems should not occur. If possible, upgrade your phpMyAdmin
+to the latest version to take advantage of the new import features.
+
+The first things to check (or ask your host provider to check) are the
+values of ``upload_max_filesize``, ``memory_limit`` and
+``post_max_size`` in the :file:`php.ini` configuration file. All of these
+three settings limit the maximum size of data that can be submitted
+and handled by PHP. One user also said that ``post_max_size`` and
+``memory_limit`` need to be larger than ``upload_max_filesize``.
+There exist several workarounds if your upload is too big or your
+hosting provider is unwilling to change the settings:
+
+* Look at the :config:option:`$cfg['UploadDir']` feature. This allows one to upload a file to the server
+ via scp, ftp, or your favorite file transfer method. PhpMyAdmin is
+ then able to import the files from the temporary directory. More
+ information is available in the :ref:`config` of this document.
+* Using a utility (such as `BigDump
+ `_) to split the files before
+ uploading. We cannot support this or any third party applications, but
+ are aware of users having success with it.
+* If you have shell (command line) access, use MySQL to import the files
+ directly. You can do this by issuing the "source" command from within
+ MySQL:
+
+ .. code-block:: mysql
+
+ source filename.sql;
+
+.. _faq1_17:
+
+1.17 Which MySQL versions does phpMyAdmin support?
+--------------------------------------------------
+
+Since phpMyAdmin 3.0.x, only MySQL 5.0.1 and newer are supported. For
+older MySQL versions, you need to use the latest 2.x branch.
+phpMyAdmin can connect to your MySQL server using PHP's classic `MySQL
+extension `_ as well as the `improved MySQL
+extension (MySQLi) `_ that is available in PHP
+5.0. The latter one should be used unless you have a good reason not
+to do so. When compiling PHP, we strongly recommend that you manually
+link the MySQL extension of your choice to a MySQL client library of
+at least the same minor version since the one that is bundled with
+some PHP distributions is rather old and might cause problems see
+:ref:`faq1_17a`. `MariaDB `_ is also supported
+(versions 5.1 and 5.2 were tested).
+
+.. versionchanged:: 3.5
+ Since phpMyAdmin 3.5 `Drizzle `_ is supported.
+
+.. _faq1_17a:
+
+1.17a I cannot connect to the MySQL server. It always returns the error message, "Client does not support authentication protocol requested by server; consider upgrading MySQL client"
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+You tried to access MySQL with an old MySQL client library. The
+version of your MySQL client library can be checked in your phpinfo()
+output. In general, it should have at least the same minor version as
+your server - as mentioned in :ref:`faq1_17`. This problem is
+generally caused by using MySQL version 4.1 or newer. MySQL changed
+the authentication hash and your PHP is trying to use the old method.
+The proper solution is to use the `mysqli extension
+`_ with the proper client library to match
+your MySQL installation. Your chosen extension is specified in
+:config:option:`$cfg['Servers'][$i]['extension']`. More
+information (and several workarounds) are located in the `MySQL
+Documentation `_.
+
+.. _faq1_18:
+
+1.18 (withdrawn).
+-----------------
+
+.. _faq1_19:
+
+1.19 I can't run the "display relations" feature because the script seems not to know the font face I'm using!
+--------------------------------------------------------------------------------------------------------------
+
+The :term:`TCPDF` library we're using for this feature requires some special
+files to use font faces. Please refers to the `TCPDF manual
+ `_ to build these files.
+
+.. _faqmysql:
+
+1.20 I receive the error "cannot load MySQL extension, please check PHP Configuration".
+---------------------------------------------------------------------------------------
+
+To connect to a MySQL server, PHP needs a set of MySQL functions
+called "MySQL extension". This extension may be part of the PHP
+distribution (compiled-in), otherwise it needs to be loaded
+dynamically. Its name is probably *mysql.so* or *php\_mysql.dll*.
+phpMyAdmin tried to load the extension but failed. Usually, the
+problem is solved by installing a software package called "PHP-MySQL"
+or something similar.
+
+There are currently two interfaces PHP provides as MySQL extensions - ``mysql``
+and ``mysqli`` and you can change which of then is being used by
+:config:option:`$cfg['Servers'][$i]['extension']`.
+
+.. _faq1_21:
+
+1.21 I am running the CGI version of PHP under Unix, and I cannot log in using cookie auth.
+-------------------------------------------------------------------------------------------
+
+In :file:`php.ini`, set ``mysql.max_links`` higher than 1.
+
+.. _faq1_22:
+
+1.22 I don't see the "Location of text file" field, so I cannot upload.
+-----------------------------------------------------------------------
+
+This is most likely because in :file:`php.ini`, your ``file_uploads``
+parameter is not set to "on".
+
+.. _faq1_23:
+
+1.23 I'm running MySQL on a Win32 machine. Each time I create a new table the table and column names are changed to lowercase!
+------------------------------------------------------------------------------------------------------------------------------
+
+This happens because the MySQL directive ``lower_case_table_names``
+defaults to 1 (``ON``) in the Win32 version of MySQL. You can change
+this behavior by simply changing the directive to 0 (``OFF``): Just
+edit your ``my.ini`` file that should be located in your Windows
+directory and add the following line to the group [mysqld]:
+
+.. code-block:: ini
+
+ set-variable = lower_case_table_names=0
+
+Next, save the file and restart the MySQL service. You can always
+check the value of this directive using the query
+
+.. code-block:: mysql
+
+ SHOW VARIABLES LIKE 'lower_case_table_names';
+
+.. _faq1_24:
+
+1.24 (withdrawn).
+-----------------
+
+.. _faq1_25:
+
+1.25 I am running Apache with mod\_gzip-1.3.26.1a on Windows XP, and I get problems, such as undefined variables when I run a SQL query.
+----------------------------------------------------------------------------------------------------------------------------------------
+
+A tip from Jose Fandos: put a comment on the following two lines in
+httpd.conf, like this:
+
+.. code-block:: apache
+
+
+ # mod_gzip_item_include file \.php$
+ # mod_gzip_item_include mime "application/x-httpd-php.*"
+
+as this version of mod\_gzip on Apache (Windows) has problems handling
+PHP scripts. Of course you have to restart Apache.
+
+.. _faq1_26:
+
+1.26 I just installed phpMyAdmin in my document root of IIS but I get the error "No input file specified" when trying to run phpMyAdmin.
+----------------------------------------------------------------------------------------------------------------------------------------
+
+This is a permission problem. Right-click on the phpmyadmin folder and
+choose properties. Under the tab Security, click on "Add" and select
+the user "IUSR\_machine" from the list. Now set his permissions and it
+should work.
+
+.. _faq1_27:
+
+1.27 I get empty page when I want to view huge page (eg. db\_structure.php with plenty of tables).
+--------------------------------------------------------------------------------------------------
+
+This was caused by a `PHP bug `_ that occur when
+GZIP output buffering is enabled. If you turn off it (by
+:config:option:`$cfg['OBGzip']` in :file:`config.inc.php`), it should work.
+This bug will has been fixed in PHP 5.0.0.
+
+.. _faq1_28:
+
+1.28 My MySQL server sometimes refuses queries and returns the message 'Errorcode: 13'. What does this mean?
+------------------------------------------------------------------------------------------------------------
+
+This can happen due to a MySQL bug when having database / table names
+with upper case characters although ``lower_case_table_names`` is
+set to 1. To fix this, turn off this directive, convert all database
+and table names to lower case and turn it on again. Alternatively,
+there's a bug-fix available starting with MySQL 3.23.56 /
+4.0.11-gamma.
+
+.. _faq1_29:
+
+1.29 When I create a table or modify a column, I get an error and the columns are duplicated.
+---------------------------------------------------------------------------------------------
+
+It is possible to configure Apache in such a way that PHP has problems
+interpreting .php files.
+
+The problems occur when two different (and conflicting) set of
+directives are used:
+
+.. code-block:: apache
+
+
+ SetOutputFilter PHP
+ SetInputFilter PHP
+
+and
+
+.. code-block:: apache
+
+ AddType application/x-httpd-php .php
+
+In the case we saw, one set of directives was in
+``/etc/httpd/conf/httpd.conf``, while the other set was in
+``/etc/httpd/conf/addon-modules/php.conf``. The recommended way is
+with ``AddType``, so just comment out the first set of lines and
+restart Apache:
+
+.. code-block:: apache
+
+
+ #SetOutputFilter PHP
+ #SetInputFilter PHP
+
+.. _faq1_30:
+
+1.30 I get the error "navigation.php: Missing hash".
+----------------------------------------------------
+
+This problem is known to happen when the server is running Turck
+MMCache but upgrading MMCache to version 2.3.21 solves the problem.
+
+.. _faq1_31:
+
+1.31 Does phpMyAdmin support PHP 5?
+-----------------------------------
+
+Yes.
+
+Since release 4.1 phpMyAdmin supports only PHP 5.3 and newer. For PHP 5.2 you
+can use 4.0.x releases.
+
+.. _faq1_32:
+
+1.32 Can I use HTTP authentication with IIS?
+--------------------------------------------
+
+Yes. This procedure was tested with phpMyAdmin 2.6.1, PHP 4.3.9 in
+:term:`ISAPI` mode under :term:`IIS` 5.1.
+
+#. In your :file:`php.ini` file, set ``cgi.rfc2616_headers = 0``
+#. In ``Web Site Properties -> File/Directory Security -> Anonymous
+ Access`` dialog box, check the ``Anonymous access`` checkbox and
+ uncheck any other checkboxes (i.e. uncheck ``Basic authentication``,
+ ``Integrated Windows authentication``, and ``Digest`` if it's
+ enabled.) Click ``OK``.
+#. In ``Custom Errors``, select the range of ``401;1`` through ``401;5``
+ and click the ``Set to Default`` button.
+
+.. seealso:: :rfc:`2616`
+
+.. _faq1_33:
+
+1.33 (withdrawn).
+-----------------
+
+.. _faq1_34:
+
+1.34 Can I access directly to database or table pages?
+------------------------------------------------------
+
+Yes. Out of the box, you can use :term:`URL` like
+http://server/phpMyAdmin/index.php?server=X&db=database&table=table&target=script.
+For ``server`` you use the server number
+which refers to the order of the server paragraph in
+:file:`config.inc.php`. Table and script parts are optional. If you want
+http://server/phpMyAdmin/database[/table][/script] :term:`URL`, you need to do some configuration. Following
+lines apply only for `Apache `_ web server.
+First make sure, that you have enabled some features within global
+configuration. You need ``Options FollowSymLinks`` and ``AllowOverride
+FileInfo`` enabled for directory where phpMyAdmin is installed and you
+need mod\_rewrite to be enabled. Then you just need to create
+following :term:`.htaccess` file in root folder of phpMyAdmin installation (don't
+forget to change directory name inside of it):
+
+.. code-block:: apache
+
+
+ RewriteEngine On
+ RewriteBase /path_to_phpMyAdmin
+ RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&table=$2&target=$3 [R]
+ RewriteRule ^([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&target=$2 [R]
+ RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ index.php?db=$1&table=$2 [R]
+ RewriteRule ^([a-zA-Z0-9_]+)$ index.php?db=$1 [R]
+
+.. _faq1_35:
+
+1.35 Can I use HTTP authentication with Apache CGI?
+---------------------------------------------------
+
+Yes. However you need to pass authentication variable to :term:`CGI` using
+following rewrite rule:
+
+.. code-block:: apache
+
+
+ RewriteEngine On
+ RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
+
+.. _faq1_36:
+
+1.36 I get an error "500 Internal Server Error".
+------------------------------------------------
+
+There can be many explanations to this and a look at your server's
+error log file might give a clue.
+
+.. _faq1_37:
+
+1.37 I run phpMyAdmin on cluster of different machines and password encryption in cookie auth doesn't work.
+-----------------------------------------------------------------------------------------------------------
+
+If your cluster consist of different architectures, PHP code used for
+encryption/decryption won't work correct. This is caused by use of
+pack/unpack functions in code. Only solution is to use mcrypt
+extension which works fine in this case.
+
+.. _faq1_38:
+
+1.38 Can I use phpMyAdmin on a server on which Suhosin is enabled?
+------------------------------------------------------------------
+
+Yes but the default configuration values of Suhosin are known to cause
+problems with some operations, for example editing a table with many
+columns and no primary key or with textual primary key.
+
+Suhosin configuration might lead to malfunction in some cases and it
+can not be fully avoided as phpMyAdmin is kind of application which
+needs to transfer big amounts of columns in single HTTP request, what
+is something what Suhosin tries to prevent. Generally all
+``suhosin.request.*``, ``suhosin.post.*`` and ``suhosin.get.*``
+directives can have negative effect on phpMyAdmin usability. You can
+always find in your error logs which limit did cause dropping of
+variable, so you can diagnose the problem and adjust matching
+configuration variable.
+
+The default values for most Suhosin configuration options will work in
+most scenarios, however you might want to adjust at least following
+parameters:
+
+* `suhosin.request.max\_vars `_ should
+ be increased (eg. 2048)
+* `suhosin.post.max\_vars `_ should be
+ increased (eg. 2048)
+* `suhosin.request.max\_array\_index\_length `_
+ should be increased (eg. 256)
+* `suhosin.post.max\_array\_index\_length `_
+ should be increased (eg. 256)
+* `suhosin.request.max\_totalname\_length `_
+ should be increased (eg. 8192)
+* `suhosin.post.max\_totalname\_length `_ should be
+ increased (eg. 8192)
+* `suhosin.get.max\_value\_length `_
+ should be increased (eg. 1024)
+* `suhosin.sql.bailout\_on\_error `_
+ needs to be disabled (the default)
+* `suhosin.log.\* `_ should not
+ include :term:`SQL`, otherwise you get big
+ slowdown
+
+You can also disable the warning using the :config:option:`$cfg['SuhosinDisableWarning']`.
+
+.. _faq1_39:
+
+1.39 When I try to connect via https, I can log in, but then my connection is redirected back to http. What can cause this behavior?
+------------------------------------------------------------------------------------------------------------------------------------
+
+Be sure that you have enabled ``SSLOptions`` and ``StdEnvVars`` in
+your Apache configuration.
+
+.. seealso::
+
+.. _faq1_40:
+
+1.40 When accessing phpMyAdmin via an Apache reverse proxy, cookie login does not work.
+---------------------------------------------------------------------------------------
+
+To be able to use cookie auth Apache must know that it has to rewrite
+the set-cookie headers. Example from the Apache 2.2 documentation:
+
+.. code-block:: apache
+
+
+ ProxyPass /mirror/foo/ http://backend.example.com/
+ ProxyPassReverse /mirror/foo/ http://backend.example.com/
+ ProxyPassReverseCookieDomain backend.example.com public.example.com
+ ProxyPassReverseCookiePath / /mirror/foo/
+
+Note: if the backend url looks like http://host/~user/phpmyadmin, the
+tilde (~) must be url encoded as %7E in the ProxyPassReverse\* lines.
+This is not specific to phpmyadmin, it's just the behavior of Apache.
+
+.. code-block:: apache
+
+
+ ProxyPass /mirror/foo/ http://backend.example.com/~user/phpmyadmin
+ ProxyPassReverse /mirror/foo/ http://backend.example.com/%7Euser/phpmyadmin
+ ProxyPassReverseCookiePath /%7Euser/phpmyadmin /mirror/foo
+
+.. seealso::
+
+.. _faq1_41:
+
+1.41 When I view a database and ask to see its privileges, I get an error about an unknown column.
+--------------------------------------------------------------------------------------------------
+
+The MySQL server's privilege tables are not up to date, you need to
+run the :command:`mysql_upgrade` command on the server.
+
+.. _faq1_42:
+
+1.42 How can I prevent robots from accessing phpMyAdmin?
+--------------------------------------------------------
+
+You can add various rules to :term:`.htaccess` to filter access based on user agent
+field. This is quite easy to circumvent, but could prevent at least
+some robots accessing your installation.
+
+.. code-block:: apache
+
+
+ RewriteEngine on
+
+ # Allow only GET and POST verbs
+ RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC,OR]
+
+ # Ban Typical Vulnerability Scanners and others
+ # Kick out Script Kiddies
+ RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
+ RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|wkito|pikto|scan|acunetix).* [NC,OR]
+ RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
+
+ # Ban Search Engines, Crawlers to your administrative panel
+ # No reasons to access from bots
+ # Ultimately Better than the useless robots.txt
+ # Did google respect robots.txt?
+ # Try google: intitle:phpMyAdmin intext:"Welcome to phpMyAdmin *.*.*" intext:"Log in" -wiki -forum -forums -questions intext:"Cookies must be enabled"
+ RewriteCond %{HTTP_USER_AGENT} ^.*(AdsBot-Google|ia_archiver|Scooter|Ask.Jeeves|Baiduspider|Exabot|FAST.Enterprise.Crawler|FAST-WebCrawler|www\.neomo\.de|Gigabot|Mediapartners-Google|Google.Desktop|Feedfetcher-Google|Googlebot|heise-IT-Markt-Crawler|heritrix|ibm.com\cs/crawler|ICCrawler|ichiro|MJ12bot|MetagerBot|msnbot-NewsBlogs|msnbot|msnbot-media|NG-Search|lucene.apache.org|NutchCVS|OmniExplorer_Bot|online.link.validator|psbot0|Seekbot|Sensis.Web.Crawler|SEO.search.Crawler|Seoma.\[SEO.Crawler\]|SEOsearch|Snappy|www.urltrends.com|www.tkl.iis.u-tokyo.ac.jp/~crawler|SynooBot|crawleradmin.t-info@telekom.de|TurnitinBot|voyager|W3.SiteSearch.Crawler|W3C-checklink|W3C_Validator|www.WISEnutbot.com|yacybot|Yahoo-MMCrawler|Yahoo\!.DE.Slurp|Yahoo\!.Slurp|YahooSeeker).* [NC]
+ RewriteRule .* - [F]
+
+.. _faq1_43:
+
+1.43 Why can't I display the structure of my table containing hundreds of columns?
+----------------------------------------------------------------------------------
+
+Because your PHP's ``memory_limit`` is too low; adjust it in :file:`php.ini`.
+
+.. _faqconfig:
+
+Configuration
++++++++++++++
+
+.. _faq2_1:
+
+2.1 The error message "Warning: Cannot add header information - headers already sent by ..." is displayed, what's the problem?
+------------------------------------------------------------------------------------------------------------------------------
+
+Edit your :file:`config.inc.php` file and ensure there is nothing (I.E. no
+blank lines, no spaces, no characters...) neither before the ```` tag at the end. We also got a report
+from a user under :term:`IIS`, that used a zipped distribution kit: the file
+:file:`libraries/Config.class.php` contained an end-of-line character (hex 0A)
+at the end; removing this character cleared his errors.
+
+.. _faq2_2:
+
+2.2 phpMyAdmin can't connect to MySQL. What's wrong?
+----------------------------------------------------
+
+Either there is an error with your PHP setup or your username/password
+is wrong. Try to make a small script which uses mysql\_connect and see
+if it works. If it doesn't, it may be you haven't even compiled MySQL
+support into PHP.
+
+.. _faq2_3:
+
+2.3 The error message "Warning: MySQL Connection Failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111) ..." is displayed. What can I do?
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+For RedHat users, Harald Legner suggests this on the mailing list:
+
+On my RedHat-Box the socket of MySQL is */var/lib/mysql/mysql.sock*.
+In your :file:`php.ini` you will find a line
+
+.. code-block:: ini
+
+ mysql.default_socket = /tmp/mysql.sock
+
+change it to
+
+.. code-block:: ini
+
+ mysql.default_socket = /var/lib/mysql/mysql.sock
+
+Then restart apache and it will work.
+
+Here is a fix suggested by Brad Ummer:
+
+* First, you need to determine what socket is being used by MySQL. To do
+ this, telnet to your server and go to the MySQL bin directory. In this
+ directory there should be a file named *mysqladmin*. Type
+ ``./mysqladmin variables``, and this should give you a bunch of info
+ about your MySQL server, including the socket (*/tmp/mysql.sock*, for
+ example).
+* Then, you need to tell PHP to use this socket. To do this in
+ phpMyAdmin, you need to complete the socket information in the
+ :file:`config.inc.php`. For example:
+ :config:option:`$cfg['Servers'][$i]['socket']` Please also make sure that
+ the permissions of this file allow to be readable by your webserver (i.e.
+ '0755').
+
+Have also a look at the `corresponding section of the MySQL
+documentation `_.
+
+.. _faq2_4:
+
+2.4 Nothing is displayed by my browser when I try to run phpMyAdmin, what can I do?
+-----------------------------------------------------------------------------------
+
+Try to set the :config:option:`$cfg['OBGzip']` directive to ``false`` in the phpMyAdmin configuration
+file. It helps sometime. Also have a look at your PHP version number:
+if it contains "b" or "alpha" it means you're running a testing
+version of PHP. That's not a so good idea, please upgrade to a plain
+revision.
+
+.. _faq2_5:
+
+2.5 Each time I want to insert or change a row or drop a database or a table, an error 404 (page not found) is displayed or, with HTTP or cookie authentication, I'm asked to log in again. What's wrong?
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+Check the value you set for the :config:option:`$cfg['PmaAbsoluteUri']` directive in the phpMyAdmin
+configuration file.
+
+.. _faq2_6:
+
+2.6 I get an "Access denied for user: 'root@localhost' (Using password: YES)"-error when trying to access a MySQL-Server on a host which is port-forwarded for my localhost.
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+When you are using a port on your localhost, which you redirect via
+port-forwarding to another host, MySQL is not resolving the localhost
+as expected. Erik Wasser explains: The solution is: if your host is
+"localhost" MySQL (the command line tool :command:`mysql` as well) always
+tries to use the socket connection for speeding up things. And that
+doesn't work in this configuration with port forwarding. If you enter
+"127.0.0.1" as hostname, everything is right and MySQL uses the
+:term:`TCP` connection.
+
+.. _faqthemes:
+
+2.7 Using and creating themes
+-----------------------------
+
+Themes are configured with :config:option:`$cfg['ThemePath']`,
+:config:option:`$cfg['ThemeManager']` and :config:option:`$cfg['ThemeDefault']`.
+Under :config:option:`$cfg['ThemePath']`, you should not delete the
+directory ``pmahomme`` or its underlying structure, because this is the
+system theme used by phpMyAdmin. ``pmahomme`` contains all images and
+styles, for backwards compatibility and for all themes that would not
+include images or css-files. If :config:option:`$cfg['ThemeManager']`
+is enabled, you can select your favorite theme on the main page. Your selected
+theme will be stored in a cookie.
+
+To create a theme:
+
+* make a new subdirectory (for example "your\_theme\_name") under :config:option:`$cfg['ThemePath']` (by
+ default ``themes``)
+* copy the files and directories from ``pmahomme`` to "your\_theme\_name"
+* edit the css-files in "your\_theme\_name/css"
+* put your new images in "your\_theme\_name/img"
+* edit :file:`layout.inc.php` in "your\_theme\_name"
+* edit :file:`info.inc.php` in "your\_theme\_name" to contain your chosen
+ theme name, that will be visible in user interface
+* make a new screenshot of your theme and save it under
+ "your\_theme\_name/screen.png"
+
+In theme directory there is file :file:`info.inc.php` which contains theme
+verbose name, theme generation and theme version. These versions and
+generations are enumerated from 1 and do not have any direct
+dependence on phpMyAdmin version. Themes within same generation should
+be backwards compatible - theme with version 2 should work in
+phpMyAdmin requiring version 1. Themes with different generation are
+incompatible.
+
+If you do not want to use your own symbols and buttons, remove the
+directory "img" in "your\_theme\_name". phpMyAdmin will use the
+default icons and buttons (from the system-theme ``pmahomme``).
+
+.. _faqmissingparameters:
+
+2.8 I get "Missing parameters" errors, what can I do?
+-----------------------------------------------------
+
+Here are a few points to check:
+
+* In :file:`config.inc.php`, try to leave the :config:option:`$cfg['PmaAbsoluteUri']` directive empty. See also
+ :ref:`faq4_7`.
+* Maybe you have a broken PHP installation or you need to upgrade your
+ Zend Optimizer. See .
+* If you are using Hardened PHP with the ini directive
+ ``varfilter.max_request_variables`` set to the default (200) or
+ another low value, you could get this error if your table has a high
+ number of columns. Adjust this setting accordingly. (Thanks to Klaus
+ Dorninger for the hint).
+* In the :file:`php.ini` directive ``arg_separator.input``, a value of ";"
+ will cause this error. Replace it with "&;".
+* If you are using `Hardened-PHP `_, you
+ might want to increase `request limits `_.
+* The directory specified in the :file:`php.ini` directive
+ ``session.save_path`` does not exist or is read-only.
+
+.. _faq2_9:
+
+2.9 Seeing an upload progress bar
+---------------------------------
+
+To be able to see a progress bar during your uploads, your server must
+have the `APC `_ extension, the
+`uploadprogress `_ one, or
+you must be running PHP 5.4.0 or higher. Moreover, the JSON extension
+has to be enabled in your PHP.
+
+If using APC, you must set ``apc.rfc1867`` to ``on`` in your :file:`php.ini`.
+
+If using PHP 5.4.0 or higher, you must set
+``session.upload_progress.enabled`` to ``1`` in your :file:`php.ini`. However,
+starting from phpMyAdmin version 4.0.4, session-based upload progress has
+been temporarily deactivated due to its problematic behavior.
+
+.. seealso:: :rfc:`1867`
+
+.. _faqlimitations:
+
+Known limitations
++++++++++++++++++
+
+.. _login_bug:
+
+3.1 When using HTTP authentication, a user who logged out can not log in again in with the same nick.
+-----------------------------------------------------------------------------------------------------
+
+This is related to the authentication mechanism (protocol) used by
+phpMyAdmin. To bypass this problem: just close all the opened browser
+windows and then go back to phpMyAdmin. You should be able to log in
+again.
+
+.. _faq3_2:
+
+3.2 When dumping a large table in compressed mode, I get a memory limit error or a time limit error.
+----------------------------------------------------------------------------------------------------
+
+Compressed dumps are built in memory and because of this are limited
+to php's memory limit. For GZip/BZip2 exports this can be overcome
+since 2.5.4 using :config:option:`$cfg['CompressOnFly']` (enabled by default).
+Zip exports can not be handled this way, so if you need Zip files for larger
+dump, you have to use another way.
+
+.. _faq3_3:
+
+3.3 With InnoDB tables, I lose foreign key relationships when I rename a table or a column.
+-------------------------------------------------------------------------------------------
+
+This is an InnoDB bug, see .
+
+.. _faq3_4:
+
+3.4 I am unable to import dumps I created with the mysqldump tool bundled with the MySQL server distribution.
+-------------------------------------------------------------------------------------------------------------
+
+The problem is that older versions of ``mysqldump`` created invalid
+comments like this:
+
+.. code-block:: mysql
+
+
+ -- MySQL dump 8.22
+ --
+ -- Host: localhost Database: database
+ ---------------------------------------------------------
+ -- Server version 3.23.54
+
+The invalid part of the code is the horizontal line made of dashes
+that appears once in every dump created with mysqldump. If you want to
+run your dump you have to turn it into valid MySQL. This means, you
+have to add a whitespace after the first two dashes of the line or add
+a # before it: ``-- -------------------------------------------------------`` or
+``#---------------------------------------------------------``
+
+.. _faq3_5:
+
+3.5 When using nested folders, multiple hierarchies are displayed in a wrong manner.
+------------------------------------------------------------------------------------
+
+Please note that you should not use the separating string multiple
+times without any characters between them, or at the beginning/end of
+your table name. If you have to, think about using another
+TableSeparator or disabling that feature.
+
+.. seealso:: :config:option:`$cfg['NavigationTreeTableSeparator']`
+
+.. _faq3_6:
+
+3.6 What is currently not supported in phpMyAdmin about InnoDB?
+---------------------------------------------------------------
+
+In Relation view, having more than one index column in the foreign key. In Query-by-
+example (Query), automatic generation of the query LEFT JOIN from the
+foreign table.
+
+.. _faq3_7:
+
+3.7 I have table with many (100+) columns and when I try to browse table I get series of errors like "Warning: unable to parse url". How can this be fixed?
+-----------------------------------------------------------------------------------------------------------------------------------------------------------
+
+Your table neither have a primary key nor an unique one, so we must
+use a long expression to identify this row. This causes problems to
+parse\_url function. The workaround is to create a primary or unique
+key.
+
+.. _faq3_8:
+
+3.8 I cannot use (clickable) HTML-forms in columns where I put a MIME-Transformation onto!
+------------------------------------------------------------------------------------------
+
+Due to a surrounding form-container (for multi-row delete checkboxes),
+no nested forms can be put inside the table where phpMyAdmin displays
+the results. You can, however, use any form inside of a table if keep
+the parent form-container with the target to tbl\_row\_delete.php and
+just put your own input-elements inside. If you use a custom submit
+input field, the form will submit itself to the displaying page again,
+where you can validate the $HTTP\_POST\_VARS in a transformation. For
+a tutorial on how to effectively use transformations, see our `Link
+section `_ on the
+official phpMyAdmin-homepage.
+
+.. _faq3_9:
+
+3.9 I get error messages when using "--sql\_mode=ANSI" for the MySQL server.
+----------------------------------------------------------------------------
+
+When MySQL is running in ANSI-compatibility mode, there are some major
+differences in how :term:`SQL` is structured (see
+). Most important of all, the
+quote-character (") is interpreted as an identifier quote character and not as
+a string quote character, which makes many internal phpMyAdmin operations into
+invalid :term:`SQL` statements. There is no
+workaround to this behaviour. News to this item will be posted in `Bug report
+#1013 `_.
+
+.. _faq3_10:
+
+3.10 Homonyms and no primary key: When the results of a SELECT display more that one column with the same value (for example ``SELECT lastname from employees where firstname like 'A%'`` and two "Smith" values are displayed), if I click Edit I cannot be sure that I am editing the intended row.
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+Please make sure that your table has a primary key, so that phpMyAdmin
+can use it for the Edit and Delete links.
+
+.. _faq3_11:
+
+3.11 The number of rows for InnoDB tables is not correct.
+---------------------------------------------------------
+
+phpMyAdmin uses a quick method to get the row count, and this method only
+returns an approximate count in the case of InnoDB tables. See
+:config:option:`$cfg['MaxExactCount']` for a way to modify those results, but
+this could have a serious impact on performance.
+
+.. _faq3_12:
+
+3.12 (withdrawn).
+-----------------
+
+.. _faq3_13:
+
+3.13 I get an error when entering ``USE`` followed by a db name containing an hyphen.
+-------------------------------------------------------------------------------------
+
+The tests I have made with MySQL 5.1.49 shows that the API does not
+accept this syntax for the USE command.
+
+.. _faq3_14:
+
+3.14 I am not able to browse a table when I don't have the right to SELECT one of the columns.
+----------------------------------------------------------------------------------------------
+
+This has been a known limitation of phpMyAdmin since the beginning and
+it's not likely to be solved in the future.
+
+.. _faq3_15:
+
+3.15 (withdrawn).
+-----------------
+
+.. _faq3_16:
+
+3.16 (withdrawn).
+-----------------
+
+.. _faq3_17:
+
+3.17 (withdrawn).
+-----------------
+
+.. _faq3_18:
+
+3.18 When I import a CSV file that contains multiple tables, they are lumped together into a single table.
+----------------------------------------------------------------------------------------------------------
+
+There is no reliable way to differentiate tables in :term:`CSV` format. For the
+time being, you will have to break apart :term:`CSV` files containing multiple
+tables.
+
+.. _faq3_19:
+
+3.19 When I import a file and have phpMyAdmin determine the appropriate data structure it only uses int, decimal, and varchar types.
+------------------------------------------------------------------------------------------------------------------------------------
+
+Currently, the import type-detection system can only assign these
+MySQL types to columns. In future, more will likely be added but for
+the time being you will have to edit the structure to your liking
+post-import. Also, you should note the fact that phpMyAdmin will use
+the size of the largest item in any given column as the column size
+for the appropriate type. If you know you will be adding larger items
+to that column then you should manually adjust the column sizes
+accordingly. This is done for the sake of efficiency.
+
+.. _faq3_20:
+
+3.20 After upgrading, some bookmarks are gone or their content cannot be shown.
+-------------------------------------------------------------------------------
+
+At some point, the character set used to store bookmark content has changed.
+It's better to recreate your bookmark from the newer phpMyAdmin version.
+
+.. _faqmultiuser:
+
+ISPs, multi-user installations
+++++++++++++++++++++++++++++++
+
+.. _faq4_1:
+
+4.1 I'm an ISP. Can I setup one central copy of phpMyAdmin or do I need to install it for each customer?
+--------------------------------------------------------------------------------------------------------
+
+Since version 2.0.3, you can setup a central copy of phpMyAdmin for all your
+users. The development of this feature was kindly sponsored by NetCologne GmbH.
+This requires a properly setup MySQL user management and phpMyAdmin
+:term:`HTTP` or cookie authentication.
+
+.. seealso:: :ref:`authentication_modes`
+
+.. _faq4_2:
+
+4.2 What's the preferred way of making phpMyAdmin secure against evil access?
+-----------------------------------------------------------------------------
+
+This depends on your system. If you're running a server which cannot be
+accessed by other people, it's sufficient to use the directory protection
+bundled with your webserver (with Apache you can use :term:`.htaccess` files,
+for example). If other people have telnet access to your server, you should use
+phpMyAdmin's :term:`HTTP` or cookie authentication features.
+
+Suggestions:
+
+* Your :file:`config.inc.php` file should be ``chmod 660``.
+* All your phpMyAdmin files should be chown -R phpmy.apache, where phpmy
+ is a user whose password is only known to you, and apache is the group
+ under which Apache runs.
+* Follow security recommendations for PHP and your webserver.
+
+.. _faq4_3:
+
+4.3 I get errors about not being able to include a file in */lang* or in */libraries*.
+--------------------------------------------------------------------------------------
+
+Check :file:`php.ini`, or ask your sysadmin to check it. The
+``include_path`` must contain "." somewhere in it, and
+``open_basedir``, if used, must contain "." and "./lang" to allow
+normal operation of phpMyAdmin.
+
+.. _faq4_4:
+
+4.4 phpMyAdmin always gives "Access denied" when using HTTP authentication.
+---------------------------------------------------------------------------
+
+This could happen for several reasons:
+
+* :config:option:`$cfg['Servers'][$i]['controluser']` and/or :config:option:`$cfg['Servers'][$i]['controlpass']` are wrong.
+* The username/password you specify in the login dialog are invalid.
+* You have already setup a security mechanism for the phpMyAdmin-
+ directory, eg. a :term:`.htaccess` file. This would interfere with phpMyAdmin's
+ authentication, so remove it.
+
+.. _faq4_5:
+
+4.5 Is it possible to let users create their own databases?
+-----------------------------------------------------------
+
+Starting with 2.2.5, in the user management page, you can enter a
+wildcard database name for a user (for example "joe%"), and put the
+privileges you want. For example, adding ``SELECT, INSERT, UPDATE,
+DELETE, CREATE, DROP, INDEX, ALTER`` would let a user create/manage
+his/her database(s).
+
+.. _faq4_6:
+
+4.6 How can I use the Host-based authentication additions?
+----------------------------------------------------------
+
+If you have existing rules from an old :term:`.htaccess` file, you can take them and
+add a username between the ``'deny'``/``'allow'`` and ``'from'``
+strings. Using the username wildcard of ``'%'`` would be a major
+benefit here if your installation is suited to using it. Then you can
+just add those updated lines into the
+:config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` array.
+
+If you want a pre-made sample, you can try this fragment. It stops the
+'root' user from logging in from any networks other than the private
+network :term:`IP` blocks.
+
+.. code-block:: php
+
+
+ //block root from logging in except from the private networks
+ $cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
+ $cfg['Servers'][$i]['AllowDeny']['rules'] = array(
+ 'deny root from all',
+ 'allow root from localhost',
+ 'allow root from 10.0.0.0/8',
+ 'allow root from 192.168.0.0/16',
+ 'allow root from 172.16.0.0/12',
+ );
+
+.. _faq4_7:
+
+4.7 Authentication window is displayed more than once, why?
+-----------------------------------------------------------
+
+This happens if you are using a :term:`URL` to start phpMyAdmin which is
+different than the one set in your :config:option:`$cfg['PmaAbsoluteUri']`. For
+example, a missing "www", or entering with an :term:`IP` address while a domain
+name is defined in the config file.
+
+.. _faq4_8:
+
+4.8 Which parameters can I use in the URL that starts phpMyAdmin?
+-----------------------------------------------------------------
+
+When starting phpMyAdmin, you can use the ``db``, ``pma_username``,
+``pma_password`` and ``server`` parameters. This last one can contain
+either the numeric host index (from ``$i`` of the configuration file)
+or one of the host names present in the configuration file. Using
+``pma_username`` and ``pma_password`` has been tested along with the
+usage of 'cookie' ``auth_type``.
+
+.. _faqbrowsers:
+
+Browsers or client OS
++++++++++++++++++++++
+
+.. _faq5_1:
+
+5.1 I get an out of memory error, and my controls are non-functional, when trying to create a table with more than 14 columns.
+------------------------------------------------------------------------------------------------------------------------------
+
+We could reproduce this problem only under Win98/98SE. Testing under
+WinNT4 or Win2K, we could easily create more than 60 columns. A
+workaround is to create a smaller number of columns, then come back to
+your table properties and add the other columns.
+
+.. _faq5_2:
+
+5.2 With Xitami 2.5b4, phpMyAdmin won't process form fields.
+------------------------------------------------------------
+
+This is not a phpMyAdmin problem but a Xitami known bug: you'll face
+it with each script/website that use forms. Upgrade or downgrade your
+Xitami server.
+
+.. _faq5_3:
+
+5.3 I have problems dumping tables with Konqueror (phpMyAdmin 2.2.2).
+---------------------------------------------------------------------
+
+With Konqueror 2.1.1: plain dumps, zip and GZip dumps work ok, except
+that the proposed file name for the dump is always 'tbl\_dump.php'.
+Bzip2 dumps don't seem to work. With Konqueror 2.2.1: plain dumps
+work; zip dumps are placed into the user's temporary directory, so
+they must be moved before closing Konqueror, or else they disappear.
+GZip dumps give an error message. Testing needs to be done for
+Konqueror 2.2.2.
+
+.. _faq5_4:
+
+5.4 I can't use the cookie authentication mode because Internet Explorer never stores the cookies.
+--------------------------------------------------------------------------------------------------
+
+MS Internet Explorer seems to be really buggy about cookies, at least
+till version 6.
+
+.. _faq5_5:
+
+5.5 In Internet Explorer 5.0, I get JavaScript errors when browsing my rows.
+----------------------------------------------------------------------------
+
+Upgrade to at least Internet Explorer 5.5 SP2.
+
+.. _faq5_6:
+
+5.6 In Internet Explorer 5.0, 5.5 or 6.0, I get an error (like "Page not found") when trying to modify a row in a table with many columns, or with a text column.
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+Your table neither have a primary key nor an unique one, so we must use a long
+:term:`URL` to identify this row. There is a limit on the length of the
+:term:`URL` in those browsers, and this not happen in Netscape, for example.
+The workaround is to create a primary or unique key, or use another browser.
+
+.. _faq5_7:
+
+5.7 I refresh (reload) my browser, and come back to the welcome page.
+---------------------------------------------------------------------
+
+Some browsers support right-clicking into the frame you want to
+refresh, just do this in the right frame.
+
+.. _faq5_8:
+
+5.8 With Mozilla 0.9.7 I have problems sending a query modified in the query box.
+---------------------------------------------------------------------------------
+
+Looks like a Mozilla bug: 0.9.6 was OK. We will keep an eye on future
+Mozilla versions.
+
+.. _faq5_9:
+
+5.9 With Mozilla 0.9.? to 1.0 and Netscape 7.0-PR1 I can't type a whitespace in the SQL-Query edit area: the page scrolls down.
+-------------------------------------------------------------------------------------------------------------------------------
+
+This is a Mozilla bug (see bug #26882 at `BugZilla
+ `_).
+
+.. _faq5_10:
+
+5.10 With Netscape 4.75 I get empty rows between each row of data in a CSV exported file.
+-----------------------------------------------------------------------------------------
+
+This is a known Netscape 4.75 bug: it adds some line feeds when
+exporting data in octet-stream mode. Since we can't detect the
+specific Netscape version, we cannot workaround this bug.
+
+.. _faq5_11:
+
+5.11 Extended-ASCII characters like German umlauts are displayed wrong.
+-----------------------------------------------------------------------
+
+Please ensure that you have set your browser's character set to the
+one of the language file you have selected on phpMyAdmin's start page.
+Alternatively, you can try the auto detection mode that is supported
+by the recent versions of the most browsers.
+
+.. _faq5_12:
+
+5.12 Mac OS X Safari browser changes special characters to "?".
+---------------------------------------------------------------
+
+This issue has been reported by a :term:`Mac OS X` user, who adds that Chimera,
+Netscape and Mozilla do not have this problem.
+
+.. _faq5_13:
+
+5.13 With Internet Explorer 5.5 or 6, and HTTP authentication type, I cannot manage two servers: I log in to the first one, then the other one, but if I switch back to the first, I have to log in on each operation.
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+This is a bug in Internet Explorer, other browsers do not behave this
+way.
+
+.. _faq5_14:
+
+5.14 Using Opera6, I can manage to get to the authentication, but nothing happens after that, only a blank screen.
+------------------------------------------------------------------------------------------------------------------
+
+Please upgrade to Opera7 at least.
+
+.. _faq5_15:
+
+5.15 I have display problems with Safari.
+-----------------------------------------
+
+Please upgrade to at least version 1.2.3.
+
+.. _faq5_16:
+
+5.16 With Internet Explorer, I get "Access is denied" Javascript errors. Or I cannot make phpMyAdmin work under Windows.
+------------------------------------------------------------------------------------------------------------------------
+
+Please check the following points:
+
+* Maybe you have defined your :config:option:`$cfg['PmaAbsoluteUri']` setting in
+ :file:`config.inc.php` to an :term:`IP` address and you are starting phpMyAdmin
+ with a :term:`URL` containing a domain name, or the reverse situation.
+* Security settings in IE and/or Microsoft Security Center are too high,
+ thus blocking scripts execution.
+* The Windows Firewall is blocking Apache and MySQL. You must allow
+ :term:`HTTP` ports (80 or 443) and MySQL
+ port (usually 3306) in the "in" and "out" directions.
+
+.. _faq5_17:
+
+5.17 With Firefox, I cannot delete rows of data or drop a database.
+-------------------------------------------------------------------
+
+Many users have confirmed that the Tabbrowser Extensions plugin they
+installed in their Firefox is causing the problem.
+
+.. _faq5_18:
+
+5.18 With Konqueror 4.2.x an invalid ``LIMIT`` clause is generated when I browse a table.
+-----------------------------------------------------------------------------------------
+
+This happens only when both of these conditions are met: using the
+``http`` authentication mode and ``register_globals`` being set to
+``On`` on the server. It seems to be a browser-specific problem;
+meanwhile use the ``cookie`` authentication mode.
+
+.. _faq5_19:
+
+5.19 I get JavaScript errors in my browser.
+-------------------------------------------
+
+Issues have been reported with some combinations of browser
+extensions. To troubleshoot, disable all extensions then clear your
+browser cache to see if the problem goes away.
+
+.. _faqusing:
+
+Using phpMyAdmin
+++++++++++++++++
+
+.. _faq6_1:
+
+6.1 I can't insert new rows into a table / I can't create a table - MySQL brings up a SQL error.
+------------------------------------------------------------------------------------------------
+
+Examine the :term:`SQL` error with care.
+Often the problem is caused by specifying a wrong column-type. Common
+errors include:
+
+* Using ``VARCHAR`` without a size argument
+* Using ``TEXT`` or ``BLOB`` with a size argument
+
+Also, look at the syntax chapter in the MySQL manual to confirm that
+your syntax is correct.
+
+.. _faq6_2:
+
+6.2 When I create a table, I set an index for two columns and phpMyAdmin generates only one index with those two columns.
+-------------------------------------------------------------------------------------------------------------------------
+
+This is the way to create a multi-columns index. If you want two
+indexes, create the first one when creating the table, save, then
+display the table properties and click the Index link to create the
+other index.
+
+.. _faq6_3:
+
+6.3 How can I insert a null value into my table?
+------------------------------------------------
+
+Since version 2.2.3, you have a checkbox for each column that can be
+null. Before 2.2.3, you had to enter "null", without the quotes, as
+the column's value. Since version 2.5.5, you have to use the checkbox
+to get a real NULL value, so if you enter "NULL" this means you want a
+literal NULL in the column, and not a NULL value (this works in PHP4).
+
+.. _faq6_4:
+
+6.4 How can I backup my database or table?
+------------------------------------------
+
+Click on a database or table name in the navigation panel, the properties will
+be displayed. Then on the menu, click "Export", you can dump the structure, the
+data, or both. This will generate standard :term:`SQL` statements that can be
+used to recreate your database/table. You will need to choose "Save as file",
+so that phpMyAdmin can transmit the resulting dump to your station. Depending
+on your PHP configuration, you will see options to compress the dump. See also
+the :config:option:`$cfg['ExecTimeLimit']` configuration variable. For
+additional help on this subject, look for the word "dump" in this document.
+
+.. _faq6_5:
+
+6.5 How can I restore (upload) my database or table using a dump? How can I run a ".sql" file?
+----------------------------------------------------------------------------------------------
+
+Click on a database name in the navigation panel, the properties will
+be displayed. Select "Import" from the list of tabs in the right–hand
+frame (or ":term:`SQL`" if your phpMyAdmin
+version is previous to 2.7.0). In the "Location of the text file"
+section, type in the path to your dump filename, or use the Browse
+button. Then click Go. With version 2.7.0, the import engine has been
+re–written, if possible it is suggested that you upgrade to take
+advantage of the new features. For additional help on this subject,
+look for the word "upload" in this document.
+
+.. _faq6_6:
+
+6.6 How can I use the relation table in Query-by-example?
+---------------------------------------------------------
+
+Here is an example with the tables persons, towns and countries, all
+located in the database "mydb". If you don't have a ``pma__relation``
+table, create it as explained in the configuration section. Then
+create the example tables:
+
+.. code-block:: mysql
+
+
+ CREATE TABLE REL_countries (
+ country_code char(1) NOT NULL default '',
+ description varchar(10) NOT NULL default '',
+ PRIMARY KEY (country_code)
+ ) TYPE=MyISAM;
+
+ INSERT INTO REL_countries VALUES ('C', 'Canada');
+
+ CREATE TABLE REL_persons (
+ id tinyint(4) NOT NULL auto_increment,
+ person_name varchar(32) NOT NULL default '',
+ town_code varchar(5) default '0',
+ country_code char(1) NOT NULL default '',
+ PRIMARY KEY (id)
+ ) TYPE=MyISAM;
+
+ INSERT INTO REL_persons VALUES (11, 'Marc', 'S', '');
+ INSERT INTO REL_persons VALUES (15, 'Paul', 'S', 'C');
+
+ CREATE TABLE REL_towns (
+ town_code varchar(5) NOT NULL default '0',
+ description varchar(30) NOT NULL default '',
+ PRIMARY KEY (town_code)
+ ) TYPE=MyISAM;
+
+ INSERT INTO REL_towns VALUES ('S', 'Sherbrooke');
+ INSERT INTO REL_towns VALUES ('M', 'Montréal');
+
+To setup appropriate links and display information:
+
+* on table "REL\_persons" click Structure, then Relation view
+* for "town\_code", choose from dropdowns, "mydb", "REL\_towns", "code"
+ for foreign database, table and column respectively
+* for "country\_code", choose from dropdowns, "mydb", "REL\_countries",
+ "country\_code" for foreign database, table and column respectively
+* on table "REL\_towns" click Structure, then Relation view
+* in "Choose column to display", choose "description"
+* repeat the two previous steps for table "REL\_countries"
+
+Then test like this:
+
+* Click on your db name in the navigation panel
+* Choose "Query"
+* Use tables: persons, towns, countries
+* Click "Update query"
+* In the columns row, choose persons.person\_name and click the "Show"
+ tickbox
+* Do the same for towns.description and countries.descriptions in the
+ other 2 columns
+* Click "Update query" and you will see in the query box that the
+ correct joins have been generated
+* Click "Submit query"
+
+.. _faqdisplay:
+
+6.7 How can I use the "display column" feature?
+-----------------------------------------------
+
+Starting from the previous example, create the ``pma__table_info`` as
+explained in the configuration section, then browse your persons
+table, and move the mouse over a town code or country code. See also
+:ref:`faq6_21` for an additional feature that "display column"
+enables: drop-down list of possible values.
+
+.. _faqpdf:
+
+6.8 How can I produce a PDF schema of my database?
+--------------------------------------------------
+
+First the configuration variables "relation", "table\_coords" and
+"pdf\_pages" have to be filled in. Then you need to think about your
+schema layout. Which tables will go on which pages?
+
+* Select your database in the navigation panel.
+* Choose "Operations" in the navigation bar at the top.
+* Choose "Edit :term:`PDF` Pages" near the
+ bottom of the page.
+* Enter a name for the first :term:`PDF` page
+ and click Go. If you like, you can use the "automatic layout," which
+ will put all your linked tables onto the new page.
+* Select the name of the new page (making sure the Edit radio button is
+ selected) and click Go.
+* Select a table from the list, enter its coordinates and click Save.
+ Coordinates are relative; your diagram will be automatically scaled to
+ fit the page. When initially placing tables on the page, just pick any
+ coordinates -- say, 50x50. After clicking Save, you can then use the
+ :ref:`wysiwyg` to position the element correctly.
+* When you'd like to look at your :term:`PDF`, first be sure to click the Save
+ button beneath the list of tables and coordinates, to save any changes you
+ made there. Then scroll all the way down, select the :term:`PDF` options you
+ want, and click Go.
+* Internet Explorer for Windows may suggest an incorrect filename when
+ you try to save a generated :term:`PDF`.
+ When saving a generated :term:`PDF`, be
+ sure that the filename ends in ".pdf", for example "schema.pdf".
+ Browsers on other operating systems, and other browsers on Windows, do
+ not have this problem.
+
+.. _faq6_9:
+
+6.9 phpMyAdmin is changing the type of one of my columns!
+---------------------------------------------------------
+
+No, it's MySQL that is doing `silent column type changing
+`_.
+
+.. _underscore:
+
+6.10 When creating a privilege, what happens with underscores in the database name?
+-----------------------------------------------------------------------------------
+
+If you do not put a backslash before the underscore, this is a
+wildcard grant, and the underscore means "any character". So, if the
+database name is "john\_db", the user would get rights to john1db,
+john2db ... If you put a backslash before the underscore, it means
+that the database name will have a real underscore.
+
+.. _faq6_11:
+
+6.11 What is the curious symbol ø in the statistics pages?
+----------------------------------------------------------
+
+It means "average".
+
+.. _faqexport:
+
+6.12 I want to understand some Export options.
+----------------------------------------------
+
+**Structure:**
+
+* "Add DROP TABLE" will add a line telling MySQL to `drop the table
+ `_, if it already
+ exists during the import. It does NOT drop the table after your
+ export, it only affects the import file.
+* "If Not Exists" will only create the table if it doesn't exist.
+ Otherwise, you may get an error if the table name exists but has a
+ different structure.
+* "Add AUTO\_INCREMENT value" ensures that AUTO\_INCREMENT value (if
+ any) will be included in backup.
+* "Enclose table and column names with backquotes" ensures that column
+ and table names formed with special characters are protected.
+* "Add into comments" includes column comments, relations, and MIME
+ types set in the pmadb in the dump as :term:`SQL` comments
+ (*/\* xxx \*/*).
+
+**Data:**
+
+* "Complete inserts" adds the column names on every INSERT command, for
+ better documentation (but resulting file is bigger).
+* "Extended inserts" provides a shorter dump file by using only once the
+ INSERT verb and the table name.
+* "Delayed inserts" are best explained in the `MySQL manual - INSERT DELAYED Syntax
+ `_.
+* "Ignore inserts" treats errors as a warning instead. Again, more info
+ is provided in the `MySQL manual - INSERT Syntax
+ `_, but basically with
+ this selected, invalid values are adjusted and inserted rather than
+ causing the entire statement to fail.
+
+.. _faq6_13:
+
+6.13 I would like to create a database with a dot in its name.
+--------------------------------------------------------------
+
+This is a bad idea, because in MySQL the syntax "database.table" is
+the normal way to reference a database and table name. Worse, MySQL
+will usually let you create a database with a dot, but then you cannot
+work with it, nor delete it.
+
+.. _faqsqlvalidator:
+
+6.14 How do I set up the SQL Validator?
+---------------------------------------
+
+To use SQL Validator, you need PHP with :term:`XML`, :term:`PCRE` and
+:term:`PEAR` support. In addition you need a :term:`SOAP` support, either as a
+PHP extension or as a PEAR SOAP module.
+
+To install :term:`PEAR` :term:`SOAP` module, run :command:`pear install
+Net_Socket Net_URL HTTP_Request Mail_Mime Net_DIME SOAP` to get the necessary
+:term:`PEAR` modules for usage.
+
+If you use the Validator, you should be aware that any :term:`SQL` statement
+you submit will be stored anonymously (database/table/column names, strings,
+numbers replaced with generic values). The Mimer :term:`SQL` Validator itself,
+is © 2001 Upright Database Technology. We utilize it as free SOAP service.
+
+.. _faq6_15:
+
+6.15 I want to add a BLOB column and put an index on it, but MySQL says "BLOB column '...' used in key specification without a key length".
+-------------------------------------------------------------------------------------------------------------------------------------------
+
+The right way to do this, is to create the column without any indexes,
+then display the table structure and use the "Create an index" dialog.
+On this page, you will be able to choose your BLOB column, and set a
+size to the index, which is the condition to create an index on a BLOB
+column.
+
+.. _faq6_16:
+
+6.16 How can I simply move in page with plenty editing fields?
+--------------------------------------------------------------
+
+You can use :kbd:`Ctrl+arrows` (:kbd:`Option+Arrows` in Safari) for moving on
+most pages with many editing fields (table structure changes, row editing,
+etc.).
+
+.. _faq6_17:
+
+6.17 Transformations: I can't enter my own mimetype! WTF is this feature then useful for?
+-----------------------------------------------------------------------------------------
+
+Slow down :). Defining mimetypes is of no use, if you can't put
+transformations on them. Otherwise you could just put a comment on the
+column. Because entering your own mimetype will cause serious syntax
+checking issues and validation, this introduces a high-risk false-
+user-input situation. Instead you have to initialize mimetypes using
+functions or empty mimetype definitions.
+
+Plus, you have a whole overview of available mimetypes. Who knows all those
+mimetypes by heart so he/she can enter it at will?
+
+.. _faqbookmark:
+
+6.18 Bookmarks: Where can I store bookmarks? Why can't I see any bookmarks below the query box? What is this variable for?
+--------------------------------------------------------------------------------------------------------------------------
+
+Any query you have executed can be stored as a bookmark on the page
+where the results are displayed. You will find a button labeled
+'Bookmark this query' just at the end of the page. As soon as you have
+stored a bookmark, it is related to the database you run the query on.
+You can now access a bookmark dropdown on each page, the query box
+appears on for that database.
+
+You can also have, inside the query, a placeholder for a variable.
+This is done by inserting into the query a SQL comment between ``/*`` and
+``*/``. Inside the comment, the special string ``[VARIABLE]`` is used.
+Be aware that the whole query minus the SQL comment must be
+valid by itself, otherwise you won't be able to store it as a bookmark.
+
+When you execute the bookmark, everything typed into the *value*
+input box on the query box page will replace the string ``/*[VARIABLE]*/`` in
+your stored query.
+
+Also remember, that everything else inside the ``/*[VARIABLE]*/`` string for
+your query will remain the way it is, but will be stripped of the ``/**/``
+chars. So you can use:
+
+.. code-block:: mysql
+
+ /*, [VARIABLE] AS myname */
+
+which will be expanded to
+
+.. code-block:: mysql
+
+ , VARIABLE as myname
+
+in your query, where VARIABLE is the string you entered in the input box. If an
+empty string is provided, no replacements are made.
+
+A more complex example. Say you have stored
+this query:
+
+.. code-block:: mysql
+
+ SELECT Name, Address FROM addresses WHERE 1 /* AND Name LIKE '%[VARIABLE]%' */
+
+Say, you now enter "phpMyAdmin" as the variable for the stored query, the full
+query will be:
+
+.. code-block:: mysql
+
+ SELECT Name, Address FROM addresses WHERE 1 AND Name LIKE '%phpMyAdmin%'
+
+You can use multiple occurrences of ``/*[VARIABLE]*/`` in a single query
+(that is, multiple occurrences of the *same* variable).
+
+**NOTE THE ABSENCE OF SPACES** inside the ``/**/`` construct. Any spaces
+inserted there will be later also inserted as spaces in your query and may lead
+to unexpected results especially when using the variable expansion inside of a
+"LIKE ''" expression.
+
+Your initial query which is going to be stored as a bookmark has to yield at
+least one result row so you can store the bookmark. You may have that to work
+around using well positioned ``/**/`` comments.
+
+.. _faq6_19:
+
+6.19 How can I create simple LATEX document to include exported table?
+----------------------------------------------------------------------
+
+You can simply include table in your LATEX documents,
+minimal sample document should look like following one (assuming you
+have table exported in file :file:`table.tex`):
+
+.. code-block:: latex
+
+
+ \documentclass{article} % or any class you want
+ \usepackage{longtable} % for displaying table
+ \begin{document} % start of document
+ \include{table} % including exported table
+ \end{document} % end of document
+
+.. _faq6_20:
+
+6.20 I see a lot of databases which are not mine, and cannot access them.
+-------------------------------------------------------------------------
+
+You have one of these global privileges: CREATE TEMPORARY TABLES, SHOW
+DATABASES, LOCK TABLES. Those privileges also enable users to see all the
+database names. So if your users do not need those privileges, you can remove
+them and their databases list will shorten.
+
+.. seealso::
+
+.. _faq6_21:
+
+6.21 In edit/insert mode, how can I see a list of possible values for a column, based on some foreign table?
+------------------------------------------------------------------------------------------------------------
+
+You have to setup appropriate links between the tables, and also setup
+the "display column" in the foreign table. See :ref:`faq6_6` for an
+example. Then, if there are 100 values or less in the foreign table, a
+drop-down list of values will be available. You will see two lists of
+values, the first list containing the key and the display column, the
+second list containing the display column and the key. The reason for
+this is to be able to type the first letter of either the key or the
+display column. For 100 values or more, a distinct window will appear,
+to browse foreign key values and choose one. To change the default
+limit of 100, see :config:option:`$cfg['ForeignKeyMaxLimit']`.
+
+
+.. _faq6_22:
+
+6.22 Bookmarks: Can I execute a default bookmark automatically when entering Browse mode for a table?
+-----------------------------------------------------------------------------------------------------
+
+Yes. If a bookmark has the same label as a table name and it's not a
+public bookmark, it will be executed.
+
+.. _faq6_23:
+
+6.23 Export: I heard phpMyAdmin can export Microsoft Excel files?
+-----------------------------------------------------------------
+
+You can use :term:`CSV` for Microsoft Excel,
+which works out of the box.
+
+.. versionchanged:: 3.4.5
+ Since phpMyAdmin 3.4.5 support for direct export to Microsoft Excel version
+ 97 and newer was dropped.
+
+.. _faq6_24:
+
+6.24 Now that phpMyAdmin supports native MySQL 4.1.x column comments, what happens to my column comments stored in pmadb?
+-------------------------------------------------------------------------------------------------------------------------
+
+Automatic migration of a table's pmadb-style column comments to the
+native ones is done whenever you enter Structure page for this table.
+
+.. _faq6_25:
+
+6.25 (withdrawn).
+-----------------
+
+.. _faq6_26:
+
+6.26 How can I select a range of rows?
+--------------------------------------
+
+Click the first row of the range, hold the shift key and click the
+last row of the range. This works everywhere you see rows, for example
+in Browse mode or on the Structure page.
+
+.. _faq6_27:
+
+6.27 What format strings can I use?
+-----------------------------------
+
+In all places where phpMyAdmin accepts format strings, you can use
+``@VARIABLE@`` expansion and `strftime `_
+format strings. The expanded variables depend on a context (for
+example, if you haven't chosen a table, you can not get the table
+name), but the following variables can be used:
+
+``@HTTP_HOST@``
+ HTTP host that runs phpMyAdmin
+``@SERVER@``
+ MySQL server name
+``@VERBOSE@``
+ Verbose MySQL server name as defined in :config:option:`$cfg['Servers'][$i]['verbose']`
+``@VSERVER@``
+ Verbose MySQL server name if set, otherwise normal
+``@DATABASE@``
+ Currently opened database
+``@TABLE@``
+ Currently opened table
+``@COLUMNS@``
+ Columns of the currently opened table
+``@PHPMYADMIN@``
+ phpMyAdmin with version
+
+.. _wysiwyg:
+
+6.28 How can I easily edit relational schema for export?
+--------------------------------------------------------
+
+By clicking on the button 'toggle scratchboard' on the page where you
+edit x/y coordinates of those elements you can activate a scratchboard
+where all your elements are placed. By clicking on an element, you can
+move them around in the pre-defined area and the x/y coordinates will
+get updated dynamically. Likewise, when entering a new position
+directly into the input field, the new position in the scratchboard
+changes after your cursor leaves the input field.
+
+You have to click on the 'OK'-button below the tables to save the new
+positions. If you want to place a new element, first add it to the
+table of elements and then you can drag the new element around.
+
+By changing the paper size and the orientation you can change the size
+of the scratchboard as well. You can do so by just changing the
+dropdown field below, and the scratchboard will resize automatically,
+without interfering with the current placement of the elements.
+
+If ever an element gets out of range you can either enlarge the paper
+size or click on the 'reset' button to place all elements below each
+other.
+
+.. _faq6_29:
+
+6.29 Why can't I get a chart from my query result table?
+--------------------------------------------------------
+
+Not every table can be put to the chart. Only tables with one, two or
+three columns can be visualised as a chart. Moreover the table must be
+in a special format for chart script to understand it. Currently
+supported formats can be found in the `wiki `_.
+
+.. _faq6_30:
+
+6.30 Import: How can I import ESRI Shapefiles?
+----------------------------------------------
+
+An ESRI Shapefile is actually a set of several files, where .shp file
+contains geometry data and .dbf file contains data related to those
+geometry data. To read data from .dbf file you need to have PHP
+compiled with the dBase extension (--enable-dbase). Otherwise only
+geometry data will be imported.
+
+To upload these set of files you can use either of the following
+methods:
+
+Configure upload directory with :config:option:`$cfg['UploadDir']`, upload both .shp and .dbf files with
+the same filename and chose the .shp file from the import page.
+
+Create a Zip archive with .shp and .dbf files and import it. For this
+to work, you need to set :config:option:`$cfg['TempDir']` to a place where the web server user can
+write (for example ``'./tmp'``).
+
+To create the temporary directory on a UNIX-based system, you can do:
+
+.. code-block:: sh
+
+ cd phpMyAdmin
+ mkdir tmp
+ chmod o+rwx tmp
+
+.. _faq6_31:
+
+6.31 How do I create a relation in designer?
+--------------------------------------------
+
+To select relation, click: The display column is shown in pink. To
+set/unset a column as the display column, click the "Choose column to
+display" icon, then click on the appropriate column name.
+
+.. _faq6_32:
+
+6.32 How can I use the zoom search feature?
+-------------------------------------------
+
+The Zoom search feature is an alternative to table search feature. It allows
+you to explore a table by representing its data in a scatter plot. You can
+locate this feature by selecting a table and clicking the :guilabel:`Search`
+tab. One of the sub-tabs in the :guilabel:`Table Search` page is
+:guilabel:`Zoom Search`.
+
+Consider the table REL\_persons in :ref:`faq6_6` for
+an example. To use zoom search, two columns need to be selected, for
+example, id and town\_code. The id values will be represented on one
+axis and town\_code values on the other axis. Each row will be
+represented as a point in a scatter plot based on its id and
+town\_code. You can include two additional search criteria apart from
+the two fields to display.
+
+You can choose which field should be
+displayed as label for each point. If a display column has been set
+for the table (see :ref:`faqdisplay`), it is taken as the label unless
+you specify otherwise. You can also select the maximum number of rows
+you want to be displayed in the plot by specifing it in the 'Max rows
+to plot' field. Once you have decided over your criteria, click 'Go'
+to display the plot.
+
+After the plot is generated, you can use the
+mousewheel to zoom in and out of the plot. In addition, panning
+feature is enabled to navigate through the plot. You can zoom-in to a
+certail level of detail and use panning to locate your area of
+interest. Clicking on a point opens a dialogue box, displaying field
+values of the data row represented by the point. You can edit the
+values if required and click on submit to issue an update query. Basic
+instructions on how to use can be viewed by clicking the 'How to use?'
+link located just above the plot.
+
+.. _faq6_33:
+
+6.33 When browsing a table, how can I copy a column name?
+---------------------------------------------------------
+
+Selecting the name of the column within the browse table header cell
+for copying is difficult, as the columns support reordering by
+dragging the header cells as well as sorting by clicking on the linked
+column name. To copy a column name, double-click on the empty area
+next to the column name, when the tooltip tells you to do so. This
+will show you an input box with the column name. You may right-click
+the column name within this input box to copy it to your clipboard.
+
+.. _faqproject:
+
+phpMyAdmin project
+++++++++++++++++++
+
+.. _faq7_1:
+
+7.1 I have found a bug. How do I inform developers?
+---------------------------------------------------
+
+Our Bug Tracker is located at under the
+Bugs section. But please first discuss your bug with other users:
+.
+
+.. _faq7_2:
+
+7.2 I want to translate the messages to a new language or upgrade an existing language, where do I start?
+---------------------------------------------------------------------------------------------------------
+
+Translations are very welcome and all you need to have are the
+language skills. The easiest way is to use our `online translation
+service `_. You can check
+out all the possibilities to translate in the `translate section on
+our website `_.
+
+.. _faq7_3:
+
+7.3 I would like to help out with the development of phpMyAdmin. How should I proceed?
+--------------------------------------------------------------------------------------
+
+We welcome every contribution to the development of phpMyAdmin. You
+can check out all the possibilities to contribute in the `contribute
+section on our website
+`_.
+
+.. seealso:: :ref:`developers`
+
+.. _faqsecurity:
+
+Security
+++++++++
+
+.. _faq8_1:
+
+8.1 Where can I get information about the security alerts issued for phpMyAdmin?
+--------------------------------------------------------------------------------
+
+Please refer to .
+
+.. _faq8_2:
+
+8.2 How can I protect phpMyAdmin against brute force attacks?
+-------------------------------------------------------------
+
+If you use Apache web server, phpMyAdmin exports information about
+authentication to the Apache environment and it can be used in Apache
+logs. Currently there are two variables available:
+
+
+``userID``
+ User name of currently active user (he does not have to be logged in).
+``userStatus``
+ Status of currently active user, one of ``ok`` (user is logged in),
+ ``mysql-denied`` (MySQL denied user login), ``allow-denied`` (user denied
+ by allow/deny rules), ``root-denied`` (root is denied in configuration),
+ ``empty-denied`` (empty password is denied).
+
+``LogFormat`` directive for Apache can look like following:
+
+.. code-block:: apache
+
+ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined
+
+You can then use any log analyzing tools to detect possible break-in
+attempts.
+
+.. _faqsynchronization:
+
+Synchronization
++++++++++++++++
+
+.. _faq9_1:
+
+9.1 (withdrawn).
+----------------
+
+.. _faq9_2:
+
+9.2 (withdrawn).
+----------------
+
diff --git a/phpMyAdmin/doc/glossary.rst b/phpMyAdmin/doc/glossary.rst
new file mode 100644
index 0000000..d558b44
--- /dev/null
+++ b/phpMyAdmin/doc/glossary.rst
@@ -0,0 +1,406 @@
+.. _glossary:
+
+Glossary
+========
+
+From Wikipedia, the free encyclopedia
+
+.. glossary::
+
+ .htaccess
+ the default name of Apache's directory-level configuration file.
+
+ .. seealso::
+
+ ACL
+ Access Contol List
+
+ Blowfish
+ a keyed, symmetric block cipher, designed in 1993 by Bruce Schneier.
+
+ .. seealso::
+
+ Browser
+ a software application that enables a user to display and interact with text, images, and other information typically located on a web page at a website on the World Wide Web.
+
+ .. seealso::
+
+ bzip2
+ a free software/open source data compression algorithm and program developed by Julian Seward.
+
+ .. seealso::
+
+ CGI
+ Common Gateway Interface is an important World Wide Web technology that
+ enables a client web browser to request data from a program executed on
+ the Web server.
+
+ .. seealso::
+
+ Changelog
+ a log or record of changes made to a project.
+
+ .. seealso::
+
+ Client
+ a computer system that accesses a (remote) service on another computer by some kind of network.
+
+ .. seealso::
+
+ column
+ a set of data values of a particular simple type, one for each row of the table.
+
+ .. seealso::
+
+ Cookie
+ a packet of information sent by a server to a World Wide Web browser and then sent back by the browser each time it accesses that server.
+
+ .. seealso::
+
+ CSV
+ Comma- separated values
+
+ .. seealso::
+
+ DB
+ look at :term:`database`
+
+ database
+ an organized collection of data.
+
+ .. seealso::
+
+ Engine
+ look at :term:`storage engines`
+
+ extension
+ a PHP module that extends PHP with additional functionality.
+
+ .. seealso::
+
+ FAQ
+ Frequently Asked Questions is a list of commonly asked question and there
+ answers.
+
+ .. seealso::
+
+ Field
+ one part of divided data/columns.
+
+ .. seealso::
+
+ foreign key
+ a column or group of columns in a database row that point to a key column
+ or group of columns forming a key of another database row in some
+ (usually different) table.
+
+ .. seealso::
+
+ FPDF
+ the free :term:`PDF` library
+
+ .. seealso::
+
+ GD
+ Graphics Library by Thomas Boutell and others for dynamically manipulating images.
+
+ .. seealso::
+
+ GD2
+ look at :term:`gd`
+
+ gzip
+ gzip is short for GNU zip, a GNU free software file compression program.
+
+ .. seealso::
+
+ host
+ any machine connected to a computer network, a node that has a hostname.
+
+ .. seealso::
+
+ hostname
+ the unique name by which a network attached device is known on a network.
+
+ .. seealso::
+
+ HTTP
+ HyperText Transfer Protocol is the primary method used to transfer or
+ convey information on the World Wide Web.
+
+ .. seealso::
+
+ https
+ a :term:`HTTP`-connection with additional security measures.
+
+ .. seealso::
+
+ IEC
+ International Electrotechnical Commission
+
+ IIS
+ Internet Information Services is a set of Internet-based services for
+ servers using Microsoft Windows.
+
+ .. seealso::
+
+ Index
+ a feature that allows quick access to the rows in a table.
+
+ .. seealso::
+
+ IP
+ Internet Protocol is a data-oriented protocol used by source and
+ destination hosts for communicating data across a packet-switched
+ internetwork.
+
+ .. seealso::
+
+ IP Address
+ a unique number that devices use in order to identify and communicate with each other on a network utilizing the Internet Protocol standard.
+
+ .. seealso::
+
+ IPv6
+ IPv6 (Internet Protocol version 6) is the latest revision of the
+ Internet Protocol (:term:`IP`), designed to deal with the
+ long-anticipated problem of its precedessor IPv4 running out of addresses.
+
+ .. seealso::
+
+ ISAPI
+ Internet Server Application Programming Interface is the API of Internet Information Services (IIS).
+
+ .. seealso::
+
+ ISP
+ Internet service provider is a business or organization that offers users
+ access to the Internet and related services.
+
+ .. seealso::
+
+ ISO
+ International Standards Organisation
+
+ JPEG
+ a most commonly used standard method of lossy compression for photographic images.
+
+ .. seealso::
+
+ JPG
+ look at :term:`jpeg`
+
+ Key
+ look at :term:`index`
+
+ LATEX
+ a document preparation system for the TEX typesetting program.
+
+ .. seealso::
+
+ Mac
+ Apple Macintosh is line of personal computers is designed, developed, manufactured, and marketed by Apple Computer.
+
+ .. seealso::
+
+ Mac OS X
+ the operating system which is included with all currently shipping Apple Macintosh computers in the consumer and professional markets.
+
+ .. seealso::
+
+ MCrypt
+ a cryptographic library.
+
+ .. seealso::
+
+ mcrypt
+ the MCrypt PHP extension.
+
+ .. seealso::
+
+ MIME
+ Multipurpose Internet Mail Extensions is
+ an Internet Standard for the format of e-mail.
+
+ .. seealso::
+
+ module
+ some sort of extension for the Apache Webserver.
+
+ .. seealso::
+
+ MySQL
+ a multithreaded, multi-user, SQL (Structured Query Language) Database Management System (DBMS).
+
+ .. seealso::
+
+ mysqli
+ the improved MySQL client PHP extension.
+
+ .. seealso::
+
+ mysql
+ the MySQL client PHP extension.
+
+ .. seealso::
+
+ OpenDocument
+ open standard for office documents.
+
+ .. seealso::
+
+ OS X
+ look at :term:`Mac OS X`.
+
+ .. seealso::
+
+ PDF
+ Portable Document Format is a file format developed by Adobe Systems for
+ representing two dimensional documents in a device independent and
+ resolution independent format.
+
+ .. seealso::
+
+ PEAR
+ the PHP Extension and Application Repository.
+
+ .. seealso::
+
+ PCRE
+ Perl Compatible Regular Expressions is the perl-compatible regular
+ expression functions for PHP
+
+ .. seealso::
+
+ PHP
+ short for "PHP: Hypertext Preprocessor", is an open-source, reflective
+ programming language used mainly for developing server-side applications
+ and dynamic web content, and more recently, a broader range of software
+ applications.
+
+ .. seealso::
+
+ port
+ a connection through which data is sent and received.
+
+ .. seealso::
+
+ RFC
+ Request for Comments (RFC) documents are a series of memoranda
+ encompassing new research, innovations, and methodologies applicable to
+ Internet technologies.
+
+ .. seealso::
+
+ RFC 1952
+ GZIP file format specification version 4.3
+
+ .. seealso:: :rfc:`1952`
+
+ Row (record, tuple)
+ represents a single, implicitly structured data item in a table.
+
+ .. seealso::
+
+ Server
+ a computer system that provides services to other computing systems over a network.
+
+ .. seealso::
+
+ Storage Engines
+ handlers for different table types
+
+ .. seealso::
+
+ SOAP
+ Simple Object Access Protocol is a protocol specification for exchanging
+ structured information in the implementation of Web Services in computer
+ networks.
+
+ .. seealso::
+
+ socket
+ a form of inter-process communication.
+
+ .. seealso::
+
+ SSL
+ Secure Sockets Layer is a cryptographic protocol which provides secure
+ communication on the Internet.
+
+ .. seealso::
+
+ Stored procedure
+ a subroutine available to applications accessing a relational database system
+
+ .. seealso::
+
+ SQL
+ Structured Query Language
+
+ .. seealso::
+
+ table
+ a set of data elements (cells) that is organized, defined and stored as
+ horizontal rows and vertical columns where each item can be uniquely
+ identified by a label or key or by it?s position in relation to other
+ items.
+
+ .. seealso::
+
+ tar
+ a type of archive file format: the Tape ARchive format.
+
+ .. seealso::
+
+ TCP
+ Transmission Control Protocol is one of the core protocols of the
+ Internet protocol suite.
+
+ .. seealso::
+
+ TCPDF
+ Rewrite of :term:`UFPDF` with various improvements.
+
+ .. seealso::
+
+ trigger
+ a procedural code that is automatically executed in response to certain events on a particular table or view in a database
+
+ .. seealso::
+
+ UFPDF
+ Unicode/UTF-8 extension for :term:`FPDF`
+
+ .. seealso::
+
+ URL
+ Uniform Resource Locator is a sequence of characters, conforming to a
+ standardized format, that is used for referring to resources, such as
+ documents and images on the Internet, by their location.
+
+ .. seealso::
+
+ Webserver
+ A computer (program) that is responsible for accepting HTTP requests from clients and serving them Web pages.
+
+ .. seealso::
+
+ XML
+ Extensible Markup Language is a W3C-recommended general- purpose markup
+ language for creating special-purpose markup languages, capable of
+ describing many different kinds of data.
+
+ .. seealso::
+
+ ZIP
+ a popular data compression and archival format.
+
+ .. seealso::
+
+ zlib
+ an open-source, cross- platform data compression library by Jean-loup Gailly and Mark Adler.
+
+ .. seealso::
+
+
diff --git a/phpMyAdmin/doc/html/.buildinfo b/phpMyAdmin/doc/html/.buildinfo
new file mode 100644
index 0000000..b56b700
--- /dev/null
+++ b/phpMyAdmin/doc/html/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 661dfadb8b10bc8a0f43a21cb0b27db8
+tags: fbb0d17656682115ca4d033fb2f83ba1
diff --git a/phpMyAdmin/doc/html/_sources/config.txt b/phpMyAdmin/doc/html/_sources/config.txt
new file mode 100644
index 0000000..c8c04b2
--- /dev/null
+++ b/phpMyAdmin/doc/html/_sources/config.txt
@@ -0,0 +1,2813 @@
+.. index:: config.inc.php
+
+.. _config:
+
+Configuration
+=============
+
+Almost all configurable data is placed in :file:`config.inc.php`. If this file
+does not exist, please refer to the :ref:`setup` section to create one. This
+file only needs to contain the parameters you want to change from their
+corresponding default value in :file:`libraries/config.default.php`.
+
+If a directive is missing from your file, you can just add another line with
+the file. This file is for over-writing the defaults; if you wish to use the
+default value there's no need to add a line here.
+
+The parameters which relate to design (like colors) are placed in
+:file:`themes/themename/layout.inc.php`. You might also want to create
+:file:`config.footer.inc.php` and :file:`config.header.inc.php` files to add
+your site specific code to be included on start and end of each page.
+
+.. note::
+
+ Some distributions (eg. Debian or Ubuntu) store :file:`config.inc.php` in
+ ``/etc/phpmyadmin`` instead of within phpMyAdmin sources.
+
+.. warning::
+
+ :term:`Mac` users should note that if you are on a version before
+ :term:`Mac OS X`, PHP does not seem to
+ like :term:`Mac` end of lines character (``\r``). So
+ ensure you choose the option that allows to use the \*nix end of line
+ character (``\n``) in your text editor before saving a script you have
+ modified.
+
+Basic settings
+--------------
+
+.. config:option:: $cfg['PmaAbsoluteUri']
+
+ :type: string
+ :default: ``''``
+
+ Sets here the complete :term:`URL` (with full path) to your phpMyAdmin
+ installation's directory. E.g.
+ ``http://www.example.net/path_to_your_phpMyAdmin_directory/``. Note also
+ that the :term:`URL` on most of web servers are case–sensitive. Don’t
+ forget the trailing slash at the end.
+
+ Starting with version 2.3.0, it is advisable to try leaving this blank. In
+ most cases phpMyAdmin automatically detects the proper setting. Users of
+ port forwarding will need to set :config:option:`$cfg['PmaAbsoluteUri']`
+ (`more info `_).
+
+ A good test is to browse a table, edit a row and save it. There should be
+ an error message if phpMyAdmin is having trouble auto–detecting the correct
+ value. If you get an error that this must be set or if the autodetect code
+ fails to detect your path, please post a bug report on our bug tracker so
+ we can improve the code.
+
+ .. seealso:: :ref:`faq1_40`
+
+.. config:option:: $cfg['PmaNoRelation_DisableWarning']
+
+ :type: boolean
+ :default: false
+
+ Starting with version 2.3.0 phpMyAdmin offers a lot of features to
+ work with master / foreign – tables (see :config:option:`$cfg['Servers'][$i]['pmadb']`).
+
+ If you tried to set this
+ up and it does not work for you, have a look on the :guilabel:`Structure` page
+ of one database where you would like to use it. You will find a link
+ that will analyze why those features have been disabled.
+
+ If you do not want to use those features set this variable to ``true`` to
+ stop this message from appearing.
+
+.. config:option:: $cfg['SuhosinDisableWarning']
+
+ :type: boolean
+ :default: false
+
+ A warning is displayed on the main page if Suhosin is detected.
+
+ You can set this parameter to ``true`` to stop this message from appearing.
+
+.. config:option:: $cfg['McryptDisableWarning']
+
+ :type: boolean
+ :default: false
+
+ Disable the default warning that is displayed if mcrypt is missing for
+ cookie authentication.
+
+ You can set this parameter to ``true`` to stop this message from appearing.
+
+.. config:option:: $cfg['ServerLibraryDifference_DisableWarning']
+
+ :type: boolean
+ :default: false
+
+ A warning is displayed on the main page if there is a difference
+ between the MySQL library and server version.
+
+ You can set this parameter to ``true`` to stop this message from appearing.
+
+.. config:option:: $cfg['ReservedWordDisableWarning']
+
+ :type: boolean
+ :default: false
+
+ This warning is displayed on the Structure page of a table if one or more
+ column names match with words which are MySQL reserved.
+
+ If you want to turn off this warning, you can set it to ``true`` and
+ warning will no longer be displayed.
+
+.. config:option:: $cfg['TranslationWarningThreshold']
+
+ :type: integer
+ :default: 80
+
+ Show warning about incomplete translations on certain threshold.
+
+.. config:option:: $cfg['SendErrorReports']
+
+ :type: string
+ :default: ``'ask'``
+
+ Sets the default behavior for JavaScript error reporting.
+
+ Whenever an error is detected in the JavaScript execution, an error report
+ may be sent to the phpMyAdmin team if the user agrees.
+
+ The default setting of ``'ask'`` will ask the user everytime there is a new
+ error report. However you can set this parameter to ``'always'`` to send error
+ reports without asking for confirmation or you can set it to ``'never'`` to
+ never send error reports.
+
+ This directive is available both in the configuration file and in users
+ preferences. If the person in charge of a multi-user installation prefers
+ to disable this feature for all users, a value of ``'never'`` should be
+ set, and the :config:option:`$cfg['UserprefsDisallow']` directive should
+ contain ``'SendErrorReports'`` in one of its array values.
+
+.. config:option:: $cfg['AllowThirdPartyFraming']
+
+ :type: boolean
+ :default: false
+
+ Setting this to ``true`` allows phpMyAdmin to be included inside a frame,
+ and is a potential security hole allowing cross-frame scripting attacks or
+ clickjacking.
+
+Server connection settings
+--------------------------
+
+.. config:option:: $cfg['Servers']
+
+ :type: array
+ :default: one server array with settings listed bellow
+
+ Since version 1.4.2, phpMyAdmin supports the administration of multiple
+ MySQL servers. Therefore, a :config:option:`$cfg['Servers']`-array has been
+ added which contains the login information for the different servers. The
+ first :config:option:`$cfg['Servers'][$i]['host']` contains the hostname of
+ the first server, the second :config:option:`$cfg['Servers'][$i]['host']`
+ the hostname of the second server, etc. In
+ :file:`libraries/config.default.php`, there is only one section for server
+ definition, however you can put as many as you need in
+ :file:`config.inc.php`, copy that block or needed parts (you don't have to
+ define all settings, just those you need to change).
+
+ .. note::
+
+ The :config:option:`$cfg['Servers']` array starts with
+ $cfg['Servers'][1]. Do not use $cfg['Servers'][0]. If you want more
+ than one server, just copy following section (including $i
+ incrementation) serveral times. There is no need to define full server
+ array, just define values you need to change.
+
+
+.. config:option:: $cfg['Servers'][$i]['host']
+
+ :type: string
+ :default: ``'localhost'``
+
+ The hostname or :term:`IP` address of your $i-th MySQL-server. E.g.
+ ``localhost``.
+
+ Possible values are:
+
+ * hostname, e.g., ``'localhost'`` or ``'mydb.example.org'``
+ * IP address, e.g., ``'127.0.0.1'`` or ``'192.168.10.1'``
+ * dot - ``'.'``, i.e., use named pipes on windows systems
+ * empty - ``''``, disables this server
+
+ .. note::
+
+ phpMyAdmin supports connecting to MySQL servers reachable via IPv6 only.
+ To connect to an IPv6 MySQL server, enter its IPv6 address in this field.
+
+.. config:option:: $cfg['Servers'][$i]['port']
+
+ :type: string
+ :default: ``''``
+
+ The port-number of your $i-th MySQL-server. Default is 3306 (leave
+ blank).
+
+ .. note::
+
+ If you use ``localhost`` as the hostname, MySQL ignores this port number
+ and connects with the socket, so if you want to connect to a port
+ different from the default port, use ``127.0.0.1`` or the real hostname
+ in :config:option:`$cfg['Servers'][$i]['host']`.
+
+.. config:option:: $cfg['Servers'][$i]['socket']
+
+ :type: string
+ :default: ``''``
+
+ The path to the socket to use. Leave blank for default. To determine
+ the correct socket, check your MySQL configuration or, using the
+ :command:`mysql` command–line client, issue the ``status`` command. Among the
+ resulting information displayed will be the socket used.
+
+.. config:option:: $cfg['Servers'][$i]['ssl']
+
+ :type: boolean
+ :default: false
+
+ Whether to enable SSL for the connection between phpMyAdmin and the MySQL server.
+
+ When using :config:option:`$cfg['Servers'][$i]['extension']` = ``'mysql'``,
+ none of the remaining ``'ssl...'`` configuration options apply.
+
+ We strongly recommend using :config:option:`$cfg['Servers'][$i]['extension']` = ``'mysqli'``
+ when using this option.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_key']
+
+ :type: string
+ :default: NULL
+
+ Path to the key file when using SSL for connecting to the MySQL server.
+
+ For example:
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['ssl_key'] = '/etc/mysql/server-key.pem';
+
+.. config:option:: $cfg['Servers'][$i]['ssl_cert']
+
+ :type: string
+ :default: NULL
+
+ Path to the cert file when using SSL for connecting to the MySQL server.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_ca']
+
+ :type: string
+ :default: NULL
+
+ Path to the CA file when using SSL for connecting to the MySQL server.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_ca_path']
+
+ :type: string
+ :default: NULL
+
+ Directory containing trusted SSL CA certificates in PEM format.
+
+.. config:option:: $cfg['Servers'][$i]['ssl_ciphers']
+
+ :type: string
+ :default: NULL
+
+ List of allowable ciphers for SSL connections to the MySQL server.
+
+.. config:option:: $cfg['Servers'][$i]['connect_type']
+
+ :type: string
+ :default: ``'tcp'``
+
+ What type connection to use with the MySQL server. Your options are
+ ``'socket'`` and ``'tcp'``. It defaults to tcp as that is nearly guaranteed
+ to be available on all MySQL servers, while sockets are not supported on
+ some platforms. To use the socket mode, your MySQL server must be on the
+ same machine as the Web server.
+
+.. config:option:: $cfg['Servers'][$i]['extension']
+
+ :type: string
+ :default: ``'mysqli'``
+
+ What php MySQL extension to use for the connection. Valid options are:
+
+ ``mysql``
+ The classic MySQL extension.
+
+ ``mysqli``
+ The improved MySQL extension. This extension became available with PHP
+ 5.0.0 and is the recommended way to connect to a server running MySQL
+ 4.1.x or newer.
+
+.. config:option:: $cfg['Servers'][$i]['compress']
+
+ :type: boolean
+ :default: false
+
+ Whether to use a compressed protocol for the MySQL server connection
+ or not (experimental).
+
+.. _controlhost:
+.. config:option:: $cfg['Servers'][$i]['controlhost']
+
+ :type: string
+ :default: ``''``
+
+ Permits to use an alternate host to hold the configuration storage
+ data.
+
+.. _controlport:
+.. config:option:: $cfg['Servers'][$i]['controlport']
+
+ :type: string
+ :default: ``''``
+
+ Permits to use an alternate port to connect to the host that
+ holds the configuration storage.
+
+.. _controluser:
+.. config:option:: $cfg['Servers'][$i]['controluser']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['Servers'][$i]['controlpass']
+
+ :type: string
+ :default: ``''``
+
+ This special account is used for 2 distinct purposes: to make possible all
+ relational features (see :config:option:`$cfg['Servers'][$i]['pmadb']`) and,
+ for a MySQL server running with ``--skip-show-database``, to enable a
+ multi-user installation (:term:`HTTP` or cookie
+ authentication mode).
+
+ When using :term:`HTTP` or
+ cookie authentication modes (or 'config' authentication mode since phpMyAdmin
+ 2.2.1), you need to supply the details of a MySQL account that has ``SELECT``
+ privilege on the *mysql.user (all columns except "Password")*, *mysql.db (all
+ columns)* and *mysql.tables\_priv (all columns except "Grantor" and
+ "Timestamp")* tables. This account is used to check what databases the user
+ will see at login.
+
+ .. versionchanged:: 2.2.5
+ those were called ``stduser`` and ``stdpass``
+
+ .. seealso:: :ref:`setup`, :ref:`authentication_modes`
+
+.. config:option:: $cfg['Servers'][$i]['auth_type']
+
+ :type: string
+ :default: ``'cookie'``
+
+ Whether config or cookie or :term:`HTTP` or signon authentication should be
+ used for this server.
+
+ * 'config' authentication (``$auth_type = 'config'``) is the plain old
+ way: username and password are stored in :file:`config.inc.php`.
+ * 'cookie' authentication mode (``$auth_type = 'cookie'``) as
+ introduced in 2.2.3 allows you to log in as any valid MySQL user with
+ the help of cookies. Username and password are stored in cookies
+ during the session and password is deleted when it ends. This can also
+ allow you to log in in arbitrary server if :config:option:`$cfg['AllowArbitraryServer']` enabled.
+ * 'http' authentication (was
+ called 'advanced' in previous versions and can be written also as
+ 'http') (``$auth_type = 'http';'``) as introduced in 1.3.0 allows you to log in as any
+ valid MySQL user via HTTP-Auth.
+ * 'signon' authentication mode (``$auth_type = 'signon'``) as
+ introduced in 2.10.0 allows you to log in from prepared PHP session
+ data or using supplied PHP script. This is useful for implementing
+ single signon from another application. Sample way how to seed session
+ is in signon example: :file:`examples/signon.php`. There is also
+ alternative example using OpenID - :file:`examples/openid.php` and example
+ for scripts based solution - :file:`examples/signon-script.php`. You need
+ to configure :config:option:`$cfg['Servers'][$i]['SignonSession']` or
+ :config:option:`$cfg['Servers'][$i]['SignonScript']` and
+ :config:option:`$cfg['Servers'][$i]['SignonURL']` to use this authentication
+ method.
+
+ .. seealso:: :ref:`authentication_modes`
+
+.. _servers_auth_http_realm:
+.. config:option:: $cfg['Servers'][$i]['auth_http_realm']
+
+ :type: string
+ :default: ``''``
+
+ When using auth\_type = ``http``, this field allows to define a custom
+ :term:`HTTP` Basic Auth Realm which will be displayed to the user. If not
+ explicitly specified in your configuration, a string combined of
+ "phpMyAdmin " and either :config:option:`$cfg['Servers'][$i]['verbose']` or
+ :config:option:`$cfg['Servers'][$i]['host']` will be used.
+
+.. _servers_auth_swekey_config:
+.. config:option:: $cfg['Servers'][$i]['auth_swekey_config']
+
+ :type: string
+ :default: ``''``
+
+ The name of the file containing :ref:`swekey` ids and login names for hardware
+ authentication. Leave empty to deactivate this feature.
+
+.. _servers_user:
+.. config:option:: $cfg['Servers'][$i]['user']
+
+ :type: string
+ :default: ``'root'``
+
+.. config:option:: $cfg['Servers'][$i]['password']
+
+ :type: string
+ :default: ``''``
+
+ When using :config:option:`$cfg['Servers'][$i]['auth_type']` set to
+ 'config', this is the user/password-pair which phpMyAdmin will use to
+ connect to the MySQL server. This user/password pair is not needed when
+ :term:`HTTP` or cookie authentication is used
+ and should be empty.
+
+.. _servers_nopassword:
+.. config:option:: $cfg['Servers'][$i]['nopassword']
+
+ :type: boolean
+ :default: false
+
+ Allow attempt to log in without password when a login with password
+ fails. This can be used together with http authentication, when
+ authentication is done some other way and phpMyAdmin gets user name
+ from auth and uses empty password for connecting to MySQL. Password
+ login is still tried first, but as fallback, no password method is
+ tried.
+
+.. _servers_only_db:
+.. config:option:: $cfg['Servers'][$i]['only_db']
+
+ :type: string or array
+ :default: ``''``
+
+ If set to a (an array of) database name(s), only this (these)
+ database(s) will be shown to the user. Since phpMyAdmin 2.2.1,
+ this/these database(s) name(s) may contain MySQL wildcards characters
+ ("\_" and "%"): if you want to use literal instances of these
+ characters, escape them (I.E. use ``'my\_db'`` and not ``'my_db'``).
+
+ This setting is an efficient way to lower the server load since the
+ latter does not need to send MySQL requests to build the available
+ database list. But **it does not replace the privileges rules of the
+ MySQL database server**. If set, it just means only these databases
+ will be displayed but **not that all other databases can't be used.**
+
+ An example of using more that one database:
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['only_db'] = array('db1', 'db2');
+
+ .. versionchanged:: 4.0.0
+ Previous versions permitted to specify the display order of
+ the database names via this directive.
+
+.. config:option:: $cfg['Servers'][$i]['hide_db']
+
+ :type: string
+ :default: ``''``
+
+ Regular expression for hiding some databases from unprivileged users.
+ This only hides them from listing, but a user is still able to access
+ them (using, for example, the SQL query area). To limit access, use
+ the MySQL privilege system. For example, to hide all databases
+ starting with the letter "a", use
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['hide_db'] = '^a';
+
+ and to hide both "db1" and "db2" use
+
+ .. code-block:: php
+
+ $cfg['Servers'][$i]['hide_db'] = '^(db1|db2)$';
+
+ More information on regular expressions can be found in the `PCRE
+ pattern syntax
+ `_ portion
+ of the PHP reference manual.
+
+.. config:option:: $cfg['Servers'][$i]['verbose']
+
+ :type: string
+ :default: ``''``
+
+ Only useful when using phpMyAdmin with multiple server entries. If
+ set, this string will be displayed instead of the hostname in the
+ pull-down menu on the main page. This can be useful if you want to
+ show only certain databases on your system, for example. For HTTP
+ auth, all non-US-ASCII characters will be stripped.
+
+.. config:option:: $cfg['Servers'][$i]['pmadb']
+
+ :type: string
+ :default: ``''``
+
+ The name of the database containing the phpMyAdmin configuration
+ storage.
+
+ See the :ref:`linked-tables` section in this document to see the benefits of
+ this feature, and for a quick way of creating this database and the needed
+ tables.
+
+ If you are the only user of this phpMyAdmin installation, you can use your
+ current database to store those special tables; in this case, just put your
+ current database name in :config:option:`$cfg['Servers'][$i]['pmadb']`. For a
+ multi-user installation, set this parameter to the name of your central
+ database containing the phpMyAdmin configuration storage.
+
+.. _bookmark:
+.. config:option:: $cfg['Servers'][$i]['bookmarktable']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.2.0 phpMyAdmin allows users to bookmark queries. This
+ can be useful for queries you often run. To allow the usage of this
+ functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * enter the table name in :config:option:`$cfg['Servers'][$i]['bookmarktable']`
+
+
+.. _relation:
+.. config:option:: $cfg['Servers'][$i]['relation']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.2.4 you can describe, in a special 'relation' table,
+ which column is a key in another table (a foreign key). phpMyAdmin
+ currently uses this to:
+
+ * make clickable, when you browse the master table, the data values that
+ point to the foreign table;
+ * display in an optional tool-tip the "display column" when browsing the
+ master table, if you move the mouse to a column containing a foreign
+ key (use also the 'table\_info' table); (see :ref:`faqdisplay`)
+ * in edit/insert mode, display a drop-down list of possible foreign keys
+ (key value and "display column" are shown) (see :ref:`faq6_21`)
+ * display links on the table properties page, to check referential
+ integrity (display missing foreign keys) for each described key;
+ * in query-by-example, create automatic joins (see :ref:`faq6_6`)
+ * enable you to get a :term:`PDF` schema of
+ your database (also uses the table\_coords table).
+
+ The keys can be numeric or character.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the relation table name in :config:option:`$cfg['Servers'][$i]['relation']`
+ * now as normal user open phpMyAdmin and for each one of your tables
+ where you want to use this feature, click :guilabel:`Structure/Relation view/`
+ and choose foreign columns.
+
+ .. note::
+
+ In the current version, ``master_db`` must be the same as ``foreign_db``.
+ Those columns have been put in future development of the cross-db
+ relations.
+
+.. _table_info:
+.. config:option:: $cfg['Servers'][$i]['table_info']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.3.0 you can describe, in a special 'table\_info'
+ table, which column is to be displayed as a tool-tip when moving the
+ cursor over the corresponding key. This configuration variable will
+ hold the name of this special table. To allow the usage of this
+ functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['table\_info']` (e.g.
+ ``pma__table_info``)
+ * then for each table where you want to use this feature, click
+ "Structure/Relation view/Choose column to display" to choose the
+ column.
+
+ .. seealso:: :ref:`faqdisplay`
+
+.. _table_coords:
+.. config:option:: $cfg['Servers'][$i]['table_coords']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['Servers'][$i]['pdf_pages']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.3.0 you can have phpMyAdmin create :term:`PDF` pages
+ showing the relations between your tables. To do this it needs two tables
+ "pdf\_pages" (storing information about the available :term:`PDF` pages)
+ and "table\_coords" (storing coordinates where each table will be placed on
+ a :term:`PDF` schema output). You must be using the "relation" feature.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the correct table names in
+ :config:option:`$cfg['Servers'][$i]['table\_coords']` and
+ :config:option:`$cfg['Servers'][$i]['pdf\_pages']`
+
+ .. seealso:: :ref:`faqpdf`.
+
+.. _col_com:
+.. config:option:: $cfg['Servers'][$i]['column_info']
+
+ :type: string
+ :default: ``''``
+
+ This part requires a content update! Since release 2.3.0 you can
+ store comments to describe each column for each table. These will then
+ be shown on the "printview".
+
+ Starting with release 2.5.0, comments are consequently used on the table
+ property pages and table browse view, showing up as tool-tips above the
+ column name (properties page) or embedded within the header of table in
+ browse view. They can also be shown in a table dump. Please see the
+ relevant configuration directives later on.
+
+ Also new in release 2.5.0 is a MIME- transformation system which is also
+ based on the following table structure. See :ref:`transformations` for
+ further information. To use the MIME- transformation system, your
+ column\_info table has to have the three new columns 'mimetype',
+ 'transformation', 'transformation\_options'.
+
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['column\_info']` (e.g.
+ ``pma__column_info``)
+ * to update your PRE-2.5.0 Column\_comments Table use this: and
+ remember that the Variable in :file:`config.inc.php` has been renamed from
+ :config:option:`$cfg['Servers'][$i]['column\_comments']` to
+ :config:option:`$cfg['Servers'][$i]['column\_info']`
+
+ .. code-block:: mysql
+
+ ALTER TABLE `pma__column_comments`
+ ADD `mimetype` VARCHAR( 255 ) NOT NULL,
+ ADD `transformation` VARCHAR( 255 ) NOT NULL,
+ ADD `transformation_options` VARCHAR( 255 ) NOT NULL;
+
+.. _history:
+.. config:option:: $cfg['Servers'][$i]['history']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.5.0 you can store your :term:`SQL` history, which means all
+ queries you entered manually into the phpMyAdmin interface. If you don't
+ want to use a table-based history, you can use the JavaScript-based
+ history.
+
+ Using that, all your history items are deleted when closing the window.
+ Using :config:option:`$cfg['QueryHistoryMax']` you can specify an amount of
+ history items you want to have on hold. On every login, this list gets cut
+ to the maximum amount.
+
+ The query history is only available if JavaScript is enabled in
+ your browser.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['history']` (e.g.
+ ``pma__history``)
+
+.. _recent:
+.. config:option:: $cfg['Servers'][$i]['recent']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.5.0 you can show recently used tables in the
+ navigation panel. It helps you to jump across table directly, without
+ the need to select the database, and then select the table. Using
+ :config:option:`$cfg['NumRecentTables']` you can configure the maximum number
+ of recent tables shown. When you select a table from the list, it will jump to
+ the page specified in :config:option:`$cfg['NavigationTreeDefaultTabTable']`.
+
+
+ Without configuring the storage, you can still access the recently used tables,
+ but it will disappear after you logout.
+
+ To allow the usage of this functionality persistently:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['recent']` (e.g.
+ ``pma__recent``)
+
+.. _table_uiprefs:
+.. config:option:: $cfg['Servers'][$i]['table_uiprefs']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.5.0 phpMyAdmin can be configured to remember several
+ things (sorted column :config:option:`$cfg['RememberSorting']`, column order,
+ and column visibility from a database table) for browsing tables. Without
+ configuring the storage, these features still can be used, but the values will
+ disappear after you logout.
+
+ To allow the usage of these functionality persistently:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['table\_uiprefs']` (e.g.
+ ``pma__table_uiprefs``)
+
+.. _configurablemenus:
+.. config:option:: $cfg['Servers'][$i]['users']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['Servers'][$i]['usergroups']
+
+ :type: string
+ :default: ``''``
+
+ Since release 4.1.0 you can create different user groups with menu items
+ attached to them. Users can be assigned to these groups and the logged in
+ user would only see menu items configured to the usergroup he is assigned to.
+ To do this it needs two tables "usergroups" (storing allowed menu items for each
+ user group) and "users" (storing users and their assignments to user groups).
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the correct table names in
+ :config:option:`$cfg['Servers'][$i]['users']` (e.g. ``pma__users``) and
+ :config:option:`$cfg['Servers'][$i]['usergroups']` (e.g. ``pma__usergroups``)
+
+.. _navigationhiding:
+.. config:option:: $cfg['Servers'][$i]['navigationhiding']
+
+ :type: string
+ :default: ``''``
+
+ Since release 4.1.0 you can hide/show items in the navigation tree.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['navigationhiding']` (e.g.
+ ``pma__navigationhiding``)
+
+.. _tracking:
+.. config:option:: $cfg['Servers'][$i]['tracking']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.3.x a tracking mechanism is available. It helps you to
+ track every :term:`SQL` command which is
+ executed by phpMyAdmin. The mechanism supports logging of data
+ manipulation and data definition statements. After enabling it you can
+ create versions of tables.
+
+ The creation of a version has two effects:
+
+ * phpMyAdmin saves a snapshot of the table, including structure and
+ indexes.
+ * phpMyAdmin logs all commands which change the structure and/or data of
+ the table and links these commands with the version number.
+
+ Of course you can view the tracked changes. On the :guilabel:`Tracking`
+ page a complete report is available for every version. For the report you
+ can use filters, for example you can get a list of statements within a date
+ range. When you want to filter usernames you can enter \* for all names or
+ you enter a list of names separated by ','. In addition you can export the
+ (filtered) report to a file or to a temporary database.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['tracking']` (e.g.
+ ``pma__tracking``)
+
+
+.. _tracking2:
+.. config:option:: $cfg['Servers'][$i]['tracking_version_auto_create']
+
+ :type: boolean
+ :default: false
+
+ Whether the tracking mechanism creates versions for tables and views
+ automatically.
+
+ If this is set to true and you create a table or view with
+
+ * CREATE TABLE ...
+ * CREATE VIEW ...
+
+ and no version exists for it, the mechanism will create a version for
+ you automatically.
+
+.. _tracking3:
+.. config:option:: $cfg['Servers'][$i]['tracking_default_statements']
+
+ :type: string
+ :default: ``'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,DROP INDEX,INSERT,UPDATE,DELETE,TRUNCATE,REPLACE,CREATE VIEW,ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE'``
+
+ Defines the list of statements the auto-creation uses for new
+ versions.
+
+.. _tracking4:
+.. config:option:: $cfg['Servers'][$i]['tracking_add_drop_view']
+
+ :type: boolean
+ :default: true
+
+ Whether a DROP VIEW IF EXISTS statement will be added as first line to
+ the log when creating a view.
+
+.. _tracking5:
+.. config:option:: $cfg['Servers'][$i]['tracking_add_drop_table']
+
+ :type: boolean
+ :default: true
+
+ Whether a DROP TABLE IF EXISTS statement will be added as first line
+ to the log when creating a table.
+
+.. _tracking6:
+.. config:option:: $cfg['Servers'][$i]['tracking_add_drop_database']
+
+ :type: boolean
+ :default: true
+
+ Whether a DROP DATABASE IF EXISTS statement will be added as first
+ line to the log when creating a database.
+
+.. _userconfig:
+.. config:option:: $cfg['Servers'][$i]['userconfig']
+
+ :type: string
+ :default: ``''``
+
+ Since release 3.4.x phpMyAdmin allows users to set most preferences by
+ themselves and store them in the database.
+
+ If you don't allow for storing preferences in
+ :config:option:`$cfg['Servers'][$i]['pmadb']`, users can still personalize
+ phpMyAdmin, but settings will be saved in browser's local storage, or, it
+ is is unavailable, until the end of session.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['userconfig']`
+
+
+
+.. _designer_coords:
+.. config:option:: $cfg['Servers'][$i]['designer_coords']
+
+ :type: string
+ :default: ``''``
+
+ Since release 2.10.0 a Designer interface is available; it permits to
+ visually manage the relations.
+
+ To allow the usage of this functionality:
+
+ * set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
+ * put the table name in :config:option:`$cfg['Servers'][$i]['designer\_coords']`
+ (e.g. ``pma__designer_coords``)
+
+
+
+.. config:option:: $cfg['Servers'][$i]['MaxTableUiprefs']
+
+ :type: integer
+ :default: 100
+
+ Maximum number of rows saved in
+ :config:option:`$cfg['Servers'][$i]['table_uiprefs']` table.
+
+ When tables are dropped or renamed,
+ :config:option:`$cfg['Servers'][$i]['table_uiprefs']` may contain invalid data
+ (referring to tables which no longer exist). We only keep this number of newest
+ rows in :config:option:`$cfg['Servers'][$i]['table_uiprefs']` and automatically
+ delete older rows.
+
+.. config:option:: $cfg['Servers'][$i]['AllowRoot']
+
+ :type: boolean
+ :default: true
+
+ Whether to allow root access. This is just a shortcut for the
+ :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` below.
+
+.. config:option:: $cfg['Servers'][$i]['AllowNoPassword']
+
+ :type: boolean
+ :default: false
+
+ Whether to allow logins without a password. The default value of
+ ``false`` for this parameter prevents unintended access to a MySQL
+ server with was left with an empty password for root or on which an
+ anonymous (blank) user is defined.
+
+.. _servers_allowdeny_order:
+.. config:option:: $cfg['Servers'][$i]['AllowDeny']['order']
+
+ :type: string
+ :default: ``''``
+
+ If your rule order is empty, then :term:`IP`
+ authorization is disabled.
+
+ If your rule order is set to
+ ``'deny,allow'`` then the system applies all deny rules followed by
+ allow rules. Access is allowed by default. Any client which does not
+ match a Deny command or does match an Allow command will be allowed
+ access to the server.
+
+ If your rule order is set to ``'allow,deny'``
+ then the system applies all allow rules followed by deny rules. Access
+ is denied by default. Any client which does not match an Allow
+ directive or does match a Deny directive will be denied access to the
+ server.
+
+ If your rule order is set to ``'explicit'``, authorization is
+ performed in a similar fashion to rule order 'deny,allow', with the
+ added restriction that your host/username combination **must** be
+ listed in the *allow* rules, and not listed in the *deny* rules. This
+ is the **most** secure means of using Allow/Deny rules, and was
+ available in Apache by specifying allow and deny rules without setting
+ any order.
+
+ Please also see :config:option:`$cfg['TrustedProxies']` for
+ detecting IP address behind proxies.
+
+.. _servers_allowdeny_rules:
+.. config:option:: $cfg['Servers'][$i]['AllowDeny']['rules']
+
+ :type: array of strings
+ :default: array()
+
+ The general format for the rules is as such:
+
+ .. code-block:: none
+
+ <'allow' | 'deny'> [from]
+
+ If you wish to match all users, it is possible to use a ``'%'`` as a
+ wildcard in the *username* field.
+
+ There are a few shortcuts you can
+ use in the *ipmask* field as well (please note that those containing
+ SERVER\_ADDRESS might not be available on all webservers):
+
+ .. code-block:: none
+
+
+ 'all' -> 0.0.0.0/0
+ 'localhost' -> 127.0.0.1/8
+ 'localnetA' -> SERVER_ADDRESS/8
+ 'localnetB' -> SERVER_ADDRESS/16
+ 'localnetC' -> SERVER_ADDRESS/24
+
+ Having an empty rule list is equivalent to either using ``'allow %
+ from all'`` if your rule order is set to ``'deny,allow'`` or ``'deny %
+ from all'`` if your rule order is set to ``'allow,deny'`` or
+ ``'explicit'``.
+
+ For the :term:`IP address` matching
+ system, the following work:
+
+ * ``xxx.xxx.xxx.xxx`` (an exact :term:`IP address`)
+ * ``xxx.xxx.xxx.[yyy-zzz]`` (an :term:`IP address` range)
+ * ``xxx.xxx.xxx.xxx/nn`` (CIDR, Classless Inter-Domain Routing type :term:`IP` addresses)
+
+ But the following does not work:
+
+ * ``xxx.xxx.xxx.xx[yyy-zzz]`` (partial :term:`IP` address range)
+
+ For :term:`IPv6` addresses, the following work:
+
+ * ``xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx`` (an exact :term:`IPv6` address)
+ * ``xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:[yyyy-zzzz]`` (an :term:`IPv6` address range)
+ * ``xxxx:xxxx:xxxx:xxxx/nn`` (CIDR, Classless Inter-Domain Routing type :term:`IPv6` addresses)
+
+ But the following does not work:
+
+ * ``xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx[yyy-zzz]`` (partial :term:`IPv6` address range)
+
+.. config:option:: $cfg['Servers'][$i]['SignonScript']
+
+ :type: string
+ :default: ``''``
+
+ Name of PHP script to be sourced and executed to obtain login
+ credentials. This is alternative approach to session based single
+ signon. The script needs to provide function
+ ``get_login_credentials`` which returns list of username and
+ password, accepting single parameter of existing username (can be
+ empty). See :file:`examples/signon-script.php` for an example.
+
+.. config:option:: $cfg['Servers'][$i]['SignonSession']
+
+ :type: string
+ :default: ``''``
+
+ Name of session which will be used for signon authentication method.
+ You should use something different than ``phpMyAdmin``, because this
+ is session which phpMyAdmin uses internally. Takes effect only if
+ :config:option:`$cfg['Servers'][$i]['SignonScript']` is not configured.
+
+.. config:option:: $cfg['Servers'][$i]['SignonURL']
+
+ :type: string
+ :default: ``''``
+
+ :term:`URL` where user will be redirected
+ to log in for signon authentication method. Should be absolute
+ including protocol.
+
+.. config:option:: $cfg['Servers'][$i]['LogoutURL']
+
+ :type: string
+ :default: ``''``
+
+ :term:`URL` where user will be redirected
+ after logout (doesn't affect config authentication method). Should be
+ absolute including protocol.
+
+.. config:option:: $cfg['Servers'][$i]['StatusCacheDatabases']
+
+ :type: array of strings
+ :default: array()
+
+ Enables caching of ``TABLE STATUS`` outputs for specific databases on
+ this server (in some cases ``TABLE STATUS`` can be very slow, so you
+ may want to cache it). APC is used (if the PHP extension is available,
+ if not, this setting is ignored silently). You have to provide
+ :config:option:`$cfg['Servers'][$i]['StatusCacheLifetime']`.
+
+.. config:option:: $cfg['Servers'][$i]['StatusCacheLifetime']
+
+ :type: integer
+ :default: 0
+
+ Lifetime in seconds of the ``TABLE STATUS`` cache if
+ :config:option:`$cfg['Servers'][$i]['StatusCacheDatabases']` is used.
+
+Generic settings
+----------------
+
+.. config:option:: $cfg['ServerDefault']
+
+ :type: integer
+ :default: 1
+
+ If you have more than one server configured, you can set
+ :config:option:`$cfg['ServerDefault']` to any one of them to autoconnect to that
+ server when phpMyAdmin is started, or set it to 0 to be given a list
+ of servers without logging in.
+
+ If you have only one server configured,
+ :config:option:`$cfg['ServerDefault']` MUST be set to that server.
+
+.. config:option:: $cfg['VersionCheck']
+
+ :type: boolean
+ :default: true
+
+ Enables check for latest versions using javascript on main phpMyAdmin
+ page.
+
+ .. note::
+
+ This setting can be adjusted by your vendor.
+
+.. config:option:: $cfg['ProxyUrl']
+
+ :type: string
+ :default: ""
+
+ The url of the proxy to be used when phpmyadmin needs to access the outside
+ intenet such as when retrieving the latest version info or submitting error
+ reports. You need this if the server where phpMyAdmin is installed does not
+ have direct access to the internet.
+ The format is: "hostname:portnumber"
+
+.. config:option:: $cfg['ProxyUser']
+
+ :type: string
+ :default: ""
+
+ The username for authenticating with the proxy. By default, no
+ authentication is performed. If a username is supplied, Basic
+ Authentication will be performed. No other types of authentication
+ are currently supported.
+
+.. config:option:: $cfg['ProxyPass']
+
+ :type: string
+ :default: ""
+
+ The password for authenticating with the proxy.
+
+.. config:option:: $cfg['MaxDbList']
+
+ :type: integer
+ :default: 100
+
+ The maximum number of database names to be displayed in the main panel's
+ database list.
+
+.. config:option:: $cfg['MaxTableList']
+
+ :type: integer
+ :default: 250
+
+ The maximum number of table names to be displayed in the main panel's
+ list (except on the Export page). This limit is also enforced in the
+ navigation panel when in Light mode.
+
+.. config:option:: $cfg['ShowHint']
+
+ :type: boolean
+ :default: true
+
+ Whether or not to show hints (for example, hints when hovering over
+ table headers).
+
+.. config:option:: $cfg['MaxCharactersInDisplayedSQL']
+
+ :type: integer
+ :default: 1000
+
+ The maximum number of characters when a :term:`SQL` query is displayed. The
+ default limit of 1000 should be correct to avoid the display of tons of
+ hexadecimal codes that represent BLOBs, but some users have real
+ :term:`SQL` queries that are longer than 1000 characters. Also, if a
+ query's length exceeds this limit, this query is not saved in the history.
+
+.. config:option:: $cfg['PersistentConnections']
+
+ :type: boolean
+ :default: false
+
+ Whether `persistent connections `_ should be used or not. Works with
+ following extensions:
+
+ * mysql (`mysql\_pconnect `_),
+ * mysqli (requires PHP 5.3.0 or newer, `more information
+ `_).
+
+.. config:option:: $cfg['ForceSSL']
+
+ :type: boolean
+ :default: false
+
+ Whether to force using https while accessing phpMyAdmin.
+
+ .. note::
+
+ In some setups (like separate SSL proxy or load balancer) you might
+ have to set :config:option:`$cfg['PmaAbsoluteUri']` for correct
+ redirection.
+
+.. config:option:: $cfg['ExecTimeLimit']
+
+ :type: integer [number of seconds]
+ :default: 300
+
+ Set the number of seconds a script is allowed to run. If seconds is
+ set to zero, no time limit is imposed. This setting is used while
+ importing/exporting dump files but has
+ no effect when PHP is running in safe mode.
+
+.. config:option:: $cfg['SessionSavePath']
+
+ :type: string
+ :default: ``''``
+
+ Path for storing session data (`session\_save\_path PHP parameter
+ `_).
+
+.. config:option:: $cfg['MemoryLimit']
+
+ :type: string [number of bytes]
+ :default: ``'-1'``
+
+ Set the number of bytes a script is allowed to allocate. If set to
+ ``'-1'``, no limit is imposed.
+
+ This setting is used while importing/exporting dump files and at some other
+ places in phpMyAdmin so you definitely don't want to put here a too low
+ value. It has no effect when PHP is running in safe mode.
+
+ You can also use any string as in :file:`php.ini`, eg. '16M'. Ensure you
+ don't omit the suffix (16 means 16 bytes!)
+
+.. config:option:: $cfg['SkipLockedTables']
+
+ :type: boolean
+ :default: false
+
+ Mark used tables and make it possible to show databases with locked
+ tables (since MySQL 3.23.30).
+
+.. config:option:: $cfg['ShowSQL']
+
+ :type: boolean
+ :default: true
+
+ Defines whether :term:`SQL` queries
+ generated by phpMyAdmin should be displayed or not.
+
+.. config:option:: $cfg['RetainQueryBox']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the :term:`SQL` query box
+ should be kept displayed after its submission.
+
+.. config:option:: $cfg['CodemirrorEnable']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to use a Javascript code editor for SQL query boxes.
+ CodeMirror provides syntax highlighting and line numbers. However,
+ middle-clicking for pasting the clipboard contents in some Linux
+ distributions (such as Ubuntu) is not supported by all browsers.
+
+.. config:option:: $cfg['AllowUserDropDatabase']
+
+ :type: boolean
+ :default: false
+
+ Defines whether normal users (non-administrator) are allowed to delete
+ their own database or not. If set as false, the link :guilabel:`Drop
+ Database` will not be shown, and even a ``DROP DATABASE mydatabase`` will
+ be rejected. Quite practical for :term:`ISP` 's with many customers.
+
+ .. note::
+
+ This limitation of :term:`SQL` queries is not
+ as strict as when using MySQL privileges. This is due to nature of
+ :term:`SQL` queries which might be quite
+ complicated. So this choice should be viewed as help to avoid accidental
+ dropping rather than strict privilege limitation.
+
+.. config:option:: $cfg['Confirm']
+
+ :type: boolean
+ :default: true
+
+ Whether a warning ("Are your really sure...") should be displayed when
+ you're about to lose data.
+
+.. config:option:: $cfg['UseDbSearch']
+
+ :type: boolean
+ :default: true
+
+ Define whether the "search string inside database" is enabled or not.
+
+.. config:option:: $cfg['IgnoreMultiSubmitErrors']
+
+ :type: boolean
+ :default: false
+
+ Define whether phpMyAdmin will continue executing a multi-query
+ statement if one of the queries fails. Default is to abort execution.
+
+Cookie authentication options
+-----------------------------
+
+.. config:option:: $cfg['blowfish_secret']
+
+ :type: string
+ :default: ``''``
+
+ The "cookie" auth\_type uses blowfish algorithm to encrypt the
+ password. If you are using the "cookie" auth\_type, enter here a
+ random passphrase of your choice. It will be used internally by the
+ blowfish algorithm: you won’t be prompted for this passphrase. There
+ is no maximum length for this secret.
+
+ .. versionchanged:: 3.1.0
+ Since version 3.1.0 phpMyAdmin can generate this on the fly, but it
+ makes a bit weaker security as this generated secret is stored in
+ session and furthermore it makes impossible to recall user name from
+ cookie.
+
+.. config:option:: $cfg['LoginCookieRecall']
+
+ :type: boolean
+ :default: true
+
+ Define whether the previous login should be recalled or not in cookie
+ authentication mode.
+
+ This is automatically disabled if you do not have
+ configured :config:option:`$cfg['blowfish_secret']`.
+
+.. config:option:: $cfg['LoginCookieValidity']
+
+ :type: integer [number of seconds]
+ :default: 1440
+
+ Define how long a login cookie is valid. Please note that php
+ configuration option `session.gc\_maxlifetime
+ `_ might limit session validity and if the session is lost,
+ the login cookie is also invalidated. So it is a good idea to set
+ ``session.gc_maxlifetime`` at least to the same value of
+ :config:option:`$cfg['LoginCookieValidity']`.
+
+.. config:option:: $cfg['LoginCookieStore']
+
+ :type: integer [number of seconds]
+ :default: 0
+
+ Define how long login cookie should be stored in browser. Default 0
+ means that it will be kept for existing session. This is recommended
+ for not trusted environments.
+
+.. config:option:: $cfg['LoginCookieDeleteAll']
+
+ :type: boolean
+ :default: true
+
+ If enabled (default), logout deletes cookies for all servers,
+ otherwise only for current one. Setting this to false makes it easy to
+ forget to log out from other server, when you are using more of them.
+
+.. _AllowArbitraryServer:
+.. config:option:: $cfg['AllowArbitraryServer']
+
+ :type: boolean
+ :default: false
+
+ If enabled, allows you to log in to arbitrary servers using cookie
+ authentication.
+
+ .. note::
+
+ Please use this carefully, as this may allow users access to MySQL servers
+ behind the firewall where your :term:`HTTP`
+ server is placed.
+
+.. config:option:: $cfg['CaptchaLoginPublicKey']
+
+ :type: string
+ :default: ``''``
+
+ The public key for the reCaptcha service that can be obtain from
+ http://www.google.com/recaptcha.
+
+ reCaptcha will be then used in :ref:`cookie`.
+
+.. config:option:: $cfg['CaptchaLoginPrivateKey']
+
+ :type: string
+ :default: ``''``
+
+ The private key for the reCaptcha service that can be obtain from
+ http://www.google.com/recaptcha.
+
+ reCaptcha will be then used in :ref:`cookie`.
+
+Navigation panel setup
+----------------------
+
+.. config:option:: $cfg['MaxNavigationItems']
+
+ :type: integer
+ :default: 250
+
+ The number of items that can be displayed on each page of the
+ navigation tree.
+
+.. config:option:: $cfg['NavigationTreeEnableGrouping']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to group the databases based on a common prefix
+ in their name :config:option:`$cfg['NavigationTreeDbSeparator']`.
+
+.. config:option:: $cfg['NavigationTreeDbSeparator']
+
+ :type: string or array
+ :default: ``'_'``
+
+ The string used to separate the parts of the database name when
+ showing them in a tree. Alternatively you can specify more strings in
+ an array and all of them will be used as a separator.
+
+.. config:option:: $cfg['NavigationTreeTableSeparator']
+
+ :type: string or array
+ :default: ``'__'``
+
+ Defines a string to be used to nest table spaces. This means if you have
+ tables like ``first__second__third`` this will be shown as a three-level
+ hierarchy like: first > second > third. If set to false or empty, the
+ feature is disabled. NOTE: You should not use this separator at the
+ beginning or end of a table name or multiple times after another without
+ any other characters in between.
+
+.. config:option:: $cfg['NavigationTreeTableLevel']
+
+ :type: integer
+ :default: 1
+
+ Defines how many sublevels should be displayed when splitting up
+ tables by the above separator.
+
+.. config:option:: $cfg['NumRecentTables']
+
+ :type: integer
+ :default: 10
+
+ The maximum number of recently used tables shown in the navigation
+ panel. Set this to 0 (zero) to disable the listing of recent tables.
+
+.. config:option:: $cfg['NavigationDisplayLogo']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not to display the phpMyAdmin logo at the top of
+ the navigation panel.
+
+.. config:option:: $cfg['NavigationLogoLink']
+
+ :type: string
+ :default: ``'index.php'``
+
+ Enter :term:`URL` where logo in the
+ navigation panel will point to. For use especially with self made
+ theme which changes this.
+
+.. config:option:: $cfg['NavigationLogoLinkWindow']
+
+ :type: string
+ :default: ``'main'``
+
+ Whether to open the linked page in the main window (``main``) or in a
+ new one (``new``). Note: use ``new`` if you are linking to
+ ``phpmyadmin.net``.
+
+.. config:option:: $cfg['NavigationTreeDisplayItemFilterMinimum']
+
+ :type: integer
+ :default: 30
+
+ Defines the minimum number of items (tables, views, routines and
+ events) to display a JavaScript filter box above the list of items in
+ the navigation tree.
+
+ To disable the filter completely some high number can be used (e.g. 9999)
+
+.. config:option:: $cfg['NavigationTreeDisplayDbFilterMinimum']
+
+ :type: integer
+ :default: 30
+
+ Defines the minimum number of databases to display a JavaScript filter
+ box above the list of databases in the navigation tree.
+
+ To disable the filter completely some high number can be used
+ (e.g. 9999)
+
+.. config:option:: $cfg['NavigationDisplayServers']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not to display a server choice at the top of the
+ navigation panel.
+
+.. config:option:: $cfg['DisplayServersList']
+
+ :type: boolean
+ :default: false
+
+ Defines whether to display this server choice as links instead of in a
+ drop-down.
+
+.. config:option:: $cfg['NavigationTreeDefaultTabTable']
+
+ :type: string
+ :default: ``'tbl_structure.php'``
+
+ Defines the tab displayed by default when clicking the small icon next
+ to each table name in the navigation panel. Possible values:
+
+ * ``tbl_structure.php``
+ * ``tbl_sql.php``
+ * ``tbl_select.php``
+ * ``tbl_change.php``
+ * ``sql.php``
+
+Main panel
+----------
+
+.. config:option:: $cfg['ShowStats']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not to display space usage and statistics about
+ databases and tables. Note that statistics requires at least MySQL
+ 3.23.3 and that, at this date, MySQL doesn't return such information
+ for Berkeley DB tables.
+
+.. config:option:: $cfg['ShowServerInfo']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to display detailed server information on main page.
+ You can additionally hide more information by using
+ :config:option:`$cfg['Servers'][$i]['verbose']`.
+
+.. config:option:: $cfg['ShowPhpInfo']
+
+ :type: boolean
+ :default: false
+
+.. config:option:: $cfg['ShowChgPassword']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['ShowCreateDb']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to display the :guilabel:`PHP information` and
+ :guilabel:`Change password` links and form for creating database or not at
+ the starting main (right) frame. This setting does not check MySQL commands
+ entered directly.
+
+ Please note that to block the usage of ``phpinfo()`` in scripts, you have to
+ put this in your :file:`php.ini`:
+
+ .. code-block:: ini
+
+ disable_functions = phpinfo()
+
+ Also note that enabling the :guilabel:`Change password` link has no effect
+ with config authentication mode: because of the hard coded password value
+ in the configuration file, end users can't be allowed to change their
+ passwords.
+
+Database structure
+------------------
+
+.. config:option:: $cfg['ShowDbStructureCreation']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the database structure page (tables list) has a
+ "Creation" column that displays when each table was created.
+
+.. config:option:: $cfg['ShowDbStructureLastUpdate']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the database structure page (tables list) has a "Last
+ update" column that displays when each table was last updated.
+
+.. config:option:: $cfg['ShowDbStructureLastCheck']
+
+ :type: boolean
+ :default: false
+
+ Defines whether the database structure page (tables list) has a "Last
+ check" column that displays when each table was last checked.
+
+.. config:option:: $cfg['HideStructureActions']
+
+ :type: boolean
+ :default: true
+
+ Defines whether the table structure actions are hidden under a "More"
+ drop-down.
+
+Browse mode
+-----------
+
+.. config:option:: $cfg['TableNavigationLinksMode']
+
+ :type: string
+ :default: ``'icons'``
+
+ Defines whether the table navigation links contain ``'icons'``, ``'text'``
+ or ``'both'``.
+
+.. config:option:: $cfg['ShowAll']
+
+ :type: boolean
+ :default: false
+
+ Defines whether a user should be displayed a "Show all" button in browse
+ mode or not in all cases. By default it is shown only on small tables (less
+ than 500 rows) to avoid performance issues while getting too many rows.
+
+.. config:option:: $cfg['MaxRows']
+
+ :type: integer
+ :default: 25
+
+ Number of rows displayed when browsing a result set and no LIMIT
+ clause is used. If the result set contains more rows, "Previous" and
+ "Next" links will be shown. Possible values: 25,50,100,250,500.
+
+.. config:option:: $cfg['Order']
+
+ :type: string
+ :default: ``'SMART'``
+
+ Defines whether columns are displayed in ascending (``ASC``) order, in
+ descending (``DESC``) order or in a "smart" (``SMART``) order - I.E.
+ descending order for columns of type TIME, DATE, DATETIME and
+ TIMESTAMP, ascending order else- by default.
+
+.. config:option:: $cfg['DisplayBinaryAsHex']
+
+ :type: boolean
+ :default: true
+
+ Defines whether the "Show binary contents as HEX" browse option is
+ ticked by default.
+
+.. config:option:: $cfg['GridEditing']
+
+ :type: string
+ :default: ``'double-click'``
+
+ Defines which action (``double-click`` or ``click``) triggers grid
+ editing. Can be deactived with the ``disabled`` value.
+
+.. config:option:: $cfg['SaveCellsAtOnce']
+
+ :type: boolean
+ :default: false
+
+ Defines whether or not to save all edited cells at once for grid
+ editing.
+
+Editing mode
+------------
+
+.. config:option:: $cfg['ProtectBinary']
+
+ :type: boolean or string
+ :default: ``'blob'``
+
+ Defines whether ``BLOB`` or ``BINARY`` columns are protected from
+ editing when browsing a table's content. Valid values are:
+
+ * ``false`` to allow editing of all columns;
+ * ``'blob'`` to allow editing of all columns except ``BLOBS``;
+ * ``'noblob'`` to disallow editing of all columns except ``BLOBS`` (the
+ opposite of ``'blob'``);
+ * ``'all'`` to disallow editing of all ``BINARY`` or ``BLOB`` columns.
+
+.. config:option:: $cfg['ShowFunctionFields']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not MySQL functions fields should be initially
+ displayed in edit/insert mode. Since version 2.10, the user can toggle
+ this setting from the interface.
+
+.. config:option:: $cfg['ShowFieldTypesInDataEditView']
+
+ :type: boolean
+ :default: true
+
+ Defines whether or not type fields should be initially displayed in
+ edit/insert mode. The user can toggle this setting from the interface.
+
+.. config:option:: $cfg['InsertRows']
+
+ :type: integer
+ :default: 2
+
+ Defines the maximum number of concurrent entries for the Insert page.
+
+.. config:option:: $cfg['ForeignKeyMaxLimit']
+
+ :type: integer
+ :default: 100
+
+ If there are fewer items than this in the set of foreign keys, then a
+ drop-down box of foreign keys is presented, in the style described by
+ the :config:option:`$cfg['ForeignKeyDropdownOrder']` setting.
+
+.. config:option:: $cfg['ForeignKeyDropdownOrder']
+
+ :type: array
+ :default: array('content-id', 'id-content')
+
+ For the foreign key drop-down fields, there are several methods of
+ display, offering both the key and value data. The contents of the
+ array should be one or both of the following strings: ``content-id``,
+ ``id-content``.
+
+Export and import settings
+--------------------------
+
+.. config:option:: $cfg['ZipDump']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['GZipDump']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['BZipDump']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to allow the use of zip/GZip/BZip2 compression when
+ creating a dump file
+
+.. config:option:: $cfg['CompressOnFly']
+
+ :type: boolean
+ :default: true
+
+ Defines whether to allow on the fly compression for GZip/BZip2
+ compressed exports. This doesn't affect smaller dumps and allows users
+ to create larger dumps that won't otherwise fit in memory due to php
+ memory limit. Produced files contain more GZip/BZip2 headers, but all
+ normal programs handle this correctly.
+
+.. config:option:: $cfg['Export']
+
+ :type: array
+ :default: array(...)
+
+ In this array are defined default parameters for export, names of
+ items are similar to texts seen on export page, so you can easily
+ identify what they mean.
+
+.. config:option:: $cfg['Export']['method']
+
+ :type: string
+ :default: ``'quick'``
+
+ Defines how the export form is displayed when it loads. Valid values
+ are:
+
+ * ``quick`` to display the minimum number of options to configure
+ * ``custom`` to display every available option to configure
+ * ``custom-no-form`` same as ``custom`` but does not display the option
+ of using quick export
+
+
+
+.. config:option:: $cfg['Import']
+
+ :type: array
+ :default: array(...)
+
+ In this array are defined default parameters for import, names of
+ items are similar to texts seen on import page, so you can easily
+ identify what they mean.
+
+
+Tabs display settings
+---------------------
+
+.. config:option:: $cfg['TabsMode']
+
+ :type: string
+ :default: ``'both'``
+
+ Defines whether the menu tabs contain ``'icons'``, ``'text'`` or ``'both'``.
+
+.. config:option:: $cfg['ActionLinksMode']
+
+ :type: string
+ :default: ``'both'``
+
+ If set to ``icons``, will display icons instead of text for db and table
+ properties links (like :guilabel:`Browse`, :guilabel:`Select`,
+ :guilabel:`Insert`, ...). Can be set to ``'both'``
+ if you want icons AND text. When set to ``text``, will only show text.
+
+.. config:option:: $cfg['PropertiesNumColumns']
+
+ :type: integer
+ :default: 1
+
+ How many columns will be utilized to display the tables on the database
+ property view? When setting this to a value larger than 1, the type of the
+ database will be omitted for more display space.
+
+.. config:option:: $cfg['DefaultTabServer']
+
+ :type: string
+ :default: ``'index.php'``
+
+ Defines the tab displayed by default on server view. Possible values:
+
+ * ``main.php`` (recommended for multi-user setups)
+ * ``server_databases.php``,
+ * ``server_status.php``
+ * ``server_variables.php``
+ * ``server_privileges.php``
+
+.. config:option:: $cfg['DefaultTabDatabase']
+
+ :type: string
+ :default: ``'db_structure.php'``
+
+ Defines the tab displayed by default on database view. Possible
+ values:
+
+ * ``db_structure.php``
+ * ``db_sql.php``
+ * ``db_search.php``.
+
+.. config:option:: $cfg['DefaultTabTable']
+
+ :type: string
+ :default: ``'sql.php'``
+
+ Defines the tab displayed by default on table view. Possible values:
+
+ * ``tbl_structure.php``
+ * ``tbl_sql.php``
+ * ``tbl_select.php``
+ * ``tbl_change.php``
+ * ``sql.php``
+
+PDF Options
+-----------
+
+.. config:option:: $cfg['PDFPageSizes']
+
+ :type: array
+ :default: ``array('A3', 'A4', 'A5', 'letter', 'legal')``
+
+ Array of possible paper sizes for creating PDF pages.
+
+ You should never need to change this.
+
+.. config:option:: $cfg['PDFDefaultPageSize']
+
+ :type: string
+ :default: ``'A4'``
+
+ Default page size to use when creating PDF pages. Valid values are any
+ listed in :config:option:`$cfg['PDFPageSizes']`.
+
+Languages
+---------
+
+.. config:option:: $cfg['DefaultLang']
+
+ :type: string
+ :default: ``'en'``
+
+ Defines the default language to use, if not browser-defined or user-
+ defined. The corresponding language file needs to be in
+ locale/*code*/LC\_MESSAGES/phpmyadmin.mo.
+
+.. config:option:: $cfg['DefaultConnectionCollation']
+
+ :type: string
+ :default: ``'utf8_general_ci'``
+
+ Defines the default connection collation to use, if not user-defined.
+ See the `MySQL documentation `_ for list of possible values. This setting is
+ ignored when connected to Drizzle server.
+
+.. config:option:: $cfg['Lang']
+
+ :type: string
+ :default: not set
+
+ Force language to use. The corresponding language file needs to be in
+ locale/*code*/LC\_MESSAGES/phpmyadmin.mo.
+
+.. config:option:: $cfg['FilterLanguages']
+
+ :type: string
+ :default: ``''``
+
+ Limit list of available languages to those matching the given regular
+ expression. For example if you want only Czech and English, you should
+ set filter to ``'^(cs|en)'``.
+
+.. config:option:: $cfg['RecodingEngine']
+
+ :type: string
+ :default: ``'auto'``
+
+ You can select here which functions will be used for character set
+ conversion. Possible values are:
+
+ * auto - automatically use available one (first is tested iconv, then
+ recode)
+ * iconv - use iconv or libiconv functions
+ * recode - use recode\_string function
+ * mb - use mbstring extension
+ * none - disable encoding conversion
+
+ Enabled charset conversion activates a pull-down menu in the Export
+ and Import pages, to choose the character set when exporting a file.
+ The default value in this menu comes from
+ :config:option:`$cfg['Export']['charset']` and :config:option:`$cfg['Import']['charset']`.
+
+.. config:option:: $cfg['IconvExtraParams']
+
+ :type: string
+ :default: ``'//TRANSLIT'``
+
+ Specify some parameters for iconv used in charset conversion. See
+ `iconv documentation `_ for details. By default
+ ``//TRANSLIT`` is used, so that invalid characters will be
+ transliterated.
+
+.. config:option:: $cfg['AvailableCharsets']
+
+ :type: array
+ :default: array(..._
+
+ Available character sets for MySQL conversion. You can add your own
+ (any of supported by recode/iconv) or remove these which you don't
+ use. Character sets will be shown in same order as here listed, so if
+ you frequently use some of these move them to the top.
+
+Web server settings
+-------------------
+
+.. config:option:: $cfg['OBGzip']
+
+ :type: string/boolean
+ :default: ``'auto'``
+
+ Defines whether to use GZip output buffering for increased speed in
+ :term:`HTTP` transfers. Set to
+ true/false for enabling/disabling. When set to 'auto' (string),
+ phpMyAdmin tries to enable output buffering and will automatically
+ disable it if your browser has some problems with buffering. IE6 with
+ a certain patch is known to cause data corruption when having enabled
+ buffering.
+
+.. config:option:: $cfg['TrustedProxies']
+
+ :type: array
+ :default: array()
+
+ Lists proxies and HTTP headers which are trusted for
+ :config:option:`$cfg['Servers'][$i]['AllowDeny']['order']`. This list is by
+ default empty, you need to fill in some trusted proxy servers if you
+ want to use rules for IP addresses behind proxy.
+
+ The following example specifies that phpMyAdmin should trust a
+ HTTP\_X\_FORWARDED\_FOR (``X -Forwarded-For``) header coming from the proxy
+ 1.2.3.4:
+
+ .. code-block:: php
+
+ $cfg['TrustedProxies'] = array('1.2.3.4' => 'HTTP_X_FORWARDED_FOR');
+
+ The :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` directive uses the
+ client's IP address as usual.
+
+.. config:option:: $cfg['GD2Available']
+
+ :type: string
+ :default: ``'auto'``
+
+ Specifies whether GD >= 2 is available. If yes it can be used for MIME
+ transformations. Possible values are:
+
+ * auto - automatically detect
+ * yes - GD 2 functions can be used
+ * no - GD 2 function cannot be used
+
+.. config:option:: $cfg['CheckConfigurationPermissions']
+
+ :type: boolean
+ :default: true
+
+ We normally check the permissions on the configuration file to ensure
+ it's not world writable. However, phpMyAdmin could be installed on a
+ NTFS filesystem mounted on a non-Windows server, in which case the
+ permissions seems wrong but in fact cannot be detected. In this case a
+ sysadmin would set this parameter to ``false``.
+
+.. config:option:: $cfg['LinkLengthLimit']
+
+ :type: integer
+ :default: 1000
+
+ Limit for length of :term:`URL` in links. When length would be above this
+ limit, it is replaced by form with button. This is required as some web
+ servers (:term:`IIS`) have problems with long :term:`URL` .
+
+.. config:option:: $cfg['CSPAllow']
+
+ :type: string
+ :default: ``''``
+
+ Additional string to include in allowed script and image sources in Content
+ Security Policy header.
+
+ This can be useful when you want to include some external javascript files
+ in :file:`config.footer.inc.php` or :file:`config.header.inc.php`, which
+ would be normally not allowed by Content Security Policy.
+
+ To allow some sites, just list them within the string:
+
+ .. code-block:: php
+
+ $cfg['CSPAllow'] = 'example.com example.net';
+
+ .. versionadded:: 4.0.4
+
+.. config:option:: $cfg['DisableMultiTableMaintenance']
+
+ :type: boolean
+ :default: false
+
+ In the database Structure page, it's possible to mark some tables then
+ choose an operation like optimizing for many tables. This can slow
+ down a server; therefore, setting this to ``true`` prevents this kind
+ of multiple maintenance operation.
+
+Theme settings
+--------------
+
+.. config:option:: $cfg['NaviWidth']
+
+ :type: integer
+ :default:
+
+ Navigation panel width in pixels. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['NaviBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+.. config:option:: $cfg['MainBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+ The background styles used for both the frames. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['NaviPointerBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+.. config:option:: $cfg['NaviPointerColor']
+
+ :type: string [CSS color]
+ :default:
+
+ The style used for the pointer in the navigation panel. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['Border']
+
+ :type: integer
+ :default:
+
+ The size of a table's border. See :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['ThBackground']
+
+ :type: string [CSS color for background]
+ :default:
+
+.. config:option:: $cfg['ThColor']
+
+ :type: string [CSS color]
+ :default:
+
+ The style used for table headers. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. _cfg_BgcolorOne:
+.. config:option:: $cfg['BgOne']
+
+ :type: string [CSS color]
+ :default:
+
+ The color (HTML) #1 for table rows. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. _cfg_BgcolorTwo:
+.. config:option:: $cfg['BgTwo']
+
+ :type: string [CSS color]
+ :default:
+
+ The color (HTML) #2 for table rows. See
+ :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['BrowsePointerBackground']
+
+ :type: string [CSS color]
+ :default:
+
+.. config:option:: $cfg['BrowsePointerColor']
+
+ :type: string [CSS color]
+ :default:
+
+.. config:option:: $cfg['BrowseMarkerBackground']
+
+ :type: string [CSS color]
+ :default:
+
+.. config:option:: $cfg['BrowseMarkerColor']
+
+ :type: string [CSS color]
+ :default:
+
+ The colors (HTML) uses for the pointer and the marker in browse mode.
+ The former feature highlights the row over which your mouse is passing
+ and the latter lets you visually mark/unmark rows by clicking on the
+ corresponding checkbox. Highlighting / marking a column is done by
+ hovering over / clicking the column's header (outside of the text).
+ See :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['FontFamily']
+
+ :type: string
+ :default:
+
+ You put here a valid CSS font family value, for example ``arial, sans-
+ serif``. See :file:`themes/themename/layout.inc.php`.
+
+.. config:option:: $cfg['FontFamilyFixed']
+
+ :type: string
+ :default:
+
+ You put here a valid CSS font family value, for example ``monospace``.
+ This one is used in textarea. See :file:`themes/themename/layout.inc.php`.
+
+Design customization
+--------------------
+
+.. config:option:: $cfg['NavigationTreePointerEnable']
+
+ :type: boolean
+ :default: true
+
+ A value of ``true`` activates the navi pointer.
+
+.. config:option:: $cfg['BrowsePointerEnable']
+
+ :type: boolean
+ :default: true
+
+ Whether to activate the browse pointer or not.
+
+.. config:option:: $cfg['BrowseMarkerEnable']
+
+ :type: boolean
+ :default: true
+
+ Whether to activate the browse marker or not.
+
+.. config:option:: $cfg['LimitChars']
+
+ :type: integer
+ :default: 50
+
+ Maximum number of characters shown in any non-numeric field on browse
+ view. Can be turned off by a toggle button on the browse page.
+
+.. config:option:: $cfg['RowActionLinks']
+
+ :type: string
+ :default: ``'left'``
+
+ Defines the place where table row links (Edit, Copy, Delete) would be
+ put when tables contents are displayed (you may have them displayed at
+ the left side, right side, both sides or nowhere). "left" and "right"
+ are parsed as "top" and "bottom" with vertical display mode.
+
+.. config:option:: $cfg['DefaultDisplay']
+
+ :type: string
+ :default: ``'horizonta'``
+
+ There are 3 display modes: horizontal, horizontalflipped and vertical.
+ Define which one is displayed by default. The first mode displays each
+ row on a horizontal line, the second rotates the headers by 90
+ degrees, so you can use descriptive headers even though columns only
+ contain small values and still print them out. The vertical mode sorts
+ each row on a vertical lineup.
+
+.. config:option:: $cfg['RememberSorting']
+
+ :type: boolean
+ :default: true
+
+ If enabled, remember the sorting of each table when browsing them.
+
+.. config:option:: $cfg['HeaderFlipType']
+
+ :type: string
+ :default: ``'auto'``
+
+ The HeaderFlipType can be set to 'auto', 'css' or 'fake'. When using
+ 'css' the rotation of the header for horizontalflipped is done via
+ CSS. The CSS transformation currently works only in Internet
+ Explorer.If set to 'fake' PHP does the transformation for you, but of
+ course this does not look as good as CSS. The 'auto' option enables
+ CSS transformation when browser supports it and use PHP based one
+ otherwise.
+
+.. config:option:: $cfg['ShowBrowseComments']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['ShowPropertyComments']
+
+ :type: boolean
+ :default: true
+
+ By setting the corresponding variable to ``true`` you can enable the
+ display of column comments in Browse or Property display. In browse
+ mode, the comments are shown inside the header. In property mode,
+ comments are displayed using a CSS-formatted dashed-line below the
+ name of the column. The comment is shown as a tool-tip for that
+ column.
+
+Text fields
+-----------
+
+.. config:option:: $cfg['CharEditing']
+
+ :type: string
+ :default: ``'input'``
+
+ Defines which type of editing controls should be used for CHAR and
+ VARCHAR columns. Possible values are:
+
+ * input - this allows to limit size of text to size of columns in MySQL,
+ but has problems with newlines in columns
+ * textarea - no problems with newlines in columns, but also no length
+ limitations
+
+.. config:option:: $cfg['MinSizeForInputField']
+
+ :type: integer
+ :default: 4
+
+ Defines the minimum size for input fields generated for CHAR and
+ VARCHAR columns.
+
+.. config:option:: $cfg['MaxSizeForInputField']
+
+ :type: integer
+ :default: 60
+
+ Defines the maximum size for input fields generated for CHAR and
+ VARCHAR columns.
+
+.. config:option:: $cfg['TextareaCols']
+
+ :type: integer
+ :default: 40
+
+.. config:option:: $cfg['TextareaRows']
+
+ :type: integer
+ :default: 15
+
+.. config:option:: $cfg['CharTextareaCols']
+
+ :type: integer
+ :default: 40
+
+.. config:option:: $cfg['CharTextareaRows']
+
+ :type: integer
+ :default: 2
+
+ Number of columns and rows for the textareas. This value will be
+ emphasized (\*2) for :term:`SQL` query
+ textareas and (\*1.25) for :term:`SQL`
+ textareas inside the query window.
+
+ The Char\* values are used for CHAR
+ and VARCHAR editing (if configured via :config:option:`$cfg['CharEditing']`).
+
+.. config:option:: $cfg['LongtextDoubleTextarea']
+
+ :type: boolean
+ :default: true
+
+ Defines whether textarea for LONGTEXT columns should have double size.
+
+.. config:option:: $cfg['TextareaAutoSelect']
+
+ :type: boolean
+ :default: false
+
+ Defines if the whole textarea of the query box will be selected on
+ click.
+
+
+SQL query box settings
+----------------------
+
+.. config:option:: $cfg['SQLQuery']['Edit']
+
+ :type: boolean
+ :default: true
+
+ Whether to display an edit link to change a query in any SQL Query
+ box.
+
+.. config:option:: $cfg['SQLQuery']['Explain']
+
+ :type: boolean
+ :default: true
+
+ Whether to display a link to explain a SELECT query in any SQL Query
+ box.
+
+.. config:option:: $cfg['SQLQuery']['ShowAsPHP']
+
+ :type: boolean
+ :default: true
+
+ Whether to display a link to wrap a query in PHP code in any SQL Query
+ box.
+
+.. config:option:: $cfg['SQLQuery']['Validate']
+
+ :type: boolean
+ :default: false
+
+ Whether to display a link to validate a query in any SQL Query box.
+
+ .. seealso:: :config:option:`$cfg['SQLValidator']`
+
+.. config:option:: $cfg['SQLQuery']['Refresh']
+
+ :type: boolean
+ :default: true
+
+ Whether to display a link to refresh a query in any SQL Query box.
+
+Web server upload/save/import directories
+-----------------------------------------
+
+.. config:option:: $cfg['UploadDir']
+
+ :type: string
+ :default: ``''``
+
+ The name of the directory where :term:`SQL` files have been uploaded by
+ other means than phpMyAdmin (for example, ftp). Those files are available
+ under a drop-down box when you click the database or table name, then the
+ Import tab.
+
+ If
+ you want different directory for each user, %u will be replaced with
+ username.
+
+ Please note that the file names must have the suffix ".sql"
+ (or ".sql.bz2" or ".sql.gz" if support for compressed formats is
+ enabled).
+
+ This feature is useful when your file is too big to be
+ uploaded via :term:`HTTP`, or when file
+ uploads are disabled in PHP.
+
+ .. note::
+
+ If PHP is running in safe mode, this directory must be owned by the same
+ user as the owner of the phpMyAdmin scripts. See also :ref:`faq1_16` for
+ alternatives.
+
+.. config:option:: $cfg['SaveDir']
+
+ :type: string
+ :default: ``''``
+
+ The name of the directory where dumps can be saved.
+
+ If you want different directory for each user, %u will be replaced with
+ username.
+
+ Please note that the directory must exist and has to be writable for
+ the user running webserver.
+
+ .. note::
+
+ If PHP is running in safe mode, this directory must be owned by the same
+ user as the owner of the phpMyAdmin scripts.
+
+.. config:option:: $cfg['TempDir']
+
+ :type: string
+ :default: ``''``
+
+ The name of the directory where temporary files can be stored.
+
+ This is needed for importing ESRI Shapefiles, see :ref:`faq6_30` and to
+ work around limitations of ``open_basedir`` for uploaded files, see
+ :ref:`faq1_11`.
+
+ If the directory where phpMyAdmin is installed is
+ subject to an ``open_basedir`` restriction, you need to create a
+ temporary directory in some directory accessible by the web server.
+ However for security reasons, this directory should be outside the
+ tree published by webserver. If you cannot avoid having this directory
+ published by webserver, place at least an empty :file:`index.html` file
+ there, so that directory listing is not possible.
+
+ This directory should have as strict permissions as possible as the only
+ user required to access this directory is the one who runs the webserver.
+ If you have root privileges, simply make this user owner of this directory
+ and make it accessible only by it:
+
+ .. code-block:: sh
+
+
+ chown www-data:www-data tmp
+ chmod 700 tmp
+
+ If you cannot change owner of the directory, you can achieve a similar
+ setup using :term:`ACL`:
+
+ .. code-block:: sh
+
+ chmod 700 tmp
+ setfacl -m "g:www-data:rwx" tmp
+ setfacl -d -m "g:www-data:rwx" tmp
+
+ If neither of above works for you, you can still make the directory
+ :command:`chmod 777`, but it might impose risk of other users on system
+ reading and writing data in this directory.
+
+Various display setting
+-----------------------
+
+.. config:option:: $cfg['ShowDisplayDirection']
+
+ :type: boolean
+ :default: false
+
+ Defines whether or not type display direction option is shown when
+ browsing a table.
+
+.. config:option:: $cfg['RepeatCells']
+
+ :type: integer
+ :default: 100
+
+ Repeat the headers every X cells, or 0 to deactivate.
+
+.. config:option:: $cfg['EditInWindow']
+
+ :type: boolean
+ :default: true
+
+.. config:option:: $cfg['QueryWindowWidth']
+
+ :type: integer
+ :default: 550
+
+.. config:option:: $cfg['QueryWindowHeight']
+
+ :type: integer
+ :default: 310
+
+.. config:option:: $cfg['QueryHistoryDB']
+
+ :type: boolean
+ :default: false
+
+.. config:option:: $cfg['QueryWindowDefTab']
+
+ :type: string
+ :default: ``'sql'``
+
+.. config:option:: $cfg['QueryHistoryMax']
+
+ :type: integer
+ :default: 25
+
+ All those variables affect the query window feature. A :term:`SQL` link or
+ icon is always displayed in the navigation panel. If JavaScript is enabled
+ in your browser, a click on this opens a distinct query window, which is a
+ direct interface to enter :term:`SQL` queries. Otherwise, the right panel
+ changes to display a query box.
+
+ The size of this query window can be customized with
+ :config:option:`$cfg['QueryWindowWidth']` and
+ :config:option:`$cfg['QueryWindowHeight']` - both integers for the size in
+ pixels. Note that normally, those parameters will be modified in
+ :file:`layout.inc.php`` for the theme you are using.
+
+ If :config:option:`$cfg['EditInWindow']` is set to true, a click on [Edit]
+ from the results page (in the :guilabel:`Showing Rows` section) opens the
+ query window and puts the current query inside it. If set to false,
+ clicking on the link puts the :term:`SQL` query
+ in the right panel's query box.
+
+ If :config:option:`$cfg['QueryHistoryDB']` is set to ``true``, all your
+ Queries are logged to a table, which has to be created by you (see
+ :config:option:`$cfg['Servers'][$i]['history']`). If set to false, all your
+ queries will be appended to the form, but only as long as your window is
+ opened they remain saved.
+
+ When using the JavaScript based query window, it will always get updated
+ when you click on a new table/db to browse and will focus if you click on
+ :guilabel:`Edit SQL` after using a query. You can suppress updating the
+ query window by checking the box :guilabel:`Do not overwrite this query
+ from outside the window` below the query textarea. Then you can browse
+ tables/databases in the background without losing the contents of the
+ textarea, so this is especially useful when composing a query with tables
+ you first have to look in. The checkbox will get automatically checked
+ whenever you change the contents of the textarea. Please uncheck the button
+ whenever you definitely want the query window to get updated even though
+ you have made alterations.
+
+ If :config:option:`$cfg['QueryHistoryDB']` is set to ``true`` you can
+ specify the amount of saved history items using
+ :config:option:`$cfg['QueryHistoryMax']`.
+
+ The query window also has a custom tabbed look to group the features.
+ Using the variable :config:option:`$cfg['QueryWindowDefTab']` you can
+ specify the default tab to be used when opening the query window. It can be
+ set to either ``sql``, ``files``, ``history`` or ``full``.
+
+.. config:option:: $cfg['BrowseMIME']
+
+ :type: boolean
+ :default: true
+
+ Enable :ref:`transformations`.
+
+.. config:option:: $cfg['MaxExactCount']
+
+ :type: integer
+ :default: 0
+
+ For InnoDB tables, determines for how large tables phpMyAdmin should
+ get the exact row count using ``SELECT COUNT``. If the approximate row
+ count as returned by ``SHOW TABLE STATUS`` is smaller than this value,
+ ``SELECT COUNT`` will be used, otherwise the approximate count will be
+ used.
+
+.. config:option:: $cfg['MaxExactCountViews']
+
+ :type: integer
+ :default: 0
+
+ For VIEWs, since obtaining the exact count could have an impact on
+ performance, this value is the maximum to be displayed, using a
+ ``SELECT COUNT ... LIMIT``. Setting this to 0 bypasses any row
+ counting.
+
+.. config:option:: $cfg['NaturalOrder']
+
+ :type: boolean
+ :default: true
+
+ Sorts database and table names according to natural order (for
+ example, t1, t2, t10). Currently implemented in the navigation panel
+ and in Database view, for the table list.
+
+.. config:option:: $cfg['InitialSlidersState']
+
+ :type: string
+ :default: ``'closed'``
+
+ If set to ``'closed'``, the visual sliders are initially in a closed
+ state. A value of ``'open'`` does the reverse. To completely disable
+ all visual sliders, use ``'disabled'``.
+
+.. config:option:: $cfg['UserprefsDisallow']
+
+ :type: array
+ :default: array()
+
+ Contains names of configuration options (keys in ``$cfg`` array) that
+ users can't set through user preferences. For possible values, refer
+ to :file:`libraries/config/user_preferences.forms.php`.
+
+.. config:option:: $cfg['UserprefsDeveloperTab']
+
+ :type: boolean
+ :default: false
+
+ Activates in the user preferences a tab containing options for
+ developers of phpMyAdmin.
+
+Page titles
+-----------
+
+.. config:option:: $cfg['TitleTable']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@'``
+
+.. config:option:: $cfg['TitleDatabase']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@'``
+
+.. config:option:: $cfg['TitleServer']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@'``
+
+.. config:option:: $cfg['TitleDefault']
+
+ :type: string
+ :default: ``'@HTTP_HOST@ | @PHPMYADMIN@'``
+
+ Allows you to specify window's title bar. You can use :ref:`faq6_27`.
+
+Theme manager settings
+----------------------
+
+.. config:option:: $cfg['ThemePath']
+
+ :type: string
+ :default: ``'./themes'``
+
+ If theme manager is active, use this as the path of the subdirectory
+ containing all the themes.
+
+.. config:option:: $cfg['ThemeManager']
+
+ :type: boolean
+ :default: true
+
+ Enables user-selectable themes. See :ref:`faqthemes`.
+
+.. config:option:: $cfg['ThemeDefault']
+
+ :type: string
+ :default: ``'pmahomme'``
+
+ The default theme (a subdirectory under :config:option:`$cfg['ThemePath']`).
+
+.. config:option:: $cfg['ThemePerServer']
+
+ :type: boolean
+ :default: false
+
+ Whether to allow different theme for each server.
+
+Default queries
+---------------
+
+.. config:option:: $cfg['DefaultQueryTable']
+
+ :type: string
+ :default: ``'SELECT * FROM @TABLE@ WHERE 1'``
+
+.. config:option:: $cfg['DefaultQueryDatabase']
+
+ :type: string
+ :default: ``''``
+
+ Default queries that will be displayed in query boxes when user didn't
+ specify any. You can use standard :ref:`faq6_27`.
+
+SQL validator settings
+----------------------
+
+.. config:option:: $cfg['SQLValidator']
+
+ :type: array
+ :default: array(...)
+
+
+
+.. config:option:: $cfg['SQLValidator']['use']
+
+ :type: boolean
+ :default: false
+
+ phpMyAdmin now supports use of the `Mimer SQL Validator
+ `_ service, as originally
+ published on `Slashdot
+ `_. For
+ help in setting up your system to use the service, see the
+ :ref:`faqsqlvalidator`.
+
+.. config:option:: $cfg['SQLValidator']['username']
+
+ :type: string
+ :default: ``''``
+
+.. config:option:: $cfg['SQLValidator']['password']
+
+ :type: string
+ :default: ``''``
+
+ The SOAP service allows you to log in with ``anonymous`` and any password,
+ so we use those by default. Instead, if you have an account with them, you
+ can put your login details here, and it will be used in place of the
+ anonymous login.
+
+MySQL settings
+--------------
+
+.. config:option:: $cfg['DefaultFunctions']
+
+ :type: array
+ :default: array(...)
+
+ Functions selected by default when inserting/changing row, Functions
+ are defined for meta types as (FUNC\_NUMBER, FUNC\_DATE, FUNC\_CHAR,
+ FUNC\_SPATIAL, FUNC\_UUID) and for ``first_timestamp``, which is used
+ for first timestamp column in table.
+
+
+Developer
+---------
+
+.. warning::
+
+ These settings might have huge effect on performance or security.
+
+.. config:option:: $cfg['DBG']
+
+ :type: array
+ :default: array(...)
+
+.. config:option:: $cfg['DBG']['sql']
+
+ :type: boolean
+ :default: false
+
+ Enable logging queries and execution times to be
+ displayed in the bottom of main page (right frame).
+
+.. config:option:: $cfg['DBG']['demo']
+
+ :type: boolean
+ :default: false
+
+ Enable to let server present itself as demo server.
+ This is used for .
+
+.. config:option:: $cfg['Error_Handler']['display']
+
+ :type: boolean
+ :default: false
+
+ Whether to display errors from PHP or not.
+
diff --git a/phpMyAdmin/doc/html/_sources/copyright.txt b/phpMyAdmin/doc/html/_sources/copyright.txt
new file mode 100644
index 0000000..cfcb863
--- /dev/null
+++ b/phpMyAdmin/doc/html/_sources/copyright.txt
@@ -0,0 +1,30 @@
+.. _copyright:
+
+Copyright
+=========
+
+.. code-block:: none
+
+ Copyright (C) 1998-2000 Tobias Ratschiller
+ Copyright (C) 2001-2013 Marc Delisle
+ Olivier Müller
+ Robin Johnson
+ Alexander M. Turek
+ Michal Čihař
+ Garvin Hicking
+ Michael Keck
+ Sebastian Mendel
+ [check credits for more details]
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 2, as
+published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see `http://www.gnu.org/licenses/
+ `_.
diff --git a/phpMyAdmin/doc/html/_sources/credits.txt b/phpMyAdmin/doc/html/_sources/credits.txt
new file mode 100644
index 0000000..61c7758
--- /dev/null
+++ b/phpMyAdmin/doc/html/_sources/credits.txt
@@ -0,0 +1,626 @@
+.. _credits:
+
+Credits
+=======
+
+
+Credits, in chronological order
++++++++++++++++++++++++++++++++
+
+* Tobias Ratschiller
+
+ * creator of the phpmyadmin project
+
+ * maintainer from 1998 to summer 2000
+
+* Marc Delisle
+
+ * multi-language version in December 1998
+
+ * various fixes and improvements
+
+ * :term:`SQL` analyser (most of it)
+
+ * current project maintainer
+
+ * maintains content on our website
+
+* Olivier Müller
+
+ * started SourceForge phpMyAdmin project in March 2001
+
+ * sync'ed different existing CVS trees with new features and bugfixes
+
+ * multi-language improvements, dynamic language selection
+
+ * many bugfixes and improvements
+
+* Loïc Chapeaux
+
+ * rewrote and optimized javascript, DHTML and DOM stuff
+
+ * rewrote the scripts so they fit the :term:`PEAR` coding standards and
+ generate XHTML1.0 and CSS2 compliant codes
+
+ * improved the language detection system
+
+ * many bugfixes and improvements
+
+* Robin Johnson
+
+ * database maintenance controls
+
+ * table type code
+
+ * Host authentication :term:`IP` Allow/Deny
+
+ * DB-based configuration (Not completed)
+
+ * :term:`SQL` parser and pretty-printer
+
+ * :term:`SQL` validator
+
+ * many bugfixes and improvements
+
+* Armel Fauveau
+
+ * bookmarks feature
+
+ * multiple dump feature
+
+ * gzip dump feature
+
+ * zip dump feature
+
+* Geert Lund
+
+ * various fixes
+
+ * moderator of the phpMyAdmin former users forum at phpwizard.net
+
+* Korakot Chaovavanich
+
+ * "insert as new row" feature
+
+* Pete Kelly
+
+ * rewrote and fix dump code
+
+ * bugfixes
+
+* Steve Alberty
+
+ * rewrote dump code for PHP4
+
+ * mySQL table statistics
+
+ * bugfixes
+
+* Benjamin Gandon
+
+ * main author of the version 2.1.0.1
+
+ * bugfixes
+
+* Alexander M. Turek
+
+ * MySQL 4.0 / 4.1 / 5.0 compatibility
+
+ * abstract database interface (PMA\_DBI) with MySQLi support
+
+ * privileges administration
+
+ * :term:`XML` exports
+
+ * various features and fixes
+
+ * German language file updates
+
+* Mike Beck
+
+ * automatic joins in QBE
+
+ * links column in printview
+
+ * Relation view
+
+* Michal Čihař