PHP Settings

General Options

 

**Multi-Language** Enable multi-language project. If enabled, a combobox will appear on the top of the generated scripts for user to select language. See Tools for selecting languages for the multi-language project.
Important
  1. Multi-Language project must use utf-8 encoding. The charset of the project must be "utf-8".
  2. The data in your database must be stored in unicode, otherwise your data will not be displayed properly.
**Default Language** Default language of the project. It must be compatible with Charset (see HTML Settings). Default is "en-US".

There is always one default language for a project. Only the English language file (english.en-US.xml) is shipped with PHPMaker. If your project is single language but you use another language, create a language file for your language (see Making Language Files), put it in the "languages" subfolder under the AppData folder (i.e. C:\Users\user\AppData\Roaming\PHPMaker2026\languages) and then select your default language using this combobox.

If you enable Multi-Language, you must select one of the selected languages as the default language.

**File Upload**

Upload folder - The global folder where the uploaded files resides. If you do not enter a specific folder for a file upload field in the Edit Tag panel of the Field Setup page, all the uploaded files will be put in this folder.

Notes
  1. Always specify an upload folder if you allow file upload. This folder is used as the root folder of temporary folders for file upload fields during Add/Edit. It is also used as the root folder of the user files folder of TinyMCE.
  2. Unlike the field specific upload folder setting (which is a PHP expression), this field specific setting must be a constant string (without double quotes). If you want dynamic upload folders for different fields, specify upload folder for each field (see Field Setup).
  3. The path is relative to Local file system root. Use slashes "/" as path delimiter, no leading slash. e.g. If the project folder of your website is D:\websites\demo and local file system root is "." and you enter "uploads/" in this textbox, the folder for the uploaded files will be D:\websites\demo\uploads. If for some reasons you must use another absolute path, use the File upload path for temporary files advanced setting.
  4. If you want to use remote folders (e.g. AWS S3, Google Cloud Storage, Azure Blob Storage), you need to specify [Filesystem URI](filestorage.html?id=filesystem-uri), e.g. you can enter "s3://my-bucket/" (WITHOUT quotes and WITH trailing slash). (In this special case, the path is not relative to local file system root.) To use AWS S3, Google Cloud Storage, Azure Blob Storage, read [File Storage](filestorage.html) for details..
  5. Even you use remote upload folders, you still need a local upload folder on your web server for temporary files, you can specify the folder by the advanced settings [File upload path for temporary files](tools.html?id=file-upload-path-for-temporary-files).
  6. Make sure that the web server user have FULL read/write access to the folder. If you use S3 bucket, note that the uploaded files in the bucket are not public by default. Remember to configure bucket permissions so that the uploaded files are accessible by users.

Max File Size - Maximum file upload size in bytes. If <= 0, there is no checking on file size.

Notes File upload also depends on your PHP, web server and database configuration:

  1. PHP - Check your php.ini, related configurations are file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size, max_input_time, memory_limit, and max_execution_time directives in php.ini.
  2. Apache - If you use Apache web server, check LimitRequestBody directive.
  3. MySQL - Check the max_allowed_packet setting in your MySQL configuration.

Allowed file types - The allowed file extensions of the uploaded files. Separate the file extensions (without ".") by comma without space, e.g. gif,png,png. If blank, all file types are allowed.

Delete file on update/delete - Option to delete the uploaded file when the field value is replaced, removed or if the record is deleted.

Note If Delete file on update/delete is enabled, the uploaded file will be deleted. If the deleted record is a copied record, deleting the uploaded files will affect the original record. To prevent such possible problem, enable Advanced Setting Create upload file on copy (see Advanced Settings) to duplicate the uploaded file when copying a record.
**Logging**

**Log file folder** - Deprecated The folder where the log file resides. By default, this uses `%kernel.logs_dir%`, which resolves to `%kernel.project_dir%/var/log`. This setting **cannot** be changed and does **not** automatically reflect changes made to the log directory in code, e.g. via `Kernel::getLogDir()`.

