From ed8790736bfea1ef9186ada4ba5423712e77fb3b Mon Sep 17 00:00:00 2001 From: DL6ER Date: Wed, 18 Jan 2017 14:50:03 +0100 Subject: [PATCH 01/17] Create zip file which contains whitelist, blacklist and setupVars.conf --- scripts/pi-hole/php/takeout.php | 100 ++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 scripts/pi-hole/php/takeout.php diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php new file mode 100644 index 00000000..65555ef6 --- /dev/null +++ b/scripts/pi-hole/php/takeout.php @@ -0,0 +1,100 @@ +Error message: ".message($zip)."\n"); +} + +$zip->addFile("/etc/pihole/whitelist.txt"); +$zip->addFile("/etc/pihole/blacklist.txt"); +$zip->addFile("/etc/pihole/setupVars.conf"); +echo "numfiles: " . $zip->numFiles . "
"; +echo "status:" . $zip->status . "
"; +echo "statusSys: " . $zip->statusSys . "
"; +echo "filename: " . $zip->filename . "
"; +$zip->close(); + +?> From 0826ae911b2562044b61b3e13c9abdfae92b5248 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 15:05:34 +0100 Subject: [PATCH 02/17] Added box to Settings page + added reading routines to takeout.php Conflicts: scripts/pi-hole/php/takeout.php --- scripts/pi-hole/php/takeout.php | 175 +++++++++++++++++--------------- settings.php | 18 ++++ 2 files changed, 110 insertions(+), 83 deletions(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index 65555ef6..cc68a0f0 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -1,91 +1,100 @@ getStream($name); + if(!$fp) + { + echo "$name not found in provided ZIP file, skipping..."; + return; + } + while (!feof($fp)) { + $contents .= fread($fp, 2); + } + fclose($fp); + return $contents; } -$filename = "/tmp/pi-hole-takeout.zip"; -$zip = zip_open($filename); +function add_to_zip($path,$name) +{ + global $zip; + if(file_exists($path.$name)) + $zip->addFile($path.$name,$name); + else + // Add empty file with thios filename + $zip->addFromString($name, ""); +} -if (!is_resource($zip)) { - exit("cannot open/create $filename
Error message: ".message($zip)."\n"); +if($_POST["action"] == "in") +{ + print_r($_POST); + print_r($_FILES); + if($_FILES["zip_file"]["name"]) + { + $filename = $_FILES["zip_file"]["name"]; + $source = $_FILES["zip_file"]["tmp_name"]; + $type = $_FILES["zip_file"]["type"]; + + $name = explode(".", $filename); + $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed'); + foreach($accepted_types as $mime_type) { + if($mime_type == $type) { + $okay = true; + echo "Filetype $mime_type accepted
"; + break; + } + } + + $continue = strtolower($name[1]) == 'zip' ? true : false; + if(!$continue) { + $message = "The file you are trying to upload is not a .zip file. Please try again."; + } + + $zip = new ZipArchive(); + $x = $zip->open($source); + if ($x === true) { + echo "File opened successfully
"; + echo process_zip("blacklist.txt"); + echo process_zip("whitelist.txt"); + $zip->close(); + } + else + { + die("Error opening uploaded archive!"); + } + } + else + { + die("No file transmitted."); + } +} +else +{ + $archive_file_name = "/var/www/html/pi-hole-takeout_".microtime(true).".zip"; + $zip = new ZipArchive(); + touch($archive_file_name); + $res = $zip->open($archive_file_name, ZipArchive::CREATE | ZipArchive::OVERWRITE); + + if ($res !== TRUE) { + exit("cannot open/create $archive_file_name
Error: ".$zip->getStatusString()."
PHP user: ".exec('whoami')."\n"); + } + + add_to_zip("/etc/pihole/","whitelist.txt"); + add_to_zip("/etc/pihole/","blacklist.txt"); + add_to_zip("/etc/pihole/","adlists.default"); + add_to_zip("/etc/pihole/","adlists.list"); + // $zip->addFile("/etc/pihole/setupVars.conf"); + $zip->close(); + + header("Content-type: application/zip"); + header('Content-Transfer-Encoding: binary'); + header("Content-Disposition: attachment; filename=pi-hole-takeout.zip"); + header("Content-length: " . filesize($archive_file_name)); + header("Pragma: no-cache"); + header("Expires: 0"); + ob_end_clean(); + readfile($archive_file_name); + exit; } $zip->addFile("/etc/pihole/whitelist.txt"); diff --git a/settings.php b/settings.php index 714821ce..db896be5 100644 --- a/settings.php +++ b/settings.php @@ -752,6 +752,24 @@ +
+
+

