<?php
// remote_files.php
// RJM Programming
// March, 2023
// Thanks to https://php-legacy-docs.zend.com/manual/php5/en/features.remote-files

$preblurb="<h1>Remote Files</h1><h3>RJM Programming - March, 2023</h3><hr><br>";
$uval="";
$tval="";
$cval="";
$sval="";
$oval="1";
$blurb="";
$pblurb="";
$cfor="For ";
$title="";
$pregt="@\<title\>(.*)\</title\>@i";
$matcho=1;
$curo=0;
if (isset($_POST['url']) && $_POST['url'] != '') {
$file = fopen ("http:" . str_replace("http:","",str_replace("https:","",str_replace("+"," ",urldecode($_POST['url'])))), "r");
$pblurb="Looking in <a target=_blank href='" . str_replace("+"," ",urldecode($_POST['url'])) . "' title='" . str_replace("+"," ",urldecode($_POST['url'])) . "'>" . str_replace("+"," ",urldecode($_POST['url'])) . "</a> ";
$uval=str_replace("+"," ",urldecode($_POST['url']));
$cfor="for ";
} else if (isset($_GET['url']) && $_GET['url'] != '') {
$file = fopen ("http:" . str_replace("http:","",str_replace("https:","",str_replace("+"," ",urldecode($_GET['url'])))), "r");
$pblurb="Looking in <a target=_blank href='" . str_replace("+"," ",urldecode($_GET['url'])) . "' title='" . str_replace("+"," ",urldecode($_GET['url'])) . "'>" . str_replace("+"," ",urldecode($_GET['url'])) . "</a> ";
$uval=str_replace("+"," ",urldecode($_GET['url']));
$cfor="for ";
} else {
$file = fopen ("http://www.rjmprogramming.com.au/index.php", "r");
$cfor="Looking in " . "http://www.rjmprogramming.com.au/index.php" . " for ";
}
if (isset($_POST['type']) && $_POST['type'] != '') {
$pregt="@\\<" . str_replace("+"," ",urldecode($_POST['type'])) . "\\>(.*)\\</" . str_replace("+"," ",urldecode($_POST['type'])) . "\\>@i";
$pregt="@\\>(.*)\\</" . str_replace("+"," ",urldecode($_POST['type'])) . "\\>@i";
$tval=str_replace("+"," ",urldecode($_POST['type']));
$pblurb.=$cfor . str_replace("+"," ",urldecode($_GET['type'])) . " element ";
$cfor=" ";
} else if (isset($_GET['type']) && $_GET['type'] != '') {
$pregt="@\\<" . str_replace("+"," ",urldecode($_GET['type'])) . "\\>(.*)\\</" . str_replace("+"," ",urldecode($_GET['type'])) . "\\>@i";
$pregt="@\\>(.*)\\</" . str_replace("+"," ",urldecode($_GET['type'])) . "\\>@i";
$tval=str_replace("+"," ",urldecode($_GET['type']));
$pblurb.=$cfor . str_replace("+"," ",urldecode($_GET['type'])) . " element ";
$cfor=" ";
} else {
$pregt="@\<title\>(.*)\</title\>@i";
$cfor.="title " . "element ";
}
if (isset($_POST['ord']) && $_POST['ord'] != '') {
$matcho=intval(str_replace("+"," ",urldecode($_POST['ord'])));
$oval="$matcho";
$pblurb.=$cfor . "number " . $matcho . " ... <br>";
} else if (isset($_GET['ord']) && $_GET['ord'] != '') {
$matcho=intval(str_replace("+"," ",urldecode($_GET['ord'])));
$oval="$matcho";
$pblurb.=$cfor . "number " . $matcho . " ... <br>";
} else {
$matcho=1;
$cfor.="number " . $matcho . " ... <br>";
}

