On 15 Mar 2013 at 13:10, Jay Blanchard <[email protected]>
wrote:
> I have inherited a mess of a home-grown PHP framework that literally
> fills the error_log with 100's of thousands of messages each day. First
> order of business was rotating the logs, now we are working through each
> error to solve them. This is a fairly basic error, but I for the life of
> me cannot remember what the solution is.
>
> I have a recursive function that reads from XML files and replaces xi:
> include directives. It looks like this -
>
> function includeXML($file, $locale, $url, $level = 1) {
> // stuff
> while(($line = fgets($fp)) !== false) {
> if($pos === false) {
> $xml .= $line;
> } else {
> includeXML('repository/' . $included, $locale, (int)$level
> + $pos - 1);
> }
> }
> }
>
> Why do I get the notice that $xml is an undefined index?
Because it's undefined. So is $pos. From what you've written above, both are
local to includeXML. But neither is passed in as a parameter, nor is global.
You can't initialise it within the function, it seems to me.
If $xml is supposed to be appended to and grown as you recurse up and down,
then you have two choices:
1) Make them global
2) Pass both as extra parameters to includeXML
In both cases, each needs to be initialised before the first call to the
recursive function
Solution (1)
============
$xml = '';
$pos = 0; // Presumably.
includeXML ($file, $locale, $url, 1);
...
function includeXML ($file, $locale, $url, $level = 1) {
global $xml, $pos;
// stuff
while(($line = fgets($fp)) !== false) {
if($pos === false) {
$xml .= $line;
} else {
includeXML ('repository/' . $included, $locale, (int)$level
+ $pos - 1);
}
}
}
Solution (2)
============
$xml = '';
$pos = 0; // Presumably.
includeXML ($xml, $pos, $file, $locale, $url, 1);
...
function includeXML (&$xml, $pos, $file, $locale, $url, $level = 1) { //
Note the & on the first parameter
// stuff
while(($line = fgets($fp)) !== false) {
if($pos === false) {
$xml .= $line;
} else {
includeXML ($xml, $pos, 'repository/' . $included, $locale,
(int)$level
+ $pos - 1);
}
}
}
BTW it seems to me that you'll have the same problem with $included unless
there's other code in includeXML that you've omitted.
--
Cheers -- Tim
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php