Notes
  1. Make sure that the web server user have read/write access to the folder. Unlike upload folder, this folder must be local.
  2. The path is relative to project folder. Use slashes `/` as path delimiter, no leading slash. e.g. If the project folder of your website is _D:\websites\myproject_ and you enter `%kernel.project_dir%/logs` in this textbox, the folder for the log file will be _D:\websites\myproject\logs_.
  3. From v2026, the log file names are named as `env-yyyy-mm-dd.log`, where `env` can be `dev` (development) or `prod` (production).
Audit Trail

Use database table - Log the activities in the specified table instead of log file. The table must have the following fields: (actual data types depend on database type)

  • DateTime (DateTime)
  • Script (Varchar)
  • User (Varchar)
  • Action (Varchar)
  • Table (Varchar)
  • Field (Varchar)
  • KeyValue (Long Varchar)
  • OldValue (Long Varchar)
  • NewValue (Long Varchar)

You can create the database yourselves and select the table in the combobox, then click the [...] button to select the fields in your table. Alternatively, if you have not created the table yet, you can click Create Table to create the table and setup the table/fields.

Track login/logout activities - If security feature is enabled, login/logout activities will also be logged.

**Validation**

Server-side - Enable server-side form validation.

Client-side (JavaScript) - Enable client-side form validation.

Note If the available validation format in the Edit Tag panel (see Field Setup) does not fulfil your requirements, you can use your own server-side and/or client-side validation code using Server Event and Client Scripts.

**Web Push**

Use Web Push Notifications - Enable the Web Push Notificaiton feature.
Allow anonymous users - Enable subscriptions for anonymous user.
Subscriptions table - The table to store the subscription data. The table must contain the following fields: (actual data types depending on database type)

  • ID (Integer) - Subscription id, primary key of the table, autoincrement
  • User (Varchar) - Stores the subscriber's User ID
  • Endpoint (Long Varchar) - Stores the end point of the push notification
  • PublicKey (Varchar) - Stores the public key for the push notification
  • AuthenticationToken (Varchar) - Stores the authentication token of the push notification
  • ContentEncoding (Varchar) - Stores the content encoding of the push notification

You can create the database yourselves and select the table in the combobox, then click the [...] button to select the fields in your table. Alternatively, if you have not created the table yet, you can click Create Table button to create the table and setup the table/fields.

Server public key - Web Push VAPID public key
Server private key - Web Push VAPID private key

You can create the Server public/private key pairs by clicking the Generate button. Note The Generate button is only enabled if both keys are empty. If you want to generate again, clear both keys first.

Time limit - Time limit (in seconds) for sending the Web Push Notification

See Web Push Notification for more information.

 

Page Options (Global)

The following page options are global for all tables. If you want different settings for a particular table, you can use table-specific options available in the Table Setup page.

 

**Records per page** Number of records to be displayed in the list page of all tables. If blank or 0, default setting of 20 will be used. Not for reports.
**Page sizes (records)** Number of records to be selected by user. Comma separated values, e.g. 10,20,50,ALL. Not for reports.
Note "ALL" (without quotes) is supported, other values must be integers.
**Groups per page** Number of groups to be displayed in reports. If blank or 0, default setting of 3 will be used. For reports only.
**Page sizes (groups)** Number of groups to be selected by user. Comma separated values, e.g. 1,2,3,5,ALL. For reports only.
Note "ALL" (without quotes) is supported, other values must be integers.
**Pager proximity** The number of page links to display around the current page.
Note The old "PrevNext" and "Numeric" pagers are now integrated as one. If this setting is set to 0, it will regress to the PrevNext pager of previous version.
**Sort type** None, Single column or Multiple column.
Note If Multiple column is selected, the List pages support multiple column sorting by Ctrl-clicking the table header and clear sorting by Shift-clicking any table header.
**Multiple column** Show multiple records per row. Default is 0. This feature will only take effect if the value is > 0. Possible values: 1, 2, 3, 4, 6, 12
**Multi-Page type** Default Multi-Page layout if Multi-Page is enabled. Possible values are:
**Paging section at top** Show the paging section at top (also applies to View page)
**Paging section at bottom** Show the paging section at bottom (also applies to View page)
**Paging section in View page** Show paging section in View page also
**Paging section in Edit page** Show paging section in Edit page also
**Multi-Delete** Show checkboxes in the list page for selecting multiple records to delete
**Links on left side** Show the links in record row on the left instead of right
**Use buttons as links** Show the links in record row as a button group instead of individual icons or links.
**Use button dropdown for links** Show the links in record row as a button with dropdown menu instead of individual icons or links.
**Use button dropdown in paging section** Show the links in paging section as buttons with dropdown menu instead of individual links.
**Export** Enable export in List/Report page - allow export in List/Report pages

