Re: save file from outside url
| From: | Jeremiah Breindel | Date: | Sat, 07 Dec 2002 16:47:35 +0000 |
| Subject: | Re: save file from outside url | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-127383@lists.php.net to get a copy of this message | ||
Thanks for responing Jason!
There is other code in there for updating some database entries and
producing a confirmation page, but I had them working perfectly before I
added the image code below. Only when acessing the outside script and
saving to file did it start doing the odd things. I didn't write the image
creation script, only hard coded in some values for font and bg colors in
it. I have attached that script at the bottom of this, away from everything
else. Maybe a header problem from that script? Any idea what 427 is from?
Thanks for all your help!
The $image_url is like this - "$rollover_image_url =
"http://www.anysite.com//pngmake.php?msg="
. $rollover .
"&rot=0&size=12&font=fonts/ARIAL.TTF";
"Jason Wong" <php-general@gremlins.biz> wrote in message
news:200212080029.28103.php-general@gremlins.biz...
> On Saturday 07 December 2002 05:12, Jeremiah Breindel wrote:
> > I am trying to save a dynamically generated image on an outside server
to a
> > local file on my server using the code below:
> >
> > $fc = fopen($image_filename, "wb");
> > $file = fopen ($image_url, "rb");
> >
> > if (!$file) {
> > echo "<p>Unable to open remote file.\n";
> > exit;
> > }else{
> > while (!feof ($file)) {
> > $line = fread ($file, 1028);
> > fwrite($fc,$line);
> > }
> > }
> > fclose($fc);
> > fclose($file);
> >
> >
> > $image_filename is a locally referred to file, such as
> > "../images/file1.png" and $image_url is an absolute address, such as
> > "http://www.whatever.com/imagecreate.php".
> >
> > Instead of saving when I run the script through a browser, the image
> > displays within the browser, and the script creates a file containing
only
> > "427" on the server. Any ideas why or what I can do to correct this?
>
> Hmm, I don't see how the above code can make the remote image *display*
your
> browser. The code itself looks OK, are there some parts of the code that
you
> haven't shown us?
>
> If the above is indeed your complete code, then what is your $image_url?
>
> --
> Jason Wong -> Gremlins Associates -> www.gremlins.biz
> Open Source Software Systems Integrators
> * Web Design & Hosting * Internet & Intranet Applications Development *
>
> /*
> Things will be bright in P.M. A cop will shine a light in your face.
> */
>
<?
/*
To draw the PNG - call this script with a URL like the following:
pngmake.php3?msg=testing+class&rot=15&size=48&font=fonts/ARIAL.TTF
*/
class textPNG {
var $font = 'fonts/ARIAL.TTF'; //default font. put in full path.
var $msg = "undefined"; // default text to display.
var $size = 24;
var $rot = 0; // rotation in degrees.
var $pad = 0; // padding.
var $transparent = 1; // transparency set to on.
var $red = 0; // white text...
var $grn = 0;
var $blu = 0;
var $bg_red = 255; // on black background.
var $bg_grn = 255;
var $bg_blu = 255;
function draw() {
$width = 499;
$height = 39;
$offset_x = 0;
$offset_y = 0;
$bounds = array();
$image = "";
//$this->msg = date ("h:i:s");
// determine font height.
$bounds = ImageTTFBBox($this->size, $this->rot, $this->font, "W");
if ($this->rot < 0) {
$font_height = abs($bounds[7]-$bounds[1]);
} else if ($this->rot > 0) {
$font_height = abs($bounds[1]-$bounds[7]);
} else {
$font_height = abs($bounds[7]-$bounds[1]);
}
// determine bounding box.
$bounds = ImageTTFBBox($this->size, $this->rot, $this->font,
$this->msg);
if ($this->rot < 0) {
// $width = abs($bounds[4]-$bounds[0]);
// $height = abs($bounds[3]-$bounds[7]);
$offset_y = $font_height;
$offset_x = 0;
} else if ($this->rot > 0) {
// $width = abs($bounds[2]-$bounds[6]);
// $height = abs($bounds[1]-$bounds[5]);
$offset_y = abs($bounds[7]-$bounds[5])+$font_height;
$offset_x = abs($bounds[0]-$bounds[6]);
} else {
// $width = abs($bounds[4]-$bounds[6]);
// $height = abs($bounds[7]-$bounds[1]);
$offset_y = $font_height;;
$offset_x = 0;
}
$image = imagecreate($width+($this->pad*2)+1,$height+($this->pad*2)+1);
$background = ImageColorAllocate($image, $this->bg_red, $this->bg_grn,
$this->bg_blu);
$foreground = ImageColorAllocate($image, $this->red, $this->grn,
$this->blu);
if ($this->transparent) ImageColorTransparent($image, $background);
ImageInterlace($image, false);
// render it.
ImageTTFText($image, $this->size, $this->rot, $offset_x+$this->pad,
$offset_y+$this->pad, $foreground, $this->font, $this->msg);
// output PNG object.
imagePNG($image);
}
}
$text = new textPNG; // instantiate new textPNG class.
if (isset($msg)) $text->msg = $msg; // text to display
if (isset($font)) $text->font = $font; // font to use (include directory if
needed).
if (isset($size)) $text->size = $size; // size in points
if (isset($rot)) $text->rot = $rot; // rotation
if (isset($pad)) $text->pad = $pad; // padding in pixels around text.
if (isset($tr)) $text->transparent = $tr; // transparency flag (boolean).
if (isset($clr)) { // text colour
$text->red = hexdec(substr($clr, 0, 2));
$text->grn = hexdec(substr($clr, 2, 2));
$text->blu = hexdec(substr($clr, 4, 2));
}
if (isset($bg)) { // background colour
$text->bg_red = hexdec(substr($bg, 0, 2));
$text->bg_grn = hexdec(substr($bg, 2, 2));
$text->bg_blu = hexdec(substr($bg, 4, 2));
}
// make up some expiry information. say, 60 secs to ive.
$now = mktime
(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));
$expires = mktime (date("H"),date("i"),date("s") + 60
,date("m"),date("d"),date("Y")); // add 60 secs.
$expires_gmt = gmdate('D, d M Y H:i:s', $expires).' GMT';
$last_modified_gmt = gmdate('D, d M Y H:i:s', $now).' GMT';
header('Content-type:image/png');
header('Expires: '.$expires_gmt);
header('last-modified: '.$last_modified_gmt);
$text->draw();
?>