diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index 986b64e7f05465b68e37230768dfe505cf24b1c1..f7d002e40a2647d16a7a8bb3c7e1250888e8a720 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -126,4 +126,5 @@ $wb['added_date_txt'] = 'Hinzugefügt am';
 $wb['backup_excludes_txt'] = 'Auszuschließende Verzeichnisse';
 $wb['backup_excludes_note_txt'] = '(Mehrere Verzeichnisse mit Kommas trennen. Beispiel: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Die auszuschließenden Verzeichnisse enthalten ungültige Zeichen.';
+$wb['invalid_custom_php_ini_settings_txt'] = 'Unzulässige php.ini-Einstellungen';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index 330b820b3bcec928a9b4c117da3a4d1120fc3035..8c8f90eb0fd69b78b1b9546b55d8f13ca69693ec 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -126,4 +126,5 @@ $wb['added_date_txt'] = 'Added date';
 $wb['backup_excludes_txt'] = 'Excluded Directories';
 $wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
+$wb['invalid_custom_php_ini_settings_txt'] = 'Invalid php.ini settings';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/web_domain_edit.php b/interface/web/sites/web_domain_edit.php
index f372303c15799628daf8b4bfac8c2e29587b6c44..630c9bcbf0707598dddce2d2521004119bf90065 100644
--- a/interface/web/sites/web_domain_edit.php
+++ b/interface/web/sites/web_domain_edit.php
@@ -726,6 +726,35 @@ class page_action extends tform_actions {
 				$app->tform->errorMessage .= $app->tform->lng("invalid_rewrite_rules_txt").'<br>';
 			}
 		}
+		
+		// check custom php.ini settings
+		if(isset($this->dataRecord['custom_php_ini']) && trim($this->dataRecord['custom_php_ini']) != '') {
+			$custom_php_ini_settings = trim($this->dataRecord['custom_php_ini']);
+			$custom_php_ini_settings_are_valid = true;
+			// Make sure we only have Unix linebreaks
+			$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
+			$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
+			$custom_php_ini_settings_lines = explode("\n", $custom_php_ini_settings);
+			if(is_array($custom_php_ini_settings_lines) && !empty($custom_php_ini_settings_lines)){
+				foreach($custom_php_ini_settings_lines as $custom_php_ini_settings_line){
+					if(trim($custom_php_ini_settings_line) == '') continue;
+					if(substr(trim($custom_php_ini_settings_line),0,1) == ';') continue;
+					// empty value
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					// value inside ""
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*".*"\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					// value inside ''
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*\'.*\'\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					// everything else
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					$custom_php_ini_settings_are_valid = false;
+					break;
+				}
+			}
+			if(!$custom_php_ini_settings_are_valid){
+				$app->tform->errorMessage .= $app->tform->lng("invalid_custom_php_ini_settings_txt").'<br>';
+			}
+		}
 
 		parent::onSubmit();
 	}
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 3c83dc16d98c59e8da0a1df81900b769af9dbb20..c6a253a05fe1e1e9fd55183fa57d3f1d82d29834 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -2668,7 +2668,7 @@ class apache2_plugin {
 					if(substr($ini_setting, 0, 1) == ';') continue;
 					if(substr($ini_setting, 0, 1) == '#') continue;
 					if(substr($ini_setting, 0, 2) == '//') continue;
-					list($key, $value) = explode('=', $ini_setting);
+					list($key, $value) = explode('=', $ini_setting, 2);
 					if($value){
 						$value = trim($value);
 						$key = trim($key);
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index d66521b9e25e17d2b829e067969f3b6b1f383f97..594629c8b1c31f1f5ec39155b602b761463d0957 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2367,7 +2367,7 @@ class nginx_plugin {
 					if(substr($ini_setting, 0, 1) == ';') continue;
 					if(substr($ini_setting, 0, 1) == '#') continue;
 					if(substr($ini_setting, 0, 2) == '//') continue;
-					list($key, $value) = explode('=', $ini_setting);
+					list($key, $value) = explode('=', $ini_setting, 2);
 					if($value){
 						$value = trim($value);
 						$key = trim($key);