Re: [PHP] session variables and SVG documents

[email protected] (Adam Richardson)
Newsgroups php.general
Message-ID <[email protected]>
On Wed, Feb 3, 2010 at 8:20 AM, Ashley Sheridan <[email protected]>wrote:

> On Wed, 2010-02-03 at 10:49 +0100, Aurelie REYMUND wrote:
>
> > Hello,
> >
> > unfortunately, it does not suite my needs. The image must be clickable.
> The
> > application I'm developping reads data from a database and display the
> > information graphically. The user must be able to click on some elements
> of
> > the picture, and I have to store the information the user clicked on
> > (session vars). I cannot tell the user not to use IE, so I have to find
> > another solution...
> >
> > Regards,
> > Aurelie
> >
> > 2010/2/1 Ray Solomon <[email protected]>
> >
> > > From: "Aurelie REYMUND" <[email protected]>
> > > Sent: Monday, February 01, 2010 3:37 AM
> > > To: <[email protected]>
> > > Subject: [PHP] session variables and SVG documents
> > >
> > >
> > >  Hello,
> > >>
> > >> I have the following problem with the Adobe SVG viewer:
> > >> I try to generate a SVG document using PHP. the following code is
> working
> > >> well under Firefox, as well as IE with ASV:
> > >>
> > >> <?php
> > >>
> > >> header("Content-type: image/svg+xml");
> > >>
> > >> $graph_title = 'title';
> > >>
> > >>
> > >> print('<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>');
> > >> $svgwidth=500;
> > >> $svgheight=400;
> > >> ?>
> > >>
> > >> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "
> > >> http://www.w3.org/TR/SVG/DTD/svg10.dtd">
> > >> <svg width="<?php echo $svgwidth; ?>px" height="<?php echo $svgheight;
> > >> ?>px"
> > >> xmlns="http://www.w3.org/2000/svg">
> > >>   <desc>This is a php-random rectangle test</desc>
> > >> <?php
> > >> srand((double) microtime() * 1000000); //initalizing random generator
> > >> for ($i = 0; $i < 20; $i+=1) {
> > >>   $x = floor(rand(0,$svgwidth-1)); //avoid getting a range 0..0 for
> rand
> > >> function
> > >>   $y = floor(rand(0,$svgheight-1));
> > >>   $width = floor(rand(0,$svgwidth-$x)); //avoid getting rect outside
> of
> > >> viewbox
> > >>   $height = floor(rand(0,$svgheight-$y));
> > >>   $red = floor(rand(0,255));
> > >>   $blue = floor(rand(0,255));
> > >>   $green = floor(rand(0,255));
> > >>   $color = "rgb(".$red.",".$green.",".$
> > >> blue.")";
> > >>   print "\t<rect x=\"$x\" y=\"$y\" width=\"$width\" height=\"$height\"
> > >> style=\"fill:$color;\"/>\n";
> > >> }
> > >> ?>
> > >>   <text x="<?php echo $svgwidth/2;?>px" y="300" style="font-size:15;"
> > >> text-anchor="middle">The servers Date and Time is: <?php print
> > >> (strftime("%Y-%m-%d, %H:%M:%S")); ?></text>
> > >>   <text x="<?php echo $svgwidth/2;?>px" y="340" style="font-size:15;"
> > >> text-anchor="middle">You are running:</text>
> > >>   <text x="<?php echo $svgwidth/2;?>px" y="360" style="font-size:15;"
> > >> text-anchor="middle"><?php print $HTTP_USER_AGENT; ?></text>
> > >> </svg>
> > >>
> > >> If now I want to include the session_start() at the beginning of the
> code,
> > >> in IE I got a pop-up dialog called "download file"
> > >>
> > >> What am I doing wrong ?
> > >>
> > >> Regards,
> > >> Aurelie
> > >>
> > >>
> > >
> > > It appears IE does not support svg yet and you need a plugin for it.
> > >
> > > However, you could also design your code differently by using
> Imagemagick
> > > to convert the svg to png.
> > > If that suits your needs, then use the modified code below:
> > >
> > >
> > > <?php
> > >
> > > header("Content-type: image/png");
> > >
> > > $graph_title = 'title';
> > >
> > > $svgwidth=500;
> > > $svgheight=400;
> > >
> > > $svg = '<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
> > > <svg width="'.$svgwidth.'px" height="'.$svgheight.'px" xmlns="
> > > http://www.w3.org/2000/svg">
> > >   <desc>This is a php-random rectangle test</desc>';
> > >
> > >
> > > for ($i = 0; $i < 20; $i++) {
> > >
> > >        $x = floor(rand(0,$svgwidth-1));
> > >        $y = floor(rand(0,$svgheight-1));
> > >        $width = floor(rand(0,$svgwidth-$x));
> > >        $height = floor(rand(0,$svgheight-$y));
> > >        $red = floor(rand(0,255));
> > >        $blue = floor(rand(0,255));
> > >        $green = floor(rand(0,255));
> > >        $color = "rgb(".$red.",".$green.",".$blue.")";
> > >        $svg .= "\t<rect x=\"$x\" y=\"$y\" width=\"$width\"
> > > height=\"$height\" style=\"fill:$color;\"/>\n";
> > > }
> > >
> > >   $svg .= '<text x="'.($svgwidth/2).'px" y="300" style="font-size:15;"
> > > text-anchor="middle">The servers Date and Time is: '.date("Y-m-d,
> > > H:m:s").'</text>
> > >   <text x="'.($svgwidth/2).'px" y="340" style="font-size:15;"
> > > text-anchor="middle">You are running:</text>
> > >   <text x="'.($svgwidth/2).'px" y="360" style="font-size:15;"
> > > text-anchor="middle">'.$HTTP_USER_AGENT.'</text>
> > > </svg>';
> > >
> > >
> > > file_put_contents('/tmp/image.svg', $svg);
> > >
> > > exec("/usr/bin/rsvg /tmp/image.svg /tmp/image.png");
> > >
> > > echo file_get_contents('/tmp/image.png');
> > > ?>
> > >
> > > -Ray Solomon
> > >
> > >
> > >
> > > --
> > > PHP General Mailing List (http://www.php.net/)
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > >
>
>
> IE doesn't display SVG natively, and the plugins for it are pants.
> However, IE does make use of its own propitiatory vector language called
> VML, This is how the Cufon font replacer system works.
>
> Thanks,
> Ash
> http://www.ashleysheridan.co.uk
>
>
>
Maybe svgweb (by Google) would allow you to achieve your goals:
http://code.google.com/p/svgweb/

Adam

-- 
Nephtali:  PHP web framework that functions beautifully
http://nephtaliproject.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.