Ho to get bytesTotal from a dynamic generated content in PHP

Think you want to load from Flash some dynamically generated images from PHP (maybe using GD..), or also some else dynamic content..
Think at this simple code:

/**** MovieClip Loader listener ****/
loaderListener = {
	onLoadStart : function(){
		trace('load started!');
		trace(" ----------------------------------- ")
	},
	onLoadProgress : function(target, bLoaded, bTotal){
		trace(bLoaded + "/" + bTotal)
	},
	onLoadComplete : function(target){
		trace(" ----------------------------------- ")
		trace("complete: " + target.getBytesTotal());
		trace(" ----------------------------------- ")
	}
}

// I just add the rand variable to prevent caching...
movie_path = "http://local/ob_start.php?file=C:/DSCF0182.JPG&rand=" + new Date().getTime()
var mcLoader = new MovieClipLoader()
mcLoader.loadClip(movie_path, loader)
mcLoader.addListener( loaderListener )

Now, if your PHP code is written in this way (just a image copy and resize using the GD 2.x library):


<?php
// Get the required image from GET
$image = $_GET['file'];$size = getimagesize($image);
// create an empty image and copy the original
$dst_img = imagecreatetruecolor($size[0]/4, $size[1]/4);
$src_img = imagecreatefromjpeg($image);
// resize image
imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $size[0]/4, $size[1]/4, $size[0], $size[1]);
// start output content
header("Content-type: image/jpeg");
// display the image
imagejpeg($dst_img, "", 80);
?>

You will be noticed that the bytesTotal variable in flash is always ‘0’!
This could be a problem if you want to use any kind of graphic preloader for this such of things…
However with some little more code it’s always possible to get in flash (and not only from flash) the exact content bytes lenght.
Try now this:

<?php
// Turn on output buffering
ob_start();
// Get the required image from GET
$image = $_GET['file'];
$size = getimagesize($image);
// create an empty image and copy the original
$dst_img = imagecreatetruecolor($size[0]/4, $size[1]/4);
$src_img = imagecreatefromjpeg($image);
// resize image
imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $size[0]/4, $size[1]/4, $size[0], $size[1]);
// start output content
header("Content-type: image/jpeg");
// display the image
imagejpeg($dst_img, "", 80);
// send the content lenght to output
header("Content-Length: ". ob_get_length());
// flush the output
ob_end_flush();
?>

AMFPHP & NetConnection Call.BadVersion

If you used at least one time AMFPHP you probably had already encountered the NetConnection Call.BadVersion message.
This seems to be a very common issue for anyone who’s beginnig to develop with Flash Remoting in PHP. In fact I often read message from guys who had this this error while trying to use AMFPHP remoting.
The reasons of this error are often the same or at least similar, for this reason I thought to create a page on the wiki space about this problem.
This is a list of all the common situation where the Call.BadVersion appears. I get most of the poits reading people’s posts and I hope you will contribute to create the most comprehensive list about this common problem.

Other useful resources about AMFPHP:
AMFPHP installation guide
Flash-DB tutorial
Installation tips on amfphp.org

Link: http://www.sephiroth.it/phpwiki/index.php/Call.BadVersion