A new Extension, “Export Ensemble” is now available for download. Comments and feedback can be left here but if you discover any issues, please post it on the issue tracker.

Is there a reason why this extension doesn’t simply dump all tables starting with your prefix into an install.sql?

Well, it’d have to exclude sensitive information. For the core, that means authors, forgot-password, sessions… I guess any extensions that handle sensitive info would need to be trusted with that same task?

Ok, for those tables the schema (and not the data) would be sufficient for an export.

If you want to include all the tables, you can modify the Export Ensemble to include everything. But it could be a little dangerous if you forget that you’ve done this and inadvertently distribute sensitive details in a public repository or downloadable file.

I remember talk of an improved export ensemble which would include preferences for saving an ensemble, a full-backup, tables to include, etc.

Any ideas? Results after clicking the export button.

file_put_contents(/web/public/ensemble1/manifest/logs/main) [function.file-put-contents]: failed to open stream: Too many open files
/web/public/ensemble1/symphony/lib/core/class.log.php line 104

100         if(file_exists($this->_log_path) && !is_writable($this->_log_path)){
101             $this->pushToLog('Could Not Write To Log. It is not readable.', self::ERROR);
102             return false;
103         }
104         return file_put_contents($this->_log_path, $message . ($addbreak ? "rn" : ''), FILE_APPEND);
106     }
108     public function getLog(){

Well… too many open files. :-D

Can you post a backtrace? Maybe the extension is leaking file handles…

lol, thanks Nils!

[/web/public/ensemble1/symphony/lib/core/class.log.php:104] file_put_contents();
[/web/public/ensemble1/symphony/lib/core/class.log.php:87] Log->writeToLog();
[/web/public/ensemble1/symphony/lib/core/class.errorhandler.php:280] Log->pushToLog();
[:0] GenericErrorHandler::handler();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:37] DirectoryIterator->__construct();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:42] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:42] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:42] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:42] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:42] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:42] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:42] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:143] extension_export_ensemble->__addFolderToArchive();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:189] extension_export_ensemble->__export();
[/web/public/ensemble1/extensions/export_ensemble/extension.driver.php:195] extension_export_ensemble->__SavePreferences();
[/web/public/ensemble1/symphony/lib/toolkit/class.extensionmanager.php:340] extension_export_ensemble->appendPreferences();
[/web/public/ensemble1/symphony/content/content.systempreferences.php:57] ExtensionManager->notifyMembers();
[/web/public/ensemble1/symphony/lib/toolkit/class.administrationpage.php:81] contentSystemPreferences->view();
[/web/public/ensemble1/symphony/lib/core/class.administration.php:88] AdministrationPage->build();
[/web/public/ensemble1/symphony/lib/core/class.administration.php:204] Administration->__buildPage();
[/web/public/ensemble1/index.php:25] Administration->display();

is there a way to emulate the behavior of this extension for something like uploading to github? so far, my process is to simply add manifest/ to .gitignore and do a mysqldump before pushing, but obviously a straight up mysqldump is going to save all of the sensitive data.

edit: after looking at other ensembles and the default symphony workspace, perhaps there is some install.sql wrangling to be done?

If the extensions you are using in the ensemble do not add tables to the database, the easy way would be to export the ensemble, then replace the /workspace/install.sql file in the repository.

If you are using extensions that add tables to the database, then you’ll have to modify the export ensemble. For example, I’ve created an Export Forum extension to include the Members extension tables in the /install.sql and /workspace/install.sql files.

I use different branches, depending on whether I want to export the entire ensemble (master) or just the /workspace/install.sql file (install).

I started to experiment with simply overwriting the /workspace/install.sql file with the savesql branch. But I haven’t had time to test it out yet. This would work really well in a git workflow for developing ensembles.

what’s the difference between /install.sql and /workspace/install.sql? what i ended up doing was simply dumping the database, minus sym_authors, sym_cache, and sym_sessions, then appending them with --no-data >> install.sql. however, i just placed it in the project’s root directory and ran install.php with success.

i suppose this may be a discussion for a separate git-related thread, but what i am trying to do is replicate export ensemble from the command line so i can skip the entire log-in-to-backend/zipping/uploading/unzipping process.

