{"id":68450,"date":"2025-05-26T03:01:00","date_gmt":"2025-05-25T17:01:00","guid":{"rendered":"https:\/\/www.rjmprogramming.com.au\/ITblog\/?p=68450"},"modified":"2025-05-26T09:47:29","modified_gmt":"2025-05-25T23:47:29","slug":"php-macos-mamp-command-line-debugging-alias-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/php-macos-mamp-command-line-debugging-alias-tutorial\/","title":{"rendered":"PHP MacOS MAMP Command Line Debugging Alias Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/MAMP\/php_mamp_command_line_debugging_switch.gif\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"PHP MacOS MAMP Command Line Debugging Alias Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/MAMP\/php_mamp_command_line_debugging_switch.gif\" title=\"PHP MacOS MAMP Command Line Debugging Alias Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">PHP MacOS MAMP Command Line Debugging Alias Tutorial<\/p><\/div>\n<p>To be interested in PHP programming that gets uploaded to a public website probably means you&#8217;ll want a local (in our case, Apache) web server like the great <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> (as with <a title='Animated GIF Creation on Windows MAMP via PDF Tutorial' href='#agifcwmamppdft'>Animated GIF Creation on Windows MAMP via PDF Tutorial<\/a>) to be pivotal to how you go about web application programming, in our case, for both &#8230;<\/p>\n<ul>\n<li>serverside PHP programming<\/li>\n<li>clientside HTML\/Javascript\/CSS programming<\/li>\n<\/ul>\n<p>And a big part of our macOS based MAMP Apache\/PHP\/MySql environment is the &#8220;what used to be but not automatically, at least with our last version 7.4.33 MAMP install&#8221; command line way of going &#8230;<\/p>\n<p><code><br \/>\nphp -l [somePHPCode.php]<br \/>\n<\/code><\/p>\n<p> &#8230; to see where syntax and logic errors occur in your PHP ahead of testing (or because of testing) and uploading to the public website.  On installing MAMP&#8217;s PHP 7.4.33 here at this macOS environment we&#8217;ve been putting up with a &#8230;<\/p>\n<p><code><br \/>\nphp -l [somePHPCode.php]<br \/>\n<\/code><\/p>\n<p> &#8230; that only every returned a one liner saying if there were errors, or not.  If there were errors no context within the code was supplied.  We put up with &#8230;<\/p>\n<ol>\n<li>creating a Korn shell &#8230;<br \/>\n<code><br \/>\n#!\/bin\/ksh<br \/>\n\/Applications\/MAMP\/bin\/php\/php7.4.33\/bin\/php $1 $2<br \/>\nexit<br \/>\n<\/code>\n<\/li>\n<li>running the older and more verbose style of &#8220;php -l&#8221; reports up at a public live web server, but, today, finally &#8230;<\/li>\n<\/ol>\n<p> &#8230; we&#8217;ve finally bitten the bullet to improve this situation for &#8230;<\/p>\n<ul>\n<li>local macOS MAMP environment &#8230;<\/li>\n<li>PHP 7.4.33 &#8230;<\/li>\n<li>zsh shell &#8230;<\/li>\n<li>alias &#8230; for &#8230;<\/li>\n<li><i>php<\/i><\/li>\n<\/ul>\n<p> &#8230; via this new <i>~\/.zshrc<\/i> &#8220;logging in&#8221; profile file alias (the <i>-n<\/i> being an additional improvement that hadn&#8217;t occurred to us until today) &#8230;<\/p>\n<p><code><br \/>\nalias php=\"\/Applications\/MAMP\/bin\/php\/php7.4.33\/bin\/php -n \"<br \/>\n<\/code><\/p>\n<p> &#8230; helping both &#8230;<\/p>\n<ol>\n<li>\n<code><br \/>\nphp [somePHPCode.php]    # run PHP on command line<br \/>\n<\/code>\n<\/li>\n<li>\n<code><br \/>\nphp -l [somePHPCode.php]   # syntax and logic check PHP on command line<br \/>\n<\/code>\n<\/li>\n<\/ol>\n<p> &#8230; behave the way we were used to before MAMP PHP version 7.4.33 here on macOS, with the <i>-n<\/i> switch now implicit with command line PHP usage.  Thanks to <a target=\"_blank\" href='https:\/\/stackoverflow.com\/questions\/73254636\/how-do-you-set-an-alias-in-zsh-on-macos' title='https:\/\/stackoverflow.com\/questions\/73254636\/how-do-you-set-an-alias-in-zsh-on-macos' rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/73254636\/how-do-you-set-an-alias-in-zsh-on-macos<\/a>  and <a target=\"_blank\" href='https:\/\/stackoverflow.com\/questions\/34214217\/php-l-suppress-output-on-valid-files' title='https:\/\/stackoverflow.com\/questions\/34214217\/php-l-suppress-output-on-valid-files' rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/34214217\/php-l-suppress-output-on-valid-files<\/a>.<\/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\/php-macos-mamp-command-line-debugging-alias-tutorial\/' rel=\"noopener\">PHP MacOS MAMP Command Line Debugging Alias Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcwmamppdft'>Previous relevant <a target=\"_blank\" title='Animated GIF Creation on Windows MAMP via PDF Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creation-on-windows-mamp-via-pdf-tutorial\/' rel=\"noopener\">Animated GIF Creation on Windows MAMP via PDF Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF Creation on Windows MAMP via PDF Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ag_win_more.jpg\" title=\"Animated GIF Creation on Windows MAMP via PDF Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF Creation on Windows MAMP via PDF Tutorial<\/p><\/div>\n<p>Today&#8217;s lesson, further to yesterday&#8217;s <a title='Animated GIF Creation on Windows MAMP Tutorial' href='#agifcwmampt'>Animated GIF Creation on Windows MAMP Tutorial<\/a> first day of Windows integration work with our Animated GIF Creator is &#8230;<\/p>\n<blockquote><p>\nTry not to rely on <a target=\"_blank\" title='PHP exec() method information' href='http:\/\/php.net\/manual\/en\/function.exec.php' rel=\"noopener\">exec<\/a> or shell_exec always, if there is a way to proceed using PHP native functionality\n<\/p><\/blockquote>\n<p>Is this a <i>doh!<\/i> moment, or is this on a case by case basis?  We&#8217;d say the latter, and it could be to do with what permissions your php.ini file specifies regarding this.<\/p>\n<p>No matter how we tried, we could not get a Windows command line command like &#8230;<\/p>\n<p><code><br \/>\nforfiles \/P \"[PathToFileBestGuess]\" \/S \/M \"[FileBaseName]\" \/C \u201ccmd \/c echo @path@fsize\" | find \"[FileSizeInBytes]\"<br \/>\n<\/code><\/p>\n<p> &#8230; to work out a file path when supplied a file base name and a file size and you call as above with starting folders.  That works well (for deriverability <font size=1>(if that is a word!)<\/font>) in the &#8220;cmd&#8221; window but not when called under the auspices of PHP exec or shell_exec.  It could be that you lose a lot of a Windows user environment when asking PHP to do some operating system work.<\/p>\n<p>Anyway, we don&#8217;t want to recommend any procedures that ask you to change php.ini in any way, and we&#8217;d much rather point you towards some PHP <a target=\"_blank\" title='PHP glob method information' href='http:\/\/php.net\/manual\/en\/function.glob.php' rel=\"noopener\"><i>glob<\/i><\/a> alternative ideas &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\nfunction scandir_through($dir, $bname, $bsize) { \/\/ thanks to https:\/\/www.php.net\/manual\/en\/function.glob.php<br \/>\n    $ds=substr((DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR),0,1);<br \/>\n    if (strpos(('!@' . strtoupper($dir)), '!@C:') !== false) { $dir=str_replace('\/','',$dir);  }<br \/>\n    if (substr(strrev($dir),0,1) == substr((DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR),0,1)) {<br \/>\n      $ds='';<br \/>\n    }<br \/>\n    $items = glob($dir . $ds . str_replace(' ','*',$bname));<br \/>\n<br \/>\n    for ($i = 0; $i &lt; count($items); $i++) {<br \/>\n        if (is_dir($items[$i])) {<br \/>\n            $add = glob($items[$i] . $ds . str_replace(' ','*',$bname));<br \/>\n            if (filesize($add) == $bsize) {<br \/>\n            \/\/echo $add;<br \/>\n            $items = array_merge($items, $add);<br \/>\n            } \/\/else {<br \/>\n            \/\/echo 'x' . $add . 'x';<br \/>\n            \/\/}<br \/>\n        }<br \/>\n    }<br \/>\n<br \/>\n    return $items;<br \/>\n}<br \/>\n<br \/>\nfunction ourshell_exec($onea, $twoa = NULL, $threea = NULL) {<br \/>\n   $folder='';<br \/>\n   $pattern='';<br \/>\n   $size='';<br \/>\n   $filesa=[];<br \/>\n   if (PHP_OS =='WINNT' || PHP_OS =='WIN32' || PHP_OS =='Windows' || (strpos(('~@!' . $onea), '~@!forfiles \/P \"') !== false && strpos(('~@!' . $onea), '\/M \"') !== false && strpos(('~@!' . $onea), 'find \"') !== false)) {<br \/>\n     if (strpos(('~@!' . $onea), '~@!forfiles \/P \"') !== false && strpos(('~@!' . $onea), '\/M \"') !== false && strpos(('~@!' . $onea), 'find \"') !== false) {<br \/>\n       $folder=explode('\"', explode('forfiles \/P \"', $onea)[1])[0] . substr(DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR, 0, 1);<br \/>\n       if (strpos($folder, ' ') !== false) {  $folder='\"' . $folder . '\"';  }<br \/>\n       $pattern=explode('\"', explode('\/M \"', $onea)[1])[0];<br \/>\n       if (strpos($pattern, ' ') !== false || substr(($folder . ' '),0,1) == '\"') {  $pattern='\"' . $pattern . '\"'; if (substr(($folder . ' '),0,1) != '\"') {  $folder='\"' . $folder . '\"';  }  }<br \/>\n       $size=explode('\"', explode('find \"', $onea)[1])[0];<br \/>\n       \/\/$basis=str_replace('\"\"','',$folder . str_replace(str_replace('\"','',explode('.',$pattern)[0]),'*',$pattern));<br \/>\n       $basis=str_replace('\"\"','',$folder . str_replace(str_replace('\"','',explode('.',$pattern)[0]),str_replace(' ','*',str_replace('\"','',explode('.',$pattern)[0])),$pattern));<br \/>\n<br \/>\n       if (strpos($basis, ' ') === false) { $basis=str_replace('\"','',$basis);  }<br \/>\n\/\/ echo \"swqzzui \" . str_replace('\"\"','',$folder . str_replace(str_replace('\"','',explode('.',$pattern)[0]),'*',$pattern)) . ' ... ' . $basis;<br \/>\n\/\/ exit;<br \/>\n       $filesa=scandir_through(str_replace('\"','',$folder), str_replace('\"','',$pattern), $size);<br \/>\n       if (sizeof($filesa) == 0) { return ''; }<br \/>\n       return $filesa[0];<br \/>\n<br \/> <br \/>\n        }<br \/>\n        }<br \/>\n       }<br \/>\n     }<br \/>\n   }<br \/>\n   return shell_exec($onea, $twoa, $threea);<br \/>\n}<br \/>\n<br \/>\nfunction rsearch($folder, $pattern, $size) { \/\/ thanks, anyway, to https:\/\/stackoverflow.com\/questions\/17160696\/php-glob-scan-in-subfolders-for-a-file<br \/>\n    $didea='';<br \/>\n    $outputa=[];<br \/>\n    $retz='';<br \/>\n    if (PHP_OS == \"Darwin\") {<br \/>\n<br \/>\n      \/\/file_put_contents(\"x.ksh\", \"find \" . $folder . \" -type f -name \\\"\" . $pattern . \"\\\" 2&gt; \/dev\/null -exec wc -c {} + | egrep '^ \" . $size . \" ' | sed '\/ \" . $size . \" \/s\/\/\/g'\");<br \/>\n      \/\/if ($folder == substr((DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR),0,1)) {<br \/>\n        $didea=shell_exec(\"find \\$HOME\/Downloads -type f -name \\\"\" . $pattern . \"\\\" 2&gt; \/dev\/null -exec wc -c {} + | egrep '^ \" . $size . \" ' | sed '\/ \" . $size . \" \/s\/\/\/g'\");<br \/>\n      \/\/file_put_contents(\"xx.ksh\", $didea);<br \/>\n        if ($didea != '') { return $didea; }<br \/>\n        $didea=shell_exec(\"find \" . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR  . \" -type f -name \\\"\" . $pattern . \"\\\" 2&gt; \/dev\/null -exec wc -c {} + | egrep '^ \" . $size . \" ' | sed '\/ \" . $size . \" \/s\/\/\/g'\");<br \/>\n      \/\/file_put_contents(\"xxx.ksh\", $didea);<br \/>\n        if ($didea != '') { return $didea; }<br \/>\n<br \/>\n        $xc=getenv('HOME');<br \/>\n      if ($xc == '') {<br \/>\n      $dirsa = glob('\/Users\/*', GLOB_ONLYDIR);<br \/>\n      for ($ia=0; $ia&lt;sizeof($dirsa); $ia++) {<br \/>\n      \/\/echo \"2:\" . $dirsa[$ia] . str_replace('\/\/','\/',DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR) . \"Downloads\";<br \/>\n   \/\/exit;<br \/>\n        if ($didea == '') {<br \/>\n         $didea=ourshell_exec(\"forfiles \/P \\\"\" . str_replace('\/\/','\/',$dirsa[$ia] . \"\/\") . \"Downloads\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd \/c echo @path@fsize | find \\\"\" . $size . \"\\\" 2&gt;&1\", $outputa, $retz);<br \/>\n       if ($didea != '') { return $didea; }<br \/>\n       }<br \/>\n      }<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n      } else {<br \/>\n        $didea=ourshell_exec(\"forfiles \/P \\\"\" . $xc . str_replace('\/\/','\/',DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR) . \"Downloads\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd \/c echo @path@fsize | find \\\"\" . $size . \"\\\" 2&gt;&1\", $outputa, $retz);<br \/>\n        if ($didea != '') { return $didea; }<br \/>\n      }<br \/>\n<br \/>\n      return shell_exec(\"find \" . $folder . \" -type f -name \\\"\" . $pattern . \"\\\" 2&gt; \/dev\/null -exec wc -c {} + | egrep '^ \" . $size . \" ' | sed '\/ \" . $size . \" \/s\/\/\/g'\");<br \/>\n    } else if (PHP_OS =='WINNT' || PHP_OS =='WIN32' || PHP_OS =='Windows') {<br \/>\n      $xc=getenv('HOMEDRIVE') . getenv('HOMEPATH');<br \/>\n      if ($xc == '') { $xc=getenv('USERPROFILE');  }<br \/>\n      $xc='';<br \/>\n      if ($xc == '') {<br \/>\n      $dirsa = glob(\"C:\\\\Users\\\\*\", GLOB_ONLYDIR);<br \/>\n      for ($ia=0; $ia&lt;sizeof($dirsa); $ia++) {<br \/>\n        if ($didea == '') {<br \/>\n         $didea=ourshell_exec(\"forfiles \/P \\\"\" . $dirsa[$ia] . \"\\\\Downloads\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd \/c echo @path@fsize | find \\\"\" . $size . \"\\\" 2&gt;&1\", $outputa, $retz);<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n        }<br \/>\n      }<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n      } else {<br \/>\n      $didea=ourshell_exec(\"forfiles \/P \\\"\" . $xc . str_replace('\/\/','\/',DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR) . \"Downloads\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd \/c echo @path@fsize | find \\\"\" . $size . \"\\\" 2&gt;&1\", $outputa, $retz);<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n      }<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n      $didea=ourshell_exec(\"forfiles \/P \\\"\" . $_SERVER['DOCUMENT_ROOT'] . \"\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd \/c echo @path@fsize\\\" | find \\\"\" . $size . \"\\\" 2&gt;&1\", $outputa);<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n      $didea=ourshell_exec(\"forfiles \/P \\\"%USERPROFILE%\" . str_replace('\/\/','\/',DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR) . \"Downloads\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd \/c echo @path@fsize | find \\\"\" . $size . \"\\\" 2&gt;&1\", $outputa, $retz);<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n      \/\/$didea=shell_exec('forfiles \/P C:' . substr(\"\\\\\",0,1) . 'Downloads \/S \/M * \/C \u201ccmd \/c if @fsize EQU ' . $size . ' if @file EQU ' . $pattern . \" echo @path\");<br \/>\n      \/\/if ($didea != '') { return $didea; }<br \/>\n      \/\/$didea=shell_exec('forfiles \/P C:' . substr(\"\\\\\",0,1) . ' \/S \/M * \/C \u201ccmd \/c if @fsize EQU ' . $size . ' if @file EQU ' . $pattern . \" echo @path 2&gt;nul\");<br \/>\n      $didea=ourshell_exec(\"forfiles \/P \\\"C:\" . substr(\"\\\\\",0,1) . \"\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd -\/c echo @path@fsize\\\" | find \\\"\" . $size . \"\\\" 2&gt;&1\");<br \/>\n      if ($didea != '') { return $didea; }<br \/>\n    }<br \/>\n\/\/  echo \"QQghfjhg\";<br \/>\n  \/\/echo \"forfiles \/P \\\"\" . $_SERVER['DOCUMENT_ROOT'] . \"\\\" \/S \/M \\\"\" . $pattern . \"\\\" \/C \\\"cmd \/c echo @path@fsize | find \\\"\" . $size . \"\\\" 2&gt;&1\";<br \/>\n\/\/  exit;<br \/>\n    \/\/$iti = new RecursiveDirectoryIterator($folder);<br \/>\n    \/\/foreach (new RecursiveIteratorIterator($iti) as $file) {<br \/>\n    \/\/foreach (glob($folder . $pattern) as $file) {<br \/>\n    \/\/     if (strpos($file , $pattern) !== false && filesize($file) == $size) {<br \/>\n    \/\/        return $file;<br \/>\n    \/\/     }<br \/>\n    \/\/}<br \/>\n    return '';<br \/>\n}<br \/>\n<br \/>\nif (isset($_GET['filename']) && isset($_GET['filesize']) && !isset($_GET['filepath'])) {<br \/>\n  if (file_exists(str_replace('+',' ',urldecode($_GET['filename'])))) {<br \/>\n    if (filesize(str_replace('+',' ',urldecode($_GET['filename']))) == $_GET['filesize']) {<br \/>\n      $filepath=rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . str_replace('+',' ',urldecode($_GET['filename']));<br \/>\n    }<br \/>\n  }<br \/>\n  if ($filepath == '') {<br \/>\n    $filepath = rsearch(DIRECTORY_SEPARATOR, str_replace('+',' ',urldecode($_GET['filename'])), $_GET['filesize']);<br \/>\n    \/\/echo $filepath;<br \/>\n    \/\/exit;<br \/>\n  }<br \/>\n  \/\/echo \"&lt;html&gt;&lt;body onload=\\\"if (window.parent) { if (parent.document.getElementById('path')) { if (parent.document.getElementById('path').value == '') { parent.document.getElementById('path').value='\" . explode(str_replace('+',' ',urldecode($_GET['filename'])), $filepath)[0] . \"'; } } }\\\"&gt;\" . $filepath . \"&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n  echo \"&lt;html&gt;&lt;body onload='if (window.parent) { if (parent.document.getElementById(\\\"path\\\")) { if (parent.document.getElementById(\\\"path\\\").value == \\\"\\\") { parent.document.getElementById(\\\"path\\\").value=\\\"\" . str_replace(\"\\\\\",\"\\\\\\\\\",explode(str_replace('+',' ',urldecode($_GET['filename'])), $filepath)[0]) . \"\\\"; } } }'&gt;&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n  exit;<br \/>\n} else if (isset($_GET['filename']) && isset($_GET['filesize']) && $_GET['filepath'] == '') {<br \/>\n  if (file_exists(str_replace('+',' ',urldecode($_GET['filename'])))) {<br \/>\n    if (filesize(str_replace('+',' ',urldecode($_GET['filename']))) == $_GET['filesize']) {<br \/>\n      $filepath=rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . str_replace('+',' ',urldecode($_GET['filename']));<br \/>\n    }<br \/>\n  }<br \/>\n  if ($filepath == '') {<br \/>\n    $filepath = rsearch(DIRECTORY_SEPARATOR, str_replace('+',' ',urldecode($_GET['filename'])), $_GET['filesize']);<br \/>\n  }<br \/>\n  \/\/echo \"&lt;html&gt;&lt;body onload=\\\"if (window.parent) { if (parent.document.getElementById('path')) { if (parent.document.getElementById('path').value == '') { parent.document.getElementById('path').value='\" . explode(str_replace('+',' ',urldecode($_GET['filename'])), $filepath)[0] . \"'; } } }\\\"&gt;\" . $filepath . \"&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n  echo \"&lt;html&gt;&lt;body onload='if (window.parent) { if (parent.document.getElementById(\\\"path\\\")) { if (parent.document.getElementById(\\\"path\\\").value == \\\"\\\") { parent.document.getElementById(\\\"path\\\").value=\\\"\" . str_replace(\"\\\\\",\"\\\\\\\\\",explode(str_replace('+',' ',urldecode($_GET['filename'])), $filepath)[0]) . \"\\\"; } } }'&gt;&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n  exit;<br \/>\n} else if (isset($_GET['filename']) && isset($_GET['filesize']) && isset($_GET['filepath'])) {<br \/>\n  $anyextrac='';<br \/>\n  if (substr(str_replace('+',' ',urldecode($_GET['filepath'])), -1, 1) != DIRECTORY_SEPARATOR) {<br \/>\n    $anyextrac=DIRECTORY_SEPARATOR;<br \/>\n  }<br \/>\n  \/\/echo \"&lt;html&gt;&lt;body onload=\\\"if (window.parent) { if (parent.document.getElementById('path')) { if (parent.document.getElementById('path').value == '') { parent.document.getElementById('path').value='\" . str_replace('+',' ',urldecode($_GET['filepath'])) . $anyextac . \"'; } } }\\\"&gt;\" . $filepath . \"&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n  echo \"&lt;html&gt;&lt;body onload='if (window.parent) { if (parent.document.getElementById(\\\"path\\\")) { if (parent.document.getElementById(\\\"path\\\").value == \\\"\\\") { parent.document.getElementById('path').value=\\\"\" . str_replace(\"\\\\\",\"\\\\\\\\\",str_replace('+',' ',urldecode($_GET['filepath'])) . $anyextac) . \"\\\"; } } }'&gt;&lt;\/body&gt;&lt;\/html&gt;\";<br \/>\n  exit;<br \/>\n}<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; in &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <font size=1>(that if you download to MAMP would best go to Document Root PHP\/animegif folder along with the wonderful <a target=\"_blank\" title='GIFEncoder.class.php' href='https:\/\/gist.github.com\/Xeoncross\/ecccb07454d0b69d9eba' rel=\"noopener\">GIFEncoder.class.php<\/a> &#8230; thanks)<\/font> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a><\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php-----------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php-----------GETME\" rel=\"noopener\">php_calls_pdfimages.php<\/a> <font size=1>(also a <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php\" rel=\"noopener\">standalone proposition<\/a>)<\/font><\/li>\n<\/ul>\n<p> &#8230; moving closer to a happy Windows setup.<\/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\/animated-gif-creation-on-windows-mamp-via-pdf-tutorial\/' rel=\"noopener\">Animated GIF Creation on Windows MAMP via PDF Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcwmampt'>Previous relevant <a target=\"_blank\" title='Animated GIF Creation on Windows MAMP Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creation-on-windows-mamp-tutorial\/' rel=\"noopener\">Animated GIF Creation on Windows MAMP Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF Creation on Windows MAMP Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/winag.jpg\" title=\"Animated GIF Creation on Windows MAMP Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF Creation on Windows MAMP Tutorial<\/p><\/div>\n<p>It was surprising today, finally getting around to testing Animated GIF creation on a local Windows (desktop operating system) MAMP environment, how much there was to do with the relationships amongst &#8230;<\/p>\n<ul>\n<li>string values and manipulations<\/li>\n<li>directory delimiters \\ for Windows and \/ for others<\/li>\n<li>string delimiters &#8221; versus &#8216; usage<\/li>\n<\/ul>\n<p>It wasn&#8217;t that we&#8217;ve left hardcodings in the PHP code.  We&#8217;d used a lot of <i>DIRECTORY_SEPARATOR<\/i> PHP global throughout.  But that is not the whole story because &#8230;<\/p>\n<ul>\n<li>usage like &#8230;<br \/>\n<code><br \/>\n  $varis = 'C:\\MAMP\\htdocs';<br \/>\n<\/code><br \/>\n &#8230; can cause problems whereas, counterintuitively &#8230;<\/li>\n<li>usage like &#8230;<br \/>\n<code><br \/>\n  $varis = \"C:\\\\MAMP\\\\htdocs\";<br \/>\n<\/code><br \/>\n &#8230; causes much less hassle<\/li>\n<\/ul>\n<p> &#8230; all stemming from the fact that the backslash \\ Windows directory delimiter is also the <a target=\"_blank\" title='Backslash escaping' href='https:\/\/stackoverflow.com\/questions\/8618374\/escaping-backslash-in-string-javascript' rel=\"noopener\">Javascript escaping character<\/a>.<\/p>\n<p>And so, for this first tranche of Windows related changes onto yesterday&#8217;s <a title='Animated GIF via PDF Input Tutorial' href='#agifpdfit'>Animated GIF via PDF Input Tutorial<\/a> work we have &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <font size=1>(that if you download to MAMP would best go to Document Root PHP\/animegif folder along with the wonderful <a target=\"_blank\" title='GIFEncoder.class.php' href='https:\/\/gist.github.com\/Xeoncross\/ecccb07454d0b69d9eba' rel=\"noopener\">GIFEncoder.class.php<\/a> &#8230; thanks)<\/font> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a><\/li>\n<li>further <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html------------------------------GETME\" rel=\"noopener\">tweaked<\/a> inhouse <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html------------------------------GETME\" rel=\"noopener\">client_browsing.htm<\/a> <font size=1>(also a <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.htm\" rel=\"noopener\">standalone proposition<\/a>)<\/font> to download to MAMP Document Root&#8217;s HTMLCSS subfolder<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php----------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php----------GETME\" rel=\"noopener\">php_calls_pdfimages.php<\/a> <font size=1>(also a <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php\" rel=\"noopener\">standalone proposition<\/a>)<\/font><\/li>\n<\/ul>\n<p> &#8230; now suiting download to Windows <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> (local Apache web server), around here using URLs such as <i>HTTP:\/\/localhost\/PHP\/animegif\/tutorial_to_animated_gif.php<\/i> whose Document Root around here is <i>C:\\MAMP\\htdocs<\/i><\/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\/animated-gif-creation-on-windows-mamp-tutorial\/' rel=\"noopener\">Animated GIF Creation on Windows MAMP Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifpdfit'>Previous relevant <a target=\"_blank\" title='Animated GIF via PDF Input Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-via-pdf-input-tutorial\/' rel=\"noopener\">Animated GIF via PDF Input Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF via PDF Input Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/pdf_to_ag.jpg\" title=\"Animated GIF via PDF Input Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF via PDF Input Tutorial<\/p><\/div>\n<p>As well as adding more of those dimension options as flagged at yesterday&#8217;s <a title='Animated GIF Dimensions Programmatic Help Tutorial' href='#agifdpht'>Animated GIF Dimensions Programmatic Help Tutorial<\/a>, today, the big job with our Animated GIF creator was to allow for &#8230;<\/p>\n<p><code><br \/>\nPDF input to Animated GIF output<br \/>\n<\/code><\/p>\n<p> &#8230; whether that be via &#8230;<\/p>\n<ul>\n<li>browsed for PDF file (from your local device file system) &#8230;<\/li>\n<li>textbox entry of a local device PDF absolute URL &#8230;<\/li>\n<li>textbox entry of a local device PDF file name processed via <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php---------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php---------GETME\" rel=\"noopener\">php_calls_pdfimages.php<\/a> <font size=1>(also a <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php\" rel=\"noopener\">standalone proposition<\/a>)<\/font> <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> local Apache\/PHP\/MySql web server&#8217;s document root ( ie. using a MAMP macOS URL HTTP:\/\/localhost:8888\/php_calls_pdfimages.php and may take you there ) &#8230;<\/li>\n<li>textbox entry of an RJM Programming web server PDF file name still processed via <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php---------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/php_calls_pdfimages.php---------GETME\" rel=\"noopener\">php_calls_pdfimages.php<\/a> <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> local Apache\/PHP\/MySql web server&#8217;s document root ( ie. using a MAMP macOS URL HTTP:\/\/localhost:8888\/php_calls_pdfimages.php and may take you there )<\/li>\n<\/ul>\n<p> &#8230; the &#8220;intranet feeling&#8221; needs of all those options, actually, being to do with how our favourite <a target=\"_blank\" title='ffmpeg' href='https:\/\/www.ffmpeg.org\/' rel=\"noopener\">ffmpeg<\/a> command line tool which helps here, does not exist up at the RJM Programming domain web server, but you are welcome to install it onto your local device along with &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> (so far only macOS catered for)<\/li>\n<li><a target=\"_blank\" title='Pdfimages' href='https:\/\/www.xpdfreader.com\/pdfimages-man.html' rel=\"noopener\">pdfimages<\/a><\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html-----------------------------GETME\" rel=\"noopener\">tweaked<\/a> inhouse <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html-----------------------------GETME\" rel=\"noopener\">client_browsing.htm<\/a> <font size=1>(also a <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.htm\" rel=\"noopener\">standalone proposition<\/a>)<\/font> to download to MAMP Document Root&#8217;s HTMLCSS subfolder<\/li>\n<\/ul>\n<p> &#8230; along with <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <font size=1>(that if you download to MAMP would best go to Document Root PHP\/animegif folder along with the wonderful <a target=\"_blank\" title='GIFEncoder.class.php' href='https:\/\/gist.github.com\/Xeoncross\/ecccb07454d0b69d9eba' rel=\"noopener\">GIFEncoder.class.php<\/a> &#8230; thanks)<\/font> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a>.<\/p>\n<p>As usual, when &#8220;intranet feeling&#8221; work is being done HTML iframe onload event logic is a crucial &#8220;traffic light&#8221; source of control of the workflow of the web application, and we leave you with two new such HTML iframe &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n&lt;iframe id=pdfaskfor onload=pdfmmcallol(this); style=display:none; src=\" . $ifo . \"\/php_calls_pdfimages.php&gt;&lt;\/iframe&gt;<br \/>\n&lt;iframe id=pdfsize onload=pdfsizemmcallol(this); style=display:none; src=.\/tutorial_to_animated_gif.php?infilegetsize=&gt;&lt;\/iframe&gt;<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; onload Javascript logic functions introduced to the tutorial_to_animated_gif.php code for this PDF work &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\nfunction pdfsizemmcallol(iois) {<br \/>\n  if (iois != null) {<br \/>\n    var aconto = (iois.contentWindow || iois.contentDocument);<br \/>\n    if (aconto != null) {<br \/>\n     if (aconto.document) { aconto = aconto.document; }<br \/>\n     if (aconto.body != null) {<br \/>\n       if (aconto.body.innerHTML.trim() != '') {<br \/>\n         var acontobodyinnerHTML=aconto.body.innerHTML;<br \/>\n         if (acontobodyinnerHTML.indexOf('#') != -1) {<br \/>\n           if (acontobodyinnerHTML.split('#')[0].indexOf('http') == 0) {<br \/>\n            \/\/alert('HeRe ' + '\" . $ifo . \"\/php_calls_pdfimages.php?inpath=' + encodeURIComponent(acontobodyinnerHTML.split('#')[0]) + '&xconvertthis=' + encodeURIComponent(acontobodyinnerHTML.split('#')[1]) + '&outprefix=IDEAS&pdfbighp=pdftohtml_' + Math.floor(Math.random() * 19876754) + '&sw=' + screen.width + '&delp=');<br \/>\n            document.getElementById('pdfaskfor').src='\" . $ifo . \"\/php_calls_pdfimages.php?inpath=' + encodeURIComponent(acontobodyinnerHTML.split('#')[0]) + '&xconvertthis=' + encodeURIComponent(acontobodyinnerHTML.split('#')[1]) + '&outprefix=IDEAS&pdfbighp=pdftohtml_' + Math.floor(Math.random() * 19876754) + '&sw=' + screen.width + '&delp=';<br \/>\n            return '';<br \/>\n           } else {<br \/>\n           \/\/alert(acontobodyinnerHTML);<br \/>\n           if (eval('' + acontobodyinnerHTML.split('#').length) == 2) {<br \/>\n           pdfjustpathv=pdfjustfile.split(acontobodyinnerHTML.split('#')[1])[0];<br \/>\n           pdfjustfile=acontobodyinnerHTML.split('#')[1];<br \/>\n           document.getElementById('slideshow').placeholder=pdfjustfile;<br \/>\n           document.body.style.cursor='progress';<br \/>\n           if (pdfjustpathv == '\" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . \"') {<br \/>\n            document.getElementById('pdfsize').src=document.getElementById('pdfsize').src.split('?')[0] + '?infilegetsize=' + encodeURIComponent('\" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . \"' + pdfjustfile) + '&infilepathdel=' + encodeURIComponent('\" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . \"');<br \/>\n           }<br \/>\n           } else {<br \/>\n           pdfjustfile=acontobodyinnerHTML.split('#')[1];<br \/>\n           pdfjustpathv=acontobodyinnerHTML.split('#')[2].split(pdfjustfile)[0];<br \/>\n           document.getElementById('slideshow').placeholder=pdfjustfile;<br \/>\n           document.body.style.cursor='progress';<br \/>\n           if (pdfjustpathv == '\" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . \"') {<br \/>\n            document.getElementById('pdfsize').src=document.getElementById('pdfsize').src.split('?')[0] + '?infilegetsize=' + encodeURIComponent('\" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . \"' + pdfjustfile) + '&infilepathdel=' + encodeURIComponent('\" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . \"');<br \/>\n           }<br \/>\n           }<br \/>\n           }<br \/>\n         }<br \/>\n         pdfjustsize=acontobodyinnerHTML.split('#')[0];<br \/>\n         \/\/document.getElementById('pdfaskfor').src='\" . $ifo . \"\/php_calls_pdfimages.php?filepath=&filesize=' + pdfjustsize  + '&filename=' + encodeURIComponent(pdfjustfile);<br \/>\n         document.getElementById('pdfaskfor').src='\" . $ifo . \"\/php_calls_pdfimages.php?inpath=' + encodeURIComponent(pdfjustpathv) + '&convertthis=' + encodeURIComponent(pdfjustfile) + '&outprefix=IDEAS&pdfbighp=pdftohtml_' + Math.floor(Math.random() * 19876754) + '&sw=' + screen.width + '&delp=';<br \/>\n       }<br \/>\n     }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n<br \/>\nfunction pdfmmcallol(iois) {<br \/>\n  if (iois != null) {<br \/>\n    var paconto = (iois.contentWindow || iois.contentDocument);<br \/>\n    if (paconto != null) {<br \/>\n     if (paconto.document) { paconto = paconto.document; }<br \/>\n     if (paconto.body != null) {<br \/>\n       if (iois.src.indexOf('?') == -1) {<br \/>\n         candopdf=true;<br \/>\n         pdfjustfile=paconto.getElementById('thewords').value;<br \/>\n         document.body.style.cursor='progress';<br \/>\n         \/\/document.getElementById('slideshow').placeholder=pdfjustfile;<br \/>\n       } else if (iois.src.indexOf('&') == -1) {<br \/>\n         pdfjustpath=paconto.getElementById('path');<br \/>\n         pdfjustsubmit=paconto.getElementById('mysbut');<br \/>\n         pdfjustform=paconto.getElementsByTagName('form')[0];<br \/>\n         paconto.getElementById('outpath').value='IDEAS';<br \/>\n         paconto.getElementById('dovideo').checked=false;<br \/>\n         paconto.getElementById('doag').checked=false;<br \/>\n         paconto.getElementById('thewords').value='' + decodeURIComponent(iois.src.split('thefilenameis=')[1].split('&')[0].split('#')[0]);<br \/>\n         \/\/paconto.getElementById('thewords').blur();<br \/>\n         \/\/alert('\/php_calls_pdfimages.php?filepath=&filesize=' + pdfjustsize + '&filename=' + iois.src.split('thefilenameis=')[1].split('&')[0].split('#')[0]);<br \/>\n         paconto.getElementById('gifif').src='\/php_calls_pdfimages.php?filepath=&filesize=' + pdfjustsize  + '&filename=' + iois.src.split('thefilenameis=')[1].split('&')[0].split('#')[0];<br \/>\n         if (pdfjustpath.value.trim() != '') {<br \/>\n           pdfjustpathv=pdfjustpath.value;<br \/>\n           pdfjustform.method='GET';<br \/>\n           pdfjustform.target='_self';<br \/>\n   \/\/alert('\/php_calls_pdfimages.php?inpath=' + encodeURIComponent(pdfjustpathv) + '&convertthis=' + encodeURIComponent(pdfjustfile) + '&outprefix=IDEAS&pdfbighp=pdftohtml_' + Math.floor(Math.random() * 19876754) + '&sw=' + screen.width + '&delp=');<br \/>\n           if (1 == 1) {<br \/>\n           document.getElementById('pdfaskfor').src='\" . $ifo . \"\/php_calls_pdfimages.php?inpath=' + encodeURIComponent(pdfjustpathv) + '&convertthis=' + encodeURIComponent(pdfjustfile) + '&outprefix=IDEAS&pdfbighp=pdftohtml_' + Math.floor(Math.random() * 19876754) + '&sw=' + screen.width + '&delp=';<br \/>\n           } else {<br \/>\n           pdfjustsubmit.click();<br \/>\n           }<br \/>\n         } else {<br \/>\n           setTimeout(postpdfcall, 3000);<br \/>\n         }<br \/>\n       } else {<br \/>\n         startlook='000';<br \/>\n         if (iois.src.indexOf('startlook=') != -1) { startlook=decodeURIComponent(iois.src.split('startlook=')[1].split('&')[0].split('#')[0]); }<br \/>\n   \/\/alert(startlook);<br \/>\n         newimgdo();<br \/>\n       }<br \/>\n     }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/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\/animated-gif-via-pdf-input-tutorial\/' rel=\"noopener\">Animated GIF via PDF Input Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifdpht'>Previous relevant <a target=\"_blank\" title='Animated GIF Dimensions Programmatic Help Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-dimensions-programmatic-help-tutorial\/' rel=\"noopener\">Animated GIF Dimensions Programmatic Help Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF Dimensions Programmatic Help Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/animated_gif_imensions_programmatical_assistance.gif\" title=\"Animated GIF Dimensions Programmatic Help Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF Dimensions Programmatic Help Tutorial<\/p><\/div>\n<p>Onto yesterday&#8217;s <a title='Animated GIF Text SVG Image Slide Tutorial' href='#agiftsvgist'>Animated GIF Text SVG Image Slide Tutorial<\/a>, today, we want to improve the Animated GIF dimensions issue, first by saying, the user should at least visit the dropdown to see, but given this may not happen, we want to help out in two ways &#8230;<\/p>\n<ol>\n<li>for HtTp and hTtP URL types pick out the 300,300 animated GIF dimension<\/li>\n<li>for hTTp URL types pick out the maximum dimensions on the dropdown<\/li>\n<\/ol>\n<p> &#8230; but we need to do a better job assessing some media data URI underlying image dimensions to place on that dropdown, as work for the future.<\/p>\n<p>Take a look at &#8230;<\/p>\n<p> &lt;?php echo &#8221;<br \/>\n<code><br \/>\nfunction postatend() {<br \/>\n    if (document.getElementById('selwhs')) {<br \/>\n     if (document.getElementById('selwhs').value == '') {<br \/>\n         var valas=document.getElementById('selwhs').innerHTML.split(' value=\\\"');<br \/>\n         var vmax='', ivmax=0;<br \/>\n         for (var ivalas=1; ivalas&lt;valas.length; ivalas++) {<br \/>\n           if (valas[ivalas].split('\\\"')[0].indexOf(',') != -1) {<br \/>\n            if (eval(eval(valas[ivalas].split('\\\"')[0].split(',')[0]) + eval(valas[ivalas].split('\\\"')[0].split(',')[1])) &gt; ivmax) {<br \/>\n               ivmax=eval(eval(valas[ivalas].split('\\\"')[0].split(',')[0]) + eval(valas[ivalas].split('\\\"')[0].split(',')[1]));<br \/>\n               vmax=valas[ivalas].split('\\\"')[0];<br \/>\n               document.getElementById('selwhs').value=vmax;<br \/>\n            }<br \/>\n           }<br \/>\n         }<br \/>\n         if (vmax != '') {   document.getElementById('selwhs').value=vmax;    setTimeout(postatend, 6000);  }<br \/>\n     }<br \/>\n    }<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; as our logic to start trying this out in <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a>.<\/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\/animated-gif-dimensions-programmatic-help-tutorial\/' rel=\"noopener\">Animated GIF Dimensions Programmatic Help Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agiftsvgist'>Previous relevant <a target=\"_blank\" title='Animated GIF Text SVG Image Slide Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-text-svg-image-slide-tutorial\/' rel=\"noopener\">Animated GIF Text SVG Image Slide Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF Text SVG Image Slide Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ag_links_text_svg.gif\" title=\"Animated GIF Text SVG Image Slide Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF Text SVG Image Slide Tutorial<\/p><\/div>\n<p>In the recent <a title='Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial' href='#agifsqrcwsurlt'>Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial<\/a> we surmised that &#8230;<\/p>\n<blockquote>\n<ol>\n<li>interactive entry of absolute URL starting with HtTp means you want a QR Code &#8230; and &#8230;<\/li>\n<li>interactive entry of absolute URL starting with hTtP means you want <font size=1>(to involve, along the line, creating an animated QR Code scenario)<\/font> a Webpage Screenshot<\/li>\n<\/ol>\n<\/blockquote>\n<p> &#8230; represented two interesting ways whereby an association between a webpage URL and image (animated GIF slide) data could happen.  But we forgot another one, that fact that <a target=\"_blank\" title='SVG text element information from W3schools' href='https:\/\/www.w3schools.com\/graphics\/svg_text.asp' rel=\"noopener\">&#8220;any text&#8221; can become SVG<\/a> and so can move on to be associated with an image (animated GIF slide) data.<\/p>\n<p>We&#8217;ve been hedging towards more useful ways for our animated GIFs to be &#8220;standalone teaching presentation&#8221; resources, and starting to be able to create these &#8230;<\/p>\n<ul>\n<li>black text<\/li>\n<li>white background<\/li>\n<li>linefeeds via <i>~~<\/i><\/li>\n<\/ul>\n<p> &#8230; new text based slide ideas, perhaps as explanatory &#8220;blurbs&#8221; between true image (and\/or webpage screenshot) based slides, so as to be &#8230; more &#8230; self &#8230; explanatory.<\/p>\n<p>User wise there are three ways to make this happen, the first of which has existed before today&#8217;s work &#8230;<\/p>\n<ul>\n<li>enter into an animated GIF slide textbox SVG that contains valid &#8220;text&#8221; SVG element data &#8230; or &#8230;<\/li>\n<li>enter the text you want into an animated GIF slide textbox <font size=1>(as you can see happening with <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ag_links_text_svg.gif\" rel=\"noopener\">today&#8217;s animated GIF tutorial picture<\/a>)<\/font> &#8230;<\/li>\n<li>for hTTp textbox entries, or via address bar &#8220;irefresh&#8221; argument URLs, append <i>++++++++<\/i><\/li>\n<\/ul>\n<p>This adds onto yesterday&#8217;s <a title='Animated GIF Link Image Slide Tutorial' href='#agiflist'>Animated GIF Link Image Slide Tutorial<\/a> with <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php--------------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php--------------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a>.<\/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\/animated-gif-text-svg-image-slide-tutorial\/' rel=\"noopener\">Animated GIF Text SVG Image Slide Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agiflist'>Previous relevant <a target=\"_blank\" title='Animated GIF Link Image Slide Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-link-image-slide-tutorial\/' rel=\"noopener\">Animated GIF Link Image Slide Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF Link Image Slide Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ag_links_qr_ss.gif\" title=\"Animated GIF Link Image Slide Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF Link Image Slide Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Animated GIF SVG Slide Tutorial' href='#agifsvgst'>Animated GIF SVG Slide Tutorial<\/a> had us &#8230;<\/p>\n<ul>\n<li>taking our animated GIF creator &#8230; starting with &#8230;<\/li>\n<li>SVG user entry functionality &#8230; then allow for &#8230;<\/li>\n<li>other image extraction from HTML user input via <i>+<\/i> &#8230; and today &#8230;<\/li>\n<li>&#8220;a&#8221; link to either &#8230;\n<ol>\n<li>QR Code &#8230; via <i>++<\/i> &#8230; or &#8230;<\/li>\n<li>Webpage Screenshot &#8230; via <i>++++<\/i><\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p>Do you see the pattern here?  If you have a favoured character (ie. &#8220;+&#8221; here) involved in a user functionality behaviour decision you can give each a &#8230;<\/p>\n<p><code><br \/>\npower of 2 number of characters<br \/>\n<\/code><\/p>\n<p> &#8230; (functionality meaning) and at the Javascript or PHP interpretive end of this arrangement you can know exactly what the user wants <font size=1>(in a way akin to how a bitmap can often be used)<\/font> &#8230; so far this Javascript working (and tailorable into the future with some tweaking) as per &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\nfunction srchrefit(inbg) {<br \/>\n  var outbg=inbg, outbis=[], ibis=0;<br \/>\n  var ourblankend=blankend;<br \/>\n  if (blankend != '') {<br \/>\n    if (eval(eval('' + ourblankend.length) % 2) == 1) {  \/\/ process img<br \/>\n       ourblankend=ourblankend.substring(1);<br \/>\n       outbg=outbg.replace(\/data\\:image\\\/svg\\+xml\/g, '!@#$%^&');<br \/>\n       outbg=outbg.replace(\/data\\:image\/g, ' SRC=\\\"  data:image');<br \/>\n       outbg=outbg.replace(\/\\!\\@\\#\\$\\%\\^\\&\/g, 'data:image\/svg+xml');<br \/>\n       outbis=outbg.split('&lt;img');<br \/>\n       console.log('outbis.length=' + outbis.length + ' and outbg=' + outbg);<br \/>\n       for (ibis=1; ibis&lt;eval('' + outbis.length); ibis++) {<br \/>\n         if (outbis[ibis].split('&gt;')[0].indexOf(' src=\\\"') != -1) {<br \/>\n          outbg=outbg.replace('&lt;img' + outbis[ibis].split('&gt;')[0], '&lt;img' + outbis[ibis].split('&gt;')[0].replace(' src=\\\"', ' SRC=\\\"  '));<br \/>\n        }<br \/>\n       }<br \/>\n   }<br \/>\n    if (eval('' + ourblankend.length) == 4) {  \/\/ process \"a\" links to Webpage Screenshot<br \/>\n       outbis=outbg.split('&lt;a');<br \/>\n       console.log('outbis.length=' + outbis.length);<br \/>\n       for (ibis=1; ibis&lt;eval('' + outbis.length); ibis++) {<br \/>\n         if (outbis[ibis].split('&gt;')[0].indexOf(' href=\\\"') != -1) {<br \/>\n           outbg=outbg.replace('&lt;a' + outbis[ibis].split('&gt;')[0], '&lt;a' + outbis[ibis].split('&gt;')[0].replace(' href=\\\"', ' SRC=\\\"    '));<br \/>\n         }<br \/>\n       }     \/\/ ... or ...<br \/>\n    } else if (eval('' + ourblankend.length) == 2) { \/\/ process \"a\" links to QR Code<br \/>\n       outbis=outbg.split('&lt;a');<br \/>\n       console.log('outbis.length=' + outbis.length);<br \/>\n       for (ibis=1; ibis&lt;eval('' + outbis.length); ibis++) {<br \/>\n         if (outbis[ibis].split('&gt;')[0].indexOf(' href=\\\"') != -1) {<br \/>\n           outbg=outbg.replace('&lt;a' + outbis[ibis].split('&gt;')[0], '&lt;a' + outbis[ibis].split('&gt;')[0].replace(' href=\\\"', ' SRC=\\\"   '));<br \/>\n         }<br \/>\n       }<br \/>\n    }<br \/>\n    return outbg;<br \/>\n  }<br \/>\n  return inbg;<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; in <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a> &#8230;<\/p>\n<p><a target=\"_blank\" title='Click for https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTp:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html+++' href='https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTp:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html+++' rel=\"noopener\"><font size=1>https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php<\/font><font color=blue>?irefresh=hTTp:\/\/[HtmlWebpageWithSVG].htm<sub>l+++<\/sub><\/font><\/a><\/p>\n<p> &#8230; which fills in the slide data (the link above hooking up to the web application featuring in <a target=\"_blank\" title='Circle Terminology in Mathematics Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/circle-terminology-in-mathematics-tutorial\/' rel=\"noopener\">Circle Terminology in Mathematics Tutorial<\/a> extracting SVG and hidden non-SVG images and one &#8220;a&#8221; link presented as a QR Code) &#8230;<\/p>\n<p><a target=\"_blank\" title='Click for https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTps:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html+++++' href='https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTps:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html+++++' rel=\"noopener\"><font size=1>https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php<\/font><font color=blue>?irefresh=hTTps:\/\/[HtmlWebpageWithSVG].htm<sub>l+++++<\/sub><\/font><\/a><\/p>\n<p> &#8230; which fills in the slide data (the link above hooking up to the web application featuring in <a target=\"_blank\" title='Circle Terminology in Mathematics Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/circle-terminology-in-mathematics-tutorial\/' rel=\"noopener\">Circle Terminology in Mathematics Tutorial<\/a> extracting SVG and hidden non-SVG images and one &#8220;a&#8221; link presented as a Webpage Screenshot).<\/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\/animated-gif-link-image-slide-tutorial\/' rel=\"noopener\">Animated GIF Link Image Slide Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifsvgst'>Previous relevant <a target=\"_blank\" title='Animated GIF SVG Slide Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-svg-slide-tutorial\/' rel=\"noopener\">Animated GIF SVG Slide Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF SVG Slide Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ag_svg.gif\" title=\"Animated GIF SVG Slide Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF SVG Slide Tutorial<\/p><\/div>\n<p>The PHP <a target=\"_blank\" title='GD and Image Functions' href='http:\/\/php.net\/manual\/en\/ref.image.php' rel=\"noopener\">GD<\/a> library we use to help create animated GIFs (along with a whole lot of other help, it goes without saying) is not into <i>vector graphics<\/i> which is what &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" title=\"Inkscape\" href='https:\/\/inkscape.org\/' rel=\"noopener\">Inkscape<\/a> &#8230; as a vector graphics editor &#8230; and &#8230;<\/li>\n<li><a target=\"_blank\" title='HTML svg information from w3schools' href='https:\/\/www.w3schools.com\/html\/html5_svg.asp' rel=\"noopener\">SVG<\/a> &#8230; ie. Scalable Vector Graphics<\/li>\n<\/ul>\n<p> &#8230; are <i>really<\/i> into <font size=1> &#8230; ooooohhh, aaaaahhhh &#8230;<\/font> but luckily for us, the great <a target=\"_blank\" title='ImageMagick software suite' href='https:\/\/www.imagemagick.org\/' rel=\"noopener\">ImageMagick<\/a> offers functionality to convert a SVG image file into a PNG image file, via &#8230;<\/p>\n<table>\n<tr>\n<th>Non Windows<\/th>\n<th>Windows<\/th>\n<\/tr>\n<tr>\n<td>convert infile.svg outfile.png<\/td>\n<td>magick.exe infile.svg outfile.png<\/td>\n<\/tr>\n<\/table>\n<p> &#8230; and we&#8217;re using that talent ImageMagick has to offer the user the chance, at any animated GIF slide textbox, the chance to enter <a target=\"_blank\" title='Javascript encodeURIComponent information from W3schools' href='https:\/\/www.w3schools.com\/jsref\/jsref_encodeuricomponent.asp' rel=\"noopener\">encodeURIComponent<\/a> and <a target=\"_blank\" title='Javascript window.btoa information from W3schools' href='https:\/\/www.w3schools.com\/jsref\/met_win_btoa.asp' rel=\"noopener\">window.btoa<\/a> sensitive entries whose (content) format could match (one of) &#8230;<\/p>\n<ul>\n<li>&lt;svg &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/svg&gt;<\/li>\n<li>&lt;SVG &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/SVG&gt;<\/li>\n<li>data:image\/svg+xml;utf8,&lt;svg &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/svg&gt;<\/li>\n<li>data:image\/svg+xml;utf8,&lt;SVG &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/SVG&gt;<\/li>\n<li>data:image\/svg+xml;base64,<font size=1>base 64 encoded( <\/font>&lt;svg &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/svg&gt; <font size=1>)<\/font><\/li>\n<li>data:image\/svg+xml;base64,<font size=1>base 64 encoded( <\/font>&lt;SVG &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/SVG&gt; <font size=1>)<\/font><\/li>\n<li><font size=1>base 64 encoded( <\/font>&lt;svg &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/svg&gt; <font size=1>)<\/font><\/li>\n<li><font size=1>base 64 encoded( <\/font>&lt;SVG &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/SVG&gt; <font size=1>)<\/font><\/li>\n<li><font size=1>encode URI encoded( <\/font>&lt;svg &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/svg&gt; <font size=1>)<\/font><\/li>\n<li><font size=1>encode URI encoded( <\/font>&lt;SVG &#8230; innerblah&gt;&#8230; blah blah blah &#8230;&lt;\/SVG&gt; <font size=1>)<\/font><\/li>\n<li>SVG media file relative or absolute URL (ie. ends in <i>.svg<\/i>)<\/li>\n<li>hTTp<sub>s<\/sub>:\/\/[HtmlWebpageWithSVG].htm<sub>l<\/sub><\/li>\n<li>at address bar involve a <font color=blue>get argument<\/font> whereby &#8230;<br \/>\n<blockquote><p>\n<a target=\"_blank\" title='Click for https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTp:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html' href='https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTp:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html' rel=\"noopener\"><font size=1>https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php<\/font><font color=blue>?irefresh=hTTp:\/\/[HtmlWebpageWithSVG].htm<sub>l<\/sub><\/font><\/a>\n<\/p><\/blockquote>\n<p> &#8230; which fills in the slide data (the link above hooking up to the web application featuring in <a target=\"_blank\" title='Circle Terminology in Mathematics Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/circle-terminology-in-mathematics-tutorial\/' rel=\"noopener\">Circle Terminology in Mathematics Tutorial<\/a>) &#8230;<\/p>\n<blockquote><p>\n<a target=\"_blank\" title='Click for https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTps:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html' href='https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php?irefresh=hTTps:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_terminology.html' rel=\"noopener\"><font size=1>https:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php<\/font><font color=blue>?irefresh=hTTps:\/\/[HtmlWebpageWithSVG].htm<sub>l<\/sub><\/font><\/a>\n<\/p><\/blockquote>\n<p> &#8230; which fills in the slide data and then goes and tries to create the resultant animated GIF (the link above hooking up to the web application featuring in <a target=\"_blank\" title='Circle Terminology in Mathematics Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/circle-terminology-in-mathematics-tutorial\/' rel=\"noopener\">Circle Terminology in Mathematics Tutorial<\/a>)\n<\/li>\n<\/ul>\n<p> &#8230; means by which a user can involve SVG input slides into their animated GIF creations in <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a> further to yesterday&#8217;s <a title='Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial' href='#agifsqrcwsurlt'>Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial<\/a>.<\/p>\n<p>Below is a new (PHP writes) Javascript iframe (<i>iois<\/i> object below) onload event function for recognizing <i>hTTp<sub>s<\/sub>:\/\/[HtmlWebpageWithSVG].htm<sub>l<\/sub><\/i> as above, and setting the iframe&#8217;s &#8220;src&#8221; attribute to its value &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n  var mm1='', mm2='', mm3='';<br \/>\n  var gdgebimm='', gtval='', onealready='';<br \/>\n  var tvals=[], thistval=0, thistdelim='', thistid='';<br \/>\n<br \/> <br \/>\nfunction latermm() {<br \/>\n   maybemore(mm3.value, mm2, mm3);<br \/>\n   mm1='';<br \/>\n   mm2='';<br \/>\n   mm3='';<br \/>\n}<br \/>\n<br \/>\nfunction svgmmcallol(iois, tid) {<br \/>\n    \/\/alert('TID=' + tid);<br \/>\n  var tval='', it=0, dgebimm='';<br \/>\n  var tis=document.getElementById(tid);<br \/>\n  thistid=tid;<br \/>\n  tvals=[];<br \/>\n  thistval=0;<br \/>\n  thistdelim='';<br \/>\n  if (iois != null) {<br \/>\n    var aconto = (iois.contentWindow || iois.contentDocument);<br \/>\n    if (aconto != null) {<br \/>\n     if (aconto.document) { aconto = aconto.document; }<br \/>\n     if (aconto.body != null) {<br \/>\n       tval=aconto.body.innerHTML;<br \/>\n    \/\/alert('Tval=' + tval);<br \/>\n  if (tval.indexOf(encodeURIComponent('data:image\/svg+xml')) != -1) {<br \/>\n    thistval=1;<br \/>\n    tvals=tval.split(encodeURIComponent('data:image\/svg+xml'));<br \/>\n    thistdelim=encodeURIComponent('data:image\/svg+xml');<br \/>\n    \/\/alert('thistdeliM=' + thistdelim);<br \/>\n<br \/> <br \/>\n    tval='data:image\/svg+xml' + decodeURIComponent(tvals[thistval].split(String.fromCharCode(34))[0].split(String.fromCharCode(39))[0].split(')')[0].split('&')[0].split('&gt;')[0]);<br \/>\n    \/\/alert('tvAl=' + tval);<br \/>\n    \/\/alert('tId=' + tid);<br \/>\n<br \/>\n    mm1=tval;<br \/>\n    mm2=tid;<br \/>\n    mm3=document.getElementById(tid.replace(\/^slideshow1$\/g,'slideshow'));<br \/>\n    dgebimm='&lt;iframe style=display:none; onload=mmcallol(this); src=\\\"' + '\/PHP\/fgc\/index.php?askfor=' + encodeURIComponent(tval) + '\\\"&gt;&lt;\/iframe&gt;';<br \/>\n    if (eval('' + dgebimm.length) &gt; 800) {<br \/>\n    document.getElementById('myaskfor').value=tval;<br \/>\n    document.getElementById('saskfor').click();<br \/>\n    } else {<br \/>\n    document.getElementById('mmcall').innerHTML=dgebimm;<br \/>\n    }<br \/>\n    \/\/setTimeout(latermm, 9000);<br \/>\n    return '';<br \/>\n  } else if (tval.indexOf('data:image\/svg+xml') != -1) {<br \/>\n    thistval=1;<br \/>\n    tvals=tval.split('data:image\/svg+xml');<br \/>\n    thistdelim='data:image\/svg+xml';<br \/>\n    tval='data:image\/svg+xml' + tvals[thistval].split(String.fromCharCode(34))[0].split(String.fromCharCode(39))[0].split(')')[0].split('&')[0].split('&gt;')[0];<br \/>\n<br \/>\n    mm1=tval;<br \/>\n    mm2=tid;<br \/>\n    mm3=document.getElementById(tid.replace(\/^slideshow1$\/g,'slideshow'));<br \/>\n    dgebimm='&lt;iframe style=display:none; onload=mmcallol(this); src=\\\"' + '\/PHP\/fgc\/index.php?askfor=' + encodeURIComponent(tval) + '\\\"&gt;&lt;\/iframe&gt;';<br \/>\n    if (eval('' + dgebimm.length) &gt; 800) {<br \/>\n    document.getElementById('myaskfor').value=tval;<br \/>\n    document.getElementById('saskfor').click();<br \/>\n    } else {<br \/>\n    document.getElementById('mmcall').innerHTML=dgebimm;<br \/>\n    }<br \/>\n    \/\/setTimeout(latermm, 9000);<br \/>\n    return '';<br \/>\n  } else if (tval.indexOf(encodeURIComponent('&lt;svg')) != -1 || tval.indexOf(encodeURIComponent('&lt;SVG')) != -1) {<br \/>\n    thistval=1;<br \/>\n    if (tval.indexOf(encodeURIComponent('&lt;svg')) != -1) {<br \/>\n    tvals=tval.split(encodeURIComponent('&lt;svg'));<br \/>\n    thistdelim=encodeURIComponent('&lt;svg');<br \/>\n    tval='data:image\/svg+xml;utf8,&lt;svg' + decodeURIComponent(tvals[thistval].split(encodeURIComponent('&lt;\/svg&gt;'))[0]) + '&lt;\/svg&gt;';<br \/>\n    } else {<br \/>\n    tvals=tval.split(encodeURIComponent('&lt;SVG'));<br \/>\n    thistdelim=encodeURIComponent('&lt;SVG');<br \/>\n    tval='data:image\/svg+xml;utf8,&lt;SVG' + decodeURIComponent(tvals[thistval].split(encodeURIComponent('&lt;\/SVG&gt;'))[0]) + '&lt;\/SVG&gt;';<br \/>\n    }<br \/>\n    mm1=tval;<br \/>\n    mm2=tid;<br \/>\n    mm3=document.getElementById(tid.replace(\/^slideshow1$\/g,'slideshow'));<br \/>\n    dgebimm='&lt;iframe style=display:none; onload=mmcallol(this); src=\\\"' + '\/PHP\/fgc\/index.php?askfor=' + encodeURIComponent(tval) + '\\\"&gt;&lt;\/iframe&gt;';<br \/>\n    if (eval('' + dgebimm.length) &gt; 800) {<br \/>\n    document.getElementById('myaskfor').value=tval;<br \/>\n    document.getElementById('saskfor').click();<br \/>\n    } else {<br \/>\n    document.getElementById('mmcall').innerHTML=dgebimm;<br \/>\n    }<br \/>\n    \/\/setTimeout(latermm, 9000);<br \/>\n    return '';<br \/>\n  } else if (tval.indexOf(window.btoa('&lt;svg')) != -1 || tval.indexOf(window.btoa('&lt;SVG')) != -1) {<br \/>\n    thistval=1;<br \/>\n    if (tval.indexOf(window.btoa('&lt;svg')) != -1) {<br \/>\n    tvals=tval.split(window.btoa('&lt;svg'));<br \/>\n    thistdelim=window.btoa('&lt;svg');<br \/>\n    tval='data:image\/svg+xml;base64,' + window.btoa('&lt;svg') + tvals[thistval].split(window.btoa('&lt;\/svg&gt;'))[0] + window.btoa('&lt;\/svg&gt;');<br \/>\n    } else {<br \/>\n    tvals=tval.split(window.btoa('&lt;SVG'));<br \/>\n    thistdelim=window.btoa('&lt;SVG');<br \/>\n    tval='data:image\/svg+xml;base64,' + window.btoa('&lt;SVG') + tvals[thistval].split(window.btoa('&lt;\/SVG&gt;'))[0] + window.btoa('&lt;\/SVG&gt;');<br \/>\n    }<br \/>\n    mm1=tval;<br \/>\n    mm2=tid;<br \/>\n    mm3=document.getElementById(tid.replace(\/^slideshow1$\/g,'slideshow'));<br \/>\n    dgebimm='&lt;iframe style=display:none; onload=mmcallol(this); src=\\\"' + '\/PHP\/fgc\/index.php?askfor=' + encodeURIComponent(tval) + '\\\"&gt;&lt;\/iframe&gt;';<br \/>\n    if (eval('' + dgebimm.length) &gt; 800) {<br \/>\n    document.getElementById('myaskfor').value=tval;<br \/>\n    document.getElementById('saskfor').click();<br \/>\n    } else {<br \/>\n    document.getElementById('mmcall').innerHTML=dgebimm;<br \/>\n    }<br \/>\n    \/\/setTimeout(latermm, 9000);<br \/>\n    return '';<br \/>\n  } else if (tval.toLowerCase().indexOf('&lt;svg') != -1) {<br \/>\n    if (tval.indexOf('&lt;svg') != -1) {<br \/>\n    thistdelim='&lt;svg';<br \/>\n    tval='data:image\/svg+xml;utf8,&lt;svg' + tvals[thistval].split('&lt;\/svg&gt;')[0] + '&lt;\/svg&gt;';<br \/>\n    } else {<br \/>\n    thistdelim='&lt;SVG';<br \/>\n    tval='data:image\/svg+xml;utf8,&lt;SVG' + tvals[thistval].split('&lt;\/SVG&gt;')[0] + '&lt;\/SVG&gt;';<br \/>\n    }<br \/>\n    \/\/alert('Thistdelim=' + thistdelim);<br \/>\n    tvals=tval.split('&lt;svg');<br \/>\n    thistval=1;<br \/>\n    \/\/alert('1:tval=' + tval);<br \/>\n    mm1=tval;<br \/>\n    mm2=tid;<br \/>\n    mm3=document.getElementById(tid.replace(\/^slideshow1$\/g,'slideshow'));<br \/>\n    dgebimm='&lt;iframe style=display:none; onload=mmcallol(this); src=\\\"' + '\/PHP\/fgc\/index.php?askfor=' + encodeURIComponent(tval) + '\\\"&gt;&lt;\/iframe&gt;';<br \/>\n    \/\/alert('2:tval=' + tval);<br \/>\n    if (eval('' + dgebimm.length) &gt; 800) {<br \/>\n \/\/alert('0: ' + dgebimm);<br \/>\n    document.getElementById('myaskfor').value=tval;<br \/>\n    document.getElementById('saskfor').click();<br \/>\n    } else {<br \/>\n \/\/alert('1: ' + dgebimm);<br \/>\n    document.getElementById('mmcall').innerHTML=dgebimm;<br \/>\n    }<br \/>\n    \/\/alert('3:tval=' + tval);<br \/>\n    \/\/setTimeout(latermm, 9000);<br \/>\n    return '';<br \/>\n  }<br \/>\n     }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/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\/animated-gif-svg-slide-tutorial\/' rel=\"noopener\">Animated GIF SVG Slide Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifsqrcwsurlt'>Previous relevant <a target=\"_blank\" title='Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-slide-qr-code-and-webpage-screenshot-url-tutorial\/' rel=\"noopener\">Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/animegif_webpage_screenshot.jpg\" title=\"Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial\"  style=\"float:left;\"  \/><\/a><p class=\"wp-caption-text\">Animated GIF Slide QR Code and Webpage Screenshot URL Tutorial<\/p><\/div>\n<p>We wanted, today, to channel the <font size=1>(cruel might say &#8220;warped&#8221;)<\/font> thinking behind the recent URL &#8230;<\/p>\n<ol>\n<li>interactive entry of absolute URL starting with HtTp means you want a QR Code &#8230; and &#8230;<\/li>\n<li>interactive entry of absolute URL starting with hTtP means you want <font size=1>(to involve, along the line, creating an animated QR Code scenario)<\/font> a Webpage Screenshot<\/li>\n<\/ol>\n<p> &#8230; we last talked about at <a target=\"_blank\" title='Circular Text Around Media Animated QR Code Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/circular-text-around-media-animated-qr-code-tutorial' rel=\"noopener\">Circular Text Around Media Animated QR Code Tutorial<\/a>, because we feel this is actually a good inhouse idea to hang on to as a principle.  Why?!  <a target=\"_blank\" title='?' href='https:\/\/www.youtube.com\/watch?v=OhdvhVX0Dfo&#038;themeRefresh=1' rel=\"noopener\">Glad you asked.<\/a>  It is another way to &#8230;<\/p>\n<ul>\n<li>end up with an image &#8230;<\/li>\n<li>from a<font size=1>ny old absolute <i style='color:darkgray;'>(but we have not yet researched ? and &#038; get argument(s) regarding)<\/i><\/font> URL<\/li>\n<\/ul>\n<p> &#8230; really suiting the purpose of today&#8217;s work, that being the integration of this idea into <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------------------------GETME' rel=\"noopener\">our changed<\/a> PHP <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------------------------GETME' rel=\"noopener\">tutorial_to_animated_gif.php<\/a> <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' rel=\"noopener\">inhouse animated GIF creator web application<\/a> we last talked about at <a target=\"_blank\" title='PdfImages PDF Output Media Zipping via PHP Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/pdfImages-pdf-output-media-zipping-via-php-tutorial\/' rel=\"noopener\">PdfImages PDF Output Media Zipping via PHP Tutorial<\/a>.  After all, an animated GIF slide is also an image, and it could be used in this way, to &#8230;<\/p>\n<ol>\n<li>create animated GIF of QR Code means by which a smart device user using their Camera might navigate to a series of interesting webpage(s) &#8230; or &#8230;<\/li>\n<li>create animated GIF of &#8220;current <font size=1>snapshot<\/font> looks&#8221; of a series of URLs of interest <font size=1>(with even more currency than Google Earth shows your place!)<\/font><\/li>\n<\/ol>\n<p>It might be you design an animated GIF chapter of slides and always want to follow it up with a &#8220;further reading&#8221; webpage you could present as a QR Code or Webpage Screenshot.<\/p>\n<p>Anyway, at the <font color=purple>&#8220;onblur&#8221; event Javascript function<\/font> logic <font color=blue>we intervened<\/font> to end up with an image\/png data URI substitute for the HtTp or hTtP URL the user enters to re-enter the normal animated GIF image definition workflow of the animated GIF creator &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n  var mm1='', mm2='', mm3='';<br \/>\n<br \/> <br \/>\nfunction latermm() {<br \/>\n   maybemore(mm3.value, mm2, mm3);<br \/>\n   mm1='';<br \/>\n   mm2='';<br \/>\n   mm3='';<br \/>\n}<br \/>\n<br \/>\n<font color=purple>function maybemore(tval, tid, tis) {<\/font><br \/>\n  var newi=null, fo=null;<br \/>\n  var inmb=0;<br \/>\n  <font color=blue>if (tval.indexOf('HtTp') == 0) {<br \/>\n    mm1=tval;<br \/>\n    mm2=tid;<br \/>\n    mm3=tis;<br \/>\n    document.getElementById('mmcall').innerHTML='&lt;iframe style=display:none; onload=mmcallol(this); src=\\\"' + '\/PHP\/fgc\/index.php?justcontent=&askfor=' + encodeURIComponent(document.URL.split('\/\/')[0] + '\/\/chart.googleapis.com\/chart?chs=300x300&cht=qr&chl=' + encodeURIComponent('http' + encodeURIComponent(tval.substring(4).replace('S:','s:'))) + '&choe=UTF-8') + '\\\"&gt;&lt;\/iframe&gt;';<br \/>\n    \/\/setTimeout(latermm, 9000);<br \/>\n    return '';<br \/>\n  } else if (tval.indexOf('hTtP') == 0) {<br \/>\n    mm1=tval;<br \/>\n    mm2=tid;<br \/>\n    mm3=tis;<br \/>\n    document.getElementById('mmcall').innerHTML='&lt;iframe style=display:none; onload=mmcallol(this); src=\\\"' + '\/PHP\/fgc\/index.php?askfor=&askyou=' + encodeURIComponent('http' + tval.substring(4).replace('S:','s:')) + '\\\"&gt;&lt;\/iframe&gt;';<br \/>\n    \/\/setTimeout(latermm, 9000);<br \/>\n    return '';<br \/>\n  }<\/font><br \/>\n\/\/ rest of maybemore follows ...<br \/>\n<font color=purple>}<\/font><br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; to help introduce this new animated GIF slide functionality arrangement.<\/p>\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='#d59257' onclick='var dv=document.getElementById(\"d59257\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/slide\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d59257' 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='#d59274' onclick='var dv=document.getElementById(\"d59274\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/btoa\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d59274' 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='#d59312' onclick='var dv=document.getElementById(\"d59312\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/character\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d59312' 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='#d59324' onclick='var dv=document.getElementById(\"d59324\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/svg\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d59324' 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='#d59335' onclick='var dv=document.getElementById(\"d59335\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/dimensions\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d59335' 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='#d59338' onclick='var dv=document.getElementById(\"d59338\"); 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='d59338' 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='#d59356' onclick='var dv=document.getElementById(\"d59356\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/windows\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d59356' 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='#d59363' onclick='var dv=document.getElementById(\"d59363\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/exec\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d59363' 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='#d68450' onclick='var dv=document.getElementById(\"d68450\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/debug\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d68450' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>To be interested in PHP programming that gets uploaded to a public website probably means you&#8217;ll want a local (in our case, Apache) web server like the great MAMP (as with Animated GIF Creation on Windows MAMP via PDF Tutorial) &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/php-macos-mamp-command-line-debugging-alias-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":[12,29,37],"tags":[71,85,233,234,305,307,2178,744,932,1981,997,1138,1319,5198],"class_list":["post-68450","post","type-post","status-publish","format-standard","hentry","category-elearning","category-operating-system","category-tutorials","tag-alias","tag-apache","tag-command","tag-command-line","tag-debug","tag-debugging","tag-macos","tag-mamp","tag-php","tag-profile","tag-programming","tag-shell","tag-tutorial","tag-zsh"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/68450"}],"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=68450"}],"version-history":[{"count":12,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/68450\/revisions"}],"predecessor-version":[{"id":68463,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/68450\/revisions\/68463"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=68450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=68450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=68450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}