php/e15inc.php

<?php

require_once('env.php');
outBegin('includes');
out('nonexisting');
include 'e15incNotExist';
out('existing without &lt;?php ... ');
include 'e15incNoPhp';
out(' ... nach existing without &lt;?php');
out('existing with &lt;?php');
include 'e15incWithPhp';

foreach ( $incs = ['e15incWithPhp', 'e15incZwei'] as $k => $ii) {
    out("embed $k => $ii in function");
    $fn[$k] = function($var) use ($ii) { 
        $var .= " * included $ii"; 
        include $ii;
        mv($ii, "{$ii}Rename", "inFun");
    };
}

foreach ( $incs = ['e15incWithPhp', 'e15incZwei'] as $k => $ii) 
    mv($ii, $ii . 'Rename', 'out1');
$ii = 'iiDrei';
out("ii=$ii");
$fn[0]('0eins');
$fn[0]('0zwei');
out("the second function fn[1] does the include only here not above as fn[0]!");
$fn[1]('1drei');

mv($incs[1] . 'Rename', $incs[1], 'out2');
$fn[1]('1vier');
$fn[1]('1fuenf');
$fn[0]('0sechs');
$fn[1]('1sieben');

foreach ( $incs as $k => $ii)
    mv("{$ii}Rename", $ii, "out3") ;

outH('gen php');
foreach(['null', 'eins', 'zwei', 'drei', 'vier'] as $k => $v) {
    gen($k, $v);
    for ($j=0; $j <= $k; $j++)
        genX($j, "call $j after $k => $v");
} 

fromInc('e15incFF.php');
fromInc('e15Missing');
fromInc('e15incSyntax.php');

outEnd(__file__);

function gen($k, $t) {
    for ($i=0 ; $i<5; $i++) {
        file_put_contents("e15incF$i.php", "<?php\nout(\"ea5incF$i.php * gen=$t * var=\$var\");");
    }
}

function genX($j, $var) {
    out("genX j=$j var=$var");
    include "e15incF$j.php" ;
}

function fromInc($nm) {
    $r = $fAdd = [];
    $f = function() use (&$fAdd) { 
        for($x=0; $x < func_num_args(); $x++)
            $fAdd[] = func_get_arg($x);
    };
    error_clear_last();
    ob_start();
    try {
        $res = @(include $nm);
        $err = error_get_last();
    } catch (Throwable $thr) {
    }
    $out = ob_get_contents();
    ob_end_clean();
    if (isset($thr))
        return out("error fromInc($nm) caught", get_class($thr), $thr->getMessage(), ', out=', $out, ", fAdd=", $fAdd, ", r=", $r);
    if (! $res or $err !== null)
        return out("error fromInc($nm)", $err, ', out=', $out, ", fAdd=", $fAdd, ", r=", $r);
    out("fromInc res", $res, ", err", $err, ", out=$out, fAdd=", $fAdd, ", r=", $r);
    $o = array_merge(explode("\n", $out), $fAdd, $r);
    $o = array_filter($o, function($s) {return $s !== '' and $s[0] !== '#'; });
    out('...returns', $o);        
    return $o;
}

function mv($fr, $to, $m) {
    if (! file_exists($fr)) 
        out("mv $m: $fr does not exist");
    elseif (rename($fr, $to))
        out("mv $m renamed $fr to $to");
    else
        out("mv $m could not rename $fr");
}