php/readWrite/f1.php

<?php
require_once('env.php');

function rlvPath($pa, $bs) {
    $pa = rtrim($pa, DIRECTORY_SEPARATOR);
    $bs = rtrim($bs, DIRECTORY_SEPARATOR);
    $mL = min(strlen($pa), strlen($bs));
    for ($i=0; $i<$mL && $pa[$i] === $bs[$i];$i++) { }
    if ($i !== 0) {
        $i = strrpos($pa, DIRECTORY_SEPARATOR, $i - strlen($pa) - 1 ); # go back to previous /
        $i = $i === FALSE ? 0 : $i+1; # pos of first char of first different level
    } else {
        if (($pa[0] === DIRECTORY_SEPARATOR) !== ($bs[0] === DIRECTORY_SEPARATOR))
            err("uncomparable paths rlvPath($pa, $bs)");
        $i = 0;
    }  
    return str_repeat('..' . DIRECTORY_SEPARATOR, substr_count($bs, DIRECTORY_SEPARATOR, $i)) . substr($pa, $i);
}

function rlvLink($li, $to, $rm=FALSE) {
    $li = rtrim($li, DIRECTORY_SEPARATOR);
    $lr = realpath(dirname($li));
    if ($lr === FALSE)
        err("dir(li)=" . dirname($li) . " does not exist in rlvLink($li, $to)");
    $lr .= DIRECTORY_SEPARATOR . basename($li) ;

                        # we must ourself remove an existing link - no option for it as in shell!
    $eR = error_reporting();
    error_reporting($eR & ~ E_WARNING); # switch off warning if file does not exist
    $lt = filetype($lr);
    error_reporting($eR);
    if ($lt === FALSE) {
    } if ($rm and ($lt == 'link' or $lt == 'file') ){
        echo "removing $lt $lr";
        unlink($lr);
    } else {
        err("link already exists: $lt $lr in rlvLink($li, $to, $rm)");
    }
        
    $tr = realpath($to);
    if ($tr === FALSE)
        err("to=$to does not exist in rlvLink($li, $to)");
    $tv = rlvPath($tr, $lr);
    return symlink($tv, $lr);
}

outBegin();
echo __FILE__, 'php start  version=' , phpversion();
echo "\nphp_sapi_name() = " , php_sapi_name();
echo '\n$argv ';
print_r($argv);
$fuPa = realpath('.');                                // absolute path
echo "\nhome $fuPa";

$ll = 'lt';
foreach (scandir($fuPa) as $fi) {     
    $ty = filetype($fi);
    echo "\n$fi filetype=$ty ";
    if ($ty == 'link') 
        echo "readlink=" . readlink($fi) . ' realpath=' . realpath($fi);
    if (strlen($fi) > strlen($ll) and substr($fi, 0, strlen($ll)) == $ll) {
        $ll = $fi;
        echo ', mtime=' . date('c', filemtime($fi)) . ' (****(' . file_get_contents ($fi) . ')***)';
    }
}
echo "\ncreating symlink ${ll}Li = " . symlink($ll, $ll . 'Li');
echo "\nende gut " . __FILE__ . "\n"; 
outEnd(__file__);

?>