if (isset($_POST['containing']) && $_POST['containing'] != '') {
if ($pregt == "@\<title\>(.*)\</title\>@i") {
$pregt="@\\>(.*)" . str_replace("+"," ",urldecode($_POST['containing'])) . "\\</@i";
} else {
$pregt=str_replace("(.*)", "(.*)" . str_replace("+"," ",urldecode($_POST['containing'])), $pregt);
}
$cval=str_replace("+"," ",urldecode($_POST['containing']));
$pblurb=str_replace(" ... <br>","",$pblurb);
if ($tval == "") {
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",str_replace(" number "," numbering up to ",$pblurb));
}
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",$pblurb) . " containing " . str_replace("+"," ",urldecode($_POST['containing'])). " ... <br>";
$cfor=" ";
} else if (isset($_GET['containing']) && $_GET['containing'] != '') {
if ($pregt == "@\<title\>(.*)\</title\>@i") {
$pregt="@\\>(.*)" . str_replace("+"," ",urldecode($_GET['containing'])) . "\\</@i";
} else {
$pregt=str_replace("(.*)", "(.*)" . str_replace("+"," ",urldecode($_GET['containing'])), $pregt);
}
$cval=str_replace("+"," ",urldecode($_GET['containing']));
$pblurb=str_replace(" ... <br>","",$pblurb);
if ($tval == "") {
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",str_replace(" number "," numbering up to ",$pblurb));
}
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",$pblurb) . " containing " . str_replace("+"," ",urldecode($_GET['containing'])). " ... <br>";
$cfor=" ";
}

if (isset($_GET['starting']) && $_GET['starting'] != '') {
if ($pregt == "@\<title\>(.*)\</title\>@i") {
if ($cval != '') {
$pregt="@[^\>]+\\>" . str_replace("+"," ",urldecode($_GET['starting'])) . "[^" . $cval . "]+[" . $cval . "]\\</@i";
} else {
$pregt="@[^\>]+\\>" . str_replace("+"," ",urldecode($_GET['starting'])) . "[^<]+\\</@i";
//echo str_replace('<','&lt;',str_replace('>','&gt;',$pregt));
//exit;
}
} else {
   if ($cval != '') {
   $pregt="@[^>]+" . str_replace("(.*)[^<]+", "" . str_replace("+"," ",urldecode($_GET['starting'])) . "[^" . $cval . "]+[" . $cval . "]", substr($pregt,1));
   } else {
   $pregt="@[^>]+" . str_replace("(.*)", "" . str_replace("+"," ",urldecode($_GET['starting'])) . "[^<]+", substr($pregt,1));
   }
}
$sval=str_replace("+"," ",urldecode($_GET['starting']));
$pblurb=str_replace(" ... <br>","",$pblurb);
if ($tval == "") {
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",str_replace(" number "," numbering up to ",$pblurb));
}
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",$pblurb) . " starting " . str_replace("+"," ",urldecode($_GET['starting'])). " ... <br>";
$cfor=" ";
} else if (isset($_POST['starting']) && $_POST['starting'] != '') {
if ($pregt == "@\<title\>(.*)\</title\>@i") {
if ($cval != '') {
$pregt="@[^\>]+\\>" . str_replace("+"," ",urldecode($_POST['starting'])) . "[^" . $cval . "]+[" . $cval . "]\\</@i";
} else {
$pregt="@[^\>]+\\>" . str_replace("+"," ",urldecode($_POST['starting'])) . "[^<]+\\</@i";
//echo str_replace('<','&lt;',str_replace('>','&gt;',$pregt));
//exit;
}
} else {
if ($cval != '') {
$pregt="@[^>]+\\>" . str_replace("+"," ",urldecode($_POST['starting'])) . "[^" . $cval . "]+[" . $cval . "]\\</@i";
// echo str_replace('<','&lt;',str_replace('>','&gt;',$pregt));
// exit;
} else {
   if ($cval != '') {
   $pregt="@[^>]+" . str_replace("(.*)[^<]+", "" . str_replace("+"," ",urldecode($_POST['starting'])) . "[^" . $cval . "]+[" . $cval . "]", substr($pregt,1));
   } else {
   $pregt="@[^>]+" . str_replace("(.*)", "" . str_replace("+"," ",urldecode($_POST['starting'])) . "[^<]+", substr($pregt,1));
   }
//   $pregt="@[^>]+" . str_replace("(.*)", "" . str_replace("+"," ",urldecode($_POST['starting'])) . "[^<]+", substr($pregt,1));
}
}
$sval=str_replace("+"," ",urldecode($_POST['starting']));
$pblurb=str_replace(" ... <br>","",$pblurb);
if ($tval == "") {
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",str_replace(" number "," numbering up to ",$pblurb));
}
$pblurb=str_replace(" numbering up to 1 "," in unlimited search ",$pblurb) . " starting " . str_replace("+"," ",urldecode($_POST['starting'])). " ... <br>";
$cfor=" ";
}


if (isset($_POST['middling']) && $_POST['middling'] != '') {

$mval=str_replace("+"," ",urldecode($_POST['middling']));
$cfor=" ";

// @[^>]+\>(.*)!\</@i

// @\>(.*)!\</@i

$pregt=str_replace("@\>(.*)", "@[^>]+\>(.*)", $pregt);
$pregt=str_replace("@\<title\>(.*)\</title\>@i", "@[^>]+\>(.*)\</@i", $pregt);

if ($cval != '') {
$pregt=str_replace("@[^>]+\>(.*)", "@[^>]+\>(.*)[^" . substr($mval,0,1) . "]+" . $mval . "[^" . $cval . "]+", $pregt);
if (strpos($pblurb, " containing ") === false) { 
$pblurb=str_replace(" element "," element containing " . $mval . " ",$pblurb); 
} else {
$pblurb=str_replace(" containing "," containing " . $mval . " ending with ",$pblurb);
}
} else {
if (strpos($pblurb, " containing ") === false) { 
$pblurb=str_replace(" element "," element containing " . $mval . " ",$pblurb); 
} else {
$pblurb=str_replace(" containing "," containing " . $mval . " ending with ",$pblurb);
}
$pregt=str_replace("@[^>]+\>(.*)", "@[^>]+\>(.*)[^" . substr($mval,0,1) . "]+" . $mval, $pregt);
}
$pblurb=str_replace(" number 1 "," in unlimited search ",$pblurb);
} else if (isset($_GET['middling']) && $_GET['middling'] != '') {

$mval=str_replace("+"," ",urldecode($_GET['middling']));
$cfor=" ";

// @[^>]+\>(.*)!\</@i

// @\>(.*)!\</@i

$pregt=str_replace("@\>(.*)", "@[^>]+\>(.*)", $pregt);
$pregt=str_replace("@\<title\>(.*)\</title\>@i", "@[^>]+\>(.*)\</@i", $pregt);

if ($cval != '') {
$pregt=str_replace("@[^>]+\>(.*)", "@[^>]+\>(.*)[^" . substr($mval,0,1) . "]+" . $mval . "[^" . $cval . "]+", $pregt);
if (strpos($pblurb, " containing ") === false) { 
$pblurb=str_replace(" element "," element containing " . $mval . " ",$pblurb); 
} else {
$pblurb=str_replace(" containing "," containing " . $mval . " ending with ",$pblurb);
}
} else {
if (strpos($pblurb, " containing ") === false) { 
$pblurb=str_replace(" element "," element containing " . $mval . " ",$pblurb); 
} else {
$pblurb=str_replace(" containing "," containing " . $mval . " ending with ",$pblurb);
}
$pregt=str_replace("@[^>]+\>(.*)", "@[^>]+\>(.*)[^" . substr($mval,0,1) . "]+" . $mval . "[^>]+", $pregt);
}
$pblurb=str_replace(" number 1 "," in unlimited search ",$pblurb);

}

if ($tval == "") {
  $pblurb=str_replace("for title element", "for any element", $pblurb);
}

//   echo str_replace('<','&lt;',str_replace('>','&gt;',$pregt));
//   exit;

if (isset($_GET['pregt'])) {
   $pregt=urldecode($_GET['pregt']);
}

