Cannot use string offset as an array
-
I am actually trying to work on the package myself. Is there any documentation on the config system and how to interact with it? The functions to use and such.
-
No, but that's not a config or pfSense issue -- that's a general issue with PHP 7.x and multi-level hashed arrays like that. You have to initialize each layer, you can't assume any part of it is an array, or you get errors when trying to perform some operations.
-
I see the following line in another package ...
$a_mailers = getarraybyref($config, 'installedpackages', 'haproxy', 'email_mailers', 'item');
would I need to do something like that ?
-
@coreybrett
Yes that would solve the issue :) -
Is ['config'][0]['enable'] a requirement for storing the state of a package?
-
@coreybrett
I think not. Afaik the ['config'][0] is only for trying to support a remnant of a old config format iirc. -
If a package uses XML forms to store data they are automatically put in that style of array. For example, if you use
pkg_edit.php?xml=foo.xml
for settings with multiple values (lists of things, for example) then it would be stored with that last[0]
as the item id, so you'd have0
,1
,2
and so on for each separate entry. It's just easier to use the same format for the other style as well for consistency, even if it's always0
. -
Hello, I'm trying to do something similar on my side but from the comments i was not able to understand what's wrong in my code and how to make it work. So here is one of the lines I'm trying to execute:
$config['aliases']['alias'][1]['name'] = 'LANNetworks';
And this is producing the following error:
Fatal error: Uncaught Error: Cannot use string offset as an array in /usr/local/sbin/pfSsh.php(371) : eval()'d code:4
This peace of code works fine on previous version of pfsense 2.4.3 but in 2.4.4 it's giving me this problem. Would somebody be able to help me? Thanks in advance.
-
@justleo
You would need to write something like this:if (!is_array($config['aliases'])) $config['aliases'] = array(); if (!is_array($config['aliases']['alias'])) $config['aliases']['alias'] = array(); if (!is_array($config['aliases']['alias'][1])) $config['aliases']['alias'][1] = array(); $config['aliases']['alias'][1]['name'] = 'LANNetworks';
Or imho easier:
$myalias = &getarraybyref($config, 'aliases', 'alias', 1); $myalias['name'] = 'LANNetworks';
-
Or:
init_config_arr(array('aliases', 'alias', 1)); $config['aliases']['alias'][1]['name'] = 'LANNetworks';
-
@jimp Thanks for your quick help, I was able to make it work with your second suggention:
init_config_arr(array('aliases', 'alias', 0)); $config['aliases']['alias'][0]['name'] = 'LANNetworks'; $config['aliases']['alias'][0]['address'] = 'CIDR'; $config['aliases']['alias'][0]['descr'] = 'SomeDescription'; $config['aliases']['alias'][0]['type'] = 'network';