php-general Digest 24 Sep 2008 11:18:39 -0000 Issue 5699

Topics (messages 280802 through 280825):

Re: $this->value VS $value
        280802 by: Jochem Maas
        280803 by: Eric Butera
        280805 by: Nathan Nobbe
        280806 by: Nathan Nobbe
        280807 by: Eric Butera
        280808 by: Nathan Nobbe

Re: Browser could not get mp3 files from http site
        280804 by: hce
        280809 by: Richard Lynch
        280818 by: hce
        280825 by: Ashley Sheridan

Re: PHP tags - any reasons to close ?>
        280810 by: Ross McKay

Using Static Class Variables to Access Globally
        280811 by: Ryan Panning
        280812 by: Richard Lynch
        280814 by: Nathan Nobbe
        280816 by: Ryan Panning
        280820 by: Colin Guthrie

class const versus define
        280813 by: Richard Lynch
        280817 by: Carlos Medina
        280819 by: Chris
        280821 by: Jochem Maas

The Data Literacy Test
        280815 by: Shelley

Re: How to detect the host (window or Linux)?
        280822 by: hce

Google Checkout
        280823 by: Richard Heyes
        280824 by: Stephen Wellington

Administrivia:

To subscribe to the digest, e-mail:
        [EMAIL PROTECTED]

To unsubscribe from the digest, e-mail:
        [EMAIL PROTECTED]

To post to the list, e-mail:
        [EMAIL PROTECTED]


----------------------------------------------------------------------
--- Begin Message ---
Nathan Nobbe schreef:
On Tue, Sep 23, 2008 at 10:41 AM, Micah Gersten <[EMAIL PROTECTED]> wrote:

Eric Butera wrote:
On Tue, Sep 23, 2008 at 12:26 PM, Jochem Maas <[EMAIL PROTECTED]>
wrote:
(using $this->foo or MyClass::$foo for static properties).

also self::


Actually within a class, I think you must self:: before a static
property or something shows up in the error log.


yea, php will think its a local variable if not qualified w/ the self
keyword and scope resolution (or w/e its called in php :D), but the name of
the class and the scope resolution operator works as well.  its just a hair
less flexible because if the class name changes you have to update some code
whereas w/ self, the code is no longer dependent upon the class name.

/// psuedocode !
class A {
protected static $someStatic = 5;

public function doStuff() {
  $someStatic  // php thinks this is a local var
  self::$someStatic  // php can id this as a static var
  A::$someStatic  // php can id this as a static var

Nathan is correct, I'd like to add that 'self' is actually nothing more than
a simple alias used at compile time to put the class name in ...
'self' literally equates to 'MyClass',  but it saves hassle when refactoring
and it's much clearer that you mean 'this class Im looking at/working in'
.... personally whenever I see a classname referenced statically inside a method
I kind of assume it must be another class :-P

... now had 'self' been late (statically) bound ... no I won't go there, we get
'static' very soon now :-P

}

-nathan



--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 6:25 PM, Jochem Maas <[EMAIL PROTECTED]> wrote:
> Nathan Nobbe schreef:
>>
>> On Tue, Sep 23, 2008 at 10:41 AM, Micah Gersten <[EMAIL PROTECTED]> wrote:
>>
>>> Eric Butera wrote:
>>>>
>>>> On Tue, Sep 23, 2008 at 12:26 PM, Jochem Maas <[EMAIL PROTECTED]>
>>>
>>> wrote:
>>>>>
>>>>> (using $this->foo or MyClass::$foo for static properties).
>>>>>
>>>> also self::
>>>>
>>>>
>>> Actually within a class, I think you must self:: before a static
>>> property or something shows up in the error log.
>>
>>
>> yea, php will think its a local variable if not qualified w/ the self
>> keyword and scope resolution (or w/e its called in php :D), but the name
>> of
>> the class and the scope resolution operator works as well.  its just a
>> hair
>> less flexible because if the class name changes you have to update some
>> code
>> whereas w/ self, the code is no longer dependent upon the class name.
>>
>> /// psuedocode !
>> class A {
>> protected static $someStatic = 5;
>>
>> public function doStuff() {
>>  $someStatic  // php thinks this is a local var
>>  self::$someStatic  // php can id this as a static var
>>  A::$someStatic  // php can id this as a static var
>
> Nathan is correct, I'd like to add that 'self' is actually nothing more than
> a simple alias used at compile time to put the class name in ...
> 'self' literally equates to 'MyClass',  but it saves hassle when refactoring
> and it's much clearer that you mean 'this class Im looking at/working in'
> .... personally whenever I see a classname referenced statically inside a
> method
> I kind of assume it must be another class :-P
>
> ... now had 'self' been late (statically) bound ... no I won't go there, we
> get
> 'static' very soon now :-P
>
>> }
>>
>> -nathan
>>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Active Record sucks :P

--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 4:25 PM, Jochem Maas <[EMAIL PROTECTED]> wrote:

> ... now had 'self' been late (statically) bound ... no I won't go there, we
> get
> 'static' very soon now :-P


and lets not forget the __*Static() magic method suite we're getting too :)

-nathan

--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 4:42 PM, Eric Butera <[EMAIL PROTECTED]> wrote:

> Active Record sucks :P
>

i prefer code generation to runtime introspection, but runtime
introspection+code generation, well thats a compromise i can live w/ ;)

-nathan

--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 7:20 PM, Nathan Nobbe <[EMAIL PROTECTED]> wrote:
> On Tue, Sep 23, 2008 at 4:42 PM, Eric Butera <[EMAIL PROTECTED]> wrote:
>>
>> Active Record sucks :P
>
> i prefer code generation to runtime introspection, but runtime
> introspection+code generation, well thats a compromise i can live w/ ;)
>
> -nathan
>

