Having trouble editing config.xml (/tmp/config.cache problem?)
-
I am using a simple PHP script to try to grab a xml file with captive portal information from a website, but I am having trouble in two senses:
- If I try to unlink the /tmp/config.cache file, I get all sorts of unexpected behavior and errors like WARNING: Cannot use scalar value as array, and something about foreach(), and it looks like all my captive portal information is wiped out.
- If I don't unlink /tmp/config.cache, it looks like any changes to the config.xml are immediately overwritten, and thus nullified, as if nothing happened.
The script is as follows:
#!/usr/local/bin/php $file = fopen("/conf/config.xml", "r+") or die ("Unable to open /conf/config.xml\r\n"); $subject = file_get_contents("/conf/config.xml"); $replacement = file_get_contents("http://www.ourwebsite.net/cp/xml/captiveportal-config-file.xml") or die("Unable to update xml file!\r\n"); if (strlen($replacement) < 1) { //xml file corrupt or didnt download properly die ("XML file corrupt!"); } $pattern = '/<captiveportal>/'; preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); $offset = $matches[0][1]; if ($offset < 1) { // <captiveportal>tag not found, something's wrong die("Invalid file! ( <captiveportal>tag not found)"); } $before = substr($subject, 0, $offset); $pattern = '/<\/captiveportal>/'; preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); $offset = $matches[0][1]; if ($offset < 1) { // <captiveportal>tag not found, something's wrong die("Invalid file! (</captiveportal> tag not found)"); } $after = substr($subject, $offset + 16); $subject = $before . "\r\n" . $replacement . "\r\n" . $after . "\r\n"; //update xml file fwrite($file, $subject); fclose($file); //delete cache file unlink("/tmp/config.cache"); echo "Deleted /tmp/config.cache\r\n"; echo "Successfully updated /conf/config.xml\r\n"; ?></captiveportal></captiveportal></captiveportal>
-
It seems when I delete the config.cache, it replaces it with one containing something like i:-1;
From researching around, it seems that I can build an array with parse_config(true) and then overwrite the config.cache file with a serialize()'d config array, however I'm noticing that pfsense's parse_config() function creates an array which somehow loses some of the passthrumac entries, which is not good. Any suggestions on how to fix this behavior?
Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.