myphoto.php - Place this file in /flashservices/services/ directory.

Download the source directly.

Read the comments in the file for instructions, tips and explanations. -Rob

<?
/* 
   myphoto.php
   Version 1.0 - 03/03/03 by Robert M. Hall
   rhall-amfphp@impossibilities.com
   http://www.impossibilities.com/blog/
   
   This file replicates all the functionality of the Coldfusion MX Component: myphoto.cfc included
   with the myPhoto project on the Macromedia DesDev Resource Kit Vol. 2
    
   This PHP source requires the AMF-PHP framework available from http://amfphp.sourceforge.net/
   When this was written I checked out from the CVS all the latest patches/updates since the
   project is in active development. Browse the CVS of the project here:
   http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/amfphp/sources/flashservices/
   
   Drop this file in the /flashservices/services/ directory
   It must retain the name myphoto.php to match the class name inside of it.
   
   Make the following changes to the ActionScript in frame 1 main timeline of the myPhoto.fla source.
   
   Line 4: #include "NetDebug.as"
   I added this line so that i could use the NetConnection Debugger as I was working on this.
   you might as well add it to. If you havent learned to use the Netconnection Debugger yet, try it out now.
   It will save you a truck load of time when working on Remoting projects...trust me.
   
   The remaining line #'s are based on the fact that you added the above Line 4, if you didn't
   Just add an extra comment line to compensate or subtract 1 below to find the following lines.
   
   Line 9: var GATEWAY_URL = "http://www.example.com/flashservices/discovery.php";
   This line used to have a port # and just the regular gateway connection. 
   To allow the AMF-PHP framework to function, you must point your gateway to the discovery.php file in the
   root of the flashservices directory.
   
   Line 79: var service = con.getService("myphoto", resultHandler);
   Change the "com.macromedia.apps.myphoto" to simply "myphoto" to find the correct PHP based service, which
   happens to be this PHP file.
   
   Line 151: var service = con.getService("myphoto", resultHandler);
   Ditto to the same change above. We just want to point to the myphoto.php service.
   
   Line 154: service.filelist("/");  
   Just a couple minor changes from the original so that we pass a backslash for Unix based directories. 
   Also the service    was originally just list, which is a reserved word in PHP and ActionScript so I
   renamed this to filelist.If you are running on a windows based machine you might need to play with
   this and the filelist function below in this source to accomodate the difference between platforms.
   I was too lazy to write code to automatically determine and account for this.
   
   Line 158: service.filelist(branch.getData());
   Similar to the change on Line 154. I changed list to filelist to accomodate the reserved word in PHP and ActionScript.
  
   Thats it folks. Thats all you need to change. Best of luck. If you have questions I'll do my best to answer,
   but you will probably find support on AMF-PHP itself by going directly to the source of the project:
   http://amfphp.sourceforge.net/
   or visit the following thread at: http://www.flash-db.com/Board/index.php?board=4;action=display;threadid=3163
   Where the intitial discussion of Musicmans version began.
   
   If you clean anything up in here or make it more efficient/improvements, drop me a line.
   
   -Rob  
   
*/
class myphoto {
    function myphoto() {
    // method table
    
    $this->methodTable = array(
        "filelist" => array(
        "description" => "Get a list of all the images and directories in either the root or the specified directory.",
        "access" => "remote",
        "roles" => "role, filelist",
        "returntype" => "array",
        "arguments" => array ("arg1")
        ),
        "getRootUrl" => array(
        "description" => "Get the root image URL.",
        "access" => "remote",
        "roles" => "role, getRootUrl",
        "returntype" => "string",
        "arguments" => array ("arg1")
        ),
        "getRootDirectory" => array(
        "description" => "Get the root directory.",
        "access" => "remote",
        "roles" => "role, getRootDirectory",
        "returntype" => "string",
        "arguments" => array ("arg1")
        )
   );
}
// myphoto methods
// getRootDirectory returns the root directory from where the files/pictures should be served/queried. 
// adjust this value accordingly for your web server and platform requirements
    function getRootDirectory() {
        return "/absolutepathonyourservergoeshere/html/myphotos";
    }
// Ditto here but for the absolute URL where the photos can be found
    function getRootUrl() {
        return "http://www.yourdomainnamegoeshere.com/path/to/myphotos";
    }
// filelist returns the directory names and files for the tree menu. I was lazy and could have made a global below for finalPath
// but just didnt...go figure...also in the original ColdFusion Component this was called list, but list is a reserved word in PHP and in ActionScript
// so I changed it
    function filelist($path) {
        $files = array();
        $finalPath="";
            // Change your paths here to match those found in the getRootDirectory function above...again I could have made a global..sloppy me...
            if ($path) {
                $finalPath="/absolutepathonyourservergoeshere/html/myphotos/".$path;
            } else {
                $finalPath="/absolutepathonyourservergoeshere/html/myphotos/";
            }
      // This function checks to make sure the values returned don't include the thumbnails, scaled, or hidden directories like in the origial .cfc
      // I also added the code to strip out root and up one-level . and .. notation so the tree will look nice. I also strip out .swf, .html, and .php files
      // so I could have other things tucked in those folders and not have them show up in the tree. A great addition to this file would be to have a _comment file
      // added to each and have it displayed along side the picture when its displayed. That will be my next modification. it would be easy to build the array below
      // that gets passed back, to include this information.    
     function checkfiles($filename) {
             $passed TRUE;
              if ( ($filename == "thumbnails") || ($filename == "scaled") || ($filename == "hidden") || ($filename=="..") || ($filename==".") || (strstr($filename".swf")) || (strstr($filename".html")) || (strstr($filename".php"))) {
          $passed FALSE;
               }
              return $passed;
      }
        // Do the actual reading of the directories and files for the tree
        $dir opendir($finalPath);
        $stuff readdir($dir);
            while (false !== ($stuff readdir($dir))) {
                if (checkfiles($stuff)) {
                    if ($path) {
                       $files[]=$stuff;
                     }
                }
      }
    // Close the directory handle
    closedir($dir);      
    // Pass back the array to the AMF-PHP service
    return $files;
    
// end of filelist function      
}     
// End if myphoto class 
}
?>