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__);
?>