Install SQL Files

The difference between the /install.sql and the /workspace/install.sql is that the installer uses the former to set up the structure of the database and if a workspace is included at the time of install, the installer will also use the latter to populate the database with data to install an ensemble. If no workspace is included at the time of install, a blank workspace will be automatically set up.

The SQL statements in the /install.sql file are used to set up the structure for the following tables, where the tbl prefix is replaced by the table prefix specified during the install process:

  • sym_authors
  • sym_cache
  • sym_entries
  • sym_extensions
  • sym_extensions_delegates
  • sym_fields
  • sym_fields_author
  • sym_fields_checkbox
  • sym_fields_date
  • sym_fields_input
  • sym_fields_select
  • sym_fields_taglist
  • sym_fields_textarea
  • sym_fields_upload
  • sym_forgotpass
  • sym_pages
  • sym_pages_types
  • sym_sections
  • sym_sections_association

The SQL statements in the /workspace/install.sql file are used by the installer to set up the structure of section tables, tables named sym_entries_data_xxx, and to populate all the tables with the same database structure and data required to reproduce the original Symphony install. Notably missing from the /workspace/install.sql is any reference to the following tables:

  • sym_authors
  • sym_cache
  • sym_forgotpass

The Export Ensemble extension ensures that sensitive data, such as author usernames and passwords, will not be included in the SQL file. Configuration settings are also sanitized, so sensitive database configuration settings are excluded.

Symphony Shell Extension

If you’re trying to work with Symphony from the command line, it might be useful to take a look at Alistair’s Symphony Shell extension. It’s not been updated for a while, so I’m not sure how well it will work with the latest version of Symphony, but it could be a good starting point for working with Symphony from the command line.

Save Only the SQL File

If you are using Symphony 2.2 RC2, you can try out the savesql branch of my fork of the Export Ensemble extension. I just pushed this up today. I tested it out on the default workspace (integration branch for Symphony 2.2), and I was able to export the SQL (making sure that the install.sql file was writable by PHP), then install from the new file without an issue.

Rather than export the entire ensemble as a ZIP file, it simply overwrites the /workspace/install.sql file. Just add the updated file to the Git repo and you’ll have an updated ensemble.

Just be aware that for extensions that add tables to the database, this extension would need to be modified to include those tables in the install.sql file. Some extensions also modify the configuration settings, so the install.php file would also need to be modified to include these configuration settings for the ensemble to work with these extensions.

Just noticed the Export Ensemble 1.12 of Symphony 2.2 shows "Symphony 2.2RC1" instead of 2.2

Ups, sorry!

Hello.. Not really sure if this is an issue with this extension or not, but I've attempted to update my ensemble to version 2.2.1 (with export_ensemble 1.13).

Now, after installing a new version of the ensemble, when you're normally taken to the /symphony login prompt, I'm getting errors that the table for prefix_sessions doesn't exist.

I assume this is intentional, to obviously keep sensitive information from being sent around.. But Symphony still wants/needs(?) it there. Is there maybe something else I've done to exclude this from happening, or is this possibly a bug?


Can you try this; Line 77 of extension.driver.php, make it look like (where sym is actually tbl):


I can confirm the bug. @brendo, that does make a difference. But that also means that if you are tracking the install.sql in a git repository, the order of the SQL statements changes from the existing file.

This retains the existing order:

$tables = array(

Great, that seems to have fixed it. I know the order of it ultimately doesn't make or break the deal, but if @bauhouses' order is preferred, I'll change it to that to make sure it's consistent.

Either way, thanks for the quick response/solution.

If you pull from master inside the extensions/export_ensemble, I've updated EE to 1.14. Zip users can download the updated extension via this zip

Create an account or sign in to comment.

Symphony • Open Source XSLT CMS

Server Requirements

  • PHP 5.3-5.6 or 7.0-7.3
  • PHP's LibXML module, with the XSLT extension enabled (--with-xsl)
  • MySQL 5.5 or above
  • An Apache or Litespeed webserver
  • Apache's mod_rewrite module or equivalent

Compatible Hosts

Sign in

Login details