[Top] | [Contents] | [Index] | [ ? ] |
This is the definitive guide to PHP Weather, or at least it tries to be. PHP Weather is a script written in PHP which makes it possible to display the current weather on a webpage. The system is based on data from 4,500 airports scattered all over the world, so there is a good chance that you will find a station near your place.
Introduction | What is PHP Weather? | |
1. Installation | Instructions for installation | |
2. Configuration | How to change the defaults configuration? | |
3. Using PHP Weather | How to use it after installation? | |
4. Translating PHP Weather | Make PHP Weather speak your language | |
5. Things To Do | What the future might bring | |
6. History | How PHP Weather came to be | |
7. Contributors | A lot of people have helped... | |
A. Licenses | How may you copy PHP Weather? | |
B. Concept Index | ||
-- The Detailed Node Listing --- | ||
---|---|---|
Installation | ||
1.1 Installation Details | A step by step installation guide | |
Configuration | ||
2.1 The `defaults.php' file | Your local defaults | |
2.2 Choosing a Database Backend | Using a database | |
2.3 Required Functions in a Backend | ||
Using PHP Weather | ||
3.1 Output Modules | The standard output modules | |
3.2 The Raw Data | It is yours to play with, if you want it | |
Output Modules | ||
3.1.1 Changing the Output | Customize the output to suit your needs | |
Translating PHP Weather | ||
4.1 Diverse Translations | How you can handle special cases | |
Licenses | ||
A.1 GNU General Public License | ||
A.2 GNU Free Documentation License | ||
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
PHP Weather is script written in PHP that can decode a METAR. A METAR(1) is a weather report used for avionic purposes -- it has information about the temperature, the wind speed and direction, the clouds, the current weather phenomena, and so on. The information is presented in a special coded format, a format which PHP Weather can decode.
The METAR reports are made at about 4,500 airports from around the world, so there is a good chance that you live near one of them. And the airports make an report once or twice an hour, so you will be able to provide fresh reports on your website.
The reports from all over the world are stored at the National Weather Service (the NWS, see http://www.nws.noaa.gov/) which is a department under the National Oceanic and Atmospheric Administration (NOAA, see http://www.noaa.gov/) of the United States. The reports are available using both HTTP and FTP -- PHP Weather uses HTTP because it is the fastest of the two protocols.
Once you have got hold of a METAR, you will want to display the weather report contained within it. A textual display, known as a pretty print looks like this:
This is a report for Aalborg, Denmark. The report was made 33 minutes ago, at 21:50 UTC. The wind was blowing at a speed of 2.1 meters per second (4.6 miles per hour) from east (100°). The temperature was 16°C (61 °F), with a dew-point at 15 °C (59 °F). The atmospheric pressure was 1017 hPa (30.03 inHg). The relative humidity was 93.8%. There were no clouds below 1524 meter (5000 feet) and no cumulonimbus clouds. The overall visibility was greater than 10 kilometers (6.2 miles).
Each station is uniquely identified by it is ICAO code. ICAO is an abbreviation for the International Civil Aviation Organization.
You can control the output in various ways:
Instead of text, you can also have PHP Weather select icons for you that match the current weather conditions.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
PHP Weather has been designed so that it is easy to install it. After you have obtained PHP Weather, just unpack it somewhere on your webserver and load the file `index.php' in your favorite browser.
The next section will give you more details.
1.1 Installation Details | A step by step installation guide |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The first thing to do, is to get hold of PHP Weather. The official PHP Weather homepage can be reached at http://phpweather.net/ and you will be able to download the latest version of PHP Weather from the "Downloads" section.
After you have downloaded PHP Weather in your favorite format (we provide files in three formats: `tar.gz', `tar.bz2', and `zip') you should unpack it in a temporary place. If the file you downloaded is called `phpweather-x.y.tar.gz', then it will be unpacked in a directory called `phpweather-x.y'. Upload this directory with all its files to your webserver.
PHP Weather has now been installed! Use your browser to load the file `index.php' found in the root-directory of the PHP Weather installation and see how it works. You will be presented with a demonstration of PHP Weather.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Although PHP Weahter works right out of the package, you should configure it before you start to use it on your frontpage.
2.1 The `defaults.php' file | Your local defaults | |
2.2 Choosing a Database Backend | Using a database | |
2.3 Required Functions in a Backend |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The behaviour of PHP Weather is controlled by several things. All options have default values, but they can be changed in several places. The value of an option is found by this process:
include
. This defines
the initial values of the options.
phpweather
object
with the ICAO set to `EKAH':
$weather = new phpweather(array('icao' => 'EKAH')); |
You can (of course) change several options at the same time, the general template for this is
$weather = new phpweather(array('option-1' => `value-1', 'option-2' => `value-2', ..., 'option-n' => `value-n')); |
phpweather
object, then you will use the set_icao
method like this:
$weather->set_icao('EKYT'); |
The idea is, that you should create a `defaults.php' file with the options that you will always want to use -- things like database and proxy settings. To create the file, you should use the supplied script `make_config.php' found in the `config' directory.
Load the script in the browser and follow the instructions. In short, then you build the configuration file by repeatedly choosing/changing options until the all say "Input accepted". You will notice that all options are at their default settings when you load the page initially --- you will have to change something and press the "Update Options" button before anything changes.
When you press the button, the page will reload, and the configuration
file found at the bottom is updated with your new selections. Also,
your selection might give your more choices such as when you change
the use_proxy
option from "No" to "Yes". When you press the
update button you will be presented with input fields for the
proxy_host
and the proxy_port
. Because we cannot
anticipate the name of your proxy, the proxy_host
will be set
to nothing (the empty string "") initially. Since this is not a
valid hostname, you will see a text in red that says exactly this.
Continue to make changes to the options. When you are happy with the configuration you should press the "Download the Configuration" button. Your browser should ask you where to same the downloaded file --- save it as `defaults.php' in the root of your PHP Weather installation.
All new objects created will now start out with the options in this file. This means that you can store sensitive things like database passwords in just one location, instead of having it scattered through out all the scripts that use PHP Weather. Just remember to protect the `defaults.php' file itself if you put your password in it!
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
PHP Weather works by retrieving weather reports called METARs. It takes some time to get the METARs, so you will be interested in using a local database as a cache. All database backends support the same features (see 2.3 Required Functions in a Backend for details) but differ in speed. Your version of PHP might also lack support for some of the backends. PHP Weather supports the following databases backends:
null
This makes the null
backend the slowest backend if you
repeadaly need the same METAR, e.g. if you show the current weather
for a fixed location on your homepage. But it is just as quick (or
slow, depending on how you view things) as the other backends when it
comes to showing the weather for a random station. So if that is your
typical usage-pattern, then you might like this backend.
pw_mysql
pw_pgsql
pw_dba
After you have chosen a database backend, you will have to initialize the database. You should first generate the appropriate `defaults.php' file, see 2.1 The `defaults.php' file.
After you have uploaded the file to the webserver, you can load the script `make_db.php' found in the `config' directory in your favorite browser. When you press the "Create or Recreate Tables" button the database will be initialized. If you have selected a SQL-based database, then the necessary tables will be created.
If you have selected a file-based database, then the script will attempt to create the necessary files. This might very well fail: the script is run by the webserver, and the webserver will most likely not have permission to create new files in the `db/files' directory under the PHP Weather root directory because the webserver runs as an unprivileged user.
So, you will have to change the permission on the `db/files' directory. Assuming that the webserver is running some form of Unix and that you have shell access to the machine, then you can execute the following commands after you have logged into the webserver. If you do not have that kind of access to the machine, then you should still be able to change the permissions using your FTP program. The relevant commands are:
cd /root/directory/of/phpweather/installation chmod 777 db/files chmod 777 db/files/* |
Everybody will now be allowed to create and change files under the `db/files' directory. This is a security risk! If you know of a better way to allow the webserver read/write access to the files, please use that instead and tell us so that we can update the manual.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
All database backends have to support a common set of methods -- if PHP had support for interfaces, then we would require them to implement a database interface. Because of the lack of interfaces in the PHP language we are left with this description of what a database backend has to satisfy.
All database backends are defined in their own class which is a
subclass of the pw_db_common
class. If we pretend that we have
a pw_db_foo
database backend, then it must implement
the following methods:
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Now that you have learned about how to install and configure PHP Weather, you might want to learn how you can use it on your own webpages.
3.1 Output Modules | The standard output modules | |
3.2 The Raw Data | It is yours to play with, if you want it |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The textual output you have seen on the `index.php' demonstration
page is produces by an output module called pw_text
. The
images are selected by another module called pw_images
.
These modules illustrate the idea behind PHP Weather: the code in `phpweather.php' handles the parsing of the METAR and then someone else has to present the data in a meaningful way.
3.1.1 Changing the Output | Customize the output to suit your needs |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
You can change the output of PHP Weather.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
It is easy for you to get hold of the raw data produced by the code in `phpweather.php':
$weather = new phpweather(); $data = $weather->decode_metar(); |
The variable $data
is now an multidimensional associative array
filled with all the information that the decode_metar
function
was able to extract from the METAR. The different parts in the METAR
is stored under specific keys in the array -- if the METAR lacks a
given part, then the corresponding entry in the array will be left
out. This means that you will have to check each entry with the
built-in PHP function empty
before you use it, otherwise you
see warnings from PHP, if you have set the error reporting level high
enough.
You can have PHP show you the structure of the array by using the
builtin print_r
function like this:
echo "<pre>\n"; print_r($data); echo "</pre>\n"; |
The following entries is always part of a METAR report, and is therefore always part of the decoded METAR array:
type
metar
icao
location
time
The following entries are all optional so check with empty
before accessing them:
report_mod
wind
deg
entry
tells you the direction of the wind as compass-direction. If the wind
came from variable directions, then will be the string `VRB'.
The meters_per_second
, miles_per_hour
, and knots
entries tells you the wind speed in various units.
If gust was observed, there will be three extra entries:
gust_meters_per_second
, gust_miles_per_hour
, and
gust_knots
.
If the wind was varying, then two extra entries are present:
var_beg
and var_end
. Both of these entries contain a
compass-direction
visibility
Each visibility group contains a prefix
which can be `-1',
`0', or `1' which tells you if the visibility reported is
"less than", "normal", or "greater than" respectively.
The visibility itself is stored in the meter
, km
,
ft
, and miles
entries. There is an optional entry
dir
for a direction -- if there is no direction, then the
visibility refers to the overall visibility.
runway
The groups contain an nr
entry and an optional approach
entry which tells you the runway-number and the approach respectively.
The approach is one of `L', `C', or `R' for "left",
"center", or "right" respectively.
The visibility information can either be a single value or a pair of
values in case of varying conditions. If there is only a single value,
then meter
and ft
holds the visibility, an optional
prefix
can be `-1' if range is less than the lowest
reportable value or `1' if greater than the greatest reportable
value. A tendency
entry holds either `D', `N' or
`U' for "downward tendency", "no distinct tendency", or
"upward tendency" respectively.
weather
$data['weather'][0]
, the second
group (if there is such a group) will be $data['weather'][1]
,
and so on.
Each group contains a proximity
entry which can be either
`VC' for phenomena in the vicinity or the empty string otherwise.
Next comes the intensity
. This can be `-' for light
phenomena, the empty string for moderate phenomena, or `+' for
heavy phenomena.
This is followed by a descriptor
, a precipitation
, a
obscuration
, and finally a other
entry. These entries
contain the actual data found in the METAR. This means that it's up to
the application to decode these symbols further, so that `RA'
becomes "rain" and so on.
clouds
condition
entry which can be either `CAVOK' for no clouds and no
significant weather, `VV' for "vertical visibility", `FEW'
for "few clouds", `SCT' for "scattered clouds", `BKN'
for "broken clouds", `OVC' for "overcast", and `SKC' and
`CLR' for "clear sky". The condition `CAVOK' is a bit
special, because if it is present, then the condition
entry
will be the only entry in the cloud group.
The other conditions will be part of a larger array with an optional
cumulus
entry denoting the presence of cumulonimbus (`CB')
or towering cumulus (`TCU') clouds. There will also be
meter
and ft
entries with the height of the clouds. If
the clouds are below the station, then the height will be stored as
`nil'. Theres an optional prefix
with the usual meaning.
temperature
temp_c
and temp_f
is always present and is the
temperature in degrees Celsius and Fahrenheit respectively. If
information about the dew-point is present, then dew_c
and
dew_f
will be added to the array.
temp_min_max
min6h_c
,
min6h_f
, max6h_c
and max6h_f
for the temperatures
in the last 6 hours, and in min24h_c
, min24h_f
,
max24h_c
and max24h_f
for the temperatures in the last
24 hours.
altimeter
inhg
, mmhg
, hpa
, and atm
.
precipitation
mm
and in
contains the
precipitation during the last hour, entries mm_h6
and
in_6h
store the amount of precipitation in the last 3--6 hours
and finally there is mm_24h
and in_24h
with the
precipitation measured over the last 24 hours. If there has been
snowfall, then that will be reported in the snow_mm
and
snow_in
entries.
All the entries can contain the special value `-1' which means that there was only a trace of precipitation.
remarks
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
You can translate PHP Weather into other languages that the ones provided in the package you downloaded.
4.1 Diverse Translations | How you can handle special cases |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
PHP Weather has facilities ready that makes it possible to totally redefine the generated text from within a translation.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
PHP Weather is a work in progress -- it will probably never be finished because people seams to have a never-ending thirst for new features.
This an attempt to list some of the things that PHP Weather might do in the future:
There is more information about how to decode TAF reports at this website: http://www.awc-kc.noaa.gov/awc/help/taf-decode.html.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
I began writing PHP Weather in June 2000. I had been talking with Kristian Kristensen zianet@zianet.dk about making such a script for a project we were both working on. But it was only after the project was finished, that I began investigating the possibilities of making a script with PHP that could display the current weather.
I knew that it was possible to do such a thing, as I had seen a couple of applets (small programs that serves only one purpose, such as displaying the time or the amount of free space on the hard drive, etc.) that could display the weather. I discovered that they got their data from the NWS who makes the data available at no cost.
The data is available off the Internet via either FTP or HTTP, so it is easy to get hold of it with PHP. The only problem was that the data has to be decoded because it is written in a compact fashion. The data in question is a so-called METAR report that the airports issue once or twice an hour.
I then discovered a script written in Perl that could take a METAR and split it into its components. The script was written by Jeremy D. Zawodny Jeremy@Zawodny.com and is licensed under the GPL just like PHP Weather. So there was no problem with me peeping at his code for PHP Weather. I took the logic from the Perl script and wrote a function in PHP that would decode a METAR.
But that would not do it -- to be useful the decoded data has to be displayed in a nice fashion, preferable so that it is easy to customize. The script should also be able to fetch a METAR from the NWS and once that is done, the METAR should be cached so that the script would run faster after the METAR had been fetched once. The problem is, that it takes about a second to contact the NWS.
I wanted to see the data I could extract from the METAR in a meaningfull way, so I started wrapping the data in English words to form sentences like in "The temperature is 20 degrees Celsius (68 degrees Fahrenheit)". That turned out very nice so I released the code to the public.
I did not think about internationalization then, but after a while, I received a Spanish translation made by Eduardo Guilenea. Because the script was not ready for internationalization, he had simply gone through the script and translated all the English words into Spanish.
That promped me to start thinking about how we could translate PHP
Weater into other languages. I quickly found out, that it would work
if we kept the strings used in external files instead of having them
in the main `phpweather.inc' file. The users could then simply
use include(locale_da.inc)
to get Danish output.
As things started to grow, it became apparent that PHP Weather would have to be reorganized. I wanted a more flexible structure, a structure that would allow us to extend PHP Weather in the future without having to mess with the code that does the actually parsing of the METARs. We also had to be able to support databases in a cleaner way -- the code in `phpweather.inc' had turned into a mess.
So I started to split the file up into several files, and also started to use classes in PHP. This was the first time I had to do an object oriented design, so it was very exciting.
The result is the current PHP Weather, and it does have a quite flexible structure. All locale-specific code has been moved out from the main parsing algorithms, so that PHP Weather can be truly localized. All access to the database is now done through a database abstraction layer: each database is defined in its own class, so it is free to implement the various methods any way it wants.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Everybody listed below has helped in some way with the creation of PHP Weather. If, by some mistake, your name isn't listed below, then send a mail to Martin Geisler gimpster@gimpster.com so that proper credit can given. Please include your SourceForge login, if any, and an URL if you like.
He made the interface to PostgreSQL.
He wrote Geo::METAR
, which is a Perl module which can do some
of the things PHP Weather now does. Geo::METAR
can be found
here: http://www.wcnet.org/jzawodn/perl/Geo-METAR/index.html.
For suggesting that I use http to get the METARs instead of the much slower ftp.
For rewritting some large case
- and switch
-statements as
a couple of arrays. This speeds-up the parsing of the METARs.
He noticed that the pressures was all wrong. I though the unit used in the METAR was hPa, when it really was inHg.
Suggested that I told people how to turn off the warnings, if you don't establish a connection to MySQL.
Later he made it possible to use PHP Weather with DBM databases. He also added support for precipitation. Lots of other stuff, see the `ChangeLog' for more details.
Noticed that South/southeast was duplicated in the directions-array.
Translated PHP Weather into Spanish, and thereby forced me to add support for multiply languages. (Which was a Good Thing :-)
Translated PHP Weather into Norwegian.
He also sat down and did the boring work, when he manually compiled the complete list of all airports available from NWS.
Noticed that I sometimes tried to access $cloud_coverage_array
with just $cloud_coverage
-- which, of cause, didn't work.
Suggested that I changed the long text `... degrees Celsius' into the more compact `... °C', which is much better.
Made the Hungarian translation for PHP Weather. He has also corrected tons of spelling errors.
Lots of explanations and suggestions. He also gave a much simpler formula for calculating the relative humidity.
Helped me spot a little error with the current weather. He has also written code that displays the current weather as an image.
Added support for windchill.
Lots of different things: bugfixes, clever suggestions, and general maintenance.
Translated PHP Weather into Slovak and rewrote the navigation system used in index.php. He also looked at the MySQL and PostgreSQL database and found some security flaws.
Fixed some problems with using PHP Weather on a default installation of PHP 4.2.
Translated PHP Weater into Swedish and Finnish.
Wrote the code that handles connections through a proxy server.
Translated PHP Weather into Dutch.
Made a Czech translation.
Czech translation.
Translated PHP Weather into French.
Updated the Dutch translation.
Finally, a working German translation.
Reported problems with the use of short open tags in a couple of files.
Fixed the rounding of hours and minutes in the pretty-printed report.
Made a Turkish translation.
Provided us with an Italian translation.
Updated the Spanish translation and other bugfixes.
Added a method that decodes TAF reports and made some of the database backends archive the data instead of always replacing the old data with new reports.
Drew a full set of beautiful icons for PHP Weather to display the current weather conditions.
Updated the South African stations in the `stations.csv' file.
Made a British English translation.
Updated the Brazillian stations in the `stations.csv' file.
Contributed a Portugues translation.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Because we believe in Open Source, we have licensed the code in PHP Weather under the GNU General Public License and the manual under the GNU Free Documentation License. This license is similar to the GPL, it is just aimed for documentation.
This means that you are allowed to use PHP Weather on as many websites as you like, and you are even allowed to use it on commercial websites.
A.1 GNU General Public License | ||
A.2 GNU Free Documentation License |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Copyright © 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. |
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
one line to give the program's name and a brief idea of what it does. Copyright (C) yyyy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice |
This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Copyright © 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. |
The purpose of this License is to make a manual, textbook, or other written document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".
A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgments", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (C) year your name. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list. A copy of the license is included in the section entitled ``GNU Free Documentation License''. |
If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being list"; likewise for Back-Cover Texts.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | A B C D F G H I L M O P R T U |
---|
Jump to: | A B C D F G H I L M O P R T U |
---|
[Top] | [Contents] | [Index] | [ ? ] |
The abbreviation METAR is a French abbreviation for "message d'observation météorologique régulière pour l'aviation" which roughly translates to English as "Aviation Routine Weather Report".
[Top] | [Contents] | [Index] | [ ? ] |
Introduction
1. Installation
1.1 Installation Details2. Configuration
2.1 The `defaults.php' file3. Using PHP Weather
2.2 Choosing a Database Backend
2.3 Required Functions in a Backend
3.1 Output Modules4. Translating PHP Weather
3.1.1 Changing the Output3.2 The Raw Data
4.1 Diverse Translations5. Things To Do
6. History
7. Contributors
A. Licenses
A.1 GNU General Public LicenseB. Concept Index
A.1.1 Appendix: How to Apply These Terms to Your New ProgramsA.2 GNU Free Documentation License
A.2.1 ADDENDUM: How to use this License for your documents
[Top] | [Contents] | [Index] | [ ? ] |
Introduction
1. Installation
2. Configuration
3. Using PHP Weather
4. Translating PHP Weather
5. Things To Do
6. History
7. Contributors
A. Licenses
B. Concept Index
[Top] | [Contents] | [Index] | [ ? ] |
Button | Name | Go to | From 1.2.3 go to |
---|---|---|---|
[ < ] | Back | previous section in reading order | 1.2.2 |
[ > ] | Forward | next section in reading order | 1.2.4 |
[ << ] | FastBack | beginning of this chapter or previous chapter | 1 |
[ Up ] | Up | up section | 1.2 |
[ >> ] | FastForward | next chapter | 2 |
[Top] | Top | cover (top) of document | |
[Contents] | Contents | table of contents | |
[Index] | Index | concept index | |
[ ? ] | About | this page |
where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure: