[PHP] Generating images on the fly, linking via symlink?

2005-09-03 Thread Dan Trainor

Hello, all -

This is a question that could depend on a completely different (yet, 
relayed) subject, so I'm sending this email to both php-general@ and 
[EMAIL PROTECTED]  I thank you in advance for your understanding.


I am currently generating some images on the fly using some of PHP's 
image generation and rendering functions.  I'm having loads of success, 
and like the results that I see.


What I'd like this script to do is, to create symlinks to the origional 
image, and then when the script is done running, the symlinks are 
deleted.  Basically trying to make it so that the origional image is not 
known to the client or browser.


So I'm taking, say, image1.jpg.  I'm creating a symlink via:

$linkname = md5(rand());

or something similar.  I'd then like to return $linkname to the client 
or browser.  Then, when the browser has completed rendering the page to 
the client or browser, the symlink is then deleted.


What I'm curious as to right now is if I do this, the client will see 
the link to $linkname via HTML's img src= specification.  What happens 
if this is sent to the client or browser, and the symlink is deleted 
immediately after the name is sent to the client or browser?  Would the 
web server (in this case, Apache) cache the image in memory until the 
client has downloaded said image, and then delete it from memory when 
the page is done rendering or being sent?  Will PHP totally disregard 
the web server's request to hold the image, and render nothing to the 
browser?  This is something I'm confused about.


Thanks!
-dant

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Generating images on the fly, linking via symlink?

2005-09-03 Thread Dan Trainor

Dan Trainor wrote:

Hello, all -

This is a question that could depend on a completely different (yet, 
relayed) subject, so I'm sending this email to both php-general@ and 
[EMAIL PROTECTED]  I thank you in advance for your understanding.


I am currently generating some images on the fly using some of PHP's 
image generation and rendering functions.  I'm having loads of success, 
and like the results that I see.


What I'd like this script to do is, to create symlinks to the origional 
image, and then when the script is done running, the symlinks are 
deleted.  Basically trying to make it so that the origional image is not 
known to the client or browser.


So I'm taking, say, image1.jpg.  I'm creating a symlink via:

$linkname = md5(rand());

or something similar.  I'd then like to return $linkname to the client 
or browser.  Then, when the browser has completed rendering the page to 
the client or browser, the symlink is then deleted.


What I'm curious as to right now is if I do this, the client will see 
the link to $linkname via HTML's img src= specification.  What happens 
if this is sent to the client or browser, and the symlink is deleted 
immediately after the name is sent to the client or browser?  Would the 
web server (in this case, Apache) cache the image in memory until the 
client has downloaded said image, and then delete it from memory when 
the page is done rendering or being sent?  Will PHP totally disregard 
the web server's request to hold the image, and render nothing to the 
browser?  This is something I'm confused about.


Thanks!
-dant



Hello -

Don't suppose anyone has any pointers for me with this one, do ya?

Thanks!
-dant

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Generating images on the fly, linking via symlink?

2005-09-03 Thread Rasmus Lerdorf
Dan Trainor wrote:
 Dan Trainor wrote:
 
 Hello, all -

 This is a question that could depend on a completely different (yet,
 relayed) subject, so I'm sending this email to both php-general@ and
 [EMAIL PROTECTED]  I thank you in advance for your understanding.

 I am currently generating some images on the fly using some of PHP's
 image generation and rendering functions.  I'm having loads of
 success, and like the results that I see.

 What I'd like this script to do is, to create symlinks to the
 origional image, and then when the script is done running, the
 symlinks are deleted.  Basically trying to make it so that the
 origional image is not known to the client or browser.

 So I'm taking, say, image1.jpg.  I'm creating a symlink via:

 $linkname = md5(rand());

 or something similar.  I'd then like to return $linkname to the client
 or browser.  Then, when the browser has completed rendering the page
 to the client or browser, the symlink is then deleted.

 What I'm curious as to right now is if I do this, the client will see
 the link to $linkname via HTML's img src= specification.  What
 happens if this is sent to the client or browser, and the symlink is
 deleted immediately after the name is sent to the client or browser? 
 Would the web server (in this case, Apache) cache the image in memory
 until the client has downloaded said image, and then delete it from
 memory when the page is done rendering or being sent?  Will PHP
 totally disregard the web server's request to hold the image, and
 render nothing to the browser?  This is something I'm confused about.

 Thanks!
 -dant

 
 Hello -
 
 Don't suppose anyone has any pointers for me with this one, do ya?