I generate my data access objects too.  It goes against my better
judgment, but performance wins out in this specific situation.

--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 5:25 PM, Eric Butera <[EMAIL PROTECTED]> wrote:

> I generate my data access objects too.  It goes against my better
> judgment, but performance wins out in this specific situation.
>

getting off the point of the thread (i could care less :D), but have you
seen the model taken by qcodo, propel (and likely others) where the
generated layer is extended, so that subsequent re-generation does not
interfere w/ customizations on the generated library?

-nathan

--- End Message ---
--- Begin Message ---
On Wed, Sep 24, 2008 at 1:03 AM, Nathan Rixham <[EMAIL PROTECTED]> wrote:
> Ashley Sheridan wrote:
>>
>> On Tue, 2008-09-23 at 21:23 +1000, hce wrote:
>>>
>>> Hi Ashley,
>>>
>>> The object tag is indeed working. It does not automatically play
>>> audio.mp3 from my home web server, but it does automatically play if I
>>> add an audio source value from a streaming server. Can you make it
>>> work to play the audio automatically from a normal web server not
>>> streaming server?
>>>
>>> Thanks.
>>>
>> As far as I'm aware it should play from any server. What kind of paths
>> are you putting into the object tag? Absolute or relative and is it a
>> URL or local resource?
>>
>>
>> Ash
>> www.ashleysheridan.co.uk
>>
>
>
> when the file isn't in a streaming server you have buffering to contend
> with; odds are it won't play the file till it's completely downloaded
> [regardless of autoplay/autostart]

I am not sure if it is a buffering problem or not. I am baffled as I
can play from opening a file file:///home/webserver/audio.html, but
could not play it if I play from an URL
http::/www.myweb.com/audio.php, the audio.php generate the same
content of the audio.html.

> A few questions:
> Why don't you just link to the audio.mp3 file and let the users browser/pc
> determine how best to play it [normal]?

I am sure you have many ways to play an mp3 file, that was not what I
was asking for. My intention is to learn and understand the PHP and
HTML program, and to resolve problems. It bothers me as I could  not
unserstand why the URL way does not work as it should.