Enable export in View page - allow export in View pages also

Use button dropdown - show the export links as a button with dropdown menu. Default is showing the export links as a row of icons.

Print/CSV/HTML/Excel/Word/XML/PDF/Email - Records can be exported to Print (printer-friendly), CSV, HTML, Excel, Word, XML, PDF format or sent as HTML email content.

Note The fields in printer friendly version are same as in List/View page, while the fields in other format are determined by the Export setting of the field in Field Setup page.

Export type - Determines which records to export. The follows are supported:

  • All Pages - Records in all pages are exported
  • Current Page - All records in current page are exported
  • Selected Record - If selected, a checkbox will be displayed in each row for selection. Only selected records in the current page are exported. (Selecting records in different pages is not allowed.) To select records primary key is required, Current Page export type will be used for tables without primary key. Not supported by reports.

**Export log table** - For use with Export API which allows you to export snapshots from tables/views/reports and save them as physical files on server so they can be retrieved later. See [Export API](export.html) for details.

Notes
  1. Binary data (BLOB fields) cannot be exported (except jpg, gif and png images).
  2. Export to HTML/CSV/XML are not applicable to reports.
  3. Export to Word/Excel works by exporting data in HTML format for Word/Excel to convert/import, the exported file is not native .doc/.xls format. However, registered users can use the PhpSpreadsheet/PHPWord extension which outputs native Excel/Word file format.
  4. Images cannot be exported to Word/Excel/CSV/XML. However, registered users can use the PhpSpreadsheet/PHPWord extension which outputs images also.
  5. Export to PDF (for all users) and PhpSpreadsheet/PHPWord extensions (for registered users) support images (jpg, gif and png only), but a temporary folder is required during export, the extensions use the Upload folder (see File Upload above) because write permission for the folder should be already setup properly. Even you do not use file upload to folder, if you want to export with images, make sure you still specify an upload folder and set up write permission.
  6. Similarly, a temporary folder is required when exporting charts with report and the Upload folder will be used.
Notes (Export to PDF)
  1. Dompdf is not particularly tolerant to poorly-formed HTML input.
  2. Large files or large tables can take a while to render.
  3. Requires a lot of memory.
  4. The extension performs best if you are using non-unicode alphanumerical characters (e.g. iso-8859-1) only. If you use unicode, configure advanced settings for the extension, read the note in the extension setup page (see Extensions) for more information.
  5. By default export is only enabled in View page. If you want to enable it in the List page also (the number of records to be exported is not large), you can set the advanced settings of the extension (see Extensions).
Features Supported by Export Types

  HTML/Print PDF Email Excel Word PhpSpreadsheet (for registered users) PHPWord (for registered users)
**Format** HTML PDF HTML HTML (NOT native) HTML (NOT native) Excel 5/2007 (native) Word 2007 only (native)
**Images**
**Charts (as images)**
**Custom Template**

(Partially supported by Summary reports)

(Partially supported by Summary reports)

 

Email Settings

PHPMaker supports many features that can send emails. If you use these features, you'll need to specify a SMTP server.

