Batch Files - Emulate Server Console
The UniController command console opens a command window with environment variables preconfigured. This command window allows you to run PHP scripts without specifying the full path to php.exe. If you find this command window too restrictive, an alternative is to create your own. The following page covers emulating UniController to open a command console using a batch file. Although specific to Uniform Server, some of the code snippets are applicable to other applications.
Opening a standard command prompt (for details, see How to run a standard command window) has one major disadvantage: its environment is inherited. If the inherited environment is missing environment variables an application requires, that application will fail. This is true for Uniform Server which is portable and does not change the host environment.
A standard command prompt inherits all top-level variables. These can be created or changed by a user performing specific operating system tasks. This process is made difficult on purpose to prevent inadvertent changes and to avoid variable clutter. The inherited environment is a copy (snapshot) of the current environment and is easily changeable. At the command prompt, you can add new environment variables and change inherited ones to create a new environment. This new environment is passed to applications started from the command prompt. Similarly, an application can create a new environment and pass it to other applications it runs.
Important note: A child process (application) cannot change environment variables of a parent. A child process can only change the copy (snapshot of the current environment) it inherits from a parent.
To emulate UniController's command console, we can use the above to our advantage. The following lists basic requirements:
- Run a batch file – Inherits environment.
◦ Locate batch file in folder UniServerZ. - Suitable location for portability and reference.
◦ Allow batch file execution from another application; for example, another batch file.
- Manipulate the inherited environment.
◦ Path environment variable. - Add full path to folder containing php.exe file and other full paths as required.
- Set new environment variables.
◦ HOME environment variable. - Full path to folder UniServerZ. Folder separator is backslash.
◦ US_ROOTF environment variable. - Full path to folder UniServerZ. - Folder separator is forward slash.
◦ Set any other new environment variables as required.
- Open a new command window – Inherits our new environment.
◦ Runs batch file command "cmd".
- Close batch file.
Note: Highlighted elements allow running of PHP CLI scripts.
Basic batch file
In folder UniServerZ, create a new file named run_cmd.bat with the following content:
rem ### working directory current folder
rem ### set variables
rem ### Get PHP version selected
FOR /F "TOKENS=1,2 delims==" %%A IN (%CFGF%) DO If %%A==PHP_SELECT Set PHP_SELECT=%%B
rem ### Set path to php.exe
rem ### open command prompt
cmd.exe /k "cls & title Uniserver emulated console & COLOR B0"
rem ### restore original working directory
A) The batch file command "@echo off" prevents displaying of command lines.
B) The batch file command pair "pushd %~dp0" and "popd", apart from saving and resorting a caller's location, forces current working directory to the location of the file containing the command pair.
C) The HOME environment variable is set to the current working directory.
D) The US_ROOTF environment variable is set to the current working directory (%HOME%).
E) The line "set US_ROOTF=%US_ROOTF:\=/%" converts backslashes to forward slashes.
F) The FOR IN DO loop reads the user configuration file us_user.ini, obtains the selected PHP version and sets environment variable PHP_SELECT.
G) The "Path" environment variable is modified to include path to php.exe
H) Command prompt is opened by "cmd". The parameter "/k" keeps the command prompt window open. Commands "cls" clears the window content, "title" sets the window title name and "color" sets the background colour.
Run the batch file by double-clicking on file run_cmd.bat. A command window opens. Type "set" without the quotes into this window.
- Inherited environment variables are displayed.
- Confirm new variables HOME and US_ROOTF show full path to folder UniServerZ and file separators are backslashes and forward slashes respectively.
- Check path displays full path to php.exe and original path is appended.
Note: Variables HOME and US_ROOTF are used in Uniform Server PHP configuration files (for example, php-cli.ini).