I don't quite see how you know when the browser has fetched the image.
Browsers make requests for images in a separate connection, so on the
page where you generate this random symlink you are just adding an img
src=... / tag which will prompt the remote browser to at some point
open a separate connection and ask for that image.

I think a better idea may be to forget about symlinks and just keep a
local mapping table of random ids to images and in your page have
something like:

  img src=/view/123456789.jpg /

Then make /view a PHP script.  In your Apache config you can do that by
adding:

  Location /view
  ForceType application/x-httpd-php
  /Location

And in your /view script look at $_SERVER['PATH_INFO'] which should be
/123456789.jpg.  Pick out the image id, look up in your local lookup
table which actual image that refers to and serve it up with a
readfile() call.  Remember to set the the appropriate
header('Content-type: image/jpeg) at the top.

You can also do a similar thing by using an ErrorDocument 404 /view.php
but the big downside of this is that Apache will log a 404 error on
every image view.

You do take a bit of a hit by going through php to serve up the image as
opposed to using your symlink approach where the actual request will go
directly via Apache's path_translate hook to the image you want.  The
problem is that without any PHP involvement on the actual image request
you don't any way of knowing when the request has come in for the image
and thus you have no way to know when to delete the symlink.  You could
of course set up a cron job that goes through and deletes all symlinks
older than 5 minutes or something like that, but that may not meet your
requirements.

-Rasmus

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Generating images on the fly, linking via symlink?

2005-09-03 Thread Edward Vermillion

Dan Trainor wrote:

Dan Trainor wrote:


Hello, all -

This is a question that could depend on a completely different (yet, 
relayed) subject, so I'm sending this email to both php-general@ and 
[EMAIL PROTECTED]  I thank you in advance for your understanding.


I am currently generating some images on the fly using some of PHP's 
image generation and rendering functions.  I'm having loads of 
success, and like the results that I see.


What I'd like this script to do is, to create symlinks to the 
origional image, and then when the script is done running, the 
symlinks are deleted.  Basically trying to make it so that the 
origional image is not known to the client or browser.


So I'm taking, say, image1.jpg.  I'm creating a symlink via:

$linkname = md5(rand());

or something similar.  I'd then like to return $linkname to the client 
or browser.  Then, when the browser has completed rendering the page 
to the client or browser, the symlink is then deleted.


What I'm curious as to right now is if I do this, the client will see 
the link to $linkname via HTML's img src= specification.  What 
happens if this is sent to the client or browser, and the symlink is 
deleted immediately after the name is sent to the client or browser?  
Would the web server (in this case, Apache) cache the image in memory 
until the client has downloaded said image, and then delete it from 
memory when the page is done rendering or being sent?  Will PHP 
totally disregard the web server's request to hold the image, and 
render nothing to the browser?  This is something I'm confused about.


Thanks!
-dant



Hello -

Don't suppose anyone has any pointers for me with this one, do ya?

Thanks!
-dant



I tried something similar to this a while back, although not with 
symlinks. I was writing a copy of the image to a temporary directory, 
sending that out to the browser in an img tag, then removing the copy. 
It worked like a charm in IE, but Netscaape/Mozilla/Firebird/Safari 
would give me a corrupted image or some-such error.


The only thing I could figure out from it was the browsers that do a 
look ahead on the links to the image wouldn't see an image at the link 
before it was clicked, and would cache that result. Eventually I just 
gave up on that idea.


You might look for the recent threads that deal with dynamic image 
generation that sends the image directly to the browser. There's been a 
few reciently and you might be able to do something with that.


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php