**SMTP server** The host name or IP of the SMTP server.
Note Some servers do not support "localhost" as SMTP server, in such case you need to specify a valid SMTP server in the network.
**SMTP server port** Port number of SMTP server. Default is 25.
**SMTP server username** User name for SMTP server authentication. If your SMTP server does not require authentication, leave it blank.
**SMTP server password** Password for SMTP server authentication. If your SMTP server does not require authentication, leave it blank.
**Sender (Email address)** Email address of the sender of all emails
**Recipient (Email address)** Email address of the recipient(s) for notification emails when a record is added/edited/deleted (if enabled, see Table Setup). If there are multiple recipients, separate them by comma.
**Security** What kind of encryption to use on the SMTP connection. Possible values are: empty, `SSL` (use encryption) or `TLS` (use `STARTTLS`).
Notes
  1. Leave this setting empty if your SMTP server does not use SSL/TLS encryption.
  2. If you enable this, make sure you have enabled and properly set up **OpenSSL extension** for PHP, see [Some Important Settings in php.ini](ampstack.html?id=some-important-settings-in-php-ini).
**Test** Press this button for testing your SMTP settings. A test email will be sent by Symfony built-in SMTP transport to the first **Recipient** you specified above.
**Note** For testing Symfony built-in SMTP transport only, it does not support PHPMailer or 3rd party transports.

###### Overriding Default SMTP Authenticators By default, SMTP transports will try to login using all authentication methods available on the SMTP server, one after the other. In some cases, you may want to redefine the supported authentication methods to ensure that the preferred method will be used first. This can be done by setting ``Config('MAILER_AUTHENTICATORS')`` in [Global Code](customscripts.html?id=global-code), e.g. if your transport supports XOAUTH2 and you prefer to use it only: ###### Using 3rd Party Transport Since v2025, PHPMaker uses [Symfony Mailer](https://symfony.com/doc/current/mailer.html) instead of PHPMailer. Emails are delivered via a "transport", PHPMaker uses the built-in "smtp" transport to deliver emails over SMTP by above settings. Symfony Mailer also support various other 3rd party transports, see [Using a 3rd Party Transport](https://symfony.com/doc/current/mailer.html#using-a-3rd-party-transport) for details. To use 3rd party transport, you can: 1. Select a 3rd party transport in the advanced setting [Mailer Transport](tools.html?id=mailer-transport), e.g. ``Amazon SES``, 1. Enter your DSN to the advanced setting [Mailer DSN](tools.html?id=mailer-dsn), e.g. ``ses+smtp://USERNAME:PASSWORD@default?region=REGION``. ###### Using Gmail
**Note** Symfony also offers built-in support for Gmail for convenience, but it is not recommended for production use.
If you want to use Google Gmail, you must have a Google Account with 2-Step-Verification (2FA) enabled and you must use [App Password](https://support.google.com/accounts/answer/185833) to authenticate. Also note that Google revokes your App Passwords when you change your Google Account password and then you need to generate a new one. Using other methods (like XOAUTH2 or the Gmail API) are NOT supported currently. You should use Gmail for testing purposes only and use a real provider in production. If you must use Gmail, you can: 1. Select ``Gmail`` as the 3rd party transport in the advanced setting [Mailer Transport](tools.html?id=mailer-transport), 1. Enter your DSN to the advanced setting [Mailer DSN](tools.html?id=mailer-dsn), e.g. ``gmail+smtp://USERNAME:APP-PASSWORD@default`` ###### Using PHPMailer
**Note** PHPMailer is **NOT** supported by Symfony, you should be able to use Symfony's own SMTP transport to send emails, this option is provided for backward compatibility only and may be removed in future versions. Do NOT enable this option unless you must use PHPMailer before migrating to Symfony transport.
If you still need to use PHPMailer for some reasons, you can enable the advanced setting [Use PHPMailer](tools.html?id=use-phpmailer). For example, if you want to send email via Gmail using XOAUTH2 authentication (see [Using Gmail with XOAUTH2](https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2) and the [example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail_xoauth.phps)), you can: 1. Enter the required Composer packages ``league/oauth2-client`` and ``league/oauth2-google`` under [Composer Packages](tools.html?id=composer-packages), 1. Create the OAuth2 token provider in [Global Code](customscripts.html?id=global-code) and set it to ``Config('PHPMAILER_OAUTH')``, e.g.

 

 ©2002-2025 e.World Technology Ltd. All rights reserved.