diff --git a/__tests__/utils.test.ts b/__tests__/utils.test.ts
index 7eaec679..12a03279 100644
--- a/__tests__/utils.test.ts
+++ b/__tests__/utils.test.ts
@@ -107,16 +107,16 @@ describe('Utils tests', () => {
await cleanup(script_path);
});
- it('checking extensionArray', async () => {
- expect(await utils.extensionArray('a, b, php_c, php-d')).toEqual([
+ it('checking packageArray', async () => {
+ expect(await utils.packageArray('a, b, php_c, php-d')).toEqual([
'a',
'b',
'c',
'd'
]);
- expect(await utils.extensionArray('')).toEqual([]);
- expect(await utils.extensionArray(' ')).toEqual([]);
+ expect(await utils.packageArray('')).toEqual([]);
+ expect(await utils.packageArray(' ')).toEqual([]);
});
it('checking INIArray', async () => {
diff --git a/action.yml b/action.yml
index 190091b2..eadc8a62 100644
--- a/action.yml
+++ b/action.yml
@@ -18,6 +18,9 @@ inputs:
coverage:
description: 'Setup code coverage driver.'
required: false
+ sapi:
+ description: 'Setup PHP Server API.'
+ required: false
tools:
description: 'Setup popular tools globally.'
required: false
diff --git a/dist/index.js b/dist/index.js
index a96bf640..5489fa14 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1808,7 +1808,7 @@ const utils = __importStar(__nccwpck_require__(314));
* @param version
*/
async function addExtensionDarwin(extension_csv, version) {
- const extensions = await utils.extensionArray(extension_csv);
+ const extensions = await utils.packageArray(extension_csv);
let add_script = '\n';
let remove_script = '';
await utils.asyncForEach(extensions, async function (extension) {
@@ -1877,7 +1877,7 @@ exports.addExtensionDarwin = addExtensionDarwin;
* @param version
*/
async function addExtensionWindows(extension_csv, version) {
- const extensions = await utils.extensionArray(extension_csv);
+ const extensions = await utils.packageArray(extension_csv);
let add_script = '\n';
let remove_script = '';
await utils.asyncForEach(extensions, async function (extension) {
@@ -1961,7 +1961,7 @@ exports.addExtensionWindows = addExtensionWindows;
* @param version
*/
async function addExtensionLinux(extension_csv, version) {
- const extensions = await utils.extensionArray(extension_csv);
+ const extensions = await utils.packageArray(extension_csv);
let add_script = '\n';
let remove_script = '';
await utils.asyncForEach(extensions, async function (extension) {
@@ -2095,6 +2095,7 @@ const core = __importStar(__nccwpck_require__(186));
const config = __importStar(__nccwpck_require__(373));
const coverage = __importStar(__nccwpck_require__(84));
const extensions = __importStar(__nccwpck_require__(587));
+const sapi = __importStar(__nccwpck_require__(489));
const tools = __importStar(__nccwpck_require__(905));
const utils = __importStar(__nccwpck_require__(314));
/**
@@ -2113,7 +2114,11 @@ async function getScript(filename, version, os_version) {
const ini_values_csv = await utils.getInput('ini-values', false);
const coverage_driver = await utils.getInput('coverage', false);
const tools_csv = await utils.getInput('tools', false);
+ const sapi_csv = await utils.getInput('sapi', false);
let script = await utils.readScript(filename);
+ if (sapi_csv) {
+ script += await sapi.addSAPI(sapi_csv, os_version);
+ }
script += await tools.addTools(tools_csv, version, os_version);
if (extension_csv) {
script += await extensions.addExtension(extension_csv, version, os_version);
@@ -2159,6 +2164,77 @@ exports.run = run;
});
+/***/ }),
+
+/***/ 489:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.addSAPI = exports.getSapiList = void 0;
+const utils = __importStar(__nccwpck_require__(314));
+async function getSapiList(sapi_csv) {
+ const sapi_list = await utils.packageArray(sapi_csv);
+ const servers = sapi_list.filter(sapi => /.*:.*/.test(sapi));
+ return [servers[servers.length - 1]].concat(sapi_list.filter(sapi => /.*[^:].*/.test(sapi)));
+}
+exports.getSapiList = getSapiList;
+/**
+ * Function to set sapi
+ *
+ * @param sapi_csv
+ * @param os_version
+ */
+async function addSAPI(sapi_csv, os_version) {
+ let script = '\n' + (await utils.stepLog('Setup SAPI', os_version));
+ let sapi_list;
+ switch (true) {
+ case sapi_csv.split(':').length - 1 > 1:
+ sapi_list = await getSapiList(sapi_csv);
+ script +=
+ '\n' +
+ utils.log('Multiple SAPI with web servers specified, choosing the last one ' +
+ sapi_list[0], os_version, 'warning');
+ break;
+ default:
+ sapi_list = await utils.packageArray(sapi_csv);
+ }
+ await utils.asyncForEach(sapi_list, async function (sapi) {
+ sapi = sapi.toLowerCase();
+ switch (os_version) {
+ case 'linux':
+ case 'darwin':
+ script += '\nadd_sapi ' + sapi;
+ break;
+ case 'win32':
+ script += '\nAdd-Sapi ' + sapi;
+ break;
+ }
+ });
+ return script;
+}
+exports.addSAPI = addSAPI;
+
+
/***/ }),
/***/ 905:
@@ -2654,7 +2730,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.extensionArray = exports.writeScript = exports.readScript = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.parseVersion = exports.fetch = exports.getInput = exports.readEnv = void 0;
+exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.packageArray = exports.writeScript = exports.readScript = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.parseVersion = exports.fetch = exports.getInput = exports.readEnv = void 0;
const fs = __importStar(__nccwpck_require__(747));
const https = __importStar(__nccwpck_require__(211));
const path = __importStar(__nccwpck_require__(622));
@@ -2847,18 +2923,18 @@ exports.writeScript = writeScript;
/**
* Function to break extension csv into an array
*
- * @param extension_csv
+ * @param package_csv
*/
-async function extensionArray(extension_csv) {
- switch (extension_csv) {
+async function packageArray(package_csv) {
+ switch (package_csv) {
case '':
case ' ':
return [];
default:
- return extension_csv
+ return package_csv
.split(',')
- .map(function (extension) {
- return extension
+ .map(function (package_name) {
+ return package_name
.trim()
.toLowerCase()
.replace(/^php[-_]/, '');
@@ -2866,7 +2942,7 @@ async function extensionArray(extension_csv) {
.filter(Boolean);
}
}
-exports.extensionArray = extensionArray;
+exports.packageArray = packageArray;
/**
* Function to break csv into an array
*
diff --git a/src/configs/httpd-php-apache.conf b/src/configs/httpd-php-apache.conf
new file mode 100644
index 00000000..a8aec44b
--- /dev/null
+++ b/src/configs/httpd-php-apache.conf
@@ -0,0 +1,3 @@
+LoadModule phpPHP_MAJOR_module PHP_DIR\PHP_APACHE_DLL
+AddHandler application/x-httpd-php .php
+PHPIniDir PHP_DIR
\ No newline at end of file
diff --git a/src/configs/httpd-php-cgi.conf b/src/configs/httpd-php-cgi.conf
new file mode 100644
index 00000000..86c805e3
--- /dev/null
+++ b/src/configs/httpd-php-cgi.conf
@@ -0,0 +1,8 @@
+LoadModule proxy_module modules/mod_proxy.so
+LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
+LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
+
+
+ SetHandler "proxy:fcgi://127.0.0.1:9000/"
+
+
\ No newline at end of file
diff --git a/src/configs/nginx.conf b/src/configs/nginx.conf
new file mode 100644
index 00000000..719ee866
--- /dev/null
+++ b/src/configs/nginx.conf
@@ -0,0 +1,36 @@
+worker_processes 1;
+
+events {
+ worker_connections 1024;
+}
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ sendfile on;
+
+ keepalive_timeout 65;
+
+ server {
+ listen 80;
+ server_name localhost;
+
+ location / {
+ root html;
+ index index.php index.html index.htm;
+ }
+
+ error_page 500 502 503 504 /50x.html;
+ location = /50x.html {
+ root html;
+ }
+ location ~ \.php$ {
+ root html;
+ fastcgi_pass 127.0.0.1:9000;
+ fastcgi_index index.php;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ include fastcgi_params;
+ }
+ }
+}
diff --git a/src/configs/virtual_hosts/darwin/httpd-vhosts.conf b/src/configs/virtual_hosts/darwin/httpd-vhosts.conf
new file mode 100644
index 00000000..f2fd1ca3
--- /dev/null
+++ b/src/configs/virtual_hosts/darwin/httpd-vhosts.conf
@@ -0,0 +1,5 @@
+
+ ServerAdmin webmaster@localhost
+ DocumentRoot "/var/www/html"
+ ServerName localhost
+
\ No newline at end of file
diff --git a/src/configs/virtual_hosts/linux/default_apache b/src/configs/virtual_hosts/linux/default_apache
new file mode 100644
index 00000000..c500a4c0
--- /dev/null
+++ b/src/configs/virtual_hosts/linux/default_apache
@@ -0,0 +1,7 @@
+
+ ServerName localhost
+ ServerAdmin webmaster@localhost
+ DocumentRoot /var/www/html
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
\ No newline at end of file
diff --git a/src/configs/virtual_hosts/linux/default_nginx b/src/configs/virtual_hosts/linux/default_nginx
new file mode 100644
index 00000000..694945e1
--- /dev/null
+++ b/src/configs/virtual_hosts/linux/default_nginx
@@ -0,0 +1,22 @@
+server {
+ listen 80 default_server;
+ listen [::]:80 default_server;
+
+ root /var/www/html;
+ index index.html index.htm index.php;
+
+ server_name localhost;
+
+ location / {
+ try_files $uri $uri/ =404;
+ }
+
+ location ~ \.php$ {
+ include snippets/fastcgi-php.conf;
+ fastcgi_pass unix:/run/php/phpPHP_VERSION-fpm.sock;
+ }
+
+ location ~ /\.ht {
+ deny all;
+ }
+}
\ No newline at end of file
diff --git a/src/extensions.ts b/src/extensions.ts
index 2f85f54b..8b9ea48f 100644
--- a/src/extensions.ts
+++ b/src/extensions.ts
@@ -10,7 +10,7 @@ export async function addExtensionDarwin(
extension_csv: string,
version: string
): Promise {
- const extensions: Array = await utils.extensionArray(extension_csv);
+ const extensions: Array = await utils.packageArray(extension_csv);
let add_script = '\n';
let remove_script = '';
await utils.asyncForEach(extensions, async function (extension: string) {
@@ -115,7 +115,7 @@ export async function addExtensionWindows(
extension_csv: string,
version: string
): Promise {
- const extensions: Array = await utils.extensionArray(extension_csv);
+ const extensions: Array = await utils.packageArray(extension_csv);
let add_script = '\n';
let remove_script = '';
await utils.asyncForEach(extensions, async function (extension: string) {
@@ -229,7 +229,7 @@ export async function addExtensionLinux(
extension_csv: string,
version: string
): Promise {
- const extensions: Array = await utils.extensionArray(extension_csv);
+ const extensions: Array = await utils.packageArray(extension_csv);
let add_script = '\n';
let remove_script = '';
await utils.asyncForEach(extensions, async function (extension: string) {
diff --git a/src/install.ts b/src/install.ts
index b8323432..8611e539 100644
--- a/src/install.ts
+++ b/src/install.ts
@@ -3,6 +3,7 @@ import * as core from '@actions/core';
import * as config from './config';
import * as coverage from './coverage';
import * as extensions from './extensions';
+import * as sapi from './sapi';
import * as tools from './tools';
import * as utils from './utils';
@@ -26,10 +27,13 @@ export async function getScript(
const ini_values_csv: string = await utils.getInput('ini-values', false);
const coverage_driver: string = await utils.getInput('coverage', false);
const tools_csv: string = await utils.getInput('tools', false);
+ const sapi_csv: string = await utils.getInput('sapi', false);
let script: string = await utils.readScript(filename);
+ if (sapi_csv) {
+ script += await sapi.addSAPI(sapi_csv, os_version);
+ }
script += await tools.addTools(tools_csv, version, os_version);
-
if (extension_csv) {
script += await extensions.addExtension(extension_csv, version, os_version);
}
diff --git a/src/sapi.ts b/src/sapi.ts
new file mode 100644
index 00000000..4471e483
--- /dev/null
+++ b/src/sapi.ts
@@ -0,0 +1,51 @@
+import * as utils from './utils';
+
+export async function getSapiList(sapi_csv: string): Promise> {
+ const sapi_list: Array = await utils.packageArray(sapi_csv);
+ const servers: Array = sapi_list.filter(sapi => /.*:.*/.test(sapi));
+ return [servers[servers.length - 1]].concat(
+ sapi_list.filter(sapi => /.*[^:].*/.test(sapi))
+ );
+}
+
+/**
+ * Function to set sapi
+ *
+ * @param sapi_csv
+ * @param os_version
+ */
+export async function addSAPI(
+ sapi_csv: string,
+ os_version: string
+): Promise {
+ let script: string = '\n' + (await utils.stepLog('Setup SAPI', os_version));
+ let sapi_list: Array;
+ switch (true) {
+ case sapi_csv.split(':').length - 1 > 1:
+ sapi_list = await getSapiList(sapi_csv);
+ script +=
+ '\n' +
+ utils.log(
+ 'Multiple SAPI with web servers specified, choosing the last one ' +
+ sapi_list[0],
+ os_version,
+ 'warning'
+ );
+ break;
+ default:
+ sapi_list = await utils.packageArray(sapi_csv);
+ }
+ await utils.asyncForEach(sapi_list, async function (sapi: string) {
+ sapi = sapi.toLowerCase();
+ switch (os_version) {
+ case 'linux':
+ case 'darwin':
+ script += '\nadd_sapi ' + sapi;
+ break;
+ case 'win32':
+ script += '\nAdd-Sapi ' + sapi;
+ break;
+ }
+ });
+ return script;
+}
diff --git a/src/scripts/common.sh b/src/scripts/common.sh
index 47bcb0a3..59b93efa 100644
--- a/src/scripts/common.sh
+++ b/src/scripts/common.sh
@@ -257,9 +257,11 @@ add_composertool() {
fi
}
-# Function to get PHP version in semver format.
+# Function to get versions of PHP binaries in semver format.
php_semver() {
- php"$version" -v | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1
+ binary=${1:-"php$version"}
+ arg=${2:-'-v'}
+ "$binary" "$arg" | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1
}
# Function to get the tag for a php version.
diff --git a/src/scripts/linux.sh b/src/scripts/linux.sh
index dfd57b30..253f4fed 100644
--- a/src/scripts/linux.sh
+++ b/src/scripts/linux.sh
@@ -31,6 +31,23 @@ add_ppa() {
fi
}
+# Function to add SAPI
+add_sapi() {
+ sapi=$1
+ status='true'
+ if [ "$sapi" != "cli" ]; then
+ # shellcheck source=.
+ . "${dist}"/../src/scripts/sapi.sh
+ setup_sapi "$sapi" >/dev/null 2>&1
+ fi
+ check_sapi "$sapi"
+ if check_sapi "$sapi"; then
+ add_log "${tick:?}" "$sapi" "Added $sapi"
+ else
+ add_log "${cross:?}" "$sapi" "Could not setup $sapi"
+ fi
+}
+
# Function to update the package lists.
update_lists() {
if [ ! -e /tmp/setup_php ]; then
diff --git a/src/scripts/sapi/sapi_darwin.sh b/src/scripts/sapi/sapi_darwin.sh
new file mode 100644
index 00000000..b06e28cd
--- /dev/null
+++ b/src/scripts/sapi/sapi_darwin.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+install_httpd() {
+ sudo mkdir -p /var/www/html
+ sudo chown -R _www:_www /var/www
+ brew services stop nginx 2>/dev/null || true
+ if ! command -v httpd >/dev/null; then
+ brew install httpd
+ fi
+ sudo sed -Ei '' 's/Listen.*/Listen 80/' "$httpd_conf"
+ sudo sed -Ei '' 's/DirectoryIndex.*/DirectoryIndex index.php index.html/' "$httpd_conf"
+}
+
+install_nginx() {
+ sudo mkdir -p /var/www/html
+ sudo chown -R "$(id -un)":"$(id -gn)" /var/www
+ brew services stop httpd 2>/dev/null || true
+ if ! command -v nginx >/dev/null; then
+ brew install nginx
+ fi
+ sudo sed -Ei '' 's/listen.*/listen 80;/' "$nginx_conf"
+}
+
+setup_sapi() {
+ sapi=$1
+ conf_dir="${dist:?}"/../src/configs
+
+ case $sapi in
+ apache*:apache*)
+ install_httpd
+ (
+ echo "LoadModule proxy_module lib/httpd/modules/mod_proxy.so"
+ echo "LoadModule proxy_module lib/httpd/modules/mod_proxy_fcgi.so"
+ ) | sudo tee -a "$httpd_conf"
+ echo "Include $httpd_extra/httpd-php.conf" | sudo tee -a "$httpd_conf"
+
+
+ sudo cp "$conf_dir"/default_apache /etc/apache2/sites-available/000-default.conf
+ sudo a2dismod mpm_event 2>/dev/null || true
+ sudo a2enmod mpm_prefork php"${version:?}"
+ sudo service apache2 restart
+ ;;
+ fpm:apache*)
+ install_httpd
+ sudo cp "$conf_dir"/default_apache /etc/apache2/sites-available/000-default.conf
+ sudo a2dismod php"${version:?}" 2>/dev/null || true
+ sudo a2enmod proxy_fcgi
+ sudo a2enconf php"${version:?}"-fpm
+ sudo service apache2 restart
+ ;;
+ cgi:apache*)
+ install_httpd
+ sudo cp "$conf_dir"/default_apache /etc/apache2/sites-available/000-default.conf
+ echo "Action application/x-httpd-php /cgi-bin/php${version:?}" | sudo tee -a /etc/apache2/conf-available/php"${version:?}"-cgi.conf
+ sudo a2dismod php"${version:?}" mpm_event 2>/dev/null || true
+ sudo a2enmod mpm_prefork actions cgi
+ sudo a2disconf php"${version:?}"-fpm 2>/dev/null || true
+ sudo a2enconf php"${version:?}"-cgi
+ sudo service apache2 restart
+ ;;
+ fpm:nginx)
+ install_nginx
+ sudo cp "$conf_dir"/default_nginx /etc/nginx/sites-available/default
+ sudo sed -i "s/PHP_VERSION/${version:?}/" /etc/nginx/sites-available/default
+ sudo service nginx restart
+ ;;
+ apache* | fpm | cgi | phpdbg) ;;
+
+ esac
+}
+
+check_service() {
+ service=$1
+ if ! pidof "$service"; then
+ return 1
+ fi
+ (
+ printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$service" "Click to check $service status"
+ sudo service "$service" status
+ echo "::endgroup::"
+ ) | sudo tee -a /tmp/sapi.log >/dev/null 2>&1
+ return 0
+}
+
+check_version() {
+ sapi=$1
+ sapi_version=$(php_semver "$sapi")
+ if [ ${sapi_version%.*} != "${version:?}" ]; then
+ return 1
+ fi
+ add_log "${tick:?}" "$sapi" "Added $sapi $sapi_version" | sudo tee -a /tmp/sapi.log >/dev/null 2>&1
+ return 0
+}
+
+check_sapi() {
+ sapi=$1
+ sudo rm /tmp/sapi.log
+ if [[ "$sapi" =~ fpm|cgi ]]; then status=$(check_version php-"$sapi"); fi
+ if [[ "$sapi" =~ ^phpdbg$ ]]; then status=$(check_version phpdbg); fi
+ if [[ "$sapi" =~ .*fpm.* ]]; then status=$(check_service php"${version:?}"-fpm); fi
+ if [[ "$sapi" =~ .*:apache.* ]]; then status=$(check_service apache2); fi
+ if [[ "$sapi" =~ .*:nginx.* ]]; then status=$(check_service nginx); fi
+
+ if [ "$status" = "0" ]; then
+ if [[ "$sapi" =~ .*:.* ]]; then
+ add_log "${tick:?}" "$sapi" "Added $sapi"
+ fi
+ cat /tmp/sapi.log && sudo rm /tmp/sapi.log
+ else
+ add_log "${cross:?}" "$sapi" "Could not setup $sapi"
+ fi
+}
+
+httpd_conf=${brew_prefix:?}/etc/httpd/httpd.conf
+httpd_extra=${brew_prefix:?}/etc/httpd/extra
+nginx_conf=${brew_prefix:?}/etc/nginx/nginx.conf
diff --git a/src/scripts/sapi/sapi_linux.sh b/src/scripts/sapi/sapi_linux.sh
new file mode 100644
index 00000000..6a37e5b9
--- /dev/null
+++ b/src/scripts/sapi/sapi_linux.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+
+install_apache2() {
+ sudo mkdir -p /var/www/html
+ sudo service nginx stop 2>/dev/null || true
+ if ! command -v apache2 >/dev/null; then
+ install_packages apache2-bin apache2 -y;
+ else
+ if ! [[ "$(apache2 -v 2>/dev/null | grep -Eo "([0-9]+\.[0-9]+)")" =~ 2.[4-9] ]]; then
+ sudo "${debconf_fix:?}" apt-get purge apache* apache-* >/dev/null
+ install_packages apache2-bin apache2 -y;
+ fi
+ fi
+}
+
+install_nginx() {
+ sudo mkdir -p /var/www/html
+ sudo service apache2 stop 2>/dev/null || true
+ if ! command -v nginx >/dev/null; then
+ install_packages nginx -y
+ fi
+}
+
+setup_sapi() {
+ sapi=$1
+ conf_dir="${dist:?}"/../src/configs
+
+ if [[ "${version:?}" =~ ${old_versions:?}|${nightly_versions:?} ]]; then
+ switch_sapi "$sapi"
+ else
+ case $sapi in
+ apache*:apache*)
+ install_apache2
+ sudo cp "$conf_dir"/default_apache /etc/apache2/sites-available/000-default.conf
+ install_packages libapache2-mod-php"${version:?}" -y
+ sudo a2dismod mpm_event 2>/dev/null || true
+ sudo a2enmod mpm_prefork php"${version:?}"
+ sudo service apache2 restart
+ ;;
+ fpm:apache*)
+ install_apache2
+ sudo cp "$conf_dir"/default_apache /etc/apache2/sites-available/000-default.conf
+ install_packages libapache2-mod-fcgid php"${version:?}"-fpm -y
+ sudo a2dismod php"${version:?}" 2>/dev/null || true
+ sudo a2enmod proxy_fcgi
+ sudo a2enconf php"${version:?}"-fpm
+ sudo service apache2 restart
+ ;;
+ cgi:apache*)
+ install_apache2
+ install_packages php"${version:?}"-cgi -y
+ sudo cp "$conf_dir"/default_apache /etc/apache2/sites-available/000-default.conf
+ echo "Action application/x-httpd-php /cgi-bin/php${version:?}" | sudo tee -a /etc/apache2/conf-available/php"${version:?}"-cgi.conf
+ sudo a2dismod php"${version:?}" mpm_event 2>/dev/null || true
+ sudo a2enmod mpm_prefork actions cgi
+ sudo a2disconf php"${version:?}"-fpm 2>/dev/null || true
+ sudo a2enconf php"${version:?}"-cgi
+ sudo service apache2 restart
+ ;;
+ fpm:nginx)
+ install_nginx
+ install_packages php"${version:?}"-fpm -y
+ sudo cp "$conf_dir"/default_nginx /etc/nginx/sites-available/default
+ sudo sed -i "s/PHP_VERSION/${version:?}/" /etc/nginx/sites-available/default
+ sudo service nginx restart
+ ;;
+ apache*)
+ install_packages libapache2-mod-php"${version:?}" -y
+ ;;
+ fpm|embed|cgi|phpdbg)
+ install_packages php"${version:?}"-"$sapi" -y
+ ;;
+ esac
+ fi
+}
+
+check_service() {
+ service=$1
+ if ! pidof "$service"; then
+ return 1
+ fi
+ (
+ printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$service" "Click to check $service status"
+ sudo service "$service" status
+ echo "::endgroup::"
+ ) | sudo tee -a /tmp/sapi.log >/dev/null 2>&1
+ return 0
+}
+
+check_version() {
+ sapi=$1
+ sapi_version=$(php_semver "$sapi")
+ if [ "${sapi_version%.*}" != "${version:?}" ]; then
+ return 1;
+ fi
+ add_log "${tick:?}" "$sapi" "Added $sapi $sapi_version" | sudo tee -a /tmp/sapi.log >/dev/null 2>&1
+ return 0
+}
+
+check_sapi() {
+ sapi=$1
+ sudo rm /tmp/sapi.log
+ if [[ "$sapi" =~ fpm|cgi ]]; then status=$(check_version php-"$sapi"); fi
+ if [[ "$sapi" =~ ^phpdbg$ ]]; then status=$(check_version phpdbg); fi
+ if [[ "$sapi" =~ .*fpm.* ]]; then status=$(check_service php"${version:?}"-fpm); fi
+ if [[ "$sapi" =~ .*:apache.* ]]; then status=$(check_service apache2); fi
+ if [[ "$sapi" =~ .*:nginx.* ]]; then status=$(check_service nginx); fi
+
+ if [ "$status" = "0" ]; then
+ if [[ "$sapi" =~ .*:.* ]]; then
+ add_log "${tick:?}" "$sapi" "Added $sapi"
+ fi
+ cat /tmp/sapi.log && sudo rm /tmp/sapi.log
+ else
+ add_log "${cross:?}" "$sapi" "Could not setup $sapi"
+ fi
+}
\ No newline at end of file
diff --git a/src/utils.ts b/src/utils.ts
index ad68bf7b..8b3d762f 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -234,20 +234,20 @@ export async function writeScript(
/**
* Function to break extension csv into an array
*
- * @param extension_csv
+ * @param package_csv
*/
-export async function extensionArray(
- extension_csv: string
+export async function packageArray(
+ package_csv: string
): Promise> {
- switch (extension_csv) {
+ switch (package_csv) {
case '':
case ' ':
return [];
default:
- return extension_csv
+ return package_csv
.split(',')
- .map(function (extension: string) {
- return extension
+ .map(function (package_name: string) {
+ return package_name
.trim()
.toLowerCase()
.replace(/^php[-_]/, '');