Pi-hole takeout

+
+
+

Export your Pi-hole lists as downloadable ZIP file

+
+ +
+
+ + +

Upload only Pi-hole backup files.

+ +
+
+
+
From 4d6fa7db4474560d73665edbe9d8248c45788dda Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 15:07:52 +0100 Subject: [PATCH 03/17] Removed debug statements --- scripts/pi-hole/php/takeout.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index cc68a0f0..9de89543 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -5,7 +5,7 @@ function process_zip($name) $fp = $zip->getStream($name); if(!$fp) { - echo "$name not found in provided ZIP file, skipping..."; + echo "$name not found in provided ZIP file, skipping...
"; return; } while (!feof($fp)) { @@ -27,8 +27,6 @@ function add_to_zip($path,$name) if($_POST["action"] == "in") { - print_r($_POST); - print_r($_FILES); if($_FILES["zip_file"]["name"]) { $filename = $_FILES["zip_file"]["name"]; @@ -37,23 +35,22 @@ if($_POST["action"] == "in") $name = explode(".", $filename); $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed'); + $okay = false; foreach($accepted_types as $mime_type) { if($mime_type == $type) { $okay = true; - echo "Filetype $mime_type accepted
"; break; } } $continue = strtolower($name[1]) == 'zip' ? true : false; - if(!$continue) { - $message = "The file you are trying to upload is not a .zip file. Please try again."; + if(!$continue || !$okay) { + die("The file you are trying to upload is not a .zip file. Please try again."); } $zip = new ZipArchive(); $x = $zip->open($source); if ($x === true) { - echo "File opened successfully
"; echo process_zip("blacklist.txt"); echo process_zip("whitelist.txt"); $zip->close(); From db9f224ad92515a4fd04af2b7e5f5ce785572ef1 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 15:18:07 +0100 Subject: [PATCH 04/17] Export wildcard blocked domains --- scripts/pi-hole/php/takeout.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index 9de89543..5dc210f8 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -25,6 +25,29 @@ function add_to_zip($path,$name) $zip->addFromString($name, ""); } +function getWildcardListContent() { + if(file_exists("/etc/dnsmasq.d/03-pihole-wildcard.conf")) + { + $rawList = file_get_contents("/etc/dnsmasq.d/03-pihole-wildcard.conf"); + $wclist = explode("\n", $rawList); + $list = []; + + foreach ($wclist as $entry) { + $expl = explode("/", $entry); + if(count($expl) == 3) + { + array_push($list,$expl[1]); + } + } + + return implode("\n",array_unique($list)); + } + else + { + return ""; + } +} + if($_POST["action"] == "in") { if($_FILES["zip_file"]["name"]) @@ -81,6 +104,8 @@ else add_to_zip("/etc/pihole/","adlists.default"); add_to_zip("/etc/pihole/","adlists.list"); // $zip->addFile("/etc/pihole/setupVars.conf"); + + $zip->addFromString("wildcardblocking.txt", getWildcardListContent()); $zip->close(); header("Content-type: application/zip"); From cd12288625e11e76628827a305daec222f4b5dea Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 15:21:49 +0100 Subject: [PATCH 05/17] Backup also setupVars.conf --- scripts/pi-hole/php/takeout.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index 5dc210f8..818070f8 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -103,7 +103,7 @@ else add_to_zip("/etc/pihole/","blacklist.txt"); add_to_zip("/etc/pihole/","adlists.default"); add_to_zip("/etc/pihole/","adlists.list"); - // $zip->addFile("/etc/pihole/setupVars.conf"); + add_to_zip("/etc/pihole/","setupVars.conf"); $zip->addFromString("wildcardblocking.txt", getWildcardListContent()); $zip->close(); From 21a5b2af6974be949a158ddb70ea6c1342309496 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 15:23:42 +0100 Subject: [PATCH 06/17] Add only files that exist (no empty files if the source is not there, e.g. no blacklist.txt) and don't backup adlists.default --- scripts/pi-hole/php/takeout.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index 818070f8..256f5c44 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -20,9 +20,6 @@ function add_to_zip($path,$name) global $zip; if(file_exists($path.$name)) $zip->addFile($path.$name,$name); - else - // Add empty file with thios filename - $zip->addFromString($name, ""); } function getWildcardListContent() { @@ -96,12 +93,11 @@ else $res = $zip->open($archive_file_name, ZipArchive::CREATE | ZipArchive::OVERWRITE); if ($res !== TRUE) { - exit("cannot open/create $archive_file_name
Error: ".$zip->getStatusString()."
PHP user: ".exec('whoami')."\n"); + exit("cannot open/create $archive_file_name
Error: ".$zip->getStatusString()."
PHP user: ".exec('whoami')."\n"); } add_to_zip("/etc/pihole/","whitelist.txt"); add_to_zip("/etc/pihole/","blacklist.txt"); - add_to_zip("/etc/pihole/","adlists.default"); add_to_zip("/etc/pihole/","adlists.list"); add_to_zip("/etc/pihole/","setupVars.conf"); From 4633f800abe7c6cbf67a9cdedf07afe42b04b570 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 16:22:19 +0100 Subject: [PATCH 07/17] Import of whitelist / blacklist / wildcard list added --- scripts/pi-hole/php/takeout.php | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index 256f5c44..aaeb6b90 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -1,4 +1,5 @@ "; return; } + $contents = ""; while (!feof($fp)) { - $contents .= fread($fp, 2); + $contents .= fread($fp, 4096); } fclose($fp); - return $contents; + $domains = array_filter(explode("\n",$contents)); + check_domains($domains); + return $domains; } function add_to_zip($path,$name) @@ -22,6 +26,16 @@ function add_to_zip($path,$name) $zip->addFile($path.$name,$name); } +function check_domains($domains) +{ + foreach($domains as $domain) + { + if(!is_valid_domain_name($domain)){ + log_and_die(htmlspecialchars($domain).' is not a valid domain'); + } + } +} + function getWildcardListContent() { if(file_exists("/etc/dnsmasq.d/03-pihole-wildcard.conf")) { @@ -71,8 +85,14 @@ if($_POST["action"] == "in") $zip = new ZipArchive(); $x = $zip->open($source); if ($x === true) { - echo process_zip("blacklist.txt"); - echo process_zip("whitelist.txt"); + $blacklist = process_zip("blacklist.txt"); + echo exec("sudo pihole -b -q ".implode(" ", $blacklist)); + + $whitelist = process_zip("whitelist.txt"); + echo exec("sudo pihole -w -q ".implode(" ", $whitelist)); + + $wildlist = process_zip("wildcardblocking.txt"); + echo exec("sudo pihole -wild -q ".implode(" ", $wildlist)); $zip->close(); } else From 9d09d61b7ff155be1a54fee44c4ad8384a74de33 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 16:35:44 +0100 Subject: [PATCH 08/17] Make selectable what should be imported from the uploaded archive --- scripts/pi-hole/php/takeout.php | 22 ++++++++++++++++------ settings.php | 32 +++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index aaeb6b90..9857e4c2 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -85,14 +85,24 @@ if($_POST["action"] == "in") $zip = new ZipArchive(); $x = $zip->open($source); if ($x === true) { - $blacklist = process_zip("blacklist.txt"); - echo exec("sudo pihole -b -q ".implode(" ", $blacklist)); + if(isset($_POST["blacklist"])) + { + $blacklist = process_zip("blacklist.txt"); + exec("sudo pihole -b -q ".implode(" ", $blacklist)); + } - $whitelist = process_zip("whitelist.txt"); - echo exec("sudo pihole -w -q ".implode(" ", $whitelist)); + if(isset($_POST["whitelist"])) + { + $whitelist = process_zip("whitelist.txt"); + echo exec("sudo pihole -w -q ".implode(" ", $whitelist)); + } + + if(isset($_POST["wildlist"])) + { + $wildlist = process_zip("wildcardblocking.txt"); + echo exec("sudo pihole -wild -q ".implode(" ", $wildlist)); + } - $wildlist = process_zip("wildcardblocking.txt"); - echo exec("sudo pihole -wild -q ".implode(" ", $wildlist)); $zip->close(); } else diff --git a/settings.php b/settings.php index db896be5..5a96ef4e 100644 --- a/settings.php +++ b/settings.php @@ -757,15 +757,33 @@

Pi-hole takeout

-

Export your Pi-hole lists as downloadable ZIP file

- +
+

Export your Pi-hole lists as downloadable ZIP file

+
-
- - -

Upload only Pi-hole backup files.

- +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ + +

Upload only Pi-hole backup files.

+ +
From 8e9aed9b370540718e74648da6bb2d70b1285336 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 16:39:36 +0100 Subject: [PATCH 09/17] Small typo --- settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.php b/settings.php index 5a96ef4e..81256fac 100644 --- a/settings.php +++ b/settings.php @@ -754,7 +754,7 @@
-

Pi-hole takeout

+

Pi-hole Takeout

From fd0764d92cd9839b9cd7687d746ae4881fdfb958 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 20 Jan 2017 17:40:20 +0100 Subject: [PATCH 10/17] Codacy --- scripts/pi-hole/php/takeout.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index 9857e4c2..fdac40c9 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -3,17 +3,17 @@ require('func.php'); function process_zip($name) { global $zip; - $fp = $zip->getStream($name); - if(!$fp) + $zippointer = $zip->getStream($name); + if(!$zippointer) { echo "$name not found in provided ZIP file, skipping...
"; return; } $contents = ""; - while (!feof($fp)) { - $contents .= fread($fp, 4096); + while (!feof($zippointer)) { + $contents .= fread($zippointer, 4096); } - fclose($fp); + fclose($zippointer); $domains = array_filter(explode("\n",$contents)); check_domains($domains); return $domains; @@ -53,10 +53,8 @@ function getWildcardListContent() { return implode("\n",array_unique($list)); } - else - { - return ""; - } + + return ""; } if($_POST["action"] == "in") From fc7cf611b48488cd85f9fb446a32da2ef9d92ab7 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 27 Jan 2017 21:59:22 +0100 Subject: [PATCH 11/17] log_and_die() is not defined --- scripts/pi-hole/php/takeout.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index fdac40c9..dd1b5fe8 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -31,7 +31,7 @@ function check_domains($domains) foreach($domains as $domain) { if(!is_valid_domain_name($domain)){ - log_and_die(htmlspecialchars($domain).' is not a valid domain'); + die(htmlspecialchars($domain).' is not a valid domain'); } } } From 837f98e6eddff53afca006520ee1e6bc5c47f2d2 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 27 Jan 2017 22:01:11 +0100 Subject: [PATCH 12/17] Removed debug output --- scripts/pi-hole/php/takeout.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index dd1b5fe8..61ac7d42 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -143,13 +143,4 @@ else exit; } -$zip->addFile("/etc/pihole/whitelist.txt"); -$zip->addFile("/etc/pihole/blacklist.txt"); -$zip->addFile("/etc/pihole/setupVars.conf"); -echo "numfiles: " . $zip->numFiles . "
"; -echo "status:" . $zip->status . "
"; -echo "statusSys: " . $zip->statusSys . "
"; -echo "filename: " . $zip->filename . "
"; -$zip->close(); - ?> From 2f80018f51ad27f50ed4aff2ec2bd79c9a57c822 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 27 Jan 2017 22:02:26 +0100 Subject: [PATCH 13/17] Echo OK if everything was successful --- scripts/pi-hole/php/takeout.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/takeout.php index 61ac7d42..d3f91c51 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/takeout.php @@ -101,6 +101,8 @@ if($_POST["action"] == "in") echo exec("sudo pihole -wild -q ".implode(" ", $wildlist)); } + echo "OK"; + $zip->close(); } else From cd5f5bb936257fc2f03660fa8a53640436828bd9 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 27 Jan 2017 22:08:55 +0100 Subject: [PATCH 14/17] Expanable box + renamed --- scripts/pi-hole/php/{takeout.php => teleporter.php} | 4 ++-- settings.php | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) rename scripts/pi-hole/php/{takeout.php => teleporter.php} (96%) diff --git a/scripts/pi-hole/php/takeout.php b/scripts/pi-hole/php/teleporter.php similarity index 96% rename from scripts/pi-hole/php/takeout.php rename to scripts/pi-hole/php/teleporter.php index d3f91c51..5005e770 100644 --- a/scripts/pi-hole/php/takeout.php +++ b/scripts/pi-hole/php/teleporter.php @@ -92,13 +92,13 @@ if($_POST["action"] == "in") if(isset($_POST["whitelist"])) { $whitelist = process_zip("whitelist.txt"); - echo exec("sudo pihole -w -q ".implode(" ", $whitelist)); + exec("sudo pihole -w -q ".implode(" ", $whitelist)); } if(isset($_POST["wildlist"])) { $wildlist = process_zip("wildcardblocking.txt"); - echo exec("sudo pihole -wild -q ".implode(" ", $wildlist)); + exec("sudo pihole -wild -q ".implode(" ", $wildlist)); } echo "OK"; diff --git a/settings.php b/settings.php index 81256fac..2e4d67c8 100644 --- a/settings.php +++ b/settings.php @@ -752,12 +752,13 @@
-
+
-

Pi-hole Takeout

+

Pi-hole Teleporter

+
-
+

Export your Pi-hole lists as downloadable ZIP file

From 771c548a7f5a85cc92f3271a9afa43f177d8197a Mon Sep 17 00:00:00 2001 From: DL6ER Date: Fri, 27 Jan 2017 22:11:02 +0100 Subject: [PATCH 15/17] Renamed zip file --- scripts/pi-hole/php/teleporter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/pi-hole/php/teleporter.php b/scripts/pi-hole/php/teleporter.php index 5005e770..fb58eef4 100644 --- a/scripts/pi-hole/php/teleporter.php +++ b/scripts/pi-hole/php/teleporter.php @@ -117,7 +117,7 @@ if($_POST["action"] == "in") } else { - $archive_file_name = "/var/www/html/pi-hole-takeout_".microtime(true).".zip"; + $archive_file_name = "/var/www/html/pi-hole-teleporter_".microtime(true).".zip"; $zip = new ZipArchive(); touch($archive_file_name); $res = $zip->open($archive_file_name, ZipArchive::CREATE | ZipArchive::OVERWRITE); @@ -136,7 +136,7 @@ else header("Content-type: application/zip"); header('Content-Transfer-Encoding: binary'); - header("Content-Disposition: attachment; filename=pi-hole-takeout.zip"); + header("Content-Disposition: attachment; filename=pi-hole-teleporter.zip"); header("Content-length: " . filesize($archive_file_name)); header("Pragma: no-cache"); header("Expires: 0"); From 5cf61a5e7635edf104d5c193ba9638ef5fe99cf0 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 28 Jan 2017 22:04:27 +0100 Subject: [PATCH 16/17] Test if zip extension is loaded --- settings.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/settings.php b/settings.php index 2e4d67c8..4eb11e99 100644 --- a/settings.php +++ b/settings.php @@ -758,6 +758,7 @@
+

Export your Pi-hole lists as downloadable ZIP file

@@ -787,6 +788,9 @@
+ +

The Pi-hole teleporter can only work properly when the PHP ZIP extension is installed. Please install it.

+
From ba05330cf5b6ae64d9ea06befd41a1dbef64dcc3 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 28 Jan 2017 22:07:31 +0100 Subject: [PATCH 17/17] Improved message --- settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.php b/settings.php index 4eb11e99..fa3f4dad 100644 --- a/settings.php +++ b/settings.php @@ -789,7 +789,7 @@ -

The Pi-hole teleporter can only work properly when the PHP ZIP extension is installed. Please install it.

+

The PHP extension zip is not loaded. Please ensure it is installed and loaded if you want to use the Pi-hole teleporter.