--- End Message ---
--- Begin Message ---
> > when the file isn't in a streaming server you have buffering to
> contend
> > with; odds are it won't play the file till it's completely downloaded
> > [regardless of autoplay/autostart]
>
> I am not sure if it is a buffering problem or not. I am baffled as I
> can play from opening a file file:///home/webserver/audio.html, but
> could not play it if I play from an URL
> http::/www.myweb.com/audio.php, the audio.php generate the same
> content of the audio.html.
>
> > A few questions:
> > Why don't you just link to the audio.mp3 file and let the users
> browser/pc
> > determine how best to play it [normal]?
>
> I am sure you have many ways to play an mp3 file, that was not what I
> was asking for. My intention is to learn and understand the PHP and
> HTML program, and to resolve problems. It bothers me as I could  not
> unserstand why the URL way does not work as it should.

As a general rule, check what happens when you do wget -S on the URL and see 
what the browser sees.

You may find that the file is being buffered by PHP and is "too slow" for an 
mp3 player.

A simple loop to close all output buffers will fix that issue.

Of course, you could find something else completely different...

Like the wrong "Content-type" that the browsers will ignore in favor of the 
.mp3 URL ending, or any number of things...

For sure, a simple straight-forward HTTP mp3 file spewing out should work just 
fine.


_______________________________________________________

The  information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial  use  of  the individual or entity to which it is
addressed and may contain information that is  propri-
etary  and  confidential.  If you are not the intended
recipient of this message you are hereby notified that
any  review, dissemination, distribution or copying of
this message is strictly prohibited.  This  communica-
tion  is  for information purposes only and should not
be regarded as an offer to sell or as  a  solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be  secure  or  error-
free. P6070214

--- End Message ---
--- Begin Message ---
On Wed, Sep 24, 2008 at 9:56 AM, Richard Lynch <[EMAIL PROTECTED]> wrote:
> As a general rule, check what happens when you do wget -S on the URL and see 
> what the browser sees.

Thanks Richard and all responses. That was the best PHP and HTML debug
I've learned so far. I always find it is difficult to debug html and
JS when doing PHP program. I can debug C/C++ using gdb well but no
idea what the tools can be used for browser debug.

Anyway, the problem has been resolved. It turns out it was an
authorisation issue. My web server requests a log in at beggin,
although I can see every pages and download other data and image
files, somehow it cannot download the mp3 file. As soon as I remove
the login, it works fine.

Appreciate all of your helps and responses.

Cheers.

