{"id":72196,"date":"2026-02-22T03:01:00","date_gmt":"2026-02-21T17:01:00","guid":{"rendered":"https:\/\/www.rjmprogramming.com.au\/ITblog\/?p=72196"},"modified":"2026-02-21T20:26:39","modified_gmt":"2026-02-21T10:26:39","slug":"document-root-relative-folder-listing-links-pdf-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-pdf-tutorial\/","title":{"rendered":"Document Root Relative Folder Listing Links PDF Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Document Root Relative Folder Listing Links PDF Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/uses_pdf.gif\" title=\"Document Root Relative Folder Listing Links PDF Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Document Root Relative Folder Listing Links PDF Tutorial<\/p><\/div>\n<p>Hopefully, all around the world, the idea of a &#8230;<\/p>\n<p><code><br \/>\nPDF<br \/>\n<\/code><\/p>\n<p> &#8230; display is replacing the &#8220;paper hungry&#8221; &#8220;hardcopy printout&#8221; concept.  As such, the creation of a &#8220;PDF assembly&#8221; is our &#8220;second cab off the rank&#8221; as an output format offered to users trying out the recent select (ie. dropdown) &#8220;assemblies&#8221; we started yesterday with  <a title='Document Root Relative Folder Listing Links Assemblies Tutorial' href='#drrfllat'>Document Root Relative Folder Listing Links Assemblies Tutorial<\/a>.  We use a window.open popup again, latching onto the PHP recipient code &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n$thingtoattendto='';<br \/>\n<br \/>\nfunction shutdown() {<br \/>\n    global $thingtoattendto;<br \/>\n    \/\/ This is our shutdown function, in<br \/>\n    \/\/ here we can do any last operations<br \/>\n    \/\/ before the script is complete.<br \/>\n<br \/>\n    if ($thingtoattendto != '') {<br \/>\n     sleep(145);<br \/>\n     unlink($thingtoattendto);<br \/>\n    }<br \/>\n}<br \/>\n<br \/>\n  $convprefix='\/bin\/';<br \/>\n  if (file_exists('\/usr\/local\/bin\/convert')) {<br \/>\n    $convprefix='\/usr\/local\/bin\/';<br \/>\n  } else if (!file_exists('\/bin\/convert')) {<br \/>\n    $convprefix='';<br \/>\n  }<br \/>\n<br \/>\n  if (isset($_GET['apdflist']) && isset($_GET['apdfname'])) {<br \/>\n    file_put_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace(\".pdf\",\".xxx\",str_replace('+',' ',urldecode($_GET['apdfname'])))), str_replace(\",\",\"\\n\" . $_SERVER['DOCUMENT_ROOT'], $_SERVER['DOCUMENT_ROOT'] . str_replace('+',' ',urldecode($_GET['apdflist']))));<br \/>\n    exec($convprefix . 'convert @' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace(\".pdf\",\".xxx\",str_replace('+',' ',urldecode($_GET['apdfname'])))) . ' ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace('+',' ',urldecode($_GET['apdfname']))));<br \/>\n    $hsofar=\"&lt;html&gt;&lt;body&gt;&lt;object data=\\\"\/tmp\/\" . basename(str_replace('+',' ',urldecode($_GET['apdfname']))) . \"\\\" type=\\\"application\/pdf\\\" data-base=data:application\/pdf;base64,\" . base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace('+',' ',urldecode($_GET['apdfname']))))) . \"&gt;&lt;\/object&gt;&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n    unlink($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace(\".pdf\",\".xxx\",str_replace('+',' ',urldecode($_GET['apdfname'])))));<br \/>\n    if (4 == 4) {<br \/>\n    header('Content-Type: application\/pdf');<br \/>\n    header('Cache-Control: public, must-revalidate, max-age=0'); \/\/ HTTP\/1.1<br \/>\n    header('Pragma: public');<br \/>\n    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); \/\/ Date in the past<br \/>\n    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');<br \/>\n    header('Content-Length: ' . strlen(file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace('+',' ',urldecode($_GET['apdfname']))))));<br \/>\n    header(\"Content-Disposition: inline; filename=input.pdf\");<br \/>\n    echo file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace('+',' ',urldecode($_GET['apdfname']))));<br \/>\n    unlink($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace('+',' ',urldecode($_GET['apdfname']))));<br \/>\n    exit;<br \/>\n    } else {<br \/>\n    echo $hsofar;<br \/>\n    $thingtoattendto=$_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace('+',' ',urldecode($_GET['apdfname'])));<br \/>\n    register_shutdown_function('shutdown');<br \/>\n    \/\/sleep(45);<br \/>\n    \/\/unlink($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . \"tmp\" . DIRECTORY_SEPARATOR . basename(str_replace('+',' ',urldecode($_GET['apdfname']))));<br \/>\n    shutdown() and exit;<br \/>\n    }<br \/>\n  }<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; using <a target=\"_blank\" title='ImageMagick command line' href='http:\/\/www.imagemagick.org\/script\/command-line-tools.php' rel=\"noopener\">ImageMagick<\/a>&#8216;s brilliant &#8220;convert&#8221; command line command idea &#8230;<\/p>\n<blockquote><p>\nconvert @list.txt output.pdf\n<\/p><\/blockquote>\n<p> as the backbone as to how in the <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/one_line_find.php-----GETME\" rel=\"noopener\">&#8220;sixth draft&#8221;<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php-----GETME\" rel=\"noopener\">one_line_find.php<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\">Document Root Relative Folder Listing<\/a> web application you can <a href='#myif' onclick=\"document.getElementById('myif').src='\/one_line_find.php?rand=' + Math.floor(Math.random() * 1675645); document.getElementById('myif').style.display='block'; document.getElementById('myif').scrollIntoView(); \">&#8220;crank up&#8221; below<\/a>, yet again, if you, and your ilk, along with their family and friends, townfolk and countryfolk alike, like.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-pdf-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links PDF Tutorial<\/a>.<\/p-->\n<hr>\n<p id='drrfllat'>Previous relevant <a target=\"_blank\" title='Document Root Relative Folder Listing Links Assemblies Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-assemblies-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links Assemblies Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Document Root Relative Folder Listing Links Assemblies Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/uses_assemblies.gif\" title=\"Document Root Relative Folder Listing Links Assemblies Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Document Root Relative Folder Listing Links Assemblies Tutorial<\/p><\/div>\n<p>So far, with the Document Root Relative Folder Listing work of recent times, up until the day before yesterday&#8217;s <a title='Document Root Relative Folder Listing Links Ajax Tutorial' href='#xdrrfllat'>Document Root Relative Folder Listing Links Ajax Tutorial<\/a>, it&#8217;s been mainly &#8230;<\/p>\n<ul>\n<li>reporting &#8230; and &#8230;\n<li>display &#8230; but we want to move on to the user being able to create their own what we are referring to as &#8230;<\/li>\n<li>assemblies<\/li>\n<\/ul>\n<p>To us, these are user driven (is it widgets) they create by selecting multiple media (today images, but down the line, other combinations) from the left hand table cell&#8217;s listing links.  We do not ask anymore of that left hand cell&#8217;s workings, as it will get too complex, but we have a penchant for adding intelligence to hardcodings, and the hardcoding &#8230;<\/p>\n<blockquote><p>\nhttps:\/\/www.rjmprogramming.com.au\/\n<\/p><\/blockquote>\n<p> &#8230; is ripe for the picking, with that &#8220;just moseying along there innocently&#8221; &#8230;<\/p>\n<blockquote><p>\n:\n<\/p><\/blockquote>\n<p> &#8230; a candidate for a new multiple mode select (ie dropdown) element &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n         document.getElementById('prefix').innerHTML=document.getElementById('prefix').innerHTML.replace(':','&lt;select ontouchstart=\\\"thismultiple(this);\\\" onmouseover=\\\"thismultiple(this);\\\" onclick=\\\"thismultiple(this);\\\" size=1 id=compsel title=\\\"Animated slideshow via slides possible selecting multiple images here.\\\" style=display:inline-block;width:28px; onblur=process(this); data-multiple&gt;&lt;option value=\\\"\\\"&gt;&#58;&lt;\/option&gt;&lt;\/select&gt;')<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; means by which a <font color=blue>user can specify<\/font> &#8220;assembly components&#8221;.<\/p>\n<p>Our simplest first &#8220;cab off the rank&#8221; here is a Javascript animated sequence, so far 4 second duration slides in a slideshow popup window, as per &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n  <font color=blue>var lastretval='', origprefix='', wesayso=false, needten=0, sofarval='', woo=null;<br \/>\n  <br \/>\n  function agifit(incsv) {<br \/>\n    if (incsv != '') {<br \/>\n    var myimgs=incsv.split(',');<br \/>\n    if (woo) {<br \/>\n      if (!woo.closed) { woo=woo; } else { woo.close(); woo=null; }<br \/>\n    }<br \/>\n    if (!woo) {<br \/>\n    woo=window.open('','_blank','top=50,left=50,width=800,height=800');<br \/>\n    woo.document.write('&lt;ht' + 'ml&gt;&lt;he' + 'ad&gt;' + myimgs[0] + '&lt;ti' + 'tle&gt;&lt;\/ti' + 'tle&gt;&lt;scr' + 'ipt type=text\/javascript&gt; var jimg=0, imgs=(\\\"' + incsv + '\\\").split(String.fromCharCode(44)), kimg=eval(\\\"\\\" + imgs.length);  function startit() { jimg++; jimg=eval(jimg % kimg);  document.body.style.background=' + \\\"'url(' + imgs[jimg] + ')'\\\" + '; document.title=' + \\\"'' + imgs[jimg] + ''\\\" + '; document.body.style.backgroundRepeat=\\\"no-repeat\\\"; document.body.style.backgroundSize=\\\"contain\\\";  } setInterval(startit,4000); &lt;\/scri' + 'pt&gt;&lt;\/head&gt;&lt;body id=xbody style=background:url(' + myimgs[0] + ');background-repeat:no-repeat;background-size:contain;&gt;&lt;\/body&gt;&lt;\/html&gt;');<br \/>\n    if (origprefix != '') {  document.getElementById('prefix').innerHTML=origprefix; wesayso=true; needten=0; sofarval=''; lastretval=''; }<br \/>\n    return woo;<br \/>\n    }<br \/>\n    }<br \/>\n    needten=0;<br \/>\n    return null;<br \/>\n  }<br \/>\n  <br \/>\n  function monitorsel() {<br \/>\n    var yesdo=true;<br \/>\n    if (needten &gt; 10) { setTimeout(monitorsel, 2000);  return ''; }<br \/>\n    var osel=document.getElementById('compsel');<br \/>\n    var retval='', delim='';<br \/>\n    if (sofarval != '') { delim=','; retval=sofarval; }<br \/>\n    for (var i=0; i&lt;osel.length; i++) {  if (osel.options[i].selected) { if (osel.options[i].value != '') { if ((',' + sofarval + ',').indexOf(',' + osel.options[i].value + ',') == -1) { retval+=delim + osel.options[i].value; delim=','; }   } }  }<br \/>\n    if (document.getElementById('compsel')) {<br \/>\n      if (retval != '') {<br \/>\n       if (retval != '' && retval.indexOf(',') == -1) {<br \/>\n       needten=0;<br \/>\n       }<br \/>\n       if (lastretval != retval) {<br \/>\n       lastretval=retval;<br \/>\n       sofarval=retval;<br \/>\n       needten=0;<br \/>\n       } else if (needten &lt; 10) {<br \/>\n       needten++;<br \/>\n       } else {<br \/>\n       yesdo=false;<br \/>\n       needten++;<br \/>\n       if (agifit(sofarval)) {<br \/>\n       if (origprefix != '') {  document.getElementById('prefix').innerHTML=origprefix; wesayso=true; needten=0; sofarval=''; lastretval=''; }<br \/>\n       }<br \/>\n       }<br \/>\n      }<br \/>\n      if (yesdo) { setTimeout(monitorsel, 2000); }<br \/>\n    }<br \/>\n  }<br \/>\n  <br \/>\n  function thismultiple(osel) {<br \/>\n    if (document.getElementById('lefttd').outerHTML.split('&gt;')[0].indexOf('overflow') == -1 || wesayso) {<br \/>\n    wesayso=false;<br \/>\n    document.getElementById('lefttd').style.overflowY='visible';<br \/>\n    osel.style.height='30px';<br \/>\n    osel.setAttribute('multiple', 'true');<br \/>\n    setTimeout(monitorsel, 2000);<br \/>\n    }<br \/>\n  }<\/font><br \/>\n  <br \/>\n  function massage(tv) {<br \/>\n    var tscnt=0, itv=0, ihis='', uids=[]<font color=blue>, addthese=''<\/font>;<br \/>\n    var tlls=tv.split('&lt;br&gt;');<br \/>\n    for (itv=eval(-1 + tlls.length); itv&gt;=0; itv--) {<br \/>\n      if (tlls[itv].indexOf(' \/') != -1) {<br \/>\n       if (document.getElementById('prefix') && !document.getElementById('compsel')) {<br \/>\n       if (document.getElementById('prefix').innerHTML.replace('p:\/\/','s:\/\/').indexOf('s:\/\/') != -1) {<br \/>\n         document.getElementById('prefix').innerHTML=document.getElementById('prefix').innerHTML.replace(':','&lt;select ontouchstart=\\\"thismultiple(this);\\\" onmouseover=\\\"thismultiple(this);\\\" onclick=\\\"thismultiple(this);\\\" size=1 id=compsel title=\\\"Animated slideshow via slides possible selecting multiple images here.\\\" style=display:inline-block;width:28px; onblur=process(this); data-multiple&gt;&lt;option value=\\\"\\\"&gt;&#58;&lt;\/option&gt;&lt;\/select&gt;')<br \/>\n       }<br \/>\n       }<br \/>\n       uids=tlls[itv].split(' \/');<br \/>\n       ihis=tlls[itv].replace(tlls[itv].split(' \/')[0] + ' ','');<br \/>\n       if (eval('' + uids.length) == 3) {<br \/>\n       ajaxs.unshift('\/' + uids[2]);<br \/>\n       \/\/alert('0:' + outwo('\/' + uids[2]) + ' ... ' + '\/' + uids[2]);<br \/>\n       <font color=blue>if (outwo('\/' + uids[2]).replace(' ','IMAGE\/') == 'IMAGE\/') {<br \/>\n              addthese+='&lt;option value=\\\"\/' + uids[2] + '\\\"&gt;\/' + uids[2] + '&lt;\/option&gt;';<br \/>\n       }<\/font><br \/>\n       if (outwo('\/' + uids[2]) == 'IMAGE\/' && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i) && 1 == 1) {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&#9;&lt;span id=\\\"' + encodeURIComponent('\/' + uids[2]) + '\\\" title=\\\"\\\" style=text-decoration:underline; onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this); href=# data-href=\\\"\/' + uids[2] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/span&gt;');<br \/>\n       } else {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&#9;&lt;a id=\\\"' + encodeURIComponent('\/' + uids[2]) + '\\\" title=\\\"\\\" target=_blank onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this) href=\\\"\/' + uids[2] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/a&gt;');<br \/>\n       }<br \/>\n       } else {<br \/>\n       ajaxs.unshift(ihis.split('%20-')[0].split(' -')[0]);<br \/>\n       \/\/alert('1:' + outwo((ihis.split('%20-')[0].split(' -')[0])) + ' ... ' + (ihis.split('%20-')[0].split(' -')[0]));<br \/>\n       <font color=blue>if (outwo(ihis.split('%20-')[0].split(' -')[0]).replace(' ','IMAGE\/') == 'IMAGE\/') {<br \/>\n              addthese+='&lt;option value=\\\"' + (ihis.split('%20-')[0].split(' -')[0]) + '\\\"&gt;' + (ihis.split('%20-')[0].split(' -')[0]) + '&lt;\/option&gt;';<br \/>\n       }<\/font><br \/>\n       if (outwo(ihis.split('%20-')[0].split(' -')[0]) == 'IMAGE\/' && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i) && 1 == 1) {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&#9;&lt;span id=\\\"' + encodeURIComponent(ihis.split('%20-')[0].split(' -')[0]) + '\\\" title=\\\"\\\" style=text-decoration:underline; onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this); href=# data-href=\\\"' + ihis.split('%20-')[0].split(' -')[0] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/span&gt;');<br \/>\n       } else {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&#9;&lt;a id=\\\"' + encodeURIComponent(ihis.split('%20-')[0].split(' -')[0]) + '\\\" title=\\\"\\\" target=_blank onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this); href=\\\"' + ihis.split('%20-')[0].split(' -')[0] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/a&gt;');<br \/>\n       }<br \/>\n       }<br \/>\n      }<br \/>\n    }<br \/>\n    <font color=blue>if (addthese != '') {<br \/>\n      document.getElementById('compsel').innerHTML+=addthese;<br \/>\n      origprefix=document.getElementById('prefix').innerHTML; \/\/.replace(' data-multiple', ' multiple data-multiple');<br \/>\n    }<\/font><br \/>\n    setInterval(function(){ var onerect=document.getElementById('djc').getBoundingClientRect(), tworect=document.getElementById('jc').getBoundingClientRect();   if (Math.abs(eval(eval(('' + onerect.height) - eval('' + tworect.height)))) &gt; 20) {  document.getElementById('djc').style.height='' + tworect.height + 'px';  document.getElementById('djc').style.width='' + eval(-20 + tworect.width) + 'px'; } }, 6000);<br \/>\n    setTimeout(doajaxs, 1000);<br \/>\n    return tv;<br \/>\n  }<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; in the <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/one_line_find.php----GETME\" rel=\"noopener\">&#8220;fifth draft&#8221;<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php----GETME\" rel=\"noopener\">one_line_find.php<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\">Document Root Relative Folder Listing<\/a> web application you can <a href='#myif' onclick=\"document.getElementById('myif').src='\/one_line_find.php?rand=' + Math.floor(Math.random() * 1675645); document.getElementById('myif').style.display='block'; document.getElementById('myif').scrollIntoView(); \">&#8220;crank up&#8221; below<\/a>, yet again, if you, and your ilk, along with their family and friends, like.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-assemblies-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links Assemblies Tutorial<\/a>.<\/p-->\n<hr>\n<p id='xdrrfllat'>Previous relevant <a target=\"_blank\" title='Document Root Relative Folder Listing Links Ajax Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-ajax-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links Ajax Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Document Root Relative Folder Listing Links Ajax Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/uses_ajax.gif\" title=\"Document Root Relative Folder Listing Links Ajax Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Document Root Relative Folder Listing Links Ajax Tutorial<\/p><\/div>\n<p>It was &#8220;faux <a target=\"_blank\" title='Ajax information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Ajax_(programming)' rel=\"noopener\">Ajax<\/a> day&#8221; with yesterday&#8217;s <a title='Document Root Relative Folder Listing Links Before and On Click Tutorial' href='#drrfllboct'>Document Root Relative Folder Listing Links Before and On Click Tutorial<\/a>, but today &#8230;<\/p>\n<blockquote><p>\nIt&#8217;s Ajax Day &#8230; <a target=\"_blank\" title=\"?\" href='https:\/\/www.facebook.com\/ABCKidsCommunity\/videos\/get-ready-to-play-hardtom-gleesons-back-to-host-the-popular-hard-quiz-spin-off-w\/3740483856244190\/' rel=\"noopener\">yayyyyy!!!!<\/a>\n<\/p><\/blockquote>\n<p>Howevvvvvvvver, just to confuse, there is no <i>onmouseover<\/i> involved, but the Ajax work does, at least for non-mobile users, sort of, affect display data, in that when hovering over a link, they <i title=\"If processing has reached that link, as it works behind the scenes ...\">may<\/i> see within the <i>title<\/i> attribute of that link, whatevvvvvvvvver &#8230;<\/p>\n<p><code><br \/>\n<a target=\"_blank\" title='Linux file command information from computerhope' href='http:\/\/www.computerhope.com\/unix\/ufile.htm' rel=\"noopener\">file<\/a> \"[a link href]\"<br \/>\n<\/code><\/p>\n<p> &#8230; can &#8220;value add&#8221;, via Ajax logic, into the &#8220;up until now just an <a target=\"_blank\" title='Linux ls command information from computerhope' href='https:\/\/www.computerhope.com\/unix\/uls.htm' rel=\"noopener\"><i>ls<\/i><\/a> (underlying operating system command) based file listing&#8221; report.<\/p>\n<p>Ajax is great here, as helping a <sub>sub<\/sub>process that can be &#8230;<\/p>\n<ul>\n<li>spawned off &#8230;<\/li>\n<li>working away as a secondary (optional) process<\/li>\n<\/ul>\n<p> &#8230; supplementing the primary workflow, if you will, but probably not too impactive, <font color=blue>we&#8217;re hoping<\/font>  &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n  <font color=blue>var ajaxs=[], zhr=null, zform=null;<\/font><br \/>\n  <br \/>\n  function massage(tv) {<br \/>\n    var tscnt=0, itv=0, ihis='', uids=[];<br \/>\n    var tlls=tv.split('&lt;br&gt;');<br \/>\n    for (itv=eval(-1 + tlls.length); itv&gt;=0; itv--) {<br \/>\n      if (tlls[itv].indexOf(' \/') != -1) {<br \/>\n       uids=tlls[itv].split(' \/');<br \/>\n       ihis=tlls[itv].replace(tlls[itv].split(' \/')[0] + ' ','');<br \/>\n       if (eval('' + uids.length) == 3) {<br \/>\n       <font color=blue>ajaxs.unshift('\/' + uids[2]);<\/font><br \/>\n       if (outwo('\/' + uids[2]) == 'IMAGE\/' && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i) && 1 == 1) {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&amp;#9;&lt;span <font color=blue>id=\\\"' + encodeURIComponent('\/' + uids[2]) + '\\\" <\/font>title=\\\"\\\" style=text-decoration:underline; onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this); href=# data-href=\\\"\/' + uids[2] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/span&gt;');<br \/>\n       } else {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&amp;#9;&lt;a <font color=blue>id=\\\"' + encodeURIComponent('\/' + uids[2]) + '\\\" <\/font>title=\\\"\\\" target=_blank onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this) href=\\\"\/' + uids[2] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/a&gt;');<br \/>\n       }<br \/>\n       } else {<br \/>\n       <font color=blue>ajaxs.unshift(ihis.split('%20-')[0].split(' -')[0]);<\/font><br \/>\n       if (outwo(ihis.split('%20-')[0].split(' -')[0]) == 'IMAGE\/' && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i) && 1 == 1) {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&amp;#9;&lt;span <font color=blue>id=\\\"' + encodeURIComponent(ihis.split('%20-')[0].split(' -')[0]) + '\\\" <\/font>title=\\\"\\\" style=text-decoration:underline; onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this); href=# data-href=\\\"' + ihis.split('%20-')[0].split(' -')[0] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/span&gt;');<br \/>\n       } else {<br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&amp;#9;&lt;a <font color=blue>id=\\\"' + encodeURIComponent(ihis.split('%20-')[0].split(' -')[0]) + '\\\" <\/font>title=\\\"\\\" target=_blank onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this); href=\\\"' + ihis.split('%20-')[0].split(' -')[0] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/a&gt;');<br \/>\n       }<br \/>\n       }<br \/>\n      }<br \/>\n    }<br \/>\n    setInterval(function(){ var onerect=document.getElementById('djc').getBoundingClientRect(), tworect=document.getElementById('jc').getBoundingClientRect();   if (Math.abs(eval(eval(('' + onerect.height) - eval('' + tworect.height)))) &gt; 20) {  document.getElementById('djc').style.height='' + tworect.height + 'px';  document.getElementById('djc').style.width='' + eval(-20 + tworect.width) + 'px'; } }, 6000);<br \/>\n    <font color=blue>setTimeout(doajaxs, 1000);<\/font><br \/>\n    return tv;<br \/>\n  }<br \/>\n  <br \/>\n <font color=blue>function stateChanged() {<br \/>\n  if (zhr.readyState == 4) {<br \/>\n   if (zhr.status == 200) {<br \/>\n    var rawhtml = zhr.response;<br \/>\n    var spans=rawhtml.split('&lt;\/span');<br \/>\n    var ps=rawhtml.split('&lt;\/p');<br \/>\n    if (eval('' + ps.length) == 2 && eval('' + spans.length) == 2) {<br \/>\n      document.getElementById(spans[0].split('&gt;')[eval(-1 + spans[0].split('&gt;').length)]).title+=ps[0].split('&gt;')[eval(-1 + ps[0].split('&gt;').length)];<br \/>\n    }<br \/>\n    setTimeout(doajaxs, 1000);<br \/>\n   }<br \/>\n  }<br \/>\n }<br \/>\n  <br \/>\n  function doajaxs() {<br \/>\n    var nexttogo='';<br \/>\n    for (var ii=0; ii&lt;ajaxs.length; ii++) {<br \/>\n      if (nexttogo == '' && ajaxs[ii] != '') {<br \/>\n        nexttogo=ajaxs[ii];<br \/>\n        ajaxs[ii]='';<br \/>\n      }<br \/>\n    }<br \/>\n    if (nexttogo != '') {<br \/>\n        zhr = new XMLHttpRequest();<br \/>\n        zform = new FormData();<br \/>\n        zform.append('ajaxid', encodeURIComponent(nexttogo));<br \/>\n        zform.append('ajaxurl', nexttogo);<br \/>\n        zhr.onreadystatechange=stateChanged;<br \/>\n        zhr.open('post', '.\/one_line_find.php', true);<br \/>\n        zhr.send(zform);<br \/>\n    }<br \/>\n  }<\/font><br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; Javascript calling logic using PHP recipient code &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n  if (isset($_POST['ajaxurl']) && isset($_POST['ajaxid'])) {<br \/>\n    echo \"&lt;html&gt;&lt;body&gt;&lt;span&gt;\" . $_POST['ajaxid'] . '&lt;\/span&gt;&lt;p&gt;' . str_replace($_SERVER['DOCUMENT_ROOT'],'',shell_exec('file \"' . $_SERVER['DOCUMENT_ROOT'] . str_replace('+',' ',urldecode($_POST['ajaxurl'])) . '\"')) . \"&lt;\/p&gt;&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n    exit;<br \/>\n  }<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; in the <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/one_line_find.php---GETME\" rel=\"noopener\">&#8220;fourth draft&#8221;<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php---GETME\" rel=\"noopener\">one_line_find.php<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\">Document Root Relative Folder Listing<\/a> web application you can <a href='#myif' onclick=\"document.getElementById('myif').src='\/one_line_find.php?rand=' + Math.floor(Math.random() * 1675645); document.getElementById('myif').style.display='block'; document.getElementById('myif').scrollIntoView(); \">&#8220;crank up&#8221; below<\/a>, yet again, if you, and your ilk, like.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-ajax-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links Ajax Tutorial<\/a>.<\/p-->\n<hr>\n<p id='drrfllboct'>Previous relevant <a target=\"_blank\" title='Document Root Relative Folder Listing Links Before and On Click Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-before-and-on-click-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links Before and On Click Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Document Root Relative Folder Listing Links Before and On Click Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/like_ajax.jpg\" title=\"Document Root Relative Folder Listing Links Before and On Click Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Document Root Relative Folder Listing Links Before and On Click Tutorial<\/p><\/div>\n<p>Today&#8217;s work has an <a target=\"_blank\" title='Ajax information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Ajax_(programming)' rel=\"noopener\">Ajax<\/a> feel to it, despite the fact we use no Ajax type Javascript code, onto yesterday&#8217;s <a title='Document Root Relative Folder Listing Links Tutorial' href='#drrfllt'>Document Root Relative Folder Listing Links Tutorial<\/a> onclick event logics, we guess, because &#8230;<\/p>\n<ul>\n<li>coding for the non-mobile <i>onmouseover<\/i> event, with display change logic, has a very Ajax<sup>y<\/sup> feel to it &#8230; and  &#8230;<\/li>\n<li>on mobile we code for <i>ontouchmove<\/i> (feeding into user click actions)<\/li>\n<\/ul>\n<p> &#8230; <font color=blue>calling via<\/font> &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n              tv=tv.replace(tlls[itv].split(' \/')[0] + ' ' + ihis, tlls[itv].split(' \/')[0] + '&amp;#9;&lt;a target=\"_blank\" <font color=blue>onmouseover=showit(this); onmouseout=hideit(this); ontouchmove=showit(this); ontouchend=hideitlater(this); <\/font>href=\\\"' + ihis.split('%20-')[0].split(' -')[0] + '\\\"&gt;' + ihis.split('%20-')[0].split(' -')[0] + '&lt;\/a&gt;');<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; calling on &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n  function showit(ioi) {<br \/>\n     document.getElementById('mymediatr').innerHTML=mytrih;<br \/>\n     if (ioi.outerHTML.indexOf('&lt;span') != -1) {<br \/>\n     outwo(ioi.getAttribute('data-href'));<br \/>\n     } else {<br \/>\n     outwo(ioi.href);<br \/>\n     }<br \/>\n  }<br \/>\n<br \/>\n  function hideit(ioi) {<br \/>\n     document.getElementById('mymediatr').innerHTML=mytrih;<br \/>\n  }<br \/>\n  <br \/>\n  function hideitlater(ioi) {<br \/>\n     if (2 == 5) {<br \/>\n     setTimeout(function(){<br \/>\n     document.getElementById('mymediatr').innerHTML=mytrih;<br \/>\n     }, 15000);<br \/>\n     }<br \/>\n  }<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p>Along the way we decided, in very Ajax<sup>y<\/sup> thinking, on mobile, to be less disruptive with navigations after a click, so as to stay on the original webpage more often, in the <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/one_line_find.php--GETME\" rel=\"noopener\">&#8220;third draft&#8221;<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php--GETME\" rel=\"noopener\">one_line_find.php<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\">Document Root Relative Folder Listing<\/a> web application you can <a href='#myif' onclick=\"document.getElementById('myif').src='\/one_line_find.php?rand=' + Math.floor(Math.random() * 1675645); document.getElementById('myif').style.display='block'; document.getElementById('myif').scrollIntoView(); \">&#8220;crank up&#8221; below<\/a>, yet again, if you like.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/new-document-root-relative-folder-listing-links-tutorial\/' rel=\"noopener\">New Document Root Relative Folder Listing Links Tutorial<\/a>.<\/p-->\n<hr>\n<p id='drrfllt'>Previous relevant <a target=\"_blank\" title='Document Root Relative Folder Listing Links Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Document Root Relative Folder Listing Links Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/one_line_links.gif\" title=\"Document Root Relative Folder Listing Links Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Document Root Relative Folder Listing Links Tutorial<\/p><\/div>\n<p>Regular readers will &#8220;know the drill&#8221; with today&#8217;s work, on top of yesterday&#8217;s <a title='Document Root Relative Folder Listing Tutorial' href='#drrflt'>Document Root Relative Folder Listing Tutorial<\/a>.<\/p>\n<p>The new word in the posting title is &#8230;<\/p>\n<p><code><br \/>\nLinks<br \/>\n<\/code><\/p>\n<p> &#8230; and those regular readers would know &#8230;<\/p>\n<ul>\n<li>yesterday&#8217;s Document Root Relative Folder Listing output was placed into a <i>textarea<\/i> element &#8230; clue 1<\/li>\n<li>that <i>textarea<\/i> element we all admire for it&#8217;s textual data line feed talents and it&#8217;s talents for resizing capabilities &#8230; clue 2<\/li>\n<li>that <i>textarea<\/i> element textual data is unembellishable (if that is a word) &#8230; clue 3<\/li>\n<li>whereas your meek and mild <i>div<\/i> element, say, could <a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/overlay\" rel=\"noopener\">overlay<\/a> that <i>textarea<\/i> element, except for the right hand resizer, <span><a target=\"_blank\" title='?' class=\"audioytplay\" href='https:\/\/www.youtube.com\/watch?v=PtR4cWb4HNg' rel=\"noopener\">that is<\/a><\/span> &#8230; clue 4<\/li>\n<li>and the <i>div<\/i> element could latch onto that <i>textarea<\/i> basis of content and enhance filenames into filename links too <font size=1>(but am not sure about the <a target=\"_blank\" title=\"?\" href='https:\/\/www.youtube.com\/watch?v=LDWXfVcXmb4' rel=\"noopener\">Singing Glasses idea<\/a> in the &#8220;talent quest section&#8221; &#8230; that seems a bridge too far)<\/font> &#8230; clue 5<\/li>\n<\/ul>\n<p> &#8230; leaving us <a target=\"_blank\" title=\"?\" href='https:\/\/www.youtube.com\/watch?v=8toaz_9BHrY' rel=\"noopener\">clueless<\/a> as to what else to say &#8230; chortle, chortle?!<\/p>\n<p>Also helpful would be, to our minds &#8230;<\/p>\n<ul>\n<li>still restrict the file specification to a &#8220;buttoned down&#8221; setting (because of security concerns) &#8230; but &#8230;<\/li>\n<li>add complexity to the extension part &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n     $extbit='*.[tjpmwag][xpnopaid][etgvf34]*';<br \/>\n<\/code><br \/>\n?&gt;<br \/>\n &#8230;to allow relatively innocent media files and PDFs reach the file listing (tweaked a bit too) now &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n    $resis=str_replace($_SERVER['DOCUMENT_ROOT'],'',shell_exec('ls -lhgo ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $offdr . $extbit));<br \/>\n<\/code><br \/>\n?&gt;\n<\/ul>\n<p> &#8230; in the <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/one_line_find.php-GETME\" rel=\"noopener\">&#8220;second draft&#8221;<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php-GETME\" rel=\"noopener\">one_line_find.php<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\">Document Root Relative Folder Listing<\/a> web application you can <a href='#myif' onclick=\"document.getElementById('myif').src='\/one_line_find.php?rand=' + Math.floor(Math.random() * 1675645); document.getElementById('myif').style.display='block'; document.getElementById('myif').scrollIntoView(); \">&#8220;crank up&#8221; below<\/a>, again, if you like.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Links Tutorial<\/a>.<\/p-->\n<hr>\n<p id='drrflt'>Previous relevant <a target=\"_blank\" title='Document Root Relative Folder Listing Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-tutorial\/' rel=\"noopener\">Document Root Relative Folder Listing Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Document Root Relative Folder Listing Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.gif\" title=\"Document Root Relative Folder Listing Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Document Root Relative Folder Listing Tutorial<\/p><\/div>\n<p>The Apache web server has, for it&#8217;s PHP environment, if that is it&#8217;s server language, the concept of &#8230;<\/p>\n<p><code><br \/>\n<a target=\"_blank\" title='Document Root' href='https:\/\/httpd.apache.org\/docs\/2.4\/urlmapping.html' rel=\"noopener\">Document Root<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; so that, for the website of the webpage you are reading from now, a URL such as our RJM Programming&#8217;s Landing Page&#8217;s URL &#8230;<\/p>\n<p><code><br \/>\n<a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/\" rel=\"noopener\">https:\/\/www.rjmprogramming.com.au\/<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; scours that Document Root folder to find the <i>index.php<\/i> webpage code to display that Landing Page.<\/p>\n<p>You can &#8220;abstract&#8221;, and we do also with our Difference Reporting, what that Document Root is as a folder path &#8230; bit forlorn we know, as we&#8217;ve shown what it is, probably, in many tutorial images &#8230; but the thing here is that a <i>URL<\/i> such as &#8230;<\/p>\n<p><code><br \/>\n<a target=\"_blank\" href=\"\/index.php\" rel=\"noopener\">\/index.php<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; is understood and gets you to our Landing Page as well, because to the public, Document Root is the limit of where they are allowed to surf &#8230; if you like Document Root is the left hand beach flag at Surfers Paradise <font size=1>(or perhaps the right hand beach flag in the <a target=\"_blank\" href='https:\/\/www.google.com\/search?q=todd+river+floods&#038;rlz=1C5OZZY_en&#038;oq=todd+river+floods&#038;gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIICAEQABgWGB4yCAgCEAAYFhgeMggIAxAAGBYYHjINCAQQABiGAxiABBiKBTINCAUQABiGAxiABBiKBTINCAYQABiGAxiABBiKBTIKCAcQABiABBiiBNIBCDYyMjVqMGo0qAIAsAIB&#038;sourceid=chrome&#038;ie=UTF-8' rel=\"noopener\">Todd River<\/a> &#8230; when it gets water, <span><a target=\"_blank\" title='?' class=\"audioytplay\" href='https:\/\/www.youtube.com\/watch?v=PtR4cWb4HNg' rel=\"noopener\">that is<\/a><\/span>?!)<\/font>.<\/p>\n<p>Okay, that&#8217;s one theme of today&#8217;s new PHP web application.  The other we wrote out to ourself was &#8230;<\/p>\n<blockquote><p>\nOne line ls -clt https:\/\/www.rjmprogramming.com.au\/*.txt via find $_SERVER[&#8216;DOCUMENT_ROOT&#8217;] -type d -name &#8216;*&#8217;\n<\/p><\/blockquote>\n<p> &#8230; as a presentation idea whereby just the one table row of data is used to present &#8230;<\/p>\n<ul>\n<li>https:\/\/www.rjmprogramming.com.au\/<\/li>\n<li>dropdown of list of folders off Document Root (&#8220;abstracting&#8221; Document Root itself &#8230; ie. relative referencing)<\/li>\n<li>a file specification (minus the path) of interest &#8230; we are, for now, locking in as &#8230;<br \/>\n<code><br \/>\n*.txt<br \/>\n<\/code><br \/>\n &#8230; as the input data, to the output data that is &#8230;\n<\/li>\n<li>output folder listing (as for Linux and macOS)<\/li>\n<\/ul>\n<p>The concept of &#8220;one table row&#8221; for a multiple file listing is a mute point, but in our defence &#8230;<\/p>\n<ul>\n<li>the textarea it is presented in (via <i>rows=1<\/i>) is user resizable<\/li>\n<li>the textarea it is presented in is given a title with line feeds for the whole report so that non-mobile users can see this on hovering over the textarea<\/li>\n<\/ul>\n<p>This was a PHP project definitely needing the mildly better outcomes of PHP <a target=\"_blank\" title='PHP shell_exec() method information' href='http:\/\/php.net\/manual\/en\/function.shell-exec.php' rel=\"noopener\"><i>shell_exec<\/i><\/a> (where multiple line outputs are possible) as distinct from <a target=\"_blank\" title='PHP shell_exec() method information' href='http:\/\/php.net\/manual\/en\/function.exec.php' rel=\"noopener\"><i>exec<\/i><\/a> where only the last output line is returned, but is the usual method we use around here.<\/p>\n<p>Keeping the report to one row also asks for &#8230;<\/p>\n<ul>\n<li>use of elements that have CSS styling display:inline; as a default (eg. span element) &#8230; or &#8230;<\/li>\n<li>user supplying CSS display:inline; or  display:inline-block; as applicable &#8230; and &#8230;<\/li>\n<li>table cell <i>text-align:right;<\/i> came in handy &#8230; as well as &#8230;<\/li>\n<li>select element &#8220;dynamic shrinker&#8221; &#8230;<br \/>\n<code><br \/>\nfunction resizeSelect(sel) { \/\/ thanks to https:\/\/www.google.com\/search?q=make+select+element+width+in+sympathy+with+length+of+its+value&rlz=1C5OZZY_en&oq=make+select+element+width+in+sympathy+with+length+of+its+value&gs_lcrp=EgZjaHJvbWUyBggAEEUYOdIBCTI3MzEzajBqNKgCALACAQ&sourceid=chrome&ie=UTF-8<br \/>\n  \/\/ 1. Create a temporary span to measure text width<br \/>\n  var tempSpan = document.createElement('span');<br \/>\n  tempSpan.style.visibility = 'hidden';<br \/>\n  tempSpan.style.position = 'absolute';<br \/>\n  tempSpan.style.whiteSpace = 'pre';<br \/>\n  \/\/ 2. Set font styles to match the select box<br \/>\n  tempSpan.style.font = window.getComputedStyle(sel).font;<br \/>\n  \/\/ 3. Set content to selected text<br \/>\n  tempSpan.innerText = sel.options[sel.selectedIndex].text;<br \/>\n  document.body.appendChild(tempSpan);<br \/>\n  <br \/>\n  \/\/ 4. Update width (with extra space for the dropdown arrow)<br \/>\n  sel.style.width = (tempSpan.offsetWidth + 30) + 'px';<br \/>\n  document.body.removeChild(tempSpan);<br \/>\n}<br \/>\n<\/code>\n<\/li>\n<\/ul>\n<p> &#8230; in the &#8220;proof of concept&#8221; <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php_GETME\" rel=\"noopener\">one_line_find.php<\/a> first draft <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/one_line_find.php\" rel=\"noopener\">Document Root Relative Folder Listing<\/a> web application you can <a href='#myif' onclick=\"document.getElementById('myif').src='\/one_line_find.php?rand=' + Math.floor(Math.random() * 1675645); document.getElementById('myif').style.display='block'; \">&#8220;crank up&#8221; below<\/a> if you like &#8230;<\/p>\n<div id=dmyif style=width:1200px;overflow:visible;z-index:876;height:80px;>\n<iframe scrolling=yes frameborder=0 name=myif id=myif src=\/About_Us.html style=zoom:0.7;z-index:876;display:none;width:80%;height:80px;overflow-y:visible;><\/iframe>\n<\/div>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d72124' onclick='var dv=document.getElementById(\"d72124\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/report\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d72124' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d72148' onclick='var dv=document.getElementById(\"d72148\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/link\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d72148' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d72156' onclick='var dv=document.getElementById(\"d72156\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/onmouseover\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d72156' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d72167' onclick='var dv=document.getElementById(\"d72167\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/ajax\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d72167' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d72196' onclick='var dv=document.getElementById(\"d72196\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/pdf\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d72196' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d72186' onclick='var dv=document.getElementById(\"d72186\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/popup\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d72186' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hopefully, all around the world, the idea of a &#8230; PDF &#8230; display is replacing the &#8220;paper hungry&#8221; &#8220;hardcopy printout&#8221; concept. As such, the creation of a &#8220;PDF assembly&#8221; is our &#8220;second cab off the rank&#8221; as an output format &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/document-root-relative-folder-listing-links-pdf-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,12,14,29,37],"tags":[2458,69,84,85,5428,5427,1614,1580,233,234,2650,281,336,342,1750,367,400,405,5423,418,3336,435,450,2730,590,1658,597,2487,3580,2533,1807,707,5422,5421,760,2092,861,5424,871,2723,885,894,2120,913,932,967,968,997,2945,1045,1054,1059,1075,1866,3942,1149,2734,1238,1581,5085,1254,2005,1319,1345,1411],"class_list":["post-72196","post","type-post","status-publish","format-standard","hentry","category-animation","category-elearning","category-event-driven-programming","category-operating-system","category-tutorials","tag-abstraction","tag-ajax","tag-animation-2","tag-apache","tag-assemblies","tag-assembly","tag-asynchronous","tag-cell","tag-command","tag-command-line","tag-convert","tag-css","tag-directory","tag-div","tag-document-root","tag-dropdown","tag-event","tag-exec","tag-extensio","tag-file","tag-filename","tag-find","tag-folder","tag-formdata","tag-image","tag-imagemagick","tag-images","tag-inline","tag-inline-block","tag-line-feed","tag-link","tag-linux","tag-listing","tag-ls","tag-media","tag-multiple","tag-onclick","tag-one-row","tag-onmouseover","tag-ontouchmove","tag-operating-system-2","tag-overlay","tag-path","tag-pdf","tag-php","tag-popup","tag-popup-window","tag-programming","tag-relative","tag-relative-url","tag-report","tag-resize","tag-row","tag-select","tag-shell_exec","tag-slide","tag-slides","tag-table","tag-table-cell","tag-talent","tag-text","tag-tool","tag-tutorial","tag-url","tag-web-server"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/72196"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=72196"}],"version-history":[{"count":4,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/72196\/revisions"}],"predecessor-version":[{"id":72200,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/72196\/revisions\/72200"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=72196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=72196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=72196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}