//echo str_replace('<','&lt;',str_replace('>','&gt;',$pregt));
//exit;

if (!$file) {
    echo "<p>Unable to open remote file.\n";
    exit;
}
while (!feof ($file)) {
    $line = fgets ($file, 1024);
    /* This only works if the title and its tags are on one line */
    if (preg_match ($pregt, $line, $out)) {
        if ($cval == "" && $sval == "" && $mval == "") {
        $title = $out[1];
        } else {
        if ($sval != "" && $cval != "") {
        if ($mval != '') {
        if (($out[1] . $mval . $out[2] . $cval) != ($mval . $cval) && strpos($out[1] . substr(explode($mval,$line)[0],-1,1) . $mval . explode('<', explode($mval,$line)[1])[0], $sval) !== false) { $curo++; $title .= "<br>" . $out[1] . substr(explode($mval,$line)[0],-1,1) . $mval . explode('<', explode($mval,$line)[1])[0]; }
        } else {
        if (explode(">" . $sval,$out[0])[1] != "") { $curo++; $title .= "<br>" . $sval . explode(">" . $sval,$out[0])[1] . $cval; }
        }
        } else if ($sval != "") {
        if ($mval != '') {
        $title .= "<br>" . $out[1] . substr(explode($mval,$line)[0],-1,1) . $mval . explode('<', explode($mval,$line)[1])[0];
        } else {
        $title .= "<br>" . $sval . explode("<", explode(">" . $sval,$out[0])[1])[0];
        }
        $curo++;
        } else if ($cval != "") {
        if ($mval != '') {
        $title .= "<br>" . $out[1] . substr(explode($mval,$line)[0],-1,1) . $mval . explode('<', explode($mval,$line)[1])[0];
        } else {
        $title .= "<br>" . $out[1] . $cval;
        }
        $curo++;
        } else if (strpos($line, $mval) !== false) {
        $title .= "<br>" . $out[1] . substr(explode($mval,$line)[0],-1,1) . $mval . explode('<', explode($mval,$line)[1])[0];
        $curo++;
        }
        }
        if ($curo >= $matcho) { $blurb=str_replace(" numbering up to 1 starting "," in unlimited search starting  ",str_replace(" numbering up to 1 containing "," in unlimited search containing ",$pblurb)); if ("$cval$sval$mval" != "" && $tval == "" && $matcho == 1) { $curo=$curo; } else { break; } }
    }
}
fclose($file);

$postblurb="<hr><br><form action=./remote_files.php method=GET><input ondblclick=\"if (this.value.length == 0) { this.value='http://www.rjmprogramming.com.au/index.php'; }\" style=width:60%;' type=url name=url value='" . $uval . "' title='URL [http://www.rjmprogramming.com.au/index.php]' placeholder='URL [http://www.rjmprogramming.com.au/index.php]'></input><br><input ondblclick=\"if (this.value.length == 0) { this.value='title'; }\" style=width:60%;' type=text name=type value='" . $tval . "' title='Element type [title]' placeholder='Element type [title] ... Number [1] below ...'></input><br><input style=width:60%;' type=number name=ord value='" . $oval . "' min=1 step=1 title='Number [1]' placeholder='Number [1]'></input><br><input style=width:60%;' type=text name=starting value='" . $sval . "' title='Starting with []' placeholder='Starting with []'></input><br><input style=width:60%;' type=text name=middling value='" . $mval . "' title='In the Middle with []' placeholder='In the Middle with []'></input><br><input style=width:60%;' type=text name=containing value='" . $cval . "' title='Ending with []' placeholder='Ending with []'></input><br><br><input type=submit value=Search></input></form>";
echo "<html><head><meta charset='UTF-8'/><style> div { width:100%; background-color:rgba(255,255,159,0.5);  }</style><title>Remote Files - RJM Programming - March, 2023</title></head><body>${preblurb}<div>${blurb}" . str_replace('<!--!<br-->','<br>',str_replace('</!','',$title)) . "</div>${postblurb}</body></html>";
exit;
?>