--- End Message ---
--- Begin Message ---
On Wed, 2008-09-24 at 17:03 +1000, hce wrote:
> On Wed, Sep 24, 2008 at 9:56 AM, Richard Lynch <[EMAIL PROTECTED]> wrote:
> > As a general rule, check what happens when you do wget -S on the URL and 
> > see what the browser sees.
> 
> Thanks Richard and all responses. That was the best PHP and HTML debug
> I've learned so far. I always find it is difficult to debug html and
> JS when doing PHP program. I can debug C/C++ using gdb well but no
> idea what the tools can be used for browser debug.
> 
> Anyway, the problem has been resolved. It turns out it was an
> authorisation issue. My web server requests a log in at beggin,
> although I can see every pages and download other data and image
> files, somehow it cannot download the mp3 file. As soon as I remove
> the login, it works fine.
> 
> Appreciate all of your helps and responses.
> 
> Cheers.
> 
For debugging PHP there is PHPDebug, which is like an add-on that gives
debug output comparable to ColdFusion or ASP.Net (or so I've heard.) It
might be worth having a quick look into that if you think it will be of
any help.


Ash
www.ashleysheridan.co.uk


--- End Message ---
--- Begin Message ---
On Tue, 23 Sep 2008 19:48:12 +0200, Per Jessen wrote:

>Simcha Younger wrote:
>
>> I often put a number of empty lines at the end of a script since I
>> enjoy editing with the script higher up on the screen, and very few
>> editors allow you to scroll the last lines of the program above the
>> bottom of the screen. (Crimson Editor is the only one I have found
>> that does this.)
>
>vi has no problem doing that.

Geany does this too, unless you ask it not to (preferences).
-- 
Ross McKay, Toronto, NSW Australia
"Let the laddie play wi the knife - he'll learn"
- The Wee Book of Calvin

--- End Message ---
--- Begin Message --- The typical way to access a variable or instance from inside a function/method is to either declare it a global variable or pass it as a argument. Is there any reason why someone shouldn't use static class variables to do this? Ex:

<?php
class Foo {
        public static $bar_instance;
}

class Bar {
        public function do_something() {}
}

Foo::$bar_instance = new Bar;

function foo_bar() {
        Foo::$bar_instance->do_something();
}

foo_bar();
?>

Crude example but imagine this on a larger scale. I'm thinking there may be some kind of php optimization that this would hamper or something to that effect.
--- End Message ---
--- Begin Message ---
> -----Original Message-----
> From: Ryan Panning [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, September 23, 2008 8:03 PM
> To: [EMAIL PROTECTED]
> Subject: [PHP] Using Static Class Variables to Access Globally
>
> The typical way to access a variable or instance from inside a
> function/method is to either declare it a global variable or pass it as
> a argument. Is there any reason why someone shouldn't use static class
> variables to do this? Ex:
>
> <?php
> class Foo {
>         public static $bar_instance;
> }
>
> class Bar {
>         public function do_something() {}
> }
>
> Foo::$bar_instance = new Bar;
>
> function foo_bar() {
>         Foo::$bar_instance->do_something();
> }
>
> foo_bar();
> ?>
>
> Crude example but imagine this on a larger scale. I'm thinking there
> may
> be some kind of php optimization that this would hamper or something to
> that effect.

I can't think of any particular reason to not do this.


_______________________________________________________

The  information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial  use  of  the individual or entity to which it is
addressed and may contain information that is  propri-
etary  and  confidential.  If you are not the intended
recipient of this message you are hereby notified that
any  review, dissemination, distribution or copying of
this message is strictly prohibited.  This  communica-
tion  is  for information purposes only and should not
be regarded as an offer to sell or as  a  solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be  secure  or  error-
free. P6070214

--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 7:03 PM, Ryan Panning <[EMAIL PROTECTED]> wrote:

> The typical way to access a variable or instance from inside a
> function/method is to either declare it a global variable or pass it as a
> argument. Is there any reason why someone shouldn't use static class
> variables to do this? Ex:
>
> <?php
> class Foo {
>        public static $bar_instance;
> }
>
> class Bar {
>        public function do_something() {}
> }
>
> Foo::$bar_instance = new Bar;
>
> function foo_bar() {
>        Foo::$bar_instance->do_something();
> }
>
> foo_bar();
> ?>
>
> Crude example but imagine this on a larger scale. I'm thinking there may be
> some kind of php optimization that this would hamper or something to that
> effect.
>

in many cases, people like to drive client code through methods, which,
given the current set of language features in php, could be reason to favor
a singleton w/ __get() & __set() methods defined.  you still have the same
'global' scope, except that the data doesnt have to be public.  (im not
saying its bad to use public vars, im merely presenting an alternative
perspective).

supposedly php has in the rfc about static classes to add __setStatic() &
__getStatic(), but support isnt there yet, and im starting to doubt it will
be available for 5.3 =/

-nathan

--- End Message ---
--- Begin Message ---
Nathan Nobbe wrote:
in many cases, people like to drive client code through methods, which,
given the current set of language features in php, could be reason to favor
a singleton w/ __get() & __set() methods defined.  you still have the same
'global' scope, except that the data doesnt have to be public.  (im not
saying its bad to use public vars, im merely presenting an alternative
perspective).

supposedly php has in the rfc about static classes to add __setStatic() &
__getStatic(), but support isnt there yet, and im starting to doubt it will
be available for 5.3 =/

-nathan


Interesting point about the singleton option. I'll have to think about that one.

I can assure you that __set/getStatic() will not make it in 5.3. I've already contacted the author of that RFC, they confirmed it won't make it. :( I'm just glad late static binding made it.
--- End Message ---
--- Begin Message ---
Nathan Nobbe wrote:
in many cases, people like to drive client code through methods, which,
given the current set of language features in php, could be reason to favor
a singleton w/ __get() & __set() methods defined.  you still have the same
'global' scope, except that the data doesnt have to be public.  (im not
saying its bad to use public vars, im merely presenting an alternative
perspective).

/me prefers singleton with __get and __set but each to their own :)

I quite like the fact that the __construct of the singleton itself can fill up the variables that are accessed via __get and from then on rogue code cannot overwrite them (assuming you do not implement a __set!)

Col

--

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
  Mandriva Linux Contributor [http://www.mandriva.com/]
  PulseAudio Hacker [http://www.pulseaudio.org/]
  Trac Hacker [http://trac.edgewall.org/]


--- End Message ---
--- Begin Message ---
Is there any reason why the logic behind define() couldn't be pushed down to 
class const?

Code like this is kinda fugly:

//It's okay here, but not in a class?
define('CACHE_DIR_LONG',  CONFIG_ROOT_PATH . '/cache/');
class Cache {
  const CACHE_DIR = '/dev/shm/cache/';
  const CACHE_TTL = 300; //5 minutes
  const CACHE_DIR_LONG = CACHE_DIR_LONG;

I'd really prefer to write:
class Cache {
  const CACHE_DIR = '/dev/shm/cache/';
  const CACHE_TTL = 300; //5 minutes
  const CACHE_DIR_LONG = CONFIG_ROOT_PATH . '/cache/';

I'm happy to add it as a feature request, but not if somebody reliable says 
"Don't Bother"...

--
Richard Lynch



_______________________________________________________

The  information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial  use  of  the individual or entity to which it is
addressed and may contain information that is  propri-
etary  and  confidential.  If you are not the intended
recipient of this message you are hereby notified that
any  review, dissemination, distribution or copying of
this message is strictly prohibited.  This  communica-
tion  is  for information purposes only and should not
be regarded as an offer to sell or as  a  solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be  secure  or  error-
free. P6070214

--- End Message ---
--- Begin Message ---
Richard Lynch schrieb:
Is there any reason why the logic behind define() couldn't be pushed down to 
class const?

Code like this is kinda fugly:

//It's okay here, but not in a class?
define('CACHE_DIR_LONG',  CONFIG_ROOT_PATH . '/cache/');
class Cache {
  const CACHE_DIR = '/dev/shm/cache/';
  const CACHE_TTL = 300; //5 minutes
  const CACHE_DIR_LONG = CACHE_DIR_LONG;

I'd really prefer to write:
class Cache {
  const CACHE_DIR = '/dev/shm/cache/';
  const CACHE_TTL = 300; //5 minutes
  const CACHE_DIR_LONG = CONFIG_ROOT_PATH . '/cache/';

I'm happy to add it as a feature request, but not if somebody reliable says "Don't 
Bother"...

--
Richard Lynch



_______________________________________________________

The  information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial  use  of  the individual or entity to which it is
addressed and may contain information that is  propri-
etary  and  confidential.  If you are not the intended
recipient of this message you are hereby notified that
any  review, dissemination, distribution or copying of
this message is strictly prohibited.  This  communica-
tion  is  for information purposes only and should not
be regarded as an offer to sell or as  a  solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be  secure  or  error-
free. P6070214

Hi Richard,
the define function is to be used on the global scope of your application. This is helpful to assign Configurations Options and other data that you do not will move. For the Class Constants you define the Constant only fo the Class where you are working.
Please read the documentation about this on PHP.NET
http://de.php.net/manual/en/language.oop5.constants.php

Regards

Carlos

--- End Message ---
--- Begin Message ---

the define function is to be used on the global scope of your application. This is helpful to assign Configurations Options and other data that you do not will move. For the Class Constants you define the Constant only fo the Class where you are working.
Please read the documentation about this on PHP.NET
http://de.php.net/manual/en/language.oop5.constants.php

Re-read what he said.

What he wants to do is use a previous class constant in another one.

With defines, you can do:

define('VAR_1', 'This is var 1');
define('VAR_2', VAR_1 . ' plus some more on the end');

You cannot do a similar thing with class constants (you get parse errors), he's asking why.

--
Postgresql & php tutorials
http://www.designmagick.com/


--- End Message ---
--- Begin Message ---
Richard Lynch schreef:
Is there any reason why the logic behind define() couldn't be pushed down to 
class const?

probably no reason why it couldn't but from what I gather there is a specific
reason wht it works like this: speed.

const is compile time, define is runtime

IIRC const was made this way in order to make it fast.

I also recall posts by Matt Wilmas on internals regarding a patch for 'constant 
expression
folding' which allows simple expressions in const definitions (whilst keeping 
the compile
time speed) ... I think it made it in to 5.3 but you'd have to check.

Code like this is kinda fugly:

//It's okay here, but not in a class?
define('CACHE_DIR_LONG',  CONFIG_ROOT_PATH . '/cache/');
class Cache {
  const CACHE_DIR = '/dev/shm/cache/';
  const CACHE_TTL = 300; //5 minutes
  const CACHE_DIR_LONG = CACHE_DIR_LONG;

I'd really prefer to write:
class Cache {
  const CACHE_DIR = '/dev/shm/cache/';
  const CACHE_TTL = 300; //5 minutes
  const CACHE_DIR_LONG = CONFIG_ROOT_PATH . '/cache/';

talking of fugly, your declaring a class, from a purists POV it really
shouldn't contain such values in it's definition ... these are things
you set when initializing the class/object for use. :-P

I'm happy to add it as a feature request, but not if somebody reliable says "Don't 
Bother"...

I'd go with "Don't Bother" ... although check the internals archives
as your desired feature may actually be on it's way in, in some form.

--
Richard Lynch



_______________________________________________________

The  information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial  use  of  the individual or entity to which it is
addressed and may contain information that is  propri-
etary  and  confidential.  If you are not the intended
recipient of this message you are hereby notified that
any  review, dissemination, distribution or copying of
this message is strictly prohibited.  This  communica-
tion  is  for information purposes only and should not
be regarded as an offer to sell or as  a  solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be  secure  or  error-
free. P6070214

bla bla bla.




--- End Message ---
--- Begin Message ---
 <http://phparch.cn/index.php/php/34-php-basics/202-the-data-literacy-test>The
Data Literacy Test:

http://www.phparch.cn/index.php/php/34-php-basics/202-the-data-literacy-test

-- 
With best regards,
Shelley Shyan
http://www.phparch.cn

--- End Message ---
--- Begin Message ---
On Mon, Sep 22, 2008 at 4:04 PM, Thodoris <[EMAIL PROTECTED]> wrote:
>
>> $win = stripos(PHP_OS, 'win') !== false ? true : false;
> Perhaps you could also use this as an alternative:
>
> http://gr.php.net/manual/en/function.php-uname.php

Thanks Thodoris and Anderson. Sorry for not clear about the question.
I mean to detect the OS in Host system where the browser is located,
not the SERVER OS.

--- End Message ---
--- Begin Message ---
Hi,

As a follow up, I've just switched from Paypal to Google Checkout.
Setup was quick and pain free (easily less than 2 hours), and I would
recommend it (so far). Like other people have said though, it's just
UK and USA at the moment.

-- 
Richard Heyes

HTML5 Graphing for FF, Chrome, Opera and Safari:
http://www.phpguru.org/RGraph

--- End Message ---
--- Begin Message ---
I'm looking at using this myself for an upcoming project..
Do you know if they force customers to sign up with a google account
before processing or can they just put in card details and be done
with it?
Thanks,
Steve

On Wed, Sep 24, 2008 at 10:59 AM, Richard Heyes <[EMAIL PROTECTED]> wrote:
> Hi,
>
> As a follow up, I've just switched from Paypal to Google Checkout.
> Setup was quick and pain free (easily less than 2 hours), and I would
> recommend it (so far). Like other people have said though, it's just
> UK and USA at the moment.
>
> --
> Richard Heyes
>
> HTML5 Graphing for FF, Chrome, Opera and Safari:
> http://www.phpguru.org/RGraph
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>



--
Stephen Wellington
07956 042387
01865 280000 ext 12438
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]



-- 
Stephen Wellington
07956 042387
01865 280000 ext 12438
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]

--- End Message ---

Reply via email to