PHP3 Manual

Stig Sæther Bakken

Alexander Aulbach

Egon Schmid

Jim Winstead

Lars Torben Wilson

Rasmus Lerdorf

Zeev Suraski

Edited by

Stig Sæther Bakken

Copyright

This manual is © Copyright 1997, 1998 the PHP Documentation Group. The members of this group are listed on the front page of this manual.

This manual can be redistributed 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.

PHP 3.0 is copyright (C) 1997 the PHP Development Team. The members of this team are listed in the CREDITS file that comes with the PHP 3.0 source distribution.

PHP 3.0 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.

PHP 3.0 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., 675 Mass Ave, Cambridge, MA 02139, USA.



Dedication

Date: 1999-06-07

Release: 3.0.9

Table of Contents
Preface
About this Manual
I. Language Reference
1. Introduction
2. Installation
3. Configuration
4. Features
5. Syntax and grammar
II. Function Reference
I. Adabas D Functions
II. Apache Specific Functions
III. Array Functions
IV. Aspell Functions
V. BC (Arbitrary Precision) Functions
VI. Calendar Functions
VII. Date/Time Functions
VIII. DBA functions
IX. dBase Functions
X. dbm Functions
XI. Directory Functions
XII. Dynamic Loading Functions
XIII. Program Execution Functions
XIV. FDF Functions
XV. filePro Functions
XVI. Filesystem Functions
XVII. Functions related to HTTP
XVIII. Hyperwave functions
XIX. Image functions
XX. IMAP Functions
XXI. PHP options & information
XXII. Informix Functions
XXIII. InterBase Functions
XXIV. LDAP Functions
XXV. Mail Functions
XXVI. Mathematical Functions
XXVII. mcrypt functions
XXVIII. mhash functions
XXIX. Miscellaneous Functions
XXX. mSQL Functions
XXXI. MS SQL Server Functions
XXXII. MySQL Functions
XXXIII. Sybase Functions
XXXIV. Network Functions
XXXV. NIS Functions
XXXVI. ODBC Functions
XXXVII. Oracle 8 functions
XXXVIII. Oracle functions
XXXIX. PCRE functions
XL. PDF Functions
XLI. PostgreSQL functions
XLII. Regular expression functions
XLIII. Semaphore and Shared Memory Functions
XLIV. Solid Functions
XLV. SNMP Functions
XLVI. String functions
XLVII. URL functions
XLVIII. Variable functions
XLIX. Vmailmgr Functions
L. WDDX functions
LI. Gz-file Functions
LII. XML Parser Functions
III. Appendixes
A. Migrating from PHP/FI 2.0 to PHP 3.0
B. PHP development
C. The PHP Debugger

Preface

PHP Version 3.0 is an HTML-embedded scripting language. Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly. 

About this Manual

This manual is written in SGML using the DocBook DTD, using DSSSL (Document Style and Semantics Specification Language) for formatting. The tools used for formatting HTMLTeX and RTF versions are Jade, written by James Clark and The Modular DocBook Stylesheets written by Norman Walsh. PHP3's documentation framework was assembled by Stig Sæther Bakken.

I. Language Reference


Chapter 1. Introduction


What is PHP?

PHP is a server-side HTML-embedded scripting language.

Simple answer, but what does that mean? An example:
Example 1-1. An introductory example
<html><head><title>Example</title>
<body>
<?php echo "Hi, I'm a PHP script!"; ?>
</body></html>
    

Notice how this is different from a CGI script written in other languages like Perl or C -- instead of writing a program with lots of commands to output HTML, you write an HTML script with a some embedded code to do something (in this case, output some text). The PHP code is enclosed in special start and end tags that allow you to jump into and out of "PHP mode".

What distinguishes PHP from something like client-side Javascript is that the code is executed on the server. If you were to have a script similar to the above on your server, the client would receive the results of running that script, with no way of determining what the underlying code may be. You can even configure your web server to process all your HTML files with PHP, and then there's really no way that users can tell what you have up your sleeve.


What can PHP do?

At the most basic level, PHP can do anything any other CGI program can do, such as collect form data, generate dynamic page content, or send and receive cookies.

Perhaps the strongest and most significant feature in PHP is its support for a wide range of databases. Writing a database-enabled web page is incredibly simple. The following databases are currently supported:

 
Adabas D InterBase Solid
dBase mSQL Sybase
Empress MySQL Velocis
FilePro Oracle Unix dbm
Informix PostgreSQL  

 
PHP also has support for talking to other services using protocols such as IMAP, SNMP, NNTP, POP3, or even HTTP. You can even open raw network sockets and interact using other protocols.

A Brief History of PHP

PHP was conceived sometime in the fall of 1994 by Rasmus Lerdorf. Early non-released versions were used on his home page to keep track of who was looking at his online resume. The first version used by others was available sometime in early 1995 and was known as the Personal Home Page Tools. It consisted of a very simplistic parser engine that only understood a few special macros and a number of utilities that were in common use on home pages back then. A guestbook, a counter and some other stuff. The parser was rewritten in mid-1995 and named PHP/FI Version 2. The FI came from another package Rasmus had written which interpreted html form data. He combined the Personal Home Page tools scripts with the Form Interpreter and added mSQL support and PHP/FI was born. PHP/FI grew at an amazing pace and people started contributing code to it.

It is hard to give any hard statistics, but it is estimated that by late 1996 PHP/FI was in use on at least 15,000 web sites around the world. By mid-1997 this number had grown to over 50,000. Mid-1997 also saw a change in the development of PHP. It changed from being Rasmus' own pet project that a handful of people had contributed to, to being a much more organized team effort. The parser was rewritten from scratch by Zeev Suraski and Andi Gutmans and this new parser formed the basis for PHP Version 3. A lot of the utility code from PHP/FI was ported over to PHP3 and a lot of it was completely rewritten.

Today (mid-1999) either PHP/FI or PHP3 ships with a number of commercial products such as C2's StrongHold web server and RedHat Linux and a conservative estimate based on an extrapolation from numbers provided by NetCraft would be that PHP is in use on over 150,000 sites around the world. To put that in perspective, that is more sites than run Netscape's flagship Enterprise server on the Internet.

Also as of this writing, work is underway on the next generation of PHP that will utilize the powerful Zend scripting engine to deliver higher performance, and will also support running under webservers other than Apache as a native server module.


Chapter 2. Installation

This chapter will guide you through the configuration and installation of PHP3. Prerequisite knowledge and software:
    Basic UNIX skills (being able to operate "make" and a C compiler)

    An ANSI C compiler

    A web server (obviously)


Installing From Source on UNIX

Downloading Source

The source code for the latest version can be found at http://www.php.net.

Quick Installation Instructions (Apache Module Version)

1.  gunzip apache_1.3.x.tar.gz
2.  tar xvf apache_1.3.x.tar
3.  gunzip php-3.0.x.tar.gz
4.  tar xvf php-3.0.x.tar
5.  cd apache_1.3.x
6.  ./configure --prefix=/www
7.  cd ../php-3.0.x
8.  ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
9.  make
10. make install
11. cd ../apache_1.3.x
12. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
13. make
14. make install

  Instead of this step you may prefer to simply copy the httpd binary
  overtop of your existing binary.  Make sure you shut down your
  server first though.

15. cd ../php-3.0.x
16. cp php3.ini-dist /usr/local/lib/php3.ini

  You can edit /usr/local/lib/php3.ini file to set PHP options.  If
  you prefer this file in another location, use
  --with-config-file-path=/path in step 8.

17. Edit your httpd.conf or srm.conf file and add: 
      
            AddType application/x-httpd-php3 .php3
 
  You can choose any extension you wish here.  .php3 is simply the one
  we suggest.

18. Use your normal procedure for starting the Apache server. (You must
    stop and restart the server, not just cause the server to reload by
    use a HUP or USR1 signal.)

Configuration

There are two ways of configuring PHP3.
    Using the "setup" script that comes with PHP3. This script asks you a series of questions (almost like the "install" script of PHP/FI 2.0) and runs "configure" in the end. To run this script, type ./setup.

    This script will also create a file called "do-conf", this file will contain the options passed to configure. You can edit this file to change just a few options without having to re-run setup. Then type ./do-conf to run configure with the new options.

    Running configure by hand. To see what options you have, type ./configure --help.

Details about some of the different configuration options are listed below.

Apache module

To build PHP3 as an Apache module, answer "yes" to "Build as an Apache module?" (the --with-apache=DIR option to configure) and specify the Apache distribution base directory. If you have unpacked your Apache distribution in /usr/local/www/apache_1.2.4, this is your Apache distribution base directory. The default directory is /usr/local/etc/httpd.

fhttpd module

To build PHP3 as an fhttpd module, answer "yes" to "Build as an fhttpd module?" (the --with-fhttpd=DIR option to configure) and specify the fhttpd source base directory. The default directory is /usr/local/src/fhttpd. If you are running fhttpd, building PHP as a module will give better performance, more control and remote execution capability.

CGI version

The default is to build PHP3 as a CGI program. If you are running a web server PHP3 has module support for, you should generally go for that solution for performance reasons. However, the CGI version enables Apache users to run different PHP3-enabled pages under different user-ids. Please make sure you read through the Security chapter if you are going to run PHP as a CGI.

Database Support Options

PHP3 has native support for a number of databases (as well as ODBC):

Adabas D

      --with-adabas=DIR
Compiles with Adabas D support. The parameter is the Adabas D install directory and defaults to /usr/local/adabasd.

Adabas home page


dBase

      --with-dbase
Enables the bundled DBase support. No external libraries are required.

filePro

      --with-filepro
Enables the bundled read-only filePro support. No external libraries are required.

mSQL

      --with-msql=DIR
Enables mSQL support. The parameter to this option is the mSQL install directory and defaults to /usr/local/Hughes. This is the default directory of the mSQL 2.0 distribution. configure automatically detects which mSQL version you are running and PHP3 supports both 1.0 and 2.0, but if you compile PHP3 with mSQL 1.0, you can only access mSQL 1.0 databases, and vice-versa.

See also mSQL Configuration Directives in the configuration file.

mSQL home page


MySQL

      --with-mysql=DIR
Enables MySQL support. The parameter to this option is the MySQL install directory and defaults to /usr/local. This is the default installation directory of the MySQL distribution.

See also MySQL Configuration Directives in the configuration file.

MySQL home page


iODBC

      --with-iodbc=DIR
Includes iODBC support. This feature was first developed for iODBC Driver Manager, a freely redistributable ODBC driver manager which runs under many flavors of UNIX. The parameter to this option is the iODBC installation directory and defaults to /usr/local.

FreeODBC home page


OpenLink ODBC

      --with-openlink=DIR
Includes OpenLink ODBC support. The parameter to this option is the OpenLink ODBC installation directory and defaults to /usr/local/openlink.

OpenLink Software's home page


Oracle

      --with-oracle=DIR
Includes Oracle support. Has been tested and should be working at least with Oracle versions 7.0 through 7.3. The parameter is the ORACLE_HOME directory. You do not have to specify this parameter if your Oracle environment has been set up.

Oracle home page


PostgreSQL

      --with-pgsql=DIR
Includes PostgreSQL support. The parameter is the PostgreSQL base install directory and defaults to /usr/local/pgsql.

See also Postgres Configuration Directives in the configuration file.

PostgreSQL home page


Solid

      --with-solid=DIR
Includes Solid support. The parameter is the Solid install directory and defaults to /usr/local/solid.

Solid home page


Sybase

      --with-sybase=DIR
Includes Sybase support. The parameter is the Sybase install directory and defaults to /home/sybase.

See also Sybase Configuration Directives in the configuration file.

Sybase home page


Sybase-CT

      --with-sybase-ct=DIR
Includes Sybase-CT support. The parameter is the Sybase-CT install directory and defaults to /home/sybase.

See also Sybase-CT Configuration Directives in the configuration file.


Velocis

      --with-velocis=DIR
Includes Velocis support. The parameter is the Velocis install directory and defaults to /usr/local/velocis.

Velocis home page


A custom ODBC library

      --with-custom-odbc=DIR
Includes support for an arbitrary custom ODBC library. The parameter is the base directory and defaults to /usr/local.

This option implies that you have defined CUSTOM_ODBC_LIBS when you run the configure script. You also must have a valid odbc.h header somewhere in your include path. If you don't have one, create it and include your specific header from there. Your header may also require some extra definitions, particularly when it is multiplatform. Define them in CFLAGS.

For example, you can use Sybase SQL Anywhere on QNX as following: CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50


Unified ODBC

      --disable-unified-odbc
Disables the Unified ODBC module, which is a common interface to all the databases with ODBC-based interfaces, such as Solid and Adabas D. It also works for normal ODBC libraries. Has been tested with iODBC, Solid, Adabas D and Sybase SQL Anywhere. Requires that one (and only one) of these modules or the Velocis module is enabled, or a custom ODBC library specified. This option is only applicable if one of the following options is used: --with-iodbc, --with-solid, --with-adabas, --with-velocis, or --with-custom-odbc,

See also Unified ODBC Configuration Directives in the configuration file.


LDAP

      --with-ldap=DIR
Includes LDAP (Lightweight Directory Access Protocol) support. The parameter is the LDAP base install directory, defaults to /usr/local/ldap.

More information about LDAP can be found in RFC1777 and RFC1778.


Other configure options

--with-mcrypt=DIR

      --with-mcrypt
Include support for the mcrypt library. See the mcrypt documentation for more information. If you use the optional DIR argument, PHP will look for mcrypt.h in DIR/include.

--enable-sysvsem

      --enable-sysvsem
Include support for Sys V semaphores (supported by most Unix derivates). See the Semaphore and Shared Memory documentation for more information.

--enable-sysvshm

      --enable-sysvshm
Include support for Sys V shared memory (supported by most Unix derivates). See the Semaphore and Shared Memory documentation for more information.

--with-xml

      --with-xml
Include support for a non-validating XML parser using James Clark's expat library. See the XML function reference for details.

--enable-maintainer-mode

      --enable-maintainer-mode
Turns on extra dependencies and compiler warnings used by some of the PHP3 developers.

--with-system-regex

      --with-system-regex
Uses the system's regular expression library rather than the bundled one. If you are building PHP3 as a server module, you must use the same library when building PHP3 as when linking the server. Enable this if the system's library provides special features you need. It is recommended that you use the bundled library if possible.

--with-config-file-path

      --with-config-file-path=DIR
The path used to look for the php3.ini file when PHP starts up.

--with-exec-dir

      --with-exec-dir=DIR
Only allow running of executables in DIR when in safe mode. Defaults to /usr/local/bin. This option only sets the default, it may be changed with the safe_mode_exec_dir directive in the configuration file later.

--disable-debug

      --disable-debug
Does not include debug information in the library or executable. The debug information makes it easier to pinpoint bugs, so it is a good idea to leave debug on as long as PHP3 is in alpha or beta state.

--enable-safe-mode

      --enable-safe-mode
Enables "safe mode" by default. This imposes several restrictions on what PHP can do, such as opening only files within the document root. Read the Security chapter for more more information. CGI users should always enable secure mode. This option only sets the default, it may be enabled or disabled with the safe_mode directive in the configuration file later.

--enable-track-vars

      --enable-track-vars
Makes PHP3 keep track of where GET/POST/cookie variables come from in the arrays HTTP_GET_VARS, HTTP_POST_VARS and HTTP_COOKIE_VARS. This option only sets the default, it may be enabled or disabled with the track_vars directive in the configuration file later.

--enable-magic-quotes

      --enable-magic-quotes
Enable magic quotes by default. This option only sets the default, it may be enabled or disabled with the magic_quotes_runtime directive in the configuration file later. See also the magic_quotes_gpc and the magic_quotes_sybase directives.

--enable-debugger

      --enable-debugger
Enables the internal PHP3 debugger support. This feature is still in an experimental state. See also the Debugger Configuration directives in the configuration file.

--enable-discard-path

      --enable-discard-path
If this is enabled, the PHP CGI binary can safely be placed outside of the web tree and people will not be able to circumvent .htaccess security. Read the section in the security chapter about this option.

--enable-bcmath

      --enable-bcmath
Enables bc style arbitrary precision math functions. See also the bcmath.scale option in the configuration file.

--enable-force-cgi-redirect

      --enable-force-cgi-redirect
Enable the security check for internal server redirects. You should use this if you are running the CGI version with Apache.

When using PHP as a CGI binary, PHP by default always first checks that it is used by redirection (for example under Apache, by using Action directives). This makes sure that the PHP binary cannot be used to bypass standard web server authentication procedures by calling it directly, like http://my.host/cgi-bin/php/secret/doc.html. This example accesses http://my.host/secret/doc.html but does not honour any security settings enforced by httpd for directory /secret.

Not enabling option disables the check and enables bypassing httpd security and authentication settings. Do this only if your server software is unable to indicate that a safe redirection was done and all your files under your document root and user directories may be accessed by anyone.

Read the section in the security chapter about this option.


--disable-short-tags

      --disable-short-tags
Disables the short form <? ?> PHP3 tags. You must disable the short form if you want to use PHP3 with XML. With short tags disabled, the only PHP3 code tag is <?php ?>. This option only sets the default, it may be enabled or disabled with the short_open_tag directive in the configuration file later.

--enable-url-includes

      --enable-url-includes
Makes it possible to run code on other HTTP or FTP servers directly from PHP3 with include(). See also the include_path option in the configuration file.

--disable-syntax-hl

      --disable-syntax-hl
Turns off syntax highlighting.

CPPFLAGS and LDFLAGS

To make the PHP3 installation look for header or library files in different directories, modify the CPPFLAGS and LDFLAGS environment variables, respectively. If you are using a sensible shell, you should be able to do LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure

Building

When PHP3 is configured, you are ready to build the CGI executable or the PHP3 library. The command make should take care of this. If it fails and you can't figure out why, see the Problems section.

VPATH


Testing

If you have built PHP3 as a CGI program, you may test your build by typing make test. It is always a good idea to test your build. This way you may catch a problem with PHP3 on your platform early instead of having to struggle with it later.

Benchmarking

If you have built PHP3 as a CGI program, you may benchmark your build by typing make bench. Note that if safe mode is on by default, the benchmark may not be able to finish if it takes longer then the 30 seconds allowed. This is because the set_time_limit() can not be used in safe mode. Use the max_execution_time to control this time for you own scripts. make bench ignores the configuration file.

PHP3 Installation Guide for Windows

This install guide will help you install and configure PHP3 on your Windows 9x/NT webservers. This guide was compiled by Bob Silva. The latest revision can be found at http://www.umesd.k12.or.us/php/win32install.html.

This guide provides installation support for:
 
Personal Web Server (Newest version recommended) 
Internet Information Server 3 or 4 
Apache 1.3.x 
Omni HTTPd 2.0b1 


Configuration Changes for PHP3

All modules are now prefixed with 'php3_'. You will need to change your php3.ini file and/or any scripts loading extensions with the dl() function (or you could always remove the 'php3_' prefix). This will prevent confusion between php modules and their supporting libraries.

The ChangeLog, FAQ and updated documentation can always be found at the offical PHP website or any of its mirrors.


General Installation Steps

The following steps should be performed on all installations before the server specific instructions.
    Extract the distribution file to a directory of your choice. "C:\PHP3\" is a good start.

    Copy the file, 'php3-dist.ini' to your '%WINDOWS%' directory and rename it to 'php3.ini'. Your '%WINDOWS%' directory is typically:
     
    c:\windows for Windows 95/98
    c:\winnt or c:\winnt40 for NT servers

    Edit your 'php3.ini' file:

      You will need to change the 'extension_dir' setting to point to your php-install-dir, or where you have placed your 'php3_*.dll' files. ex: c:\php3

      Set the 'doc_root' to point to your webservers document_root. ex: c:\apache\htdocs or c:\webroot

      Choose which modules you would like to load when PHP starts. You can uncomment the: 'extension=php3_*.dll' lines to load these modules. Some modules require you to have additional libraries installed on your system for the module to work correctly. The PHP FAQ has more information on where to get supporting libraries. You can also load a module dynamically in your script using: dl("php_*.dll");

      On PWS and IIS, you can set the browscap.ini to point to: 'c:\windows\system\inetsrv\browscap.ini' on Windows 95/98 und 'c:\winnt\system32\inetsrv\browscap.ini' on NT Server. Additional information on using the browscap functionality in PHP can be found at this mirror, select the "source" button to see it in action.


Windows 95/98/NT and PWS/IIS 3

The recommended method for configuring these servers is to use the INF file included with the distribution (php_iis_reg.inf). You may want to edit this file and make sure the extensions and PHP install directories match your configuration. Or you can follow the steps below to do it manually.

WARNING: These steps involve working directly with the windows registry. One error here can leave your system in an unstable state. We highly recommend that you back up your registry first. The PHP Development team will not be held responsible if you damage your registry.

    Run Regedit.

    Navigate to: HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters /ScriptMap.

    On the edit menu select: New->String Value.

    Type in the extension you wish to use for your php scripts. ex: .php3

    Double click on the new string value and enter the path to php.exe in the value data field. ex: c:\php3\php.exe %s %s. The '%s %s' is VERY important, PHP will not work properly without it.

    Repeat these steps for each extension you wish to associate with PHP scripts.

    Now navigate to: HKEY_CLASSES_ROOT

    On the edit menu select: New->Key.

    Name the key to the extension you setup in the previous section. ex: .php3

    Highlight the new key and in the right side pane, double click the "default value" and enter phpfile.

    Repeat the last step for each extension you set up in the previous section.

    Now create another New->Key under HKEY_CLASSES_ROOT and name it phpfile.

    Highlight the new key phpfile and in the right side pane, double click the "default value" and enter PHP Script.

    Right click on the phpfile key and select New->Key, name it Shell.

    Right click on the Shell key and select New->Key, name it open.

    Right click on the open key and select New->Key, name it command.

    Highlight the new key command and in the right side pane, double click the "default value" and enter the path to php.exe. ex: c:\php3\php.exe -q %1. (don't forget the %1).

    Exit Regedit.

PWS and IIS 3 users now have a fully operational system. IIS 3 users can use a nifty tool from Steven Genusa to configure their script maps.

Windows NT and IIS 4

To install PHP3 on an NT Server running IIS 4, follow these instructions:
    In Internet Service Manager (MMC), select the Web site or the starting point directory of an application.

    Open the directory's property sheets (by right clicking and selecting properties), and then click the Home Directory, Virtual Directory, or Directory tab.

    Click the Configuration button, and then click the App Mappings tab.

    Click Add, and in the Executable box, type: c:\path-to-php-dir\php.exe %s %s. You MUST have the %s %s on the end, PHP will not function properly if you fail to do this.

    In the Extension box, type the file name extension you want associated with PHP scripts. (You must repeat step 5 and 6 for each extension you want accociated with PHP scripts. (.php3 and .phtml are common)

    Set up the appropriate security. (This is done in Internet Service Manager), and if your NT Server uses NTFS file system, add execute rights for I_USR_ to the directory that contains php.exe.


Windows 9x/NT and Apache 1.3.x

You must edit your srm.conf or httpd.conf to configure Apache to work with the PHP CGI binary.

Although there can be a few variations of configuring PHP under Apache, this one is simple enough to be used by the newcomer. Please consult the Apache Docs for further configuration directives.

    ScriptAlias /php3/ "c:/path-to-php-dir/"

    AddType application/x-httpd-php3 .php3

    AddType application/x-httpd-php3 .phtml

    Action application/x-httpd-php3 "/php3/php.exe"

To use the source code highlighting feature, simply create a PHP script file and stick this code in: <?php show_source ("original_php_script.php3"); ?>. Substitute original_php_script.php3 with the name of the file you wish to show the source of. (this is only one way of doing it). Note: On Win-Apache all back slashes in a path statement such as: "c:\directory\file.ext", must be converted to forward slashes.

Omni HTTPd 2.0b1 for Windows

This has got to be the easiest config there is:
 
Step 1: Install Omni server 
Step 2: Right click on the blue OmniHTTPd icon in the system tray and select Properties
Step 3: Click on Web Server Global Settings
Step 4: On the 'External' tab, enter: virtual = .php3 | actual = c:\path-to-php-dir\php.exe
Step 5: On the Mime tab, enter: virtual = wwwserver/stdcgi | actual = .php3
Step 6: Click OK

Repeat steps 2 - 6 for each extension you want to associate with PHP.


PHP Modules

Table 2-1. PHP Modules
 
php3_calendar.dll Calendar conversion functions
php3_crypt.dll Crypt functions
php3_dbase.dll DBase functions
php3_dbm.dll GDBM emulation via Berkely DB2 library
php3_filepro.dll READ ONLY access to filepro databases
php3_gd.dll GD Library functions for gif manipulation
php3_hyperwave.dll HyperWave functions
php3_imap4r2.dll IMAP 4 functions
php3_ldap.dll LDAP functions
php3_msql1.dll mSQL 1 client
php3_msql2.dll mSQL 2 client
php3_mssql.dll MSSQL client (requires MSSQL DB-Libraries
php3_mysql.dll MySQL functions
php3_nsmail.dll Netscape mail functions
php3_oci73.dll Oracle functions
php3_snmp.dll SNMP get and walk functions (NT only!)
php3_zlib.dll ZLib functions

Problems?

Read the FAQ

Some problems are more common than others. The most common ones are listed in the PHP3 FAQ, found at http://www.php.net/FAQ.php3

Bug reports

If you think you have found a bug in PHP3, please report it. The PHP3 developers probably don't know about it, and unless you report it, chances are it won't be fixed. A form for reporting bugs is available on the PHP3 network of sites, the main form is at http://ca.php.net/bugs.php3.

Other problems

If you are still stuck, someone on the PHP3 mailing list may be able to help you. You should check out the archive first, in case someone already answered someone else who had the same problem as you. The archive is available at http://www.tryc.on.ca/php3.html. To subscribe to the PHP3 mailing list, send an empty mail to php3-subscribe@lists.php.net. The mailing list address is php3@lists.php.net.

If you want to get help on the mailing list, please try to be precise and give the necessary details about your environment (which operating system, what PHP version, what web server, if you are running PHP as CGI or a server module, etc.), and preferably enough code to make others able to reproduce and test your problem.


Security

PHP is a powerful tool. As with many other powerful tools, it is possible to shoot yourself in the foot with it. PHP has functionality that, if carelessly used, may cause security problems on your system. The best way of preventing this is to always know what you are doing. Read the Security chapter for more information.

Chapter 3. Configuration

The php3.ini file

The php3.ini file is read when PHP's parser starts up. For the server module versions of PHP, this happens only once when the web server is started. For the CGI version, it happens on every invocation.

Just about every directive listed here has a corresponding Apache httpd.conf directive. Simply prepend php3_ to the start of the directive names listed here.

You can view the settings of most of the configuration values in the output of phpinfo().


General Configuration Directives

auto_append_file string


Specifies the name of a file that is automatically parsed after the main file. The file is included as if it was called with the include() function, so include_path is used.

The special value none disables auto-appending.

Note: If the script is terminated with exit(), auto-append will not occur.
auto_prepend_file string


Specifies the name of a file that is automatically parsed before the main file. The file is included as if it was called with the include() function, so include_path is used.

The special value none disables auto-prepending.

cgi_ext string
display_errors boolean


This determines whether errors should be printed to the screen as part of the HTML output or not.

doc_root string


PHP's "root directory" on the server. Only used if non-empty. If PHP is configured with safe mode, no files outside this directory are served.

engine boolean


This directive is really only useful in the Apache module version of PHP. It is used by sites that would like to turn PHP parsing on and off on a per-directory or per-virtual server basis. By putting php3_engine off in the appropriate places in the httpd.conf file, PHP can be enabled or disabled.

error_log string


Name of file where script errors should be logged. If the special value syslog is used, the errors are sent to the system logger instead. On UNIX, this means syslog(3) and on Windows NT it means the event log. The system logger is not supported on Windows 95.

error_reporting integer


Set the error reporting level. The parameter is an integer representing a bit field. Add the values of the error reporting levels you want.

Table 3-1. Error Reporting Levels
 
bit value enabled reporting
1 normal errors
2 normal warnings
4 parser errors
8 non-critical style-related warnings
The default value for this directive is 7 (normal errors, normal warnings and parser errors are shown).
open_basedir string


Limit the files that can be opened by PHP to the specified directory-tree.

When a script tries to open a file with, for example, fopen or gzopen, the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to open it. All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink.

The special value . indicates that the directory in which the script is stored will be used as base-directory.

From PHP 3.0.7, it is possible to supply more than one directory. Under Windows, separate the directories with a semicolon. On all other systems, separate the directories with a colon. As an Apache module, open_basedir paths from parent directories are now automatically inherited.

The default is to allow all files to be opened.

gpc_order string


Set the order of GET/POST/COOKIE variable parsing. The default setting of this directive is "GPC". Setting this to "GP", for example, will cause PHP to completely ignore cookies and to overwrite any GET method variables with POST-method variables of the same name.

ignore_user_abort string


Off by default. If changed to On scripts will run to completion even if the remote client disconnects in the middle. See also ignore_user_abort().

include_path string


Specifies a list of directories where the require(), include() and fopen_with_path() functions look for files. The format is like the system's PATH environment variable: a list of directories separated with a colon in UNIX or semicolon in Windows.
Example 3-1. UNIX include_path
include_path=.:/home/httpd/php-lib
Example 3-2. Windows include_path
include_path=".;c:\www\phplib"
The default value for this directive is . (only the current directory).

isapi_ext string
log_errors boolean


Tells whether script error messages should be logged to the server's error log. This option is thus server-specific.

magic_quotes_gpc boolean


Sets the magic_quotes state for GPC (Get/Post/Cookie) operations. When magic_quotes are on, all ' (single-quote), " (double quote), \ (backslash) and NUL's are escaped with a backslash automatically. If magic_quotes_sybase is also on, a single-quote is escaped with a single-quote instead of a backslash.

magic_quotes_runtime boolean


If magic_quotes_runtime is enabled, most functions that return data from any sort of external source including databases and text files will have quotes escaped with a backslash. If magic_quotes_sybase is also on, a single-quote is escaped with a single-quote instead of a backslash.

magic_quotes_sybase boolean


If magic_quotes_sybase is also on, a single-quote is escaped with a single-quote instead of a backslash if magic_quotes_gpc or magic_quotes_runtime is enabled.

max_execution_time integer


This sets the maximum time in seconds a script is allowed to take before it is terminated by the parser. This helps prevent poorly written scripts from tieing up the server.

memory_limit integer


This sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server.

nsapi_ext string
short_open_tag boolean


Tells whether the short form (<? ?>of PHP's open tag should be allowed. If you want to use PHP in combination with XML, you have to disable this option. If disabled, you must use the long form of the open tag (<?php ?>).

sql.safe_mode boolean
track_errors boolean


If enabled, the last error message will always be present in the global variable $php_errormsg.

track_vars boolean


If enabled, GET, POST and cookie input can be found in the global associative arrays $HTTP_GET_VARS$HTTP_POST_VARS and $HTTP_COOKIE_VARS, respectively.

upload_tmp_dir string


The temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as.

user_dir string


The base name of the directory used on a user's home directory for PHP files, for example public_html.

warn_plus_overloading boolean


If enabled, this option makes PHP output a warning when the plus (+) operator is used on strings. This is to make it easier to find scripts that need to be rewritten to using the string concatenator instead (.).


Mail Configuration Directives

SMTP string


DNS name or IP address of the SMTP server PHP under Windows should use for mail sent with the mail() function.

sendmail_from string


Which "From:" mail address should be used in mail sent from PHP under Windows.

sendmail_path string


Where the sendmail program can be found, usually /usr/sbin/sendmail or /usr/lib/sendmail configure does an honest attempt of locating this one for you and set a default, but if it fails, you can set it here.

Systems not using sendmail should set this directive to the sendmail wrapper/replacement their mail system offers, if any. For example, Qmail users can normally set it to /var/qmail/bin/sendmail.


Safe Mode Configuration Directives

safe_mode boolean


Whether to enable PHP's safe mode. Read the Security chapter for more more information.

safe_mode_exec_dir string


If PHP is used in safe mode, system() and the other functions executing system programs refuse to start programs that are not in this directory.


Debugger Configuration Directives

debugger.host string


DNS name or IP address of host used by the debugger.

debugger.port string


Port number used by the debugger.

debugger.enabled boolean


Whether the debugger is enabled.


Extension Loading Directives

enable_dl boolean


This directive is really only useful in the Apache module version of PHP. You can turn dynamic loading of PHP extensions with dl() on and off per virtual server or per directory.

The main reason for turning dynamic loading off is security. With dynamic loading, it's possible to ignore all the safe_mode and open_basedir restrictions.

The default is to allow dynamic loading, except when using safe-mode. In safe-mode, it's always imposible to use dl().

extension_dir string


In what directory PHP should look for dynamically loadable extensions.

extension string


Which dynamically loadable extensions to load when PHP starts up.


MySQL Configuration Directives

mysql.allow_persistent boolean


Whether to allow persistent MySQL connections.

mysql.max_persistent integer


The maximum number of persistent MySQL connections per process.

mysql.max_links integer


The maximum number of MySQL connections per process, including persistent connections.


mSQL Configuration Directives

msql.allow_persistent boolean


Whether to allow persistent mSQL connections.

msql.max_persistent integer


The maximum number of persistent mSQL connections per process.

msql.max_links integer


The maximum number of mSQL connections per process, including persistent connections.


Postgres Configuration Directives

pgsql.allow_persistent boolean


Whether to allow persistent Postgres connections.

pgsql.max_persistent integer


The maximum number of persistent Postgres connections per process.

pgsql.max_links integer


The maximum number of Postgres connections per process, including persistent connections.


Sybase Configuration Directives

sybase.allow_persistent boolean


Whether to allow persistent Sybase connections.

sybase.max_persistent integer


The maximum number of persistent Sybase connections per process.

sybase.max_links integer


The maximum number of Sybase connections per process, including persistent connections.


Sybase-CT Configuration Directives

sybct.allow_persistent boolean


Whether to allow persistent Sybase-CT connections. The default is on.

sybct.max_persistent integer


The maximum number of persistent Sybase-CT connections per process. The default is -1 meaning unlimited.

sybct.max_links integer


The maximum number of Sybase-CT connections per process, including persistent connections. The default is -1 meaning unlimited.

sybct.min_server_severity integer


Server messages with severity greater than or equal to sybct.min_server_severity will be reported as warnings. This value can also be set from a script by calling sybase_min_server_severity(). The default is 10 which reports errors of information severity or greater.

sybct.min_client_severity integer


Client library messages with severity greater than or equal to sybct.min_client_severity will be reported as warnings. This value can also be set from a script by calling sybase_min_client_severity(). The default is 10 which effectively disables reporting.

sybct.login_timeout integer


The maximum time in seconds to wait for a connection attempt to succeed before returning failure. Note that if max_execution_time has been exceeded when a connection attempt times out, your script will be terminated before it can take action on failure. The default is one minute.

sybct.timeout integer


The maximum time in seconds to wait for a select_db or query operation to succeed before returning failure. Note that if max_execution_time has been exceeded when am operation times out, your script will be terminated before it can take action on failure. The default is no limit.

sybct.hostname string


The name of the host you claim to be connecting from, for display by sp_who. The default is none.


Informix Configuration Directives

ifx.allow_persistent boolean


Whether to allow persistent Informix connections.

ifx.max_persistent integer


The maximum number of persistent Informix connections per process.

ifx.max_links integer


The maximum number of Informix connections per process, including persistent connections.

ifx.default_host string


The default host to connect to when no host is specified in ifx_connect() or ifx_pconnect().

ifx.default_user string


The default user id to use when none is specified in ifx_connect() or ifx_pconnect().

ifx.default_password string


The default password to use when none is specified in ifx_connect() or ifx_pconnect().

ifx.blobinfile boolean


Set to true if you want to return blob columns in a file, false if you want them in memory. You can override the setting at runtime with ifx_blobinfile_mode().

ifx.textasvarchar boolean


Set to true if you want to return TEXT columns as normal strings in select statements, false if you want to use blob id parameters. You can override the setting at runtime with ifx_textasvarchar().

ifx.byteasvarchar boolean


Set to true if you want to return BYTE columns as normal strings in select queries, false if you want to use blob id parameters. You can override the setting at runtime with ifx_textasvarchar().

ifx.charasvarchar boolean


Set to true if you want to trim trailing spaces from CHAR columns when fetching them.

ifx.nullformat boolean


Set to true if you want to return NULL columns as the literal string "NULL", false if you want them returned as the empty string "". You can override this setting at runtime with ifx_nullformat().


BC Math Configuration Directives

bcmath.scale integer


Number of decimal digits for all bcmath functions.


Browser Capability Configuration Directives

browscap string


Name of browser capabilities file.


Unified ODBC Configuration Directives

uodbc.default_db string


ODBC data source to use if none is specified in odbc_connect() or odbc_pconnect().

uodbc.default_user string


User name to use if none is specified in odbc_connect() or odbc_pconnect().

uodbc.default_pw string


Password to use if none is specified in odbc_connect() or odbc_pconnect().

uodbc.allow_persistent boolean


Whether to allow persistent ODBC connections.

uodbc.max_persistent integer


The maximum number of persistent ODBC connections per process.

uodbc.max_links integer


The maximum number of ODBC connections per process, including persistent connections.


Apache Module

Apache module configuration directives


CGI redirection module/action module


CGI


Virtual hosts


Security

PHP is a powerful language and the interpreter, whether included in a web server as a module or executed as a separate CGI binary, is able to access files, execute commands and open network connections on the server. These properties make anything run on a web server insecure by default. PHP is designed specifically to be a more secure language for writing CGI programs than Perl or C, and with correct selection of compile-time and runtime configuration options it gives you exactly the combination of freedom and security you need.

As there are many different ways of utilizing PHP, there are many configuration options controlling its behaviour. A large selection of options guarantees you can use PHP for a lot of purposes, but it also means there are combinations of these options and server configurations that result in an insecure setup. This chapter explains the different configuration option combinations and the situations they can be safely used.


CGI binary

Possible attacks

Using PHP as a CGI binary is an option for setups that for some reason do not wish to integrate PHP as a module into server software (like Apache), or will use PHP with different kinds of CGI wrappers to create safe chroot and setuid environments for scripts. This setup usually involves installing executable PHP binary to the web server cgi-bin directory. CERT advisory CA-96.11 recommends agains placing any interpreters into cgi-bin. Even if the PHP binary can be used as a standalone interpreter, PHP is designed to prevent the attacks this setup makes possible:
    Accessing system files: http://my.host/cgi-bin/php?/etc/passwd

    The query information in an url after the question mark (?) is passed as command line arguments to the interpreter by the CGI interface. Usually interpreters open and execute the file specified as the first argument on the command line.

    When invoked as a CGI binary, PHP refuses to interpret the command line arguments.

    Accessing any web document on server: http://my.host/cgi-bin/php/secret/doc.html

    The path information part of the url after the PHP binary name, /secret/doc.html is conventionally used to specify the name of the file to be opened and interpreted by the CGI program. Usually some web server configuration directives (Apache: Action) are used to redirect requests to documents like http://my.host/secret/script.php3 to the PHP interpreter. With this setup, the web server first checks the access permissions to the directory /secret, and after that creates the redirected request http://my.host/cgi-bin/php/secret/script.php3. Unfortunately, if the request is originally given in this form, no access checks are made by web server for file /secret/script.php3, but only for the /cgi-bin/php file. This way any user able to access /cgi-bin/php is able to access any protected document on the web server.

    In PHP, compile-time configuration option --enable-force-cgi-redirect and runtime configuration directives doc_root and user_dir can be used to prevent this attack, if the server document tree has any directories with access restrictions. See below for full explanation of different combinations.


Case 1: only public files served

If your server does not have any content that is not restricted by password or ip based access control, there is no need for these configuration options. If your web server does not allow you to do redirects, or the server does not have a way to communicate with the PHP binary that the request is a safely redirected request, you can specify the option --disable-force-cgi-redirect to the configure script. You still have to make sure your PHP scripts do not rely on one or another way of calling the script, neither by directly http://my.host/cgi-bin/php/dir/script.php3 nor by redirection http://my.host/dir/script.php3.

Redirection can be configured for example in apache by directives AddHandler and Action (see below).


Case 2: using --enable-force-cgi-redirect

This compile-time option prevents anyone from calling PHP directly with a url like http://my.host/cgi-bin/php/secretdir/script.php3. Instead, PHP will only parse in this mode if it has gone through a web server redirect rule.

Usually the redirection in the Apache configuration is done with the following directives:

Action php3-script /cgi-bin/php
AddHandler php3-script .php3
This option has only been tested with the Apache web server, and relies on Apache to set the non-standard CGI environment variable REDIRECT_STATUS on redirected requests. If your web server does not support any way of telling if the request is direct or redirected, you cannot use this option and you must use one of the other ways of running the CGI version documented here.

Case 3: setting doc_root or user_dir

To include active content, like scripts and executables, in the web server document directories is sometimes consider an insecure practice. If for some configuration mistake the scripts are not executed but displayed as usual HTML documents, this may result in leakage of intellectual property or security information like passwords. Therefore many sysadmins will prefer setting up another directory structure for scripts that is only accessible through the PHP CGI, and therefore always interpreted and not displayed as such.

Also if the method for making sure the requests are not redirected, as described in the previous section, is not available, it is necessary to set up a script doc_root that is different from web document root.

You can set the PHP script document root by the configuration directive doc_root in the php3.ini file, or you can set the environment variable PHP_DOCUMENT_ROOT. If it is set, the CGI version of PHP will always construct the file name to open with this doc_root and the path information in the request, so you can be sure no script is executed outside this directory (except for user_dir below).

Another option usable here is user_dir. When user_dir is unset, only thing controlling the opened file name is doc_root. Opening an url like http://my.host/~user/doc.php3 does not result in opening a file under users home directory, but a file called ~user/doc.php3 under doc_root (yes, a directory name starting with a tilde [~]).

If user_dir is set to for example public_php, a request like http://my.host/~user/doc.php3 will open a file called doc.php3 under the directory named public_php under the home directory of the user. If the home of the user is /home/user, the file executed is /home/user/public_php/doc.php3.

user_dir expansion happens regardless of the doc_root setting, so you can control the document root and user directory access separately.


Case 4: PHP parser outside of web tree

A very secure option is to put the PHP parser binary somewhere outside of the web tree of files. In /usr/local/bin, for example. The only real downside to this option is that you will now have to put a line similar to:
#!/usr/local/bin/php
as the first line of any file containing PHP tags. You will also need to make the file executable. That is, treat it exactly as you would treat any other CGI script written in Perl or sh or any other common scripting language which uses the #! shell-escape mechanism for launching itself.

To get PHP to handle PATH_INFO and PATH_TRANSLATED information correctly with this setup, the php parser should be compiled with the --enable-discard-path configure option.


Apache module

When PHP is used as an Apache module it inherits Apache's user permissions (typically those of the "nobody" user).

Chapter 4. Features


HTTP authentication with PHP

The HTTP Authentication hooks in PHP are only available when it is running as an Apache module and is hence not available in the CGI version. In an Apache module PHP script, it is possible to use the Header() function to send an "Authentication Required" message to the client browser causing it to pop up a Username/Password input window. Once the user has filled in a username and a password, the URL containing the PHP script will be called again with the variables, $PHP_AUTH_USER, $PHP_AUTH_PW and $PHP_AUTH_TYPE set to the user name, password and authentication type respectively. Only "Basic" authentication is supported at this point. See the Header() function for more information.

An example script fragment which would force client authentication on a page would be the following:
Example 4-1. HTTP Authentication example
<?php
  if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic realm=\"My Realm\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Text to send if user hits Cancel button\n";
    exit;
  } else {
    echo "Hello $PHP_AUTH_USER.<P>";
    echo "You entered $PHP_AUTH_PW as your password.<P>";
  }
?>
     

Instead of simply printing out the $PHP_AUTH_USER and $PHP_AUTH_PW, you would probably want to check the username and password for validity. Perhaps by sending a query to a database, or by looking up the user in a dbm file.

Watch out for buggy Internet Explorer browsers out there. They seem very picky about the order of the headers. Sending the WWW-Authenticate header before the HTTP/1.0 401 header seems to do the trick for now.

In order to prevent someone from writing a script which reveals the password for a page that was authenticated through a traditional external mechanism, the PHP_AUTH variables will not be set if external authentication is enabled for that particular page. In this case, the $REMOTE_USER variable can be used to identify the externally-authenticated user.

Note, however, that the above does not prevent someone who controls a non-authenticated URL from stealing passwords from authenticated URLs on the same server.

Both Netscape and Internet Explorer will clear the local browser window's authentication cache for the realm upon receiving a server response of 401. This can effectively "log out" a user, forcing them to re-enter their username and password. Some people use this to "time out" logins, or provide a "log-out" button.
 
Example 4-2. HTTP Authentication example forcing a new name/password
<?php
  function  authenticate()  {
    Header( "WWW-authenticate:  basic  realm='Test  Authentication  System'");
    Header( "HTTP/1.0  401  Unauthorized");
    echo  "You  must  enter  a  valid  login  ID  and  password  to  access  this  resource\n";
    exit;
  }

  if(!isset($PHP_AUTH_USER)  ||  ($SeenBefore ==  1  &&  !strcmp($OldAuth,  $PHP_AUTH_USER))  )  {
    authenticate();
  }  
  else  {
    echo  "Welcome:  $PHP_AUTH_USER<BR>";
    echo  "Old:  $OldAuth";
    echo  "<FORM  ACTION=\"$PHP_SELF\"  METHOD=POST>\n";
    echo  "<INPUT  TYPE=HIDDEN  NAME=\"SeenBefore\"  VALUE=\"1\">\n";
    echo  "<INPUT  TYPE=HIDDEN  NAME=\"OldAuth\"  VALUE=\"$PHP_AUTH_USER\">\n";
    echo  "<INPUT  TYPE=Submit  VALUE=\"Re  Authenticate\">\n";
    echo  "</FORM>\n";

}
?>
    

This behavior is not required by the HTTP Basic authentication standard, so you should never depend on this. Testing with Lynx has shown that Lynx does not clear the authentication credentials with a 401 server response, so pressing back and then forward again will open the resource (as long as the credential requirements haven't changed).

Also note that this does not work using Microsoft's IIS server and the CGI version of PHP due to a limitation of IIS.


GIF creation with PHP

PHP is not limited to creating just HTML output. It can also be used to create GIF image files, or even more convenient GIF image streams. You will need to compile PHP with the GD library of image functions for this to work.
Example 4-3. GIF creation with PHP
<?php
    Header("Content-type: image/gif");
    $string=implode($argv," ");
    $im = imagecreatefromgif("images/button1.gif");
    $orange = ImageColorAllocate($im, 220, 210, 60);
    $px = (imagesx($im)-7.5*strlen($string))/2;
    ImageString($im,3,$px,9,$string,$orange);
    ImageGif($im);
    ImageDestroy($im);
?>
     
This example would be called from a page with a tag like: <img src="button.php3?text"> The above button.php3 script then takes this "text" string an overlays it on top of a base image which in this case is "images/button1.gif" and outputs the resulting image. This is a very convenient way to avoid having to draw new button images every time you want to change the text of a button. With this method they are dynamically generated.

File upload support

PHP is capable of receiving file uploads from any RFC-1867 compliant browser (which includes Netscape Navigator 3 or later, Microsoft Internet Explorer 3 with a patch from Microsoft, or later without a patch). This feature lets people upload both text and binary files. With PHP's authentication and file manipulation functions, you have full control over who is allowed to upload and what is to be done with the file once it has been uploaded.

Note that PHP also supports PUT-method file uploads as used by Netscape Composer and W3C's Amaya clients. See the PUT Method Support for more details.

A file upload screen can be built by creating a special form which looks something like this:
Example 4-4. File Upload Form
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
     
The _URL_ should point to a php html file. The MAX_FILE_SIZE hidden field must precede the file input field and its value is the maximum filesize accepted. The value is in bytes. In this destination file, the following variables will be defined upon a successful upload:

    $userfile - The temporary filename in which the uploaded file was stored on the server machine.

    $userfile_name - The original name of the file on the sender's system.

    $userfile_size - The size of the uploaded file in bytes.

    $userfile_type - The mime type of the file if the browser provided this information. An example would be "image/gif".

Note that the "$userfile" part of the above variables is whatever the name of the INPUT field of TYPE=file is in the upload form. In the above upload form example, we chose to call it "userfile".

Files will by default be stored in the server's default temporary directory. This can be changed by setting the environment variable TMPDIR in the environment in which PHP runs. Setting it using a PutEnv() call from within a PHP script will not work though.

The PHP script which receives the uploaded file should implement whatever logic is necessary for determining what should be done with the uploaded file. You can for example use the $file_size variable to throw away any files that are either too small or too big. You could use the $file_type variable to throw away any files that didn't match a certain type criteria. Whatever the logic, you should either delete the file from the temporary directory or move it elsewhere.

The file will be deleted from the temporary directory at the end of the request if it has not been moved away or renamed.

Common Pitfalls:

The MAX_FILE_SIZE item cannot specify a file size greater than the file size that has been set in the upload_max_filesize in the PHP3.ini file or the corresponding php3_upload_max_filesize Apache .conf directive. The default is 2 Megabytes.

Please note that the CERN httpd seems to strip off everything starting at the first whitespace in the content-type mime header it gets from the client. As long as this is the case, CERN httpd will not support the file upload feature.


PUT Method Support

PHP provides support for the HTTP PUT method used by clients such as Netscape Composer and W3C Amaya. PUT requests are much simpler than a file upload and they look something like this:

PUT /path/filename.html HTTP/1.1

This would normally mean that the remote client would like to save the content that follows as: /path/filename.html in your web tree. It is obviously not a good idea for Apache or PHP to automatically let everybody overwrite any files in your web tree. So, to handle such a request you have to first tell your web server that you want a certain PHP script to handle the request. In Apache you do this with the Script directive. It can be placed almost anywhere in your Apache configuration file. A common place is inside a <Directory> block or perhaps inside a <Virtualhost> block. A line like this would do the trick:

Script PUT /put.php3

This tells Apache to send all PUT requests for URIs that match the context in which you put this line to the put.php3 script. This assumes, of course, that you have PHP enabled for the .php3 extension and PHP is active.

Inside your put.php3 file you would then do something like this:

<? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>

This would copy the file to the location requested by the remote client. You would probably want to perform some checks and/or authenticate the user before performing this file copy. The only trick here is that when PHP sees a PUT-method request it stores the uploaded file in a temporary file just like the File Upload feature. When the request ends, this temporary file is deleted. So, your PUT handling PHP script has to copy that file somewhere. The filename of this temporary file is in the $PHP_PUT_FILENAME variable, and you can see the suggested destination filename in the $REQUEST_URI (may vary on non-Apache web servers). This destination filename is the one that the remote client specified. You do not have to listen to this client. You could, for example, copy all uploaded files to a special uploads directory.


HTTP cookie support

PHP transparently supports HTTP cookies. Cookies are a mechanism for storing data in the remote browser and thus tracking or identifying return users. You can set cookies using the setcookie() function. Cookies are part of the HTTP header, so the SetCookie() function must be called before any output is sent to the browser. This is the same restriction as for the Header() function.

Any cookies sent to you from the client will automatically be turned into a PHP variable just like GET and POST method data. If you wish to assign multiple values to a single cookie, just add [] to the cookie name. For more details see the setcookie() function.


Regular expressions

Regular expressions are used for complex string manipulation in PHP. The functions that support regular expressions are: These functions all take a regular expression string as their first argument. PHP uses the POSIX extended regular expressions as defined by POSIX 1003.2. For a full description of POSIX regular expressions see the regex man pages included in the regex directory in the PHP distribution.
Example 4-5. Regular expression examples
ereg("abc",$string);            
/* Returns true if "abc"
   is found anywhere in $string. */

ereg("^abc",$string);
/* Returns true if "abc"
   is found at the beginning of $string. */

ereg("abc$",$string);
/* Returns true if "abc"
   is found at the end of $string. */

eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT);  
/* Returns true if client browser
   is Netscape 2, 3 or MSIE 3. */

ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)",
     $string,$regs); 
/* Places three space separated words
   into $regs[1], $regs[2] and $regs[3]. */

ereg_replace("^","<BR>",$string); 
/* Put a <BR> tag at the beginning of $string. */
 
ereg_replace("$","<BR>",$string); 
/* Put a <BR> tag at the end of $string. */

ereg_replace("\n","",$string);
/* Get rid of any carriage return
   characters in $string. */
     

Error handling

There are 4 types of errors and warnings in PHP. They are:
    1 - Normal Function Errors

    2 - Normal Warnings

    4 - Parser Errors

    8 - Notices (warnings you can ignore but which may imply a bug in your code)

The above 4 numbers are added up to define an error reporting level. The default error reporting level is 7 which is 1 + 2 + 4, or everything except notices. This level can be changed in the php3.ini file with the error_reporting directive. It can also be set in your Apache httpd.conf file with the php3_error_reporting directive or lastly it may be set at runtime within a script using the error_reporting() function.

All PHP expressions can also be called with the "@" prefix, which turns off error reporting for that particular expression. If an error occurred during such an expression and the track_errors feature is enabled, you can find the error message in the global variable $php_errormsg.


Connection Handling

The following applies to PHP version 3.0.7 and later.

Internally in PHP a connection status is maintained. There are 3 possible states:

    0 - NORMAL

    1 - ABORTED

    2 - TIMEOUT

When a PHP script is running normally the NORMAL state, is active. If the remote client disconnects the ABORTED state flag is turned on. A remote client disconnect is usually caused by the user hitting his STOP button. If the PHP-imposed time limit (see set_time_limit()) is hit, the TIMEOUT state flag is turned on.

You can decide whether or not you want a client disconnect to cause your script to be aborted. Sometimes it is handy to always have your scripts run to completion even if there is no remote browser receiving the output. The default behaviour is however for your script to be aborted when the remote client disconnects. This behaviour can be set via the ignore_user_abort php3.ini directive as well as through the corresponding php3_ignore_user_abort Apache .conf directive or with the ignore_user_abort() function. If you do not tell PHP to ignore a user abort and the user aborts, your script will terminate. The one exception is if you have registered a shutdown function using register_shutdown_function(). With a shutdown function, when the remote user hits his STOP button, the next time your script tries to output something PHP will detect that the connection has been aborted and the shutdown function is called. This shutdown function will also get called at the end of your script terminating normally, so to do something different in case of a client diconnect you can use the connection_aborted() function. This function will return true if the connection was aborted.

Your script can also be terminated by the built-in script timer. The default timeout is 30 seconds. It can be changed using the max_execution_time php3.ini directive or the corresponding php3_max_execution_time Apache .conf directive as well as with the set_time_limit() function. When the timer expires the script will be aborted and as with the above client disconnect case, if a shutdown function has been registered it will be called. Within this shutdown function you can check to see if a timeout caused the shutdown function to be called by calling the connection_timeout() function. This function will return true if a timeout caused the shutdown function to be called.

One thing to note is that both the ABORTED and the TIMEOUT states can be active at the same time. This is possible if you tell PHP to ignore user aborts. PHP will still note the fact that a user may have broken the connection, but the script will keep running. If it then hits the time limit it will be aborted and your shutdown function, if any, will be called. At this point you will find that connection_timeout() and connection_aborted() return true. You can also check both states in a single call by using the connection_status(). This function returns a bitfield of the active states. So, if both states are active it would return 3, for example.


Chapter 5. Syntax and grammar

PHP's syntax is borrowed primarily from C. Java and Perl have also influenced the syntax.

Basic Syntax

Escaping from HTML

There are four ways of escaping from HTML and entering "PHP code mode":
Example 5-1. Ways of escaping from HTML
1.  <? echo ("this is the simplest, an SGML processing instruction\n"); ?>
 
2.  <?php echo("if you want to serve XML documents, do like this\n"); ?>

3.  <script language="php"> 
        echo ("some editors (like FrontPage) don't
              like processing instructions");
    </script>

4.  <% echo ("As of PHP 3.0.4 you may optionally use ASP-style tags"); %>
    <%= $variable; # This is a shortcut for "<%echo .." %>
      

The first way is only available if short tags have been enabled (either by calling short_tags(), they are configured on using the short_tags run-time configuration setting, or they are enabled using the --enable-short-tags compile-time configuration setting.

The fourth way is only available if ASP-style tags have been enabled using either the asp_tags configuration setting or the --enable-asp-tags compile-time configuration setting.

The closing "bracket" for the block will include the immediately trailing newline if one is present.


Instruction separation

Instructions are separated the same as in C or perl - terminate each statement with a semicolon.

The closing tag (?>) also implies the end of the statement, so the following are equivalent:

<?php
    echo "This is a test";
?>

<?php echo "This is a test" ?>

Comments

PHP supports 'C', 'C++' and Unix shell-style comments. For example:
<?php
    echo "This is a test"; // This is a one-line c++ style comment
    /* This is a multi line comment
       yet another line of comment */
    echo "This is yet another test";
    echo "One Final Test"; # This is shell-style style comment
?>
The "one-line" comment styles actually only comment to the end of the line or the current block of PHP code, whichever comes first.
<h1>This is an <?# echo "simple";?> example.</h1>
<p>The header above will say 'This is an example'.
You should be careful not to nest 'C' style comments, which can happen when commenting out large blocks.
<?php
 /* 
    echo "This is a test"; /* This comment will cause a problem */
 */
?>

Types

PHP supports the following types: The type of a variable is usually not set by the programmer; rather, it is decided at runtime by PHP depending on the context in which that variable is used.

If you would like to force a variable to be converted to a certain type, you may either cast the variable or use the settype() function on it.

Note that a variable may behave in different manners in certain situations, depending on what type it is a the time. For more information, see the section on Type Juggling.


Integers

Integers can be specified using any of the following syntaxes:
$a = 1234; # decimal number
$a = -123; # a negative number
$a = 0123; # octal number (equivalent to 83 decimal)
$a = 0x12; # hexadecimal number (equivalent to 18 decimal)

Floating point numbers

Floating point numbers ("doubles") can be specified using any of the following syntaxes:
$a = 1.234;
$a = 1.2e3;

Strings

Strings can be specified using one of two sets of delimiters.

If the string is enclosed in double-quotes ("), variables within the string will be expanded (subject to some parsing limitations). As in C and Perl, the backslash ("\") character can be used in specifying special characters:

Table 5-1. Escaped characters
 
sequence meaning
\n newline
\r carriage
\t horizontal tab
\\ backslash
\$ dollar sign
\" double-quote
You can escape any other character, but a warning will be issued at the highest warning level.

The second way to delimit a string uses the single-quote ("'") character, which does not do any variable expansion or backslash processing (except for "\\" and "\'" so you can insert backslashes and single-quotes in a singly-quoted string).


Arrays

Arrays actually act like both hash tables (associative arrays) and indexed arrays (vectors).

Single Dimension Arrays

PHP supports both scalar and associative arrays. In fact, there is no difference between the two. You can create an array using the list() or array() functions, or you can explicitly set each array element value.
 
$a[0] = "abc"; 
$a[1] = "def"; 
$b["foo"] = 13;
You can also create an array by simply adding values to the array.
 
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world" 
Arrays may be sorted using the asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), and uksort() functions depending on the type of sort you want.

You can count the number of items in an array using the count() function.

You can traverse an array using next() and prev() functions. Another common way to traverse an array is to use the each() function.


Multi-Dimensional Arrays

Multi-dimensional arrays are actually pretty simple. For each dimension of the array, you add another [key] value to the end:
 
$a[1]      = $f;               # one dimensional examples
$a["foo"]  = $f;   

$a[1][0]     = $f;             # two dimensional
$a["foo"][2] = $f;             # (you can mix numeric and associative indices)
$a[3]["bar"] = $f;             # (you can mix numeric and associative indices)

$a["foo"][4]["bar"][0] = $f;   # four dimensional!
You can "fill up" multi-dimensional arrays in many ways, but the trickiest one to understand is how to use the array() command for associative arrays. These two snippets of code fill up the one-dimensional array in the same way:
 
# Example 1:

$a["color"]     = "red";
$a["taste"]     = "sweet";
$a["shape"]     = "round";
$a["name"]      = "apple";
$a[3]           = 4;


# Example 2:
$a = array(
     "color" => "red",
     "taste" => "sweet",
     "shape" => "round",
     "name"  => "apple",
     3       => 4
);
The array() function can be nested for multi-dimensional arrays:
 
<?
$a = array(
     "apple"  => array(
          "color"  => "red",
          "taste"  => "sweet",
          "shape"  => "round"
     ),
     "orange"  => array(
          "color"  => "orange",
          "taste"  => "sweet",
          "shape"  => "round"
     ),
     "banana"  => array(
          "color"  => "yellow",
          "taste"  => "paste-y",
          "shape"  => "banana-shaped"
     )
);

echo $a["apple"]["taste"];    # will output "sweet"
?>

Objects

Object Initialization

To initialize an object, you use the new statement to instantiate the object to a variable.
class foo {
    function do_foo () { 
        echo "Doing foo."; 
    }
}

$bar = new foo;
$bar -> do_foo ();

Variables

Variable scope

The scope of a variable is the context within which it is defined. For the most part all PHP variables only have a single scope. However, within user-defined functions a local function scope is introduced. Any variable used inside a function is by default limited to the local function scope. For example:
 
$a = 1; /* global scope */ 

Function Test () { 
    echo $a; /* reference to local scope variable */ 
} 

Test ();
This script will not produce any output because the echo statement refers to a local version of the $a variable, and it has not been assigned a value within this scope. You may notice that this is a little bit different from the C language in that global variables in C are automatically available to functions unless specifically overridden by a local definition. This can cause some problems in that people may inadvertently change a global variable. In PHP global variables must be declared global inside a function if they are going to be used in that function. An example:
$a = 1;
$b = 2;

Function Sum () {
    global $a, $b;

    $b = $a + $b;
} 

Sum ();
echo $b;
The above script will output "3". By declaring $a and $b global within the function, all references to either variable will refer to the global version. There is no limit to the number of global variables that can be manipulated by a function.

A second way to access variables from the global scope is to use the special PHP-defined $GLOBALS array. The previous example can be rewritten as:

$a = 1;
$b = 2;

Function Sum () {
    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
} 

Sum ();
echo $b;
The $GLOBALS array is an associative array with the name of the global variable being the key and the contents of that variable being the value of the array element.

Another important feature of variable scoping is the static variable. A static variable exists only in a local function scope, but it does not lose its value when program execution leaves this scope. Consider the following example:

Function Test () {
    $a = 0;
    echo $a;
    $a++;
}
This function is quite useless since every time it is called it sets $a to 0 and prints "0". The $a++ which increments the variable serves no purpose since as soon as the function exits the $a variable disappears. To make a useful counting function which will not lose track of the current count, the $a variable is declared static:
Function Test () {
    static $a = 0;
    echo $a;
    $a++;
}
Now, every time the Test() function is called it will print the value of $a and increment it.

Static variables are also essential when functions are called recursively. A recursive function is one which calls itself. Care must be taken when writing a recursive function because it is possible to make it recurse indefinitely. You must make sure you have an adequate way of terminating the recursion. The following simple function recursively counts to 10:

Function Test () {
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        Test ();
    }
    $count--;
}

Variable variables

Sometimes it is convenient to be able to have variable variable names. That is, a variable name which can be set and used dynamically. A normal variable is set with a statement such as:
$a = "hello";
A variable variable takes the value of a variable and treats that as the name of a variable. In the above example, hello, can be used as the name of a variable by using two dollar signs. ie.
$$a = "world";
At this point two variables have been defined and stored in the PHP symbol tree: $a with contents "hello" and $hello with contents "world". Therefore, this statement:
echo "$a ${$a}";
produces the exact same output as:
echo "$a $hello";
ie. they both produce: hello world.

In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.


Variables from outside PHP

HTML Forms (GET and POST)

When a form is submitted to a PHP script, any variables from that form will be automatically made available to the script by PHP. For instance, consider the following form:
Example 5-2. Simple form variable
<form action="foo.php3" method="post">
    Name: <input type="text" name="name"><br>
    <input type="submit">
</form>
       

When submitted, PHP will create the variable $name, which will will contain whatever what entered into the Name: field on the form.

PHP also understands arrays in the context of form variables, but only in one dimension. You may, for example, group related variables together, or use this feature to retrieve values from a multiple select input:
Example 5-3. More complex form variables
<form action="array.html" method="post">
    Name: <input type="text" name="personal[name]"><br>
    Email: <input type="text" name="personal[email]"><br>
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog
        <option value="guinness">Guinness
        </select>
    <input type="submit">
</form>
       

If PHP's track_vars feature is turned on, either by the track_vars configuration setting or the <?php_track_vars?> directive, then variables submitted via the POST or GET methods will also be found in the global associative arrays $HTTP_POST_VARS and $HTTP_GET_VARS as appropriate.


IMAGE SUBMIT variable names

When submitting a form, it is possible to use an image instead of the standard submit button with a tag like:
<input type=image src="image.gif" name="sub">
When the user clicks somewhere on the image, the accompanying form will be transmitted to the server with two additional variables, sub_x and sub_y. These contain the coordinates of the user click within the image. The experienced may note that the actual variable names sent by the browser contains a period rather than an underscore, but PHP converts the period to an underscore automatically.

HTTP Cookies

PHP transparently supports HTTP cookies as defined by Netscape's Spec. Cookies are a mechanism for storing data in the remote browser and thus tracking or identifying return users. You can set cookies using the SetCookie() function. Cookies are part of the HTTP header, so the SetCookie function must be called before any output is sent to the browser. This is the same restriction as for the Header() function. Any cookies sent to you from the client will automatically be turned into a PHP variable just like GET and POST method data.

If you wish to assign multiple values to a single cookie, just add [] to the cookie name. For example:

SetCookie ("MyCookie[]", "Testing", time()+3600);
Note that a cookie will replace a previous cookie by the same name in your browser unless the path or domain is different. So, for a shopping cart application you may want to keep a counter and pass this along. i.e.
 
Example 5-4. SetCookie Example
$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
      

Environment variables

PHP automatically makes environment variables available as normal PHP variables.
echo $HOME;  /* Shows the HOME environment variable, if set. */
Since information coming in via GET, POST and Cookie mechanisms also automatically create PHP variables, it is sometimes best to explicitly read a variable from the environment in order to make sure that you are getting the right version. The getenv() function can be used for this. You can also set an environment variable with the putenv() function.

Type juggling

PHP does not require (or support) explicit type definition in variable declaration; a variable's type is determined by the context in which that variable is used. That is to say, if you assign a string value to variable var, var becomes a string. If you then assign an integer value to var, it becomes an integer.

An example of PHP's automatic type conversion is the addition operator '+'. If any of the operands is a double, then all operands are evaluated as doubles, and the result will be a double. Otherwise, the operands will be interpreted as integers, and the result will also be an integer. Note that this does NOT change the types of the operands themselves; the only change is in how the operands are evaluated.

$foo = "0";  // $foo is string (ASCII 48)
$foo++;      // $foo is the string "1" (ASCII 49)
$foo += 1;   // $foo is now an integer (2)
$foo = $foo + 1.3;  // $foo is now a double (3.3)
$foo = 5 + "10 Little Piggies"; // $foo is integer (15)
$foo = 5 + "10 Small Pigs";     // $foo is integer (15)
If the last two examples above seem odd, see String conversion.

If you wish to force a variable to be evaluated as a certain type, see the section on Type casting. If you wish to change the type of a variable, see settype().


Determining variable types

Because PHP determines the types of variables and converts them (generally) as needed, it is not always obvious what type a given variable is at any one time. PHP includes several functions which find out what type a variable is. They are gettype(), is_long(), is_double(), is_string(), is_array(), and is_object().

Type casting

Type casting in PHP works much as it does in C: the name of the desired type is written in parentheses before the variable which is to be cast.
$foo = 10;   // $foo is an integer
$bar = (double) $foo;   // $bar is a double
The casts allowed are:
    (int), (integer) - cast to integer

    (real), (double), (float) - cast to double

    (string) - cast to string

    (array) - cast to array

    (object) - cast to object

Note that tabs and spaces are allowed inside the parentheses, so the following are functionally equivalent:
$foo = (int) $bar;
$foo = ( int ) $bar;

String conversion

When a string is evaluated as a numeric value, the resulting value and type are determined as follows.

The string will evaluate as a double if it contains any of the characters '.', 'e', or 'E'. Otherwise, it will evaluate as an integer.

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.

$foo = 1 + "10.5";      // $foo is double (11.5)
$foo = 1 + "-1.3e3";    // $foo is double (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3";      // $foo is integer (1)
$foo = 1 + "10 Small Pigs";     // $foo is integer (11)
$foo = 1 + "10 Little Piggies"; // $foo is integer (11); 
$foo = "10.0 pigs " + 1;        // $foo is int (11)
$foo = "10.0 pigs " + 1.0;      // $foo is double (11)     
The type of the variable depends on the second not on the first expression, when the first expression is a string.

For more information on this conversion, see the Unix manual page for strtod(3).


Constants

PHP defines several constants and provides a mechanism for defining more at run-time. Constants are much like variables, save for the two facts that constants must be defined using the define() function, and that they cannot later be redefined to another value.

The predefined constants (always available) are:

__FILE__


The name of the script file presently being parsed. If used within a file which has been included or required, then the name of the included file is given, and not the name of the parent file.

__LINE__


The number of the line within the current script file which is being parsed. If used within a file which has been included or required, then the position within the included file is given.

PHP_VERSION


The string representation of the version of the PHP parser presently in use; e.g. '3.0.8-dev'.

PHP_OS


The name of the operating system on which the PHP parser is executing; e.g. 'Linux'.

TRUE


A true value.

FALSE


A false value.

E_ERROR


Denotes an error other than a parsing error from which recovery is not possible.

E_WARNING


Denotes a condition where PHP knows something is wrong, but will continue anyway; these can be caught by the script itself. An example would be an invalid regexp in ereg().

E_PARSE


The parser choked on invalid syntax in the script file. Recovery is not possible.

E_NOTICE


Something happened which may or may not be an error. Execution continues. Examples include using an unquoted string as a hash index, or accessing a variable which has not been set.

The E_* constants are typically used with the error_reporting() function for setting the error reporting level.

You can define additional constants using the define() function.

Note that these are constants, not C-style macros; only valid scalar data may be represented by a constant.
Example 5-5. Defining Constants
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
?>
     
Example 5-6. Using __FILE__ and __LINE__
<?php
function report_error($file, $line, $message) {
    echo "An error occured in $file on line $line: $message.";
}

report_error(__FILE__,__LINE__, "Something went wrong!");
?>
     


Expressions

Expressions are the most important building stones of PHP. In PHP, almost anything you write is an expression. The simplest yet most accurate way to define an expressions is "anything that has a value".

The most basic forms of expressions are constants and variables. When you type "$a = 5", you're assigning '5' into $a. '5', obviously, has the value 5, or in other words '5' is an expression with the value of 5 (in this case, '5' is an integer constant).

After this assignment, you'd expect $a's value to be 5 as well, so if you wrote $b = $a, you'd expect it to behave just as if you wrote $b = 5. In other words, $a is an expression with the value of 5 as well. If everything works right, this is exactly what will happen.

Slightly more complex examples for expressions are functions. For instance, consider the following function:

function foo () {
    return 5;
}
Assuming you're familiar with the concept of functions (if you're not, take a look at the chapter about functions), you'd assume that typing $c = foo() is essentially just like writing $c = 5, and you're right. Functions are expressions with the value of their return value. Since foo() returns 5, the value of the expression 'foo()' is 5. Usually functions don't just return a static value but compute something.

Of course, values in PHP don't have to be integers, and very often they aren't. PHP supports three scalar value types: integer values, floating point values and string values (scalar values are values that you can't 'break' into smaller pieces, unlike arrays, for instance). PHP also supports two composite (non-scalar) types: arrays and objects. Each of these value types can be assigned into variables or returned from functions.

So far, users of PHP/FI 2 shouldn't feel any change. However, PHP takes expressions much further, in the same way many other languages do. PHP is an expression-oriented language, in the sense that almost everything is an expression. Consider the example we've already dealt with, '$a = 5'. It's easy to see that there are two values involved here, the value of the integer constant '5', and the value of $a which is being updated to 5 as well. But the truth is that there's one additional value involved here, and that's the value of the assignment itself. The assignment itself evaluates to the assigned value, in this case 5. In practice, it means that '$a = 5', regardless of what it does, is an expression with the value 5. Thus, writing something like '$b = ($a = 5)' is like writing '$a = 5; $b = 5;' (a semicolon marks the end of a statement). Since assignments are parsed in a right to left order, you can also write '$b = $a = 5'.

Another good example of expression orientation is pre- and post-increment and decrement. Users of PHP/FI 2 and many other languages may be familiar with the notation of variable++ and variable--. These are increment and decrement operators. In PHP/FI 2, the statement '$a++' has no value (is not an expression), and thus you can't assign it or use it in any way. PHP enhances the increment/decrement capabilities by making these expressions as well, like in C. In PHP, like in C, there are two types of increment - pre-increment and post-increment. Both pre-increment and post-increment essentially increment the variable, and the effect on the variable is idential. The difference is with the value of the increment expression. Pre-increment, which is written '++$variable', evaluates to the incremented value (PHP increments the variable before reading its value, thus the name 'pre-increment'). Post-increment, which is written '$variable++' evaluates to the original value of $variable, before it was incremented (PHP increments the variable after reading its value, thus the name 'post-increment').

A very common type of expressions are comparison expressions. These expressions evaluate to either 0 or 1, meaning FALSE or TRUE (respectively). PHP supports > (bigger than), >= (bigger than or equal to), == (equal), < (smaller than) and <= (smaller than or equal to). These expressions are most commonly used inside conditional execution, such as IF statements.

The last example of expressions we'll deal with here is combined operator-assignment expressions. You already know that if you want to increment $a by 1, you can simply write '$a++' or '++$a'. But what if you want to add more than one to it, for instance 3? You could write '$a++' multiple times, but this is obviously not a very efficient or comfortable way. A much more common practice is to write '$a = $a + 3'. '$a + 3' evaluates to the value of $a plus 3, and is assigned back into $a, which results in incrementing $a by 3. In PHP, as in several other languages like C, you can write this in a shorter way, which with time would become clearer and quicker to understand as well. Adding 3 to the current value of $a can be written '$a += 3'. This means exactly "take the value of $a, add 3 to it, and assign it back into $a". In addition to being shorter and clearer, this also results in faster execution. The value of '$a += 3', like the value of a regular assignment, is the assigned value. Notice that it is NOT 3, but the combined value of $a plus 3 (this is the value that's assigned into $a). Any two-place operator can be used in this operator-assignment mode, for example '$a -= 5' (subtract 5 from the value of $a), '$b *= 7' (multiply the value of $b by 7), etc.

There is one more expression that may seem odd if you haven't seen it in other languages, the ternary conditional operator:

$first ? $second : $third
If the value of the first subexpression is true (non-zero), then it the second subexpression is evaluated, and that is the result of the conditional expression. Otherwise, the third subexpression is evaluated, and that is the value.

The following example should help you understand pre- and post-increment and expressions in general a bit better:

function double($i) {
    return $i*2;
}
$b = $a = 5;        /* assign the value five into the variable $a and $b */
$c = $a++;          /* post-increment, assign original value of $a 
                       (5) to $c */
$e = $d = ++$b;     /* pre-increment, assign the incremented value of 
                       $b (6) to $d and $e */

/* at this point, both $d and $e are equal to 6 */

$f = double($d++);  /* assign twice the value of $d before 
                       the increment, 2*6 = 12 to $f */
$g = double(++$e);  /* assign twice the value of $e after
                       the increment, 2*7 = 14 to $g */
$h = $g += 10;      /* first, $g is incremented by 10 and ends with the 
                       value of 24. the value of the assignment (24) is 
                       then assigned into $h, and $h ends with the value 
                       of 24 as well. */
In the beginning of the chapter we said that we'll be describing the various statement types, and as promised, expressions can be statements. However, not every expression is a statement. In this case, a statement has the form of 'expr' ';' that is, an expression followed by a semicolon. In '$b=$a=5;', $a=5 is a valid expression, but it's not a statement by itself. '$b=$a=5;' however is a valid statement.

One last thing worth mentioning is the truth value of expressions. In many events, mainly in conditional execution and loops, you're not interested in the specific value of the expression, but only care about whether it means TRUE or FALSE (PHP doesn't have a dedicated boolean type). The truth value of expressions in PHP is calculated in a similar way to perl. Any numeric non-zero numeric value is TRUE, zero is FALSE. Be sure to note that negative values are non-zero and are thus considered TRUE! The empty string and the string "0" are FALSE; all other strings are TRUE. With non-scalar values (arrays and objects) - if the value contains no elements it's considered FALSE, otherwise it's considered TRUE.

PHP provides a full and powerful implementation of expressions, and documenting it entirely goes beyond the scope of this manual. The above examples should give you a good idea about what expressions are and how you can construct useful expressions. Throughout the rest of this manual we'll write expr to indicate any valid PHP expression.


Operators


Arithmetic Operators

Remember basic arithmetic from school? These work just like those.
Table 5-2. Arithmetic Operators
 
example name result
$a + $b Addition Sum of $a and $b.
$a - $b Subtraction Remainder of $b subtracted from $a.
$a * $b Multiplication Product of $a and $b.
$a / $b Division Dividend of $a and $b.
$a % $b Modulus Remainder of $a divided by $b.

String Operators

There is only really one string operator -- the concatenation operator (".").
$a = "Hello ";
$b = $a . "World!"; // now $b = "Hello World!"

Assignment Operators

The basic assignment operator is "=". Your first inclination might be to think of this as "equal to". Don't. It really means that the the left operand gets set to the value of the expression on the rights (that is, "gets set to").

The value of an assignment expression is the value assigned. That is, the value of "$a = 3" is 3. This allows you to do some tricky things:

$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.
In addition to the basic assignment operator, there are "combined operators" for all of the binary arithmetic and string operators that allow you to use a value in an expression and then set its value to the result of that expression. For example:
$a = 3;
$a += 5; // sets $a to 8, as if we had said: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!";

Bitwise Operators

Bitwise operators allow you to turn specific bits within an integer on or off.
Table 5-3. Bitwise Operators
 
example name result
$a & $b And Bits that are set in both $a and $b are set.
$a | $b Or Bits that are set in either $a or $b are set.
~ $a Not Bits that are set in $a are not set, and vice versa.
$a << $b Shift left Shift the bits of $a $b steps to the left (each step means "multiply by two")
$a >> $b Shift right Shift the bits of $a $b steps to the right (each step means "divide by two")

Logical Operators

Table 5-4. Logical Operators
 
example name result
$a and $b And True of both $a and $b are true.
$a or $b Or True if either $a or $b is true.
$a xor $b Or True if either $a or $b is true, but not both.
! $a Not True if $a is not true.
$a && $b And True of both $a and $b are true.
$a || $b Or True if either $a or $b is true.
The reason for the two different variations of "and" and "or" operators is that they operate at different precedences. (See below.)

Comparison Operators

Comparison operators, as their name imply, allow you to compare two values.
Table 5-5. Comparson Operators
 
example name result
$a == $b Equal True if $a is equal to $b.
$a != $b Not equal True if $a is not equal to $b.
$a < $b Less than True if $a is strictly less than $b.
$a > $b Greater than True if $a is strictly greater than $b.
$a <= $b Less than or equal to  True if $a is less than or equal to $b.
$a >= $b Greater than or equal to  True if $a is greater than or equal to $b.
Another conditional operator is the "?:" (or trinary) operator, which operates as in C and many other languages.
(expr1) ? (expr2) : (expr3);
This expression returns to expr2 if expr1 evalutes to true, and expr3 if expr1 evaluates to false.

Operator Precedence

The precedence of an operator specifies how "tightly" it binds two expressions together. For example, in the expression 1 + 5 * 3, the answer is 16 and not 18 because the multiplication ("*") operator has a higher precedence than the addition ("+") operator.

The following table lists the precedence of operators with the lowest-precedence operators listed first.

Table 5-6. Operator Precedence
 
Associativity Operators
left ,
left or
left xor
left and
right print
left = += -= *= /= .= %= &= != ~= <<= >>=
left ? :
left ||
left &&
left |
left ^
left &
non-associative == !=
non-associative < <= > >=
left << >>
left + - .
left * / %
right ! ~ ++ -- (int) (double) (string) (array) (object) @
right [
non-associative new

Control Structures

Any PHP script is built out of a series of statements. A statement can be an assignment, a function call, a loop, a conditional statement of even a statement that does nothing (an empty statement). Statements usually end with a semicolon. In addition, statements can be grouped into a statement-group by encapsulating a group of statements with curly braces. A statement-group is a statement by itself as well. The various statement types are described in this chapter.

if

The if construct is one of the most important features of many languages, PHP included. It allows for conditional execution of code fragments. PHP features an if structure that is similar to that of C:
 if (expr)
     statement
As described in the section about expressions, expr is evaluated to its truth value. If expr evaluates to TRUE, PHP will execute statement, and if it evaluates to FALSE - it'll ignore it.

The following example would display a is bigger than b if $a is bigger than $b:

 if ($a > $b)
     print "a is bigger than b";
Often you'd want to have more than one statement to be executed conditionally. Of course, there's no need to wrap each statement with an if clause. Instead, you can group several statements into a statement group. For example, this code would display a is bigger than b if $a is bigger than $b, and would then assign the value of $a into $b:
 if ($a > $b) {
     print "a is bigger than b";
     $b = $a;
 }
If statements can be nested indefinitely within other if statements, which provides you with complete flexibility for conditional execution of the various parts of your program.

else

Often you'd want to execute a statement if a certain condition is met, and a different statement if the condition is not met. This is what else is for. else extends an if statement to execute a statement in case the expression in the if statement evaluates to FALSE. For example, the following code would display a is bigger than b if $a is bigger than $b, and a is NOT bigger than b otherwise:
 if ($a > $b) {
     print "a is bigger than b";
 } else {
     print "a is NOT bigger than b";
 }
The else statement is only executed if the if expression evaluated to FALSE, and if there were any elseif expressions - only if they evaluated to FALSE as well (see below).

elseif

elseif, as its name suggests, is a combination of if and else. Like else, it extends an if statement to execute a different statement in case the original if expression evaluates to FALSE. However, unlike else, it will execute that alternative expression only if the elseif conditional expression evaluates to TRUE. For example, the following code would display a is bigger than b, a equal to b or a is smaller than b:
 if ($a > $b) {
     print "a is bigger than b";
 } elseif ($a == $b) {
     print "a is equal to b";
 } else {
     print "a is smaller than b";
 }
There may be several elseifs within the same if statement. The first elseif expression (if any) that evaluates to true would be executed. In PHP, you can also write 'else if' (in two words) and the behavior would be identical to the one of 'elseif' (in a single word). The syntactic meaning is slightly different (if you're familiar with C, this is the same behavior) but the bottom line is that both would result in exactly the same behavior.

The elseif statement is only executed if the preceding if expression and any preceding elseif expressions evaluated to FALSE, and the current elseif expression evaluated to TRUE.


Alternative syntax for if structures: if(): ... endif;

PHP offers a different way to group statements within an if statement. This is most commonly used when you nest HTML blocks inside if statements, but can be used anywhere. Instead of using curly braces, if (expr) should be followed by a colon, the list of one or more statements, and end with endif;. Consider the following example:
 <?php if ($a==5): ?>
 A = 5
 <?php endif; ?>
In the above example, the HTML block "A = 5" is nested within an if statement written in the alternative syntax. The HTML block would be displayed only if $a is equal to 5.

The alternative syntax applies to else and elseif as well. The following is an if structure with elseif and else in the alternative format:

 if ($a == 5):
     print "a equals 5";
     print "...";
 elseif ($a == 6):
     print "a equals 6";
     print "!!!";
 else:
     print "a is neither 5 nor 6";
 endif;

while

while loops are the simplest type of loop in PHP. They behave just like their C counterparts. The basic form of a while statement is:
 while (expr) statement
The meaning of a while statement is simple. It tells PHP to execute the nested statement(s) repeatedly, as long as the while expression evaluates to TRUE. The value of the expression is checked each time at the beginning of the loop, so even if this value changes during the execution of the nested statement(s), execution will not stop until the end of the iteration (each time PHP runs the statements in the loop is one iteration). Sometimes, if the while expression evaluates to FALSE from the very beginning, the nested statement(s) won't even be run once.

Like with the if statement, you can group multiple statements within the same while loop by surrounding a group of statements with curly braces, or by using the alternate syntax:

     while (expr): statement ... endwhile;
The following examples are identical, and both print numbers from 1 to 10:
 /* example 1 */
 
 $i = 1;
 while ($i <= 10) {
     print $i++;  /* the printed value would be
                     $i before the increment
                     (post-increment) */
 }
 
 /* example 2 */
 
 $i = 1;
 while ($i <= 10):
     print $i;
     $i++;
 endwhile;

do..while

do..while loops are very similar to while loops, except the truth expression is checked at the end of each iteration instead of in the beginning. The main difference from regular while loops is that the first iteration of a do..while loop is guarenteed to run (the truth expression is only checked at the end of the iteration), whereas it's may not necessarily run with a regular while loop (the truth expression is checked at the beginning of each iteration, if it evaluates to FALSE right from the beginning, the loop execution would end immediately).

There is just one syntax for do..while loops:

 $i = 0;
 do {
     print $i;
 } while ($i>0);
The above loop would run one time exactly, since after the first iteration, when truth expression is checked, it evaluates to FALSE ($i is not bigger than 0) and the loop execution ends.

Advanced C users may be familiar with a different usage of the do..while loop, to allow stopping execution in the middle of code blocks, by encapsulating them with do..while(0), and using the break statement. The following code fragment demonstrates this:

 do {
     if ($i < 5) {
         print "i is not big enough";
         break;
     }
     $i *= $factor;
     if ($i < $minimum_limit) {
         break;
     }
     print "i is ok";
     ...process i...
 } while(0);
Don't worry if you don't understand this right away or at all. You can code scripts and even powerful scripts without using this `feature'.

for

for loops are the most complex loops in PHP. They behave like their C counterparts. The syntax of a for loop is:
for (expr1; expr2; expr3) statement
The first expression (expr1) is evaluated (executed) once unconditionally at the beginning of the loop.

In the beginning of each iteration, expr2 is evaluated. If it evaluates to TRUE, the loop continues and the nested statement(s) are executed. If it evaluates to FALSE, the execution of the loop ends.

At the end of each iteration, expr3 is evaluated (executed).

Each of the expressions can be empty. expr2 being empty means the loop should be run indefinitely (PHP implicitly considers it as TRUE, like C). This may not be as useless as you might think, since often you'd want to end the loop using a conditional break statement instead of using the for truth expression.

Consider the following examples. All of them display numbers from 1 to 10:

 /* example 1 */
 
 for ($i = 1; $i <= 10; $i++) {
     print $i;
 }
 
 /* example 2 */
 
 for ($i = 1;;$i++) {
     if ($i > 10) {
         break;
     }
     print $i;
 }
 
 /* example 3 */
 
 $i = 1;
 for (;;) {
     if ($i > 10) {
         break;
     }
     print $i;
     $i++;
 }
 
 /* example 4 */
 
 for ($i = 1; $i <= 10; print $i, $i++) ;
Of course, the first example appears to be the nicest one (or perhaps the fourth), but you may find that being able to use empty expressions in for loops comes in handy in many occasions.

PHP also supports the alternate "colon syntax" for for loops.

 for (expr1; expr2; expr3): statement; ...; endfor;
Other languages have a foreach statement to traverse an array or hash. PHP uses the while statement and the list() and each() functions for this. See the documentation for these functions for an example.

break

break breaks out of the current looping construct.
 $i = 0;
 while ($i < 10) {
     if ($arr[$i] == "stop") {
         break;
     }
     $i++;
 }

continue

continue jumps to the beginning of enclosing the looping construct.
 while (list($key,$value) = each($arr)) {
     if ($key % 2) { // skip even members
         continue;
     }
     do_something_odd ($value);
 }

switch

The switch statement is similar to a series of IF statements on the same expression. In many occasions, you may want to compare the same variable (or expression) with many different values, and execute a different piece of code depending on which value it equals to. This is exactly what the switch statement is for.

The following two examples are two different ways to write the same thing, one using a series of if statements, and the other using the switch statement:

 /* example 1 */
 
 if ($i == 0) {
     print "i equals 0";
 }
 if ($i == 1) {
     print "i equals 1";
 }
 if ($i == 2) {
     print "i equals 2";
 }
 
 /* example 2 */
 
 switch ($i) {
     case 0:
         print "i equals 0";
         break;
     case 1:
         print "i equals 1";
         break;
     case 2:
         print "i equals 2";
         break;
 }
It is important to understand how the switch statement is executed in order to avoid messups. The switch statement executes line by line (actually, statement by statement). In the beginning, no code is executed. Only when a case statement is found with a value that matches the value of the switch expression, PHP begins to execute the statements. PHP continues to execute the statements until the end of the switch block, or the first time it sees a break statement. If you don't write a break statement at the end of a case's statement list, PHP will go on executing the statements of the following case. For example:
 /* example 3 */
 
 switch ($i) {
     case 0:
         print "i equals 0";
     case 1:
         print "i equals 1";
     case 2:
         print "i equals 2";
 }
Here, if $i equals to 0, PHP would execute all of the print statements! If $i equals to 1, PHP would execute the last two print statements, and only if $i equals to 2, you'd get the 'expected' behavior and only 'i equals 2' would be displayed. So, it's important not to forget break statements (even though you may want to avoid supplying them on purpose under certain circumstances).

A special case is the default case. This case matches anything that wasn't matched by the other cases. For example:

 /* example 4 */
 
 switch ($i) {
     case 0:
         print "i equals 0";
         break;
     case 1:
         print "i equals 1";
         break;
     case 2:
         print "i equals 2";
         break;
     default:
         print "i is not equal to 0, 1 or 2";
 }
Another fact worth mentioning is that the case expression may be any expression that evaluates to a scalar type, that is, integer or floating-point numbers and strings. Arrays or objects are meaningless in that context.

require

The require statement replaces itself with the specified file, much like the C preprocessor's #include works.

This means that you can't put a require statement inside of a loop structure and expect it to include the contents of a different file on each iteration. To do that, use an include statement.

 require 'header.inc';

include

The include statement includes and evaluates the specified file.

This happens each time the include statement is encountered, so you can use an include statement within a looping structure to include a number of different file.

 $files = array ('first.inc', 'second.inc', 'third.inc');
 for ($i = 0; $i < count($files); $i++) {
     include $files[$i];
 }
include differs from require in that the include statement is re-evaluated each time it is encountered (and only when it is being executed), whereas the require statement is replaced by the required file when it is first encountered, whether the contents of the file will be evaluated or not (for example, if it is inside an if statement whose condition evaluated to false).

Because include is a special language construct, you must enclose it within a statement block if it is inside a conditional block.

 /* This is WRONG and will not work as desired. */
 
 if ($condition)
     include($file);
 else
     include($other);
 
 /* This is CORRECT. */
 
 if ($condition) {
     include($file);
 } else {
     include($other);
 }
When the file is evaluated, the parser begins in "HTML-mode" which will output the contents of the file until the first PHP start tag (<?) is encountered.

See also readfile(), require(), virtual().


function

A function may be defined using syntax such as the following:
 function foo ($arg_1, $arg_2, ..., $arg_n) {
     echo "Example function.\n";
     return $retval;
 }
Any valid PHP code may appear inside a function, even other functions and class definitions.

Functions must be defined before they are referenced.


Returning values

Values are returned by using the optional return statement. Any type may be returned, including lists and objects.
 function my_sqrt ($num) {
     return $num * $num;
 }
 echo my_sqrt (4);   // outputs '16'.
Multiple values may not be returned, but the same effect can be achieved by returning a list:
 function foo() {
    return array (0, 1, 2);
 }
 list ($zero, $one, $two) = foo();

Arguments

Information may be passed to functions via the argument list, which is a comma-delimited list of variables and/or constants.

PHP supports passing arguments by value (the default), passing by reference, and default argument values. Variable-length argument lists are not supported, but a similar effect may be achieved by passing arrays.

 function takes_array($input) {
     echo "$input[0] + $input[1] = ", $input[0]+$input[1];
 }

Passing by reference

By default, function arguments are passed by value. If you wish to allow a function to modify its arguments, you may pass them by reference.

If you wish a function's argument to always be passed by reference, you can prepend an ampersand (&) to the argument name in the function definition:

 function foo( &$bar ) {
     $bar .= 'and something extra.';
 }
 $str = 'This is a string, ';
 foo ($str);
 echo $str;    // outputs 'This is a string, and something extra.'
If you wish to pass a variable by reference to a function which does not do this by default, you may prepend an ampersand to the argument name in the function call:
 function foo ($bar) {
     $bar .= ' and something extra.';
 }
 $str = 'This is a string, ';
 foo ($str);
 echo $str;    // outputs 'This is a string, '
 foo (&$str);
 echo $str;    // outputs 'This is a string, and something extra.'

Default values

A function may define C++-style default values for scalar arguments as follows:
 function makecoffee ($type = "cappucino") {
     echo "Making a cup of $type.\n";
 }
 echo makecoffee ();
 echo makecoffee ("espresso");
The output from the above snippet is:
 Making a cup of cappucino.
 Making a cup of espresso.
The default value must be a constant expression, not (for example) a variable or class member.

Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected. Consider the following code snippet:

 function makeyogurt ($type = "acidophilus", $flavour) {
     return "Making a bowl of $type $flavour.\n";
 }
 
 echo makeyogurt ("raspberry");   // won't work as expected
The output of the above example is:
 Warning: Missing argument 2 in call to makeyogurt() in 
 /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
 Making a bowl of raspberry .
Now, compare the above with this:
 function makeyogurt ($flavour, $type = "acidophilus") {
     return "Making a bowl of $type $flavour.\n";
 }
 
 echo makeyogurt ("raspberry");   // works as expected
The output of this example is:
 Making a bowl of acidophilus raspberry.

old_function

The old_function statement allows you to declare a function using a syntax identical to PHP/FI2 (except you must replace 'function' with 'old_function'.

This is a deprecated feature, and should only be used by the PHP/FI2->PHP3 convertor.

Functions declared as old_function cannot be called from PHP's internal code. Among other things, this means you can't use them in functions such as usort(), array_walk(), and register_shutdown_function(). You can get around this limitation by writing a wrapper function (in normal PHP3 form) to call the old_function.


class

A class is a collection of variables and functions working with these variables. A class is defined using the following syntax:
 <?php
 class Cart {
     var $items;  // Items in our shopping cart
   
     // Add $num articles of $artnr to the cart
 
     function add_item ($artnr, $num) {
         $this->items[$artnr] += $num;
     }
   
     // Take $num articles of $artnr out of the cart
 
     function remove_item ($artnr, $num) {
         if ($this->items[$artnr] > $num) {
             $this->items[$artnr] -= $num;
             return true;
         } else {
             return false;
         }   
     }
 }
 ?>
This defines a class named Cart that consists of an associative array of articles in the cart and two functions to add and remove items from this cart.

Classes are types, that is, they are blueprints for actual variables. You have to create a variables of the desired type with the new operator.

 $cart = new Cart;
 $cart->add_item("10", 1);
This creates an object $cart of the class Cart. The function add_item() of that object is being called to add 1 item of article number 10 to the cart.

Classes can be extensions of other classes. The extended or derived class has all variables and functions of the base class and what you add in the extended definition. This is done using the extends keyword.

 class Named_Cart extends Cart {
     var $owner;
  
     function set_owner ($name) {
         $this->owner = $name;
     }
 }
This defines a class Named_Cart that has all variables and functions of Cart plus an additional variable $owner and an additional function set_owner(). You create a named cart the usual way and can now set and get the carts owner. You can still use normal cart functions on named carts:
 $ncart = new Named_Cart;    // Create a named cart
 $ncart->set_owner ("kris"); // Name that cart
 print $ncart->owner;        // print the cart owners name
 $ncart->add_item ("10", 1); // (inherited functionality from cart)
Within functions of a class the variable $this means this object. You have to use $this->something to access any variable or function named something within your current object.

Constructors are functions in a class that are automatically called when you create a new instance of a class. A function becomes a constructor when it has the same name as the class.

 class Auto_Cart extends Cart {
     function Auto_Cart () {
         $this->add_item ("10", 1);
     }
 }
This defines a class Auto_Cart that is a Cart plus a constructor which initializes the cart with one item of article number "10" each time a new Auto_Cart is being made with "new". Constructors can also take arguments and these arguments can be optional, which makes them much more useful.
 class Constructor_Cart {
     function Constructor_Cart ($item = "10", $num = 1) {
         $this->add_item ($item, $num);
     }
 }
 
 // Shop the same old boring stuff.
 
 $default_cart   = new Constructor_Cart;
 
 // Shop for real...
 
 $different_cart = new Constructor_Cart ("20", 17);
 
Caution
For derived classes, the constructor of the parent class is not automatically called when the derived class's constructor is called. 

I. Adabas D Functions

The Adabas D functions are deprecated, you probably want to use the Unified ODBC functions instead.

Table of Contents
ada_afetch fetch a result row into an array
ada_autocommit toggle autocommit behaviour
ada_close close a connection to an Adabas D server
ada_commit commit a transaction
ada_connect connect to an Adabas D datasource
ada_exec prepare and execute a SQL statement
ada_fetchrow fetch a row from a result
ada_fieldname get the columnname
ada_fieldnum get column number
ada_fieldtype get the datatype of a field
ada_freeresult >free resources associated with a result
ada_numfields get the number of columns in a result
ada_numrows number of rows in a result
ada_result get data from results
ada_resultall print result as HTML table
ada_rollback rollback a transaction

ada_afetch

ada_afetch -- fetch a result row into an array

Description

See odbc_fetch_into()

ada_autocommit

ada_autocommit -- toggle autocommit behaviour

Description

See odbc_autocommit().

ada_close

ada_close -- close a connection to an Adabas D server

Description

See odbc_close().

ada_commit

ada_commit -- commit a transaction

Description

See odbc_commit()

ada_connect

ada_connect -- connect to an Adabas D datasource

Description

See odbc_connect().

ada_exec

ada_exec -- prepare and execute a SQL statement

Description

See odbc_exec() or odbc_do().

ada_fetchrow

ada_fetchrow -- fetch a row from a result

Description

See odbc_fetch_row().

ada_fieldname

ada_fieldname -- get the columnname

Description

See odbc_field_name().

ada_fieldnum

ada_fieldnum -- get column number

Description

See odbc_field_num().

ada_fieldtype

ada_fieldtype -- get the datatype of a field

Description

See odbc_field_type().

ada_freeresult

ada_freeresult -- >free resources associated with a result

Description

See odbc_free_result().

ada_numfields

ada_numfields -- get the number of columns in a result

Description

See odbc_num_fields().

ada_numrows

ada_numrows -- number of rows in a result

Description

See odbc_num_rows().

ada_result

ada_result -- get data from results

Description

See odbc_result().

ada_resultall

ada_resultall -- print result as HTML table

Description

See odbc_result_all().

ada_rollback

ada_rollback -- rollback a transaction

Description

See odbc_rollback().

II. Apache Specific Functions

Table of Contents
apache_lookup_uri Perform a partial request for the specified URI and return all info about it
apache_note Get and set apache request notes
getallheaders Fetch all HTTP request headers
virtual Perform an Apache sub-request

apache_lookup_uri

apache_lookup_uri -- Perform a partial request for the specified URI and return all info about it

Description

class apache_lookup_uri(string filename);
This performs a partial request for a URI. It goes just far enough to obtain all the important information about the given resource and returns this information in a class. The properties of the returned class are:
 
status
the_request
status_line
method
content_type
handler
uri
filename
path_info
args
boundary
no_cache
no_local_copy
allowed
send_bodyct
bytes_sent
byterange
clength
unparsed_uri
mtime
request_time

apache_note

apache_note -- Get and set apache request notes

Description

string apache_note(string note_name, string [note_value]);
apache_note() is an Apache-specific function which gets and sets values in a request's notes table. If called with one argument, it returns the current value of note note_name. If called with two arguments, it sets the value of note note_name to note_value and returns the previous value of note note_name.

getallheaders

getallheaders -- Fetch all HTTP request headers

Description

array getallheaders(void);
This function returns an associative array of all the HTTP headers in the current request.
Example 1. GetAllHeaders() Example
$headers = getallheaders();
while (list($header, $value) = each($headers)) {
    echo "$header: $value<br>\n";
}
This example will display all the request headers for the current request.
Note: GetAllHeaders() is currently only supported when PHP runs as an Apache module.

virtual

virtual -- Perform an Apache sub-request

Description

int virtual(string filename);
virtual() is an Apache-specific function which is equivalent to <!--#include virtual...--> in mod_include. It performs an Apache sub-request. It is useful for including CGI scripts or .shtml files, or anything else that you would parse through Apache. Note that for a CGI script, the script must generate valid CGI headers. At the minimum that means it must generate a Content-type header. For PHP files, you should use include() or require().

III. Array Functions

Table of Contents
array Create an array
array_walk Apply a user function to every member of an array.
arsort Sort an array in reverse order and maintain index association
asort Sort an array and maintain index association
count count elements in a variable
current return the current element in an array
each return next key/value pair from an array
end set internal pointer of array to last element
key fetch a key from an associative array
ksort Sort an array by key.
list assign variables as if they were an array
next advance the internal array pointer
pos return the current element in an array
prev rewind internal array pointer
range Create an array containing a range of integers
reset set internal pointer of array to first element
rsort Sort an array in reverse order
shuffle Shuffle an array
sizeof get size of array
sort Sort an array
uasort Sort an array with a user-defined comparison function and maintain index association
uksort Sort an array by keys using a user-defined comparison function
usort Sort an array by values using a user-defined comparison function

array

array -- Create an array

Description

array array(...);
Returns an array of the parameters. The parameters can be given an index with the => operator.

Note that array() really is a language construct used to represent literal arrays, and not a regular function.

The following example demonstrates how to create a two-dimensional array, how to specify keys for associative arrays, and how to skip-and-continue numeric indices in normal arrays.
Example 1. array() example
$fruits = array(
    "fruits"  => array("a"=>"orange","b"=>"banana","c"=>"apple"),
    "numbers" => array(1, 2, 3, 4, 5, 6),
    "holes"   => array("first", 5 => "second", "third")
);

See also: list().

array_walk

array_walk -- Apply a user function to every member of an array.

Description

int array_walk(array arr, string func);
Applies the function named by func to each element of arr. The elements are passed as the first argument of func; if func requires more than one argument, a warning will be generated each time array_walk() calls func. These warnings may be suppressed by prepending the '@' sign to the array_walk() call, or by using error_reporting().

Note that func will actually be working with the elements of arr, so any changes made to those elements will actually be made in the array itself.
Example 1. array_walk() example
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");

function test_alter( $item1 ) {
   $item1 = 'bogus';
}

function test_print( $item2 ) {
   echo "$item2<br>\n";
}

array_walk( $fruits, 'test_print' );
array_walk( $fruits, 'test_alter' );
array_walk( $fruits, 'test_print' );
      

See also each() and list().

arsort

arsort -- Sort an array in reverse order and maintain index association

Description

void arsort(array array);
This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant.
Example 1. arsort() example
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
arsort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
This example would display: fruits[a] = orange fruits[d] = lemon fruits[b] = banana fruits[c] = apple The fruits have been sorted in reverse alphabetical order, and the index associated with each element has been maintained.

See also: asort(), rsort(), ksort(), and sort().

asort

asort -- Sort an array and maintain index association

Description

void asort(array array);
This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant.
Example 1. asort() example
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
asort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
This example would display: fruits[c] = apple fruits[b] = banana fruits[d] = lemon fruits[a] = orange The fruits have been sorted in alphabetical order, and the index associated with each element has been maintained.

See also arsort(), rsort(), ksort(), and sort().

count

count -- count elements in a variable

Description

int count(mixed var);
Returns the number of elements in var, which is typically an array (since anything else will have one element).

Returns 0 if the variable is not set.

Returns 1 if the variable is not an array.

See also: sizeof(), isset(), and is_array().

current

current -- return the current element in an array

Description

mixed current(array array);
Each array variable has an internal pointer that points to one of its elements. In addition, all of the elements in the array are linked by a bidirectional linked list for traversing purposes. The internal pointer points to the first element that was inserted to the array until you run one of the functions that modify that pointer on that array.

The current() function simply returns the array element that's currently being pointed by the internal pointer. It does not move the pointer in any way. If the internal pointer points beyond the end of the elements list, current() returns false.

Warning: if the array contains empty elements (0 or "", the empty string) then this function will return false for these elements as well. It is undecideable if the current element is just a zero-value or you have traversed beyond the end of the array. To properly traverse an array, use the each() function.

See also: end(), next(), prev() and reset().

each

each -- return next key/value pair from an array

Description

array each(array array);
Returns the current key/value pair from the array array and advances the array cursor. This pair is returned in a four-element array, with the keys 0, 1, key, and value. Elements 0 and key each contain the key name of the array element, and 1 and value contain the data.
Example 1. each() examples
$foo = array( "bob", "fred", "jussi", "jouni" );
$bar = each( $foo );
      
$bar now contains the following key/value pairs: 
  • 0 => 0 
  • 1 => 'bob' 
  • key => 0 
  • value => 'bob' 
$foo = array( "Robert" => "Bob", "Seppo" => "Sepi" );
$bar = each( $foo );
       
$bar now contains the following key/value pairs: 
  • 0 => 'Robert' 
  • 1 => 'Bob' 
  • key => 'Robert' 
  • value => 'Bob' 

each() is typically used in conjunction with list() to traverse an array; for instance, $HTTP_POST_VARS:
Example 2. Traversing $HTTP_POST_VARS with each()
echo "Values submitted via POST method:<br>";
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
   echo "$key => $val<br>";
}
      

After each() has executed, the array cursor will be left on the next element of the array, or on the last element if it hits the end of the array.

See also key(), list(), current(), reset(), next(), and prev().

end

end -- set internal pointer of array to last element

Description

end(array array);
end() advances array's internal pointer to the last element.

See also: current(), each(), end() next() and reset()

key

key -- fetch a key from an associative array

Description

mixed key(array array);
key() returns the index element of the current array position.

See also: current(), next()

ksort

ksort -- Sort an array by key.

Description

int ksort(array array);
Sorts an array by key, maintaining key to data correlations. This is useful mainly for associative arrays.
Example 1. ksort() example
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
This example would display: fruits[a] = orange fruits[b] = banana fruits[c] = apple fruits[d] = lemon

See also asort(), arsort(), sort(), and rsort().

list

list -- assign variables as if they were an array

Description

void list(...);
Like array(), this is not really a function, but a language construct. list() is used to assign a list of variables in one operation.
Example 1. list() example
<table>
 <tr>
  <th>Employee name</th>
  <th>Salary</th>
 </tr>
<?php

$result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
    print(" <tr>\n".
          "  <td><a href=\"info.php3?id=$id\">$name</a></td>\n".
          "  <td>$salary</td>\n".
          " </tr>\n");
}

?></table>

See also: each(), array().

next

next -- advance the internal array pointer

Description

mixed next(array array);
Returns the array element in the next place that's pointed by the internal array pointer, or false if there are no more elements. Warning: if the array contains empty elements then this function will return false for these elements as well. To properly traverse an array which may contain empty elements see the each() function.

next() behaves like current(), with one difference. It advances the internal array pointer one place forward before returning the element. That means it returns the next array element and advances the internal array pointer by one. If advancing the internal array pointer results in going beyond the end of the element list, next() returns false.

See also: current(), end() prev() and reset()

pos

pos -- return the current element in an array

Description

mixed pos(array array);
This is an alias for current().

See also: end(), next(), prev() and reset().

prev

prev -- rewind internal array pointer

Description

mixed prev(array array);
Returns the array element in the previous place that's pointed by the internal array pointer, or false if there are no more elements. Warning: if the array contains empty elements then this function will return false for these elements as well. To properly traverse an array which may contain empty elements see the each() function.

prev() behaves just like next(), except it rewinds the internal array pointer one place instead of advancing it.

See also: current(), end() next() and reset()

range

range -- Create an array containing a range of integers

Description

array range(int low, int high);
range() returns an array of integers from low to high, inclusive.

See shuffle() for an example of its use.

reset

reset -- set internal pointer of array to first element

Description

mixed reset(array array);
reset() rewinds array's internal pointer to the first element.

reset() returns the value of the first array element.

See also: current(), each(), next() prev() and reset()

rsort

rsort -- Sort an array in reverse order

Description

void rsort(array array);
This function sorts an array in reverse order (highest to lowest).
Example 1. rsort() example
    $fruits = array("lemon","orange","banana","apple");
    rsort($fruits);
    for(reset($fruits); ($key,$value) = each($fruits); ) {
        echo "fruits[$key] = ".$value."\n";
    }
        
This example would display: fruits[0] = orange fruits[1] = lemon fruits[2] = banana fruits[3] = apple The fruits have been sorted in reverse alphabetical order.

See also arsort(), asort(), ksort(), sort() and usort().

shuffle

shuffle -- Shuffle an array

Description

void shuffle(array array);
This function shuffles (randomizes the order of the elements in) an array.
Example 1. shuffle() example
$numbers = range(1,20);
srand(time());
shuffle($numbers);
while (list(,$number) = each($numbers)) {
  echo "$number ";
}

See also arsort(), asort(), ksort(), rsort(), sort() and usort().

sizeof

sizeof -- get size of array

Description

int sizeof(array array);
Returns the number of elements in the array.

See also: count()

sort

sort -- Sort an array

Description

void sort(array array);
This function sorts an array. Elements will be arranged from lowest to highest when this function has completed.
Example 1. sort() example
$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
This example would display: fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange The fruits have been sorted in alphabetical order.

See also arsort(), asort(), ksort(), rsort(), and usort().

uasort

uasort -- Sort an array with a user-defined comparison function and maintain index association

Description

void uasort(array array, function cmp_function);
This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. The comparison function is user-defined.

uksort

uksort -- Sort an array by keys using a user-defined comparison function

Description

void uksort(array array, function cmp_function);
This function will sort the keys of an array using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.
Example 1. uksort() example
function mycompare($a, $b) {   
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort($a, mycompare);
while(list($key, $value) = each($a)) {
    echo "$key: $value\n";
}
This example would display: 20: twenty 10: ten 4: four 3: three

See also arsort(), asort(), uasort(), ksort(), rsort() and sort().

usort

usort -- Sort an array by values using a user-defined comparison function

Description

void usort(array array, function cmp_function);
This function will sort an array by its values using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.

The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second. If two members compare as equal, their order in the sorted array is undefined.
Example 1. usort() example
function cmp($a,$b) {   
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}
$a = array(3,2,5,6,1);
usort($a, cmp);
while(list($key,$value) = each($a)) {
    echo "$key: $value\n";
}
This example would display: 0: 6 1: 5 2: 3 3: 2 4: 1 Obviously in this trivial case the rsort() function would be more appropriate.

See also arsort(), asort(), ksort(), rsort() and sort().

IV. Aspell Functions

The aspell() functions allows you to check the spelling on a word and offer suggestions.

you need the aspell library, available from: http://metalab.unc.edu/kevina/aspell/

Table of Contents
aspell_new load a new dictionary
aspell_check check a word
aspell_check-raw check a word without changing its case or trying to trim it
aspell_suggest suggest spellings of a word

aspell_new

aspell_new -- load a new dictionary

Description

int aspell_new(string master, string personal);
aspell_new() opens up a new dictionary and returns the dictionary link identifier for use in other aspell functions.
Example 1. aspell_new
$aspell_link=aspell_new("english");
      

aspell_check

aspell_check -- check a word

Description

boolean aspell_check(int dictionary_link, string word);
aspell_check() checks the spelling of a word and returns true if the spelling is correct, false if not.
Example 1. aspell_check
$aspell_link=aspell_new("english");
if (aspell_check($aspell_link,"testt")) {
    echo "This is a valid spelling";
} else {
    echo "Sorry, wrong spelling";
}
      

aspell_check-raw

aspell_check-raw -- check a word without changing its case or trying to trim it

Description

boolean aspell_check_raw(int dictionary_link, string word);
aspell_check_raw() checks the spelling of a word, without changing its case or trying to trim it in any way and returns true if the spelling is correct, false if not.
Example 1. aspell_check_raw
$aspell_link=aspell_new("english");
if (aspell_check_raw($aspell_link,"testt")) {
    echo "This is a valid spelling";
} else {
    echo "Sorry, wrong spelling";
}
      

aspell_suggest

aspell_suggest -- suggest spellings of a word

Description

array aspell_suggest(int dictionary_link, string word);
aspell_suggest() returns an array of possible spellings for the given word.
Example 1. aspell_suggest
$aspell_link=aspell_new("english");

if (!aspell_check($aspell_link,"testt")) {
    $suggestions=aspell_suggest($aspell_link,"testt");

    for($i=0; $i < count($suggestions); $i++) {
       echo "Possible spelling: " . $suggestions[$i] . "<br>"; 
    }
}
      

V. BC (Arbitrary Precision) Functions

These BC functions are only available if PHP was compiled with the --enable-bcmath configure option.

Table of Contents
bcadd Add two arbitrary precision numbers.
bccomp Compare two arbitrary precision numbers.
bcdiv Divide two arbitrary precision numbers.
bcmod Get modulus of an arbitrary precision number.
bcmul Multiply two arbitrary precision number.
bcpow Raise an arbitrary precision number to another.
bcscale Set default scale parameter for all bc math functions.
bcsqrt Get the square root of an arbitray precision number.
bcsub Subtract one arbitrary precision number from another.

bcadd

bcadd -- Add two arbitrary precision numbers.

Description

string bcadd(string left operand, string right operand, int [scale]);
Adds the left operand to the right operand and returns the sum in a string. The optional scale parameter is used to set the number of digits after the decimal place in the result.

See also bcsub().

bccomp

bccomp -- Compare two arbitrary precision numbers.

Description

int bccomp(string left operand, string right operand, int [scale]);
Compares the left operand to the right operand and returns the result as an integer. The optional scale parameter is used to set the number of digits after the decimal place which will be used in the comparion. The return value is 0 if the two operands are equal. If the left operand is larger than the right operand the return value is +1 and if the left operand is less than the right operand the return value is -1.

bcdiv

bcdiv -- Divide two arbitrary precision numbers.

Description

string bcdiv(string left operand, string right operand, int [scale]);
Divides the left operand by the right operand and returns the result. The optional scale sets the number of digits after the decimal place in the result.

See also bcmul().

bcmod

bcmod -- Get modulus of an arbitrary precision number.

Description

string bcmod(string left operand, string modulus);
Get the modulus of the left operand using modulus.

See also bcdiv().

bcmul

bcmul -- Multiply two arbitrary precision number.

Description

string bcmul(string left operand, string right operand, int [scale]);
Multiply the left operand by the right operand and returns the result. The optional scale sets the number of digits after the decimal place in the result.

See also bcdiv().

bcpow

bcpow -- Raise an arbitrary precision number to another.

Description

string bcpow(string x, string y, int [scale]);
Raise x to the power y. The scale can be used to set the number of digits after the decimal place in the result.

See also bcsqrt().

bcscale

bcscale -- Set default scale parameter for all bc math functions.

Description

string bcscale(int scale);
This function sets the default scale parameter for all subsequent bc math functions that do not explicitly specify a scale parameter.

bcsqrt

bcsqrt -- Get the square root of an arbitray precision number.

Description

string bcsqrt(string operand, int scale);
Return the square root of the operand. The optional scale parameter sets the number of digits after the decimal place in the result.

See also bcpow().

bcsub

bcsub -- Subtract one arbitrary precision number from another.

Description

string bcsub(string left operand, string right operand, int [scale]);
Subtracts the right operand from the left operand and returns the result in a string. The optional scale parameter is used to set the number of digits after the decimal place in the result.

See also bcadd().

VI. Calendar Functions

The calendar functions are only available if you have compiled the calendar extension in dl/calendar. Read dl/README for instructions on using it.

The Calendar extension in PHP presents a series of functions to simplify converting between different calendar formats. The intermediary or standard it is based on is the Julian Day Count. The Julian Day Count is a count of days starting way earlier than any date most people would need to track (somewhere around 4000bc). To convert between calendar systems, you must first convert to Julian Day Count, then to the calendar system of your choice. Julian Day Count is very different from the Julian Calendar! For more information on calendar systems visit http://genealogy.org/~scottlee/cal-overview.html. Excerpts from this page are included in these instructions, and are in quotes

Table of Contents
JDToGregorian Converts Julian Day Count to Gregorian date
GregorianToJD Converts a Gregorian date to Julian Day Count
JDToJulian Converts a Julian Calendar date to Julian Day Count
JulianToJD Converts a Julian Calendar date to Julian Day Count
JDToJewish Converts a Julian Day Count to the Jewish Calendar
JewishToJD Converts a date in the Jewish Calendar to Julian Day Count
JDToFrench Converts a Julian Day Count to the French Republican Calendar
FrenchToJD Converts a date from the French Republican Calendar to a Julian Day Count
JDMonthName Returns a month name
JDDayOfWeek Returns the day of the week

JDToGregorian

JDToGregorian -- Converts Julian Day Count to Gregorian date

Description

string jdtogregorian(int julianday);
Converts Julian Day Count to a string containing the Gregorian date in the format of "month/day/year"

GregorianToJD

GregorianToJD -- Converts a Gregorian date to Julian Day Count

Description

int gregoriantojd(int month, int day, int year);
Valid Range for Gregorian Calendar 4714 B.C. to 9999 A.D.

Although this software can handle dates all the way back to 4714 B.C., such use may not be meaningful. The Gregorian calendar was not instituted until October 15, 1582 (or October 5, 1582 in the Julian calendar). Some countries did not accept it until much later. For example, Britain converted in 1752, The USSR in 1918 and Greece in 1923. Most European countries used the Julian calendar prior to the Gregorian.
Example 1. Calendar functions
<?php
$jd = GregorianToJD(10,11,1970);
echo("$jd\n");
$gregorian = JDToGregorian($jd);
echo("$gregorian\n");
?>

JDToJulian

JDToJulian -- Converts a Julian Calendar date to Julian Day Count

Description

string jdtojulian(int julianday);
Converts Julian Day Count to a string containing the Julian Calendar Date in the format of "month/day/year".

JulianToJD

JulianToJD -- Converts a Julian Calendar date to Julian Day Count

Description

int juliantojd(int month, int day, int year);
Valid Range for Julian Calendar 4713 B.C. to 9999 A.D.

Although this software can handle dates all the way back to 4713 B.C., such use may not be meaningful. The calendar was created in 46 B.C., but the details did not stabilize until at least 8 A.D., and perhaps as late at the 4th century. Also, the beginning of a year varied from one culture to another - not all accepted January as the first month.

JDToJewish

JDToJewish -- Converts a Julian Day Count to the Jewish Calendar

Description

string jdtojewish(int julianday);
Converts a Julian Day Count the the Jewish Calendar.

JewishToJD

JewishToJD -- Converts a date in the Jewish Calendar to Julian Day Count

Description

int jewishtojd(int month, int day, int year);
Valid Range Although this software can handle dates all the way back to the year 1 (3761 B.C.), such use may not be meaningful.

The Jewish calendar has been in use for several thousand years, but in the early days there was no formula to determine the start of a month. A new month was started when the new moon was first observed.

JDToFrench

JDToFrench -- Converts a Julian Day Count to the French Republican Calendar

Description

string jdtofrench(int month, int day, int year);
Converts a Julian Day Count to the French Republican Calendar.

FrenchToJD

FrenchToJD -- Converts a date from the French Republican Calendar to a Julian Day Count

Description

int frenchtojd(int month, int day, int year);
Converts a date from the French Republican Calendar to a Julian Day Count

These routines only convert dates in years 1 through 14 (Gregorian dates 22 September 1792 through 22 September 1806). This more than covers the period when the calendar was in use.

JDMonthName

JDMonthName -- Returns a month name

Description

string jdmonthname(int julianday, int mode);
Returns a string containing a month name. mode tells this function which calendar to convert the Julian Day Count to, and what type of month names are to be returned.
Table 1. Calendar modes
 
Mode Meaning
0 Gregorian - apreviated
1 Gregorian
2 Julian - apreviated
3 Julian
4 Jewish
5 French Republican

JDDayOfWeek

JDDayOfWeek -- Returns the day of the week

Description

mixed jddayofweek(int julianday, int mode);
Returns the day of the week. Can return a string or an int depending on the mode.
Table 1. Calendar week modes
 
Mode Meaning
0 returns the day number as an int (0=sunday, 1=monday, etc)
1 returns string containing the day of week (english-gregorian)
2 returns a string containing the abreviated day of week (english-gregorian)

VII. Date/Time Functions

Table of Contents
checkdate validate a date/time
date format a local time/date
strftime format a local time/date according to locale settings
getdate get date/time information
gettimeofday get current time
gmdate format a GMT/CUT date/time
easter_date get UNIX timestamp for midnight on Easter of a given year
easter_days get number of days after March 21 on which Easter falls for a given year
mktime get UNIX timestamp for a date
gmmktime get UNIX timestamp for a GMT date
time return current UNIX timestamp
microtime return current UNIX timestamp with microseconds

checkdate

checkdate -- validate a date/time

Description

int checkdate(int month, int day, int year);
Returns true if the date given is valid; otherwise returns false. Checks the validity of the date formed by the arguments. A date is considered valid if:
    year is between 0 and 32767 inclusive

    month is between 1 and 12 inclusive

    day is within the allowed number of days for the given month. Leap years are taken into consideration.

date

date -- format a local time/date

Description

string date(string format, int timestamp);
Returns a string formatted according to the given format string using the given timestamp or the current local time if no timestamp is given.

The following characters are recognized in the format string:

    a - "am" or "pm"

    A - "AM" or "PM"

    d - day of the month, 2 digits with leading zeros; i.e. "01" to "31"

    D - day of the week, textual, 3 letters; i.e. "Fri"

    F - month, textual, long; i.e. "January"

    h - hour, 12-hour format; i.e. "01" to "12"

    H - hour, 24-hour format; i.e. "00" to "23"

    g - hour, 12-hour format without leading zeros; i.e. "1" to "12"

    G - hour, 24-hour format without leading zeros; i.e. "0" to "23"

    i - minutes; i.e. "00" to "59"

    j - day of the month without leading zeros; i.e. "1" to "31"

    l (lowercase 'L') - day of the week, textual, long; i.e. "Friday"

    m - month; i.e. "01" to "12"

    n - month without leading zeros; i.e. "1" to "12"

    M - month, textual, 3 letters; i.e. "Jan"

    s - seconds; i.e. "00" to "59"

    S - English ordinal suffix, textual, 2 characters; i.e. "th", "nd"

    t - number of days in the given month; i.e. "28" to "31"

    U - seconds since the epoch

    w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday)

    Y - year, 4 digits; i.e. "1999"

    y - year, 2 digits; i.e. "99"

    z - day of the year; i.e. "0" to "365"

Unrecognized characters in the format string will be printed as-is.
Example 1. date() example
print(date( "l dS of F Y h:i:s A" ));
print("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000)));

It is possible to use date() and mktime() together to find dates in the future or the past.
Example 2. date() and mktime() example
$tomorrow  = mktime(0,0,0,date("m")  ,date("d")+1,date("Y"));
$lastmonth = mktime(0,0,0,date("m")-1,date("d"),  date("Y"));
$nextyear  = mktime(0,0,0,date("m"),  date("d",   date("Y")+1);

To format dates in other languages, you should use the setlocale() and strftime() functions.

See also gmdate() and mktime().

strftime

strftime -- format a local time/date according to locale settings

Description

string strftime(string format, int timestamp);
Returns a string formatted according to the given format string using the given timestamp or the current local time if no timestamp is given. Month and weekday names and other language dependent strings respect the current locale set with setlocale().

The following conversion specifiers are recognized in the format string:

    %a - abbreviated weekday name according to the current locale

    %A - full weekday name according to the current locale

    %b - abbreviated month name according to the current locale

    %B - full month name according to the current locale

    %c - preferred date and time representation for the current locale

    %d - day of the month as a decimal number (range 00 to 31)

    %H - hour as a decimal number using a 24-hour clock (range 00 to 23)

    %I - hour as a decimal number using a 12-hour clock (range 01 to 12)

    %j - day of the year as a decimal number (range 001 to 366)

    %m - month as a decimal number (range 1 to 12)

    %M - minute as a decimal number

    %p - either `am' or `pm' according to the given time value, or the corresponding strings for the current locale

    %S - second as a decimal number

    %U - week number of the current year as a decimal number, starting with the first Sunday as the first day of the first week

    %W - week number of the current year as a decimal number, starting with the first Monday as the first day of the first week

    %w - day of the week as a decimal, Sunday being 0

    %x - preferred date representation for the current locale without the time

    %X - preferred time representation for the current locale without the date

    %y - year as a decimal number without a century (range 00 to 99)

    %Y - year as a decimal number including the century

    %Z - time zone or name or abbreviation

    %% - a literal `%' character

Example 1. strftime() example
setlocale ("LC_TIME", "C");
print(strftime("%A in Finnish is "));
setlocale ("LC_TIME", "fi");
print(strftime("%A, in French "));
setlocale ("LC_TIME", "fr");
print(strftime("%A and in German "));
setlocale ("LC_TIME", "de");
print(strftime("%A.\n"));
This example works if you have the respective locales installed in your system.

See also setlocale() and mktime().

getdate

getdate -- get date/time information

Description

array getdate(int timestamp);
Returns an associative array containing the date information of the timestamp as the following array elements:
    "seconds" - seconds

    "minutes" - minutes

    "hours" - hours

    "mday" - day of the month

    "wday" - day of the week, numeric

    "mon" - month, numeric

    "year" - year, numeric

    "yday" - day of the year, numeric; i.e. "299"

    "weekday" - day of the week, textual, full; i.e. "Friday"

    "month" - month, textual, full; i.e. "January"

gettimeofday

gettimeofday -- get current time

Description

array gettimeofday(void);
This is an interface to gettimeofday(2). It returns an associative array containing the data returned from the system call.
    "sec" - seconds

    "usec" - microseconds

    "minuteswest" - minutes west of Greenwich

    "dsttime" - type of dst correction

gmdate

gmdate -- format a GMT/CUT date/time

Description

string gmdate(string format, int timestamp);
Identical to the date() function except that the time returned is Greenwich Mean Time (GMT). For example, when run in Finland (GMT +0200), the first line below prints "Jan 01 1998 00:00:00", while the second prints "Dec 31 1997 22:00:00".
Example 1. gmdate() example
echo date( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );
echo gmdate( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );

See also date(), mktime() and gmmktime().

easter_date

easter_date -- get UNIX timestamp for midnight on Easter of a given year

Description

int easter_date(int year);
Returns the UNIX timestamp corresponding to midnight on Easter of the given year. If no year is specified, the current year is assumed.

Warning: This function will generate a warning if the year is outside of the range for UNIX timestamps (i.e. before 1970 or after 2037).
Example 1. easter_date() example
echo date( "M-d-Y", easter_date(1999) );        /* "Apr-04-1999" */
echo date( "M-d-Y", easter_date(2000) );        /* "Apr-23-2000" */
echo date( "M-d-Y", easter_date(2001) );        /* "Apr-15-2001" */

The date of Easter Day was defined by the Council of Nicaea in AD325 as the Sunday after the first full moon which falls on or after the Spring Equinox. The Equinox is assumed to always fall on 21st March, so the calculation reduces to determining the date of the full moon and the date of the following Sunday. The algorithm used here was introduced around the year 532 by Dionysius Exiguus. Under the Julian Calendar (for years before 1753) a simple 19-year cycle is used to track the phases of the Moon. Under the Gregorian Calendar (for years after 1753 - devised by Clavius and Lilius, and introduced by Pope Gregory XIII in October 1582, and into Britain and its then colonies in September 1752) two correction factors are added to make the cycle more accurate.

(The code is based on a C program by Simon Kershaw, <webmaster@ely.anglican.org>)

See easter_days() for calculating Easter before 1970 or after 2037.

easter_days

easter_days -- get number of days after March 21 on which Easter falls for a given year

Description

int easter_days(int year);
Returns the number of days after March 21 on which Easter falls for a given year. If no year is specified, the current year is assumed.

This function can be used instead of easter_date() to calculate Easter for years which fall outside the range of UNIX timestamps (i.e. before 1970 or after 2037).
Example 1. easter_date() example
echo easter_days(1999);        /* 14, i.e. April 4   */
echo easter_days(1492);        /* 32, i.e. April 22  */
echo easter_days(1913);        /*  2, i.e. March 23  */

The date of Easter Day was defined by the Council of Nicaea in AD325 as the Sunday after the first full moon which falls on or after the Spring Equinox. The Equinox is assumed to always fall on 21st March, so the calculation reduces to determining the date of the full moon and the date of the following Sunday. The algorithm used here was introduced around the year 532 by Dionysius Exiguus. Under the Julian Calendar (for years before 1753) a simple 19-year cycle is used to track the phases of the Moon. Under the Gregorian Calendar (for years after 1753 - devised by Clavius and Lilius, and introduced by Pope Gregory XIII in October 1582, and into Britain and its then colonies in September 1752) two correction factors are added to make the cycle more accurate.

(The code is based on a C program by Simon Kershaw, <webmaster@ely.anglican.org>)

See also easter_date().

mktime

mktime -- get UNIX timestamp for a date

Description

int mktime(int hour, int minute, int second, int month, int day, int year);
Warning: Note the strange order of arguments, which differs from the order of arguments in a regular UNIX mktime() call and which does not lend itself well to leaving out parameters from right to left (see below). It is a common error to mix these values up in a script.

Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970) and the time specified.

Arguments may be left out in order from right to left; any arguments thus omitted will be set to the current value according to the local date and time.

MkTime is useful for doing date arithmetic and validation, as it will automatically calculate the correct value for out-of-range input. For example, each of the following lines produces the string "Jan-01-1998".
Example 1. mktime() example
echo date( "M-d-Y", mktime(0,0,0,12,32,1997) );
echo date( "M-d-Y", mktime(0,0,0,13,1,1997) );
echo date( "M-d-Y", mktime(0,0,0,1,1,1998) );

See also date() and time().

gmmktime

gmmktime -- get UNIX timestamp for a GMT date

Description

int gmmktime(int hour, int minute, int second, int month, int day, int year);
Identical to mktime() except the passed parameters represents a GMT date.

time

time -- return current UNIX timestamp

Description

int time(void);
Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).

See also date().

microtime

microtime -- return current UNIX timestamp with microseconds

Description

string microtime(void);
Returns the string "msec sec" where sec is the current time measured in the number of seconds since the Unix Epoch (0:00:00 January 1, 1970 GMT), and msec is the microseconds part. This function is only available on operating systems that support the gettimeofday() system call.

See also time().

VIII. DBA functions

These functions build the foundation for accessing Berkeley DB style databases.

This is a general abstraction layer for several file-based databases. As such, functionality is limited to a subset of features modern databases such as Sleepycat Software's DB2 support.

The behaviour of various aspects depend on the implementation of the underlying database. Functions such as dba_optimize() and dba_sync() will do what they promise for one database and will do nothing for others.

The following handlers are supported:

    dbm is the oldest (original) type of Berkeley DB style databases. You should avoid it, if possible. We do not support the compatibility functions built into DB2, because they are only compatible on the source code level, but cannot handle the original dbm format.

    ndbm is a newer type and more flexible than dbm. It still has most of the arbitrary limits of dbm.

    gdbm is the GNU database manager. It provides compatibility functions for dbm and ndbm.

    db2 is Sleepycat Software's DB2. It is described as "a programmatic toolkit that provides high-performance built-in database support for both standalone and client/server applications."

    cdb is "a fast, reliable, lightweight package for creating and reading constant databases." It is from the author of qmail and can be found here. Since it is constant, we support only reading operations.

Example 1. DBA example
<?php

$id = dba_open("/tmp/test.db", "n", "db2");

if(!$id) {
    echo "dba_open failed\n";
    exit;
}

dba_replace("key", "This is an example!", $id);

if(dba_exists("key", $id)) {
    echo dba_fetch("key", $id);
    dba_delete("key", $id);
}

dba_close($id);
?>

DBA is binary safe and does not have any arbitrary limits. It inherits all limits set by the underlying database implementation.

All file-based databases must provide a way of setting the file mode of a new created database, if that is possible at all. The file mode is commonly passed as the fourth argument to dba_open() or dba_popen().

You can access all entries of a database in a linear way by using the dba_firstkey() and dba_nextkey() functions. You may not change the database while traversing it.
Example 2. Traversing a database
<?php

# ...open database...

$key = dba_firstkey($id);

while($key != false) {
    if(...) { # remember the key to perform some action later
        $handle_later[] = $key;
    }
    $key = dba_nextkey($id);
}
?>

Table of Contents
dba_close Close database
dba_delete Delete entry specified by key
dba_exists Check whether key exists
dba_fetch Fetch data specified by key
dba_firstkey Fetch first key
dba_insert Insert entry
dba_nextkey Fetch next key
dba_popen Open database persistently
dba_open Open database
dba_optimize Optimize database
dba_replace Replace or insert entry
dba_sync Synchronize database

dba_close

dba_close -- Close database

Description

void dba_close(int handle);
dba_close() closes the established database and frees all resources specified by handle.

handle is a database handle returned by dba_open().

dba_close() does not return any value.

See also: dba_open() dba_popen()

dba_delete

dba_delete -- Delete entry specified by key

Description

string dba_delete(string key, int handle);
dba_delete() deletes the entry specified by key from the database specified with handle.

key is the key of the entry which is deleted.

handle is a database handle returned by dba_open().

dba_delete() returns true or false, if the entry is deleted or not deleted, respectively.

See also: dba_exists() dba_fetch() dba_insert() dba_replace()

dba_exists

dba_exists -- Check whether key exists

Description

bool dba_exists(string key, int handle);
dba_exists() checks whether the specified key exists in the database specified by handle.

key is the key the check is performed for.

handle is a database handle returned by dba_open().

dba_exists() returns true or false, if the key is found or not found, respectively.

See also: dba_fetch() dba_delete() dba_insert() dba_replace()

dba_fetch

dba_fetch -- Fetch data specified by key

Description

string dba_fetch(string key, int handle);
dba_fetch() fetches the data specified by key from the database specified with handle.

key is the key the data is specified by.

handle is a database handle returned by dba_open().

dba_fetch() returns the associated string or false, if the key/data pair is found or not found, respectively.

See also: dba_exists() dba_delete() dba_insert() dba_replace()

dba_firstkey

dba_firstkey -- Fetch first key

Description

string dba_firstkey(int handle);
dba_firstkey() returns the first key of the database specified by handle and resets the internal key pointer. This permits a linear search through the whole database.

handle is a database handle returned by dba_open().

dba_firstkey() returns the key or false depending on whether it succeeds or fails, respectively.

See also: dba_nextkey()

dba_insert

dba_insert -- Insert entry

Description

bool dba_insert(string key, string value, int handle);
dba_insert() inserts the entry described with key and value into the database specified by handle. It fails, if an entry with the same key already exists.

key is the key of the entry to be inserted.

value is the value to be inserted.

handle is a database handle returned by dba_open().

dba_insert() returns true or false, depending on whether it succeeds of fails, respectively.

See also: dba_exists() dba_delete() dba_fetch() dba_replace()

dba_nextkey

dba_nextkey -- Fetch next key

Description

string dba_nextkey(int handle);
dba_nextkey() returns the next key of the database specified by handle and increments the internal key pointer.

handle is a database handle returned by dba_open().

dba_nextkey() returns the key or false depending on whether it succeeds or fails, respectively.

See also: dba_firstkey()

dba_popen

dba_popen -- Open database persistently

Description

int dba_popen(string path, string mode, string handler, [...]);
dba_popen() establishes a persistent database instance for path with mode using handler.

path is commonly a regular path in your filesystem.

mode is "r" for read access, "w" for read/write access, and "n" for truncate and read/write access.

handler is the name of the handler which shall be used for accessing path. It is passed all optional parameters given to dba_popen() and can act on behalf of them.

dba_popen() returns a positive handler id or false, in the case the open is successful or fails, respectively.

See also: dba_open() dba_close()

dba_open

dba_open -- Open database

Description

int dba_open(string path, string mode, string handler, [...]);
dba_open() establishes a database instance for path with mode using handler.

path is commonly a regular path in your filesystem.

mode is "r" for read access, "w" for read/write access, and "n" for truncate and read/write access.

handler is the name of the handler which shall be used for accessing path. It is passed all optional parameters given to dba_open() and can act on behalf of them.

dba_open() returns a positive handler id or false, in the case the open is successful or fails, respectively.

See also: dba_popen() dba_close()

dba_optimize

dba_optimize -- Optimize database

Description

bool dba_optimize(int handle);
dba_optimize() optimizes the underlying database specified by handle.

handle is a database handle returned by dba_open().

dba_optimize() returns true or false, if the optimization succeeds or fails, respectively.

See also: dba_sync()

dba_replace

dba_replace -- Replace or insert entry

Description

bool dba_replace(string key, string value, int handle);
dba_replace() replaces or inserts the entry described with key and value into the database specified by handle.

key is the key of the entry to be inserted.

value is the value to be inserted.

handle is a database handle returned by dba_open().

dba_replace() returns true or false, depending on whether it succeeds of fails, respectively.

See also: dba_exists() dba_delete() dba_fetch() dba_insert()

dba_sync

dba_sync -- Synchronize database

Description

bool dba_sync(int handle);
dba_sync() synchronizes the database specified by handle. This will probably trigger a physical write to disk, if supported.

handle is a database handle returned by dba_open().

dba_sync() returns true or false, if the synchronization succeeds or fails, respectively.

See also: dba_optimize()

IX. dBase Functions

These functions allow you to access records stored in dBase-format (dbf) databases.

There is no support for indexes or memo fields. There is no support for locking, too. Two concurrent webserver processes modifying the same dBase file will very likely ruin your database.

Unlike SQL databases, dBase "databases" cannot change the database definition afterwards. Once the file is created, the database definition is fixed. There are no indexes that speed searching or otherwise organize your data. dBase files are simple sequential files of fixed length records. Records are appended to the end of the file and delete records are kept until you call dbase_pack()().

We recommend that you do not use dBase files as your production database. Choose any real SQL server instead; MySQL or Postgres are common choices with PHP. dBase support is here to allow you to import and export data to and from your web database, since the file format is commonly understood with Windows spreadsheets and organizers. Import and export of data is about all that dBase support is good for.

Table of Contents
dbase_create creates a dBase database
dbase_open opens a dBase database
dbase_close close a dBase database
dbase_pack packs a dBase database
dbase_add_record add a record to a dBase database
dbase_delete_record deletes a record from a dBase database
dbase_get_record gets a record from a dBase database
dbase_numfields find out how many fields are in a dBase database
dbase_numrecords find out how many records are in a dBase database

dbase_create

dbase_create -- creates a dBase database

Description

int dbase_create(string filename, array fields);
The fields parameter is an array of arrays, each array describing the format of one field in the database. Each field consists of a name, a character indicating the field type, a length, and a precision.

The types of fields available are:

L


Boolean. These do not have a length or precision.

M


Memo. (Note that these aren't supported by PHP.) These do not have a length or precision.

D


Date (stored as YYYYMMDD). These do not have a length or precision.

N


Number. These have both a length and a precision (the number of digits after the decimal point).

C


String.

If the database is successfully created, a dbase_identifier is returned, otherwise false is returned.
Example 1. Creating a dBase database file
// "database" name
$dbname = "/tmp/test.dbf";

// database "definition"
$def =
    array(
        array("date",     "D"),
        array("name",     "C",  50),
        array("age",      "N",   3, 0),
        array("email",    "C", 128),
        array("ismember", "L")
    );

// creation
if (!dbase_create($dbname, $def))
    print "<strong>Error!</strong>";

dbase_open

dbase_open -- opens a dBase database

Description

int dbase_open(string filename, int flags);
The flags correspond to those for the open() system call. (Typically 0 means read-only, 1 means write-only, and 2 means read and write.)

Returns a dbase_identifier for the opened database, or false if the database couldn't be opened.

dbase_close

dbase_close -- close a dBase database

Description

bool dbase_close(int dbase_identifier);
Closes the database associated with dbase_identifier.

dbase_pack

dbase_pack -- packs a dBase database

Description

bool dbase_pack(int dbase_identifier);
Packs the specified database (permanently deleting all records marked for deletion using dbase_delete_record().

dbase_add_record

dbase_add_record -- add a record to a dBase database

Description

bool dbase_add_record(int dbase_identifier, array record);
Adds the data in the record to the database. If the number of items in the supplied record isn't equal to the number of fields in the database, the operation will fail and false will be returned.

dbase_delete_record

dbase_delete_record -- deletes a record from a dBase database

Description

bool dbase_delete_record(int dbase_identifier, int record);
Marks record to be deleted from the database. To actually remove the record from the database, you must also call dbase_pack().

dbase_get_record

dbase_get_record -- gets a record from a dBase database

Description

array dbase_get_record(int dbase_identifier, int record);
Returns the data from record in an array. The array is indexed starting at 1, and includes an associative member named 'deleted' which is set to 1 if the record has been marked for deletion (see dbase_delete_record().

Each field is converted to the appropriate PHP type. (Dates are left as strings.)

dbase_numfields

dbase_numfields -- find out how many fields are in a dBase database

Description

int dbase_numfields(int dbase_identifier);
Returns the number of fields (columns) in the specified database. Field numbers are between 0 and dbase_numfields($db)-1, while record numbers are between 1 and dbase_numrecords($db).
Example 1. Using dbase_numfields()
$rec = dbase_get_record($db, $recno);
$nf  = dbase_numfields($db);
for ($i=0; $i < $nf; $i++) {
    print $rec[$i]."<br>\n";
}

dbase_numrecords

dbase_numrecords -- find out how many records are in a dBase database

Description

int dbase_numrecords(int dbase_identifier);
Returns the number of records (rows) in the specified database. Record numbers are between 1 and dbase_numrecords($db), while field numbers are between 0 and dbase_numfields($db)-1.

X. dbm Functions

These functions allow you to store records stored in a dbm-style database. This type of database (supported by the Berkeley db, gdbm, and some system libraries, as well as a built-in flatfile library) stores key/value pairs (as opposed to the full-blown records supported by relational databases).
Example 1. dbm example
$dbm = dbmopen("lastseen", "w");
if (dbmexists($dbm, $userid)) {
  $last_seen = dbmfetch($dbm, $userid);
} else {
  dbminsert($dbm, $userid, time());
}
do_stuff();
dbmreplace($dbm, $userid, time());
dbmclose($dbm);

Table of Contents
dbmopen opens a dbm database
dbmclose closes a dbm database
dbmexists tells if a value exists for a key in a dbm database
dbmfetch fetches a value for a key from a dbm database
dbminsert inserts a value for a key in a dbm database
dbmreplace replaces the value for a key in a dbm database
dbmdelete deletes the value for a key from a dbm database
dbmfirstkey retrieves the first key from a dbm database
dbmnextkey retrieves the next key from a dbm database
dblist describes the dbm-compatible library being used

dbmopen

dbmopen -- opens a dbm database

Description

int dbmopen(string filename, string flags);
The first argument is the full-path filename of the dbm file to be opened and the second is the file open mode which is one of "r", "n", "c" or "w" for read-only, new (implies read-write, and most likely will truncate an already-existing database of the same name), create (implies read-write, and will not truncate an already-existing database of the same name) and read-write respectively.

Returns an identifer to be passed to the other dbm functions on success, or false on failure.

If ndbm support is used, ndbm will actually create filename.dir and filename.pag files. gdbm only uses one file, as does the internal flat-file support, and Berkeley db creates a filename.db file. Note that PHP does its own file locking in addition to any file locking that may be done by the dbm library itself. PHP does not delete the .lck files it creates. It uses these files simply as fixed inodes on which to do the file locking. For more information on dbm files, see your Unix man pages, or obtain GNU's gdbm from ftp://prep.ai.mit.edu/pub/gnu.

dbmclose

dbmclose -- closes a dbm database

Description

bool dbmclose(int dbm_identifier);
Unlocks and closes the specified database.

dbmexists

dbmexists -- tells if a value exists for a key in a dbm database

Description

bool dbmexists(int dbm_identifier, string key);
Returns true if there is a value associated with the key.

dbmfetch

dbmfetch -- fetches a value for a key from a dbm database

Description

string dbmfetch(int dbm_identifier, string key);
Returns the value associated with key.

dbminsert

dbminsert -- inserts a value for a key in a dbm database

Description

int dbminsert(int dbm_identifier, string key, string value);
Adds the value to the database with the specified key.

Returns -1 if the database was opened read-only, 0 if the insert was successful, and 1 if the specified key already exists. (To replace the value, use dbmreplace().)

dbmreplace

dbmreplace -- replaces the value for a key in a dbm database

Description

bool dbmreplace(int dbm_identifier, string key, string value);
Replaces the value for the specified key in the database.

This will also add the key to the database if it didn't already exist.

dbmdelete

dbmdelete -- deletes the value for a key from a dbm database

Description

bool dbmdelete(int dbm_identifier, string key);
Deletes the value for key in the database.

Returns false if the key didn't exist in the database.

dbmfirstkey

dbmfirstkey -- retrieves the first key from a dbm database

Description

string dbmfirstkey(int dbm_identifier);
Returns the first key in the database. Note that no particular order is guaranteed since the database may be built using a hash-table, which doesn't guarantee any ordering.

dbmnextkey

dbmnextkey -- retrieves the next key from a dbm database

Description

string dbmnextkey(int dbm_identifier, string key);
Returns the next key after key. By calling dbmfirstkey() followed by successive calls to dbmnextkey() it is possible to visit every key/value pair in the dbm database. For example:
Example 1. Visiting every key/value pair in a dbm database.
$key = dbmfirstkey($dbm_id);
while ($key) {
    echo "$key = " . dbmfetch($dbm_id, $key) . "\n";
    $key = dbmnextkey($dbm_id, $key);
}
     

dblist

dblist -- describes the dbm-compatible library being used

Description

string dblist(void);

XI. Directory Functions

Table of Contents
chdir change directory
dir directory class
closedir close directory handle
opendir open directory handle
readdir read entry from directory handle
rewinddir rewind directory handle

chdir

chdir -- change directory

Description

int chdir(string directory);
Changes PHP's current directory to directory. Returns FALSE if unable to change directory, TRUE otherwise.

dir

dir -- directory class

Description

new dir(string directory);
A pseudo-object oriented mechanism for reading a directory. The given directory is opened. Two properties are available once directory has been opened. The handle property can be used with other directory functions such as readdir(), rewinddir() and closedir(). The path property is set to path the directory that was opened. Three methods are available: read, rewind and close.
Example 1. Dir() Example
$d = dir("/etc");
echo "Handle: ".$d->handle."<br>\n";
echo "Path: ".$d->path."<br>\n";
while($entry=$d->read()) {
    echo $entry."<br>\n";
}
$d->close();
        

closedir

closedir -- close directory handle

Description

void closedir(int dir_handle);
Closes the directory stream indicated by dir_handle. The stream must have previously been opened by opendir().

opendir

opendir -- open directory handle

Description

int opendir(string path);
Returns a directory handle to be used in subsequent closedir(), readdir(), and rewinddir() calls.

readdir

readdir -- read entry from directory handle

Description

string readdir(int dir_handle);
Returns the filename of the next file from the directory. The filenames are not returned in any particular order.
Example 1. List all files in the current directory
<?php
    $handle=opendir('.');
    echo "Directory handle: $handle\n";
    echo "Files:\n";
    while ($file = readdir($handle)) {
        echo "$file\n";
    }
    closedir($handle); 
?>
    

rewinddir

rewinddir -- rewind directory handle

Description

void rewinddir(int dir_handle);
Resets the directory stream indicated by dir_handle to the beginning of the directory.

XII. Dynamic Loading Functions

Table of Contents
dl load a PHP extension at runtime

dl

dl -- load a PHP extension at runtime

Description

int dl(string library);
Loads the PHP extension defined in library. See also the extension_dir configuration directive.

XIII. Program Execution Functions

Table of Contents
escapeshellcmd escape shell metacharacters
exec Execute an external program
system Execute an external program and display output
passthru Execute an external program and display raw output

escapeshellcmd

escapeshellcmd -- escape shell metacharacters

Description

string escapeshellcmd(string command);
EscapeShellCmd() escapes any characters in a string that might be used to trick a shell command into executing arbitrary commands. This function should be used to make sure that any data coming from user input is escaped before this data is passed to the exec() or system() functions. A standard use would be:
system(EscapeShellCmd($cmd))

exec

exec -- Execute an external program

Description

string exec(string command, string [array], int [return_var]);
exec() executes the given command, however it does not output anything. It simply returns the last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the PassThru() function.

If the array argument is present, then the specified array will be filled with every line of output from the command. Note that if the array already contains some elements, exec() will append to the end of the array. If you do not want the function to append elements, call unset() on the array before passing it to exec().

If the return_var argument is present along with the array argument, then the return status of the executed command will be written to this variable.

Note that if you are going to allow data coming from user input to be passed to this function, then you should be using EscapeShellCmd() to make sure that users cannot trick the system into executing arbitrary commands.

See also system(), PassThru(), popen() and EscapeShellCmd().

system

system -- Execute an external program and display output

Description

string system(string command, int [return_var]);
System() is just like the C version of the function in that it executes the given command and outputs the result. If a variable is provided as the second argument, then the return status code of the executed command will be written to this variable.

Note, that if you are going to allow data coming from user input to be passed to this function, then you should be using the EscapeShellCmd() function to make sure that users cannot trick the system into executing arbitrary commands.

The System() call also tries to automatically flush the web server's output buffer after each line of output if PHP is running as a server module.

If you need to execute a command and have all the data from the command passed directly back without any interference, use the PassThru() function. See also the exec() and popen() functions.

passthru

passthru -- Execute an external program and display raw output

Description

string passthru(string command, int [return_var]);
The passthru() function is similar to the Exec() function in that it executes a command. If the return_var argument is present, the return status of the Unix command will be placed here. This function should be used in place of Exec() or System() when the output from the Unix command is binary data which needs to be passed directly back to the browser. A common use for this is to execute something like the pbmplus utilities that can output an image stream directly. By setting the content-type to image/gif and then calling a pbmplus program to output a gif, you can create PHP scripts that output images directly.

See also exec() and fpassthru().

XIV. FDF Functions

This is a first attempt to implement Forms Data Format (FDF) support in php3. It is recommended to read the documentation at http://beta1.adobe.com/ada/acrosdk/forms.html for a better understanding.

Table of Contents
FDF_open Opens a new fdf document
FDF_close Closes the fdf document
FDF_create
FDF_save Saves a fdf document
FDF_get_value Gets the value of a field
FDF_get_value Sets the value of a field
FDF_next_field_name Next field name
FDF_set_ap Sets the appearence of a field
FDF_set_status Sets the value of the /STATUS key
FDF_get_status Gets the value of the /STATUS key
FDF_set_file Sets the value of the /F key
FDF_get_file Gets the value of the /F key

FDF_open

FDF_open -- Opens a new fdf document

Description

int pdf_open(string filename);
The FDF_open() function opens a new fdf document. If the parameter filename is '.' the file is read from stdin.

See also fdf_close().

FDF_close

FDF_close -- Closes the fdf document

Description

void pdf_close(int fdf document);
The FDF_close() function closes the fdf document.

See also FDF_open().

FDF_create

FDF_create --

Description

int fdf_create(void );
The FDF_create() creates a new fdf document.

See also FDF_close(), FDF_save(), FDF_open().

FDF_save

FDF_save -- Saves a fdf document

Description

int pdf_save(string filename);
The FDF_save() function saves a fdf document. If the parameter filename is '.' the file is written to stdout.

See also fdf_close().

FDF_get_value

FDF_get_value -- Gets the value of a field

Description

string fdf_get_value(int fdf document, string fieldname);
The FDF_get_value() function returns the value of a field.

See also FDF_set_value().

FDF_get_value

FDF_get_value -- Sets the value of a field

Description

void fdf_get_value(int fdf document, string fieldname, string value, int isName);
The FDF_set_value() function sets the value of a field. The last parameter determines if the field value is to be converted to a PDF Name (isName = 1) or set to a PDF String (isName = 0).

See also FDF_get_value().

FDF_next_field_name

FDF_next_field_name -- Next field name

Description

string fdf_next_field_name(int fdf document, string fieldname);
The FDF_next_field_name() function returns the name of the field string after the field in parameter fieldname or the field name of the first field if the second paramter is NULL.

See also FDF_set_field(), FDF_get_field().

FDF_set_ap

FDF_set_ap -- Sets the appearence of a field

Description

void fdf_set_ap(int fdf document, string fieldname, int face, string filename, int pagenr);
The FDF_set_ap() function sets the appearance of a field (i.e. the value of the /AP key). The possible values of the parameter face are 1=FDFNormalAP, 2=FDFRolloverAP, 3=FDFDownAP.

FDF_set_status

FDF_set_status -- Sets the value of the /STATUS key

Description

void fdf_set_status(int fdf document, string status);
The FDF_set_status() sets the value of the /STATUS key.

See also FDF_get_status().

FDF_get_status

FDF_get_status -- Gets the value of the /STATUS key

Description

string fdf_get_status(int fdf document);
The FDF_get_status() returns the value of the /STATUS key.

See also FDF_set_status().

FDF_set_file

FDF_set_file -- Sets the value of the /F key

Description

void fdf_set_file(int fdf document, string filename);
The FDF_set_file() sets the value of the /F key.

See also FDF_get_file().

FDF_get_file

FDF_get_file -- Gets the value of the /F key

Description

string fdf_get_file(int fdf document);
The FDF_set_file() returns the value of the /F key.

See also FDF_set_file().

XV. filePro Functions

These functions allow read-only access to data stored in filePro databases.

filePro is a registered trademark by Fiserv, Inc. You can find more information about filePro at http://www.fileproplus.com/.

Table of Contents
filepro read and verify the map file
filepro_fieldname gets the name of a field
filepro_fieldtype gets the type of a field
filepro_fieldwidth gets the width of a field
filepro_retrieve retrieves data from a filePro database
filepro_fieldcount find out how many fields are in a filePro database
filepro_rowcount find out how many rows are in a filePro database

filepro

filepro -- read and verify the map file

Description

bool filepro(string directory);
This reads and verifies the map file, storing the field count and info.

No locking is done, so you should avoid modifying your filePro database while it may be opened in PHP.

filepro_fieldname

filepro_fieldname -- gets the name of a field

Description

string filepro_fieldname(int field_number);
Returns the name of the field corresponding to field_number.

filepro_fieldtype

filepro_fieldtype -- gets the type of a field

Description

string filepro_fieldtype(int field_number);
Returns the edit type of the field corresponding to field_number.

filepro_fieldwidth

filepro_fieldwidth -- gets the width of a field

Description

int filepro_fieldwidth(int field_number);
Returns the width of the field corresponding to field_number.

filepro_retrieve

filepro_retrieve -- retrieves data from a filePro database

Description

string filepro_retrieve(int row_number, int field_number);
Returns the data from the specified location in the database.

filepro_fieldcount

filepro_fieldcount -- find out how many fields are in a filePro database

Description

int filepro_fieldcount(void);
Returns the number of fields (columns) in the opened filePro database.

See also filepro().

filepro_rowcount

filepro_rowcount -- find out how many rows are in a filePro database

Description

int filepro_rowcount(void);
Returns the number of rows in the opened filePro database.

See also filepro().

XVI. Filesystem Functions

Table of Contents
basename return filename component of path
chgrp change file group
chmod change file mode
chown change file owner
clearstatcache clear file stat cache
copy copy file
delete a dummy manual entry
dirname return directory name component of path
diskfreespace return available space in directory
fclose close an open file pointer
feof test for end-of-file on a file pointer
fgetc get character from file pointer
fgetcsv get line from file pointer and parse for CSV fields
fgets get line from file pointer
fgetss get line from file pointer and strip HTML tags
file read entire file into an array
file_exists Check whether a file exists.
fileatime get last access time of file
filectime get inode change time of file
filegroup get file group
fileinode get file inode
filemtime get file modification time
fileowner get file owner
fileperms get file permissions
filesize get file size
filetype get file type
flock portable advisory file locking
fopen open file or URL
fpassthru output all remaining data on a file pointer
fputs write to a file pointer
fread Binary-safe file read
fseek seek on a file pointer
ftell tell file pointer read/write position
fwrite Binary-safe file write
set_file_buffer Sets file buffering on the given file pointer
is_dir tells whether the filename is a directory
is_executable tells whether the filename is executable
is_file tells whether the filename is a regular file
is_link tells whether the filename is a symbolic link
is_readable tells whether the filename is readable
is_writeable tells whether the filename is writeable
link Create a hard link
linkinfo Get information about a link
mkdir make directory
pclose close process file pointer
popen open process file pointer
readfile output a file
readlink Return the target of a symbolic link
rename rename a file
rewind rewind the position of a file pointer
rmdir remove directory
stat give information about a file
lstat give information about a file or symbolic link
symlink Create a symbolic link
tempnam create unique file name
touch set modification time of file
umask changes the current umask
unlink Delete a file

basename

basename -- return filename component of path

Description

string basename(string path);
Given a string containing a path to a file, this function will return the base name of the file.

On Windows, both slash (/) and backslash (\) are used as path separator character. In other environments, it is the forward slash (/).
Example 1. basename() example
$path = "/home/httpd/html/index.php3";
$file = basename($path); // $file is set to "index.php3"

See also: dirname()

chgrp

chgrp -- change file group

Description

int chgrp(string filename, mixed group);
Attempts to change the group of the file filename to group. Only the superuser may change the group of a file arbitrarily; other users may change the group of a file to any group of which that user is a member.

Returns true on success; otherwise returns false.

On Windows, does nothing and returns true.

See also chown() and chmod().

chmod

chmod -- change file mode

Description

int chmod(string filename, int mode);
Attempts to change the mode of the file specified by filename to that given in mode.

Note that mode is not automatically assumed to be an octal value. To ensure the expected operation, you need to prefix mode with a zero (0):

chmod( "/somedir/somefile", 755 );   // decimal; probably incorrect       
chmod( "/somedir/somefile", 0755 );  // octal; correct value of mode
Returns true on success and false otherwise.

See also chown() and chgrp().

chown

chown -- change file owner

Description

int chown(string filename, mixed user);
Attempts to change the owner of the file filename to user user. Only the superuser may change the owner of a file.

Returns true on success; otherwise returns false.

Note: On Windows, does nothing and returns true.
See also chown() and chmod().

clearstatcache

clearstatcache -- clear file stat cache

Description

void clearstatcache(void);
Invoking the stat() or lstat() system call on most systems is quite expensive. Therefore, the result of the last call to any of the status functions (listed below) is stored for use on the next such call using the same filename. If you wish to force a new status check, for instance if the file is being checked many times and may change or disappear, use this function to clear the results of the last call from memory.

This value is only cached for the lifetime of a single request.

Affected functions include stat(), lstat(), file_exists(), is_writeable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), and fileperms().

copy

copy -- copy file

Description

int copy(string source, string dest);
Makes a copy of a file. Returns true if the copy succeeded, false otherwise.
Example 1. copy() example
if (!copy($file, $file.'.bak')) {
    print("failed to copy $file...<br>\n");
}

See also: rename()

delete

delete -- a dummy manual entry

Description

void delete(string file);
This is a dummy manual entry to satisfy those people who are looking for unlink() or unset() in the wrong place.

See also: unlink() to delete files, unset() to delete variables.

dirname

dirname -- return directory name component of path

Description

string dirname(string path);
Given a string containing a path to a file, this function will return the name of the directory.

On Windows, both slash (/) and backslash (\) are used as path separator character. In other environments, it is the forward slash (/).
Example 1. dirname() example
$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"

See also: basename()

diskfreespace

diskfreespace -- return available space in directory

Description

float diskfreespace(string directory);
Given a string containing a directory, this function will return the number of bytes available on the corresponding disk.
Example 1. diskfreespace() example
$df = diskfreespace("/"); // $df contains the number of bytes available on "/"

fclose

fclose -- close an open file pointer

Description

int fclose(int fp);
The file pointed to by fp is closed.

Returns true on success and false on failure.

The file pointer must be valid, and must point to a file successfully opened by fopen() or fsockopen().

feof

feof -- test for end-of-file on a file pointer

Description

int feof(int fp);
Returns true if the file pointer is at EOF or an error occurs; otherwise returns false.

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen().

fgetc

fgetc -- get character from file pointer

Description

string fgetc(int fp);
Returns a string containing a single character read from the file pointed to by fp. Returns FALSE on EOF (as does feof()).

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen().

See also fread(), fopen(), popen(), fsockopen(), and fgets().

fgetcsv

fgetcsv -- get line from file pointer and parse for CSV fields

Description

array fgetcsv(int fp, int length);
Similar to fgets() except that fgetcsv() parses the line it reads for fields in CSV format and returns an array containing the fields read.

fp must be a valid file pointer to a file successfully opened by fopen(), popen(), or fsockopen()

length must be greater than the longest line to be found in the CSV file (allowing for trailing line-end characters).

fgetcsv() returns false on error, including end of file.

NB A blank line in a CSV file will be returned as an array comprising just one single null field, and will not be treated as an error.
 
Example 1. fgetcsv() example - Read and print entire contents of a CSV file
$row=1;
$fp = fopen("test.csv","r");
while ($data = fgetcsv($fp,1000)) {
        $num = count($data);
        print "<p> $num fields in line $row: <br>";
        $row++;
        for ( $c=0; $c<$num; $c++ ) print $data[$c] . "<br>";
}
fclose($fp);
      

fgets

fgets -- get line from file pointer

Description

string fgets(int fp, int length);
Returns a string of up to length - 1 bytes read from the file pointed to by fp. Reading ends when length - 1 bytes have been read, on a newline (which is included in the return value), or on EOF (whichever comes first).

If an error occurs, returns false.

Common Pitfalls:

People used to the 'C' semantics of fgets should note the difference in how EOF is returned.

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen().

A simple example follows:
Example 1. Reading a file line by line
$fd = fopen("/tmp/inputfile.txt", "r");
while ($buffer = fgets($fd, 4096)) {
  echo $buffer;
}
fclose($fd);

See also fread(), fopen(), popen(), fgetc(), and fsockopen().

fgetss

fgetss -- get line from file pointer and strip HTML tags

Description

string fgetss(int fp, int length);
Identical to fgets(), except that fgetss attempts to strip any HTML and PHP tags from the text it reads.

See also fgets(), fopen(), fsockopen(), popen(), and strip_tags().

file

file -- read entire file into an array

Description

array file(string filename);
Identical to readfile(), except that file() returns the file in an array. Each element of the array corresponds to a line in the file, with the newline still attached.

See also readfile(), fopen(), and popen().

file_exists

file_exists -- Check whether a file exists.

Description

int file_exists(string filename);
Returns true if the file specified by filename exists; false otherwise.

The results of this function are cached. See clearstatecache() for more details.

fileatime

fileatime -- get last access time of file

Description

int fileatime(string filename);
Returns the time the file was last accessed, or false in case of an error.

The results of this function are cached. See clearstatecache() for more details.

filectime

filectime -- get inode change time of file

Description

int filectime(string filename);
Returns the time the file was last changed, or false in case of an error.

The results of this function are cached. See clearstatecache() for more details.

filegroup

filegroup -- get file group

Description

int filegroup(string filename);
Returns the group ID of the owner of the file, or false in case of an error.

The results of this function are cached. See clearstatecache() for more details.

fileinode

fileinode -- get file inode

Description

int fileinode(string filename);
Returns the inode number of the file, or false in case of an error.

The results of this function are cached. See clearstatecache() for more details.

filemtime

filemtime -- get file modification time

Description

int filemtime(string filename);
Returns the time the file was last modified, or false in case of an

The results of this function are cached. See clearstatecache() for more details. error.

fileowner

fileowner -- get file owner

Description

int fileowner(string filename);
Returns the user ID of the owner of the file, or false in case of an

The results of this function are cached. See clearstatecache() for more details. error.

fileperms

fileperms -- get file permissions

Description

int fileperms(string filename);
Returns the permissions on the file, or false in case of an error.

The results of this function are cached. See clearstatecache() for more details.

filesize

filesize -- get file size

Description

int filesize(string filename);
Returns the size of the file, or false in case of an error.

The results of this function are cached. See clearstatecache() for more details.

filetype

filetype -- get file type

Description

string filetype(string filename);
Returns the type of the file. Possible values are fifo, char, dir, block, link, file, and unknown.

Returns false if an error occurs.

The results of this function are cached. See clearstatecache() for more details.

flock

flock -- portable advisory file locking

Description

bool flock(int fp, int operation);
PHP supports a portable way of locking complete files in an advisory way (which means all accessing programs have to use the same way of locking or it will not work).

flock() operates on fp which must be an open file pointer. operation is one of the following values:

    To acquire a shared lock (reader), set operation to 1.

    To acquire an exclusive lock (writer), set operation to 2.

    To release a lock (shared or exclusive), set operation to 3.

    If you don't want flock() to block while locking, add 4 to operation.

flock() allows you to perform a simple reader/writer model which can be used on virtually every platform (including most Unices and even Windows).

flock() returns true on success and false on error (e.g. when a lock could not be acquired).

fopen

fopen -- open file or URL

Description

int fopen(string filename, string mode);
If filename begins with "http://" (not case sensitive), an HTTP 1.0 connection is opened to the specified server and a file pointer is returned to the beginning of the text of the response.

Does not handle HTTP redirects, so you must include trailing slashes on directories.

If filename begins with "ftp://" (not case sensitive), an ftp connection to the specified server is opened and a pointer to the requested file is returned. If the server does not support passive mode ftp, this will fail. You can open files for either reading and writing via ftp (but not both simultaneously).

If filename begins with anything else, the file will be opened from the filesystem, and a file pointer to the file opened is returned.

If the open fails, the function returns false.

mode may be any of the following:

    'r' - Open for reading only; place the file pointer at the beginning of the file.

    'r+' - Open for reading and writing; place the file pointer at the beginning of the file.

    'w' - Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.

    'w+' - Open for reading and writing; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.

    'a' - Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.

    'a+' - Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, attempt to create it.

As well, mode may contain the letter 'b'. This is useful only on systems which differentiate between binary and text files (i.e., it's useless on Unix). If not needed, this will be ignored.
Example 1. fopen() example
$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:password@example.com/", "w");

If you are experiencing problems with reading and writing to files and you're using the server module version of PHP, remember to make sure that the files and directories you're using are accessible to the server process.

On the Windows platform, be careful to escape any backslashes used in the path to the file, or use forward slashes.

$fp = fopen("c:\\data\\info.txt", "r");
See also fclose(), fsockopen(), and popen().

fpassthru

fpassthru -- output all remaining data on a file pointer

Description

int fpassthru(int fp);
Reads to EOF on the given file pointer and writes the results to standard output.

If an error occurs, fpassthru() returns false.

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen(). The file is closed when fpassthru() is done reading it (leaving fp useless).

If you just want to dump the contents of a file to stdout you may want to use the readfile(), which saves you the fopen() call.

See also readfile(), fopen(), popen(), and fsockopen()

fputs

fputs -- write to a file pointer

Description

int fputs(int fp, string str, int [length]);
fputs() is an alias to fwrite(), and is identical in every way. Note that the length parameter is optional and if not specified the entire string will be written.

fread

fread -- Binary-safe file read

Description

string fread(int fp, int length);
fread() reads up to length bytes from the file pointer referenced by fp. Reading stops when length bytes have been read or EOF is reached, whichever comes first.
// get contents of a file into a string
$filename = "/usr/local/something.txt";
$fd = fopen( $filename, "r" );
$contents = fread( $fd, filesize( $filename ) );
fclose( $fd );
See also fwrite(), fopen(), fsockopen(), popen(), fgets(), fgetss(), file(), and fpassthru().

fseek

fseek -- seek on a file pointer

Description

int fseek(int fp, int offset);
Sets the file position indicator for the file referenced by fp to offset bytes into the file stream. Equivalent to calling (in C) fseek( fp, offset, SEEK_SET ).

Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.

May not be used on file pointers returned by fopen() if they use the "http://" or "ftp://" formats.

See also ftell() and rewind().

ftell

ftell -- tell file pointer read/write position

Description

int ftell(int fp);
Returns the position of the file pointer referenced by fp; i.e., its offset into the file stream.

If an error occurs, returns false.

The file pointer must be valid, and must point to a file successfully opened by fopen() or popen().

See also fopen(), popen(), fseek() and rewind().

fwrite

fwrite -- Binary-safe file write

Description

int fwrite(int fp, string string, int [length]);
fwrite() writes the contents of string to the file stream pointed to by fp. If the length argument is given, writing will stop after length bytes have been written or the end of string is reached, whichever comes first.

Note that if the length argument is given, then the magic_quotes_runtime configuration option will be ignored and no slashes will be stripped from string.

See also fread(), fopen(), fsockopen(), popen(), and fputs().

set_file_buffer

set_file_buffer -- Sets file buffering on the given file pointer

Description

int fwrite(int fp, int buffer);
set_file_buffer() sets the buffering for write operations on the given filepointer fp to buffer bytes. If buffer is 0 then write operations are unbuffered.

The function returns 0 on success, or EOF if the request cannot be honored.

Note that the default for any fopen with calling set_file_buffer is 8K.

See also fopen().

is_dir

is_dir -- tells whether the filename is a directory

Description

bool is_dir(string filename);
Returns true if the filename exists and is a directory.

The results of this function are cached. See clearstatecache() for more details.

See also is_file() and is_link().

is_executable

is_executable -- tells whether the filename is executable

Description

bool is_executable(string filename);
Returns true if the filename exists and is executable.

The results of this function are cached. See clearstatecache() for more details.

See also is_file() and is_link().

is_file

is_file -- tells whether the filename is a regular file

Description

bool is_file(string filename);
Returns true if the filename exists and is a regular file.

The results of this function are cached. See clearstatecache() for more details.

See also is_dir() and is_link().

is_link

is_link -- tells whether the filename is a symbolic link

Description

bool is_link(string filename);
Returns true if the filename exists and is a symbolic link.

The results of this function are cached. See clearstatecache() for more details.

See also is_dir() and is_file().

is_readable

is_readable -- tells whether the filename is readable

Description

bool is_readable(string filename);
Returns true if the filename exists and is readable.

Keep in mind that PHP may be accessing the file as the user id that the web server runs as (often 'nobody'). Safe mode limitations are not taken into account.

The results of this function are cached. See clearstatecache() for more details.

See also is_writeable().

is_writeable

is_writeable -- tells whether the filename is writeable

Description

bool is_writeable(string filename);
Returns true if the filename exists and is writeable. The filename argument may be a directory name allowing you to check if a directory is writeable.

Keep in mind that PHP may be accessing the file as the user id that the web server runs as (often 'nobody'). Safe mode limitations are not taken into account.

The results of this function are cached. See clearstatecache() for more details.

See also is_readable().

link

link -- Create a hard link

Description

int link(string target, string link);
Link() creates a hard link.

See also the symlink() to create soft links, and readlink() along with linkinfo().

linkinfo

linkinfo -- Get information about a link

Description

int linkinfo(string path);
Linkinfo() returns the st_dev field of the UNIX C stat structure returned by the lstat system call. This function is used to verify if a link (pointed to by path) really exists (using the same method as the S_ISLNK macro defined in stat.h). Returns 0 or FALSE in case of error.

See also symlink(), link(), and readlink().

mkdir

mkdir -- make directory

Description

int mkdir(string pathname, int mode);
Attempts to create the directory specified by pathname.

Note that you probably want to specify the mode as an octal number, which means it should have a leading zero.

mkdir("/path/to/my/dir", 0700);
Returns true on success and false on failure.

See also rmdir().

pclose

pclose -- close process file pointer

Description

int pclose(int fp);
Closes a file pointer to a pipe opened by popen().

The file pointer must be valid, and must have been returned by a successful call to popen().

Returns the termination status of the process that was run.

See also popen().

popen

popen -- open process file pointer

Description

int popen(string command, string mode);
Opens a pipe to a process executed by forking the command given by command.

Returns a file pointer identical to that returned by fopen(), except that it is unidirectional (may only be used for reading or writing) and must be closed with pclose(). This pointer may be used with fgets(), fgetss(), and fputs().

If an error occurs, returns false.

       $fp = popen( "/bin/ls", "r" );
See also pclose().

readfile

readfile -- output a file

Description

int readfile(string filename);
Reads a file and writes it to standard output.

Returns the number of bytes read from the file. If an error occurs, false is returned and unless the function was called as @readfile, an error message is printed.

If filename begins with "http://" (not case sensitive), an HTTP 1.0 connection is opened to the specified server and the text of the response is written to standard output.

Does not handle HTTP redirects, so you must include trailing slashes on directories.

If filename begins with "ftp://" (not case sensitive), an ftp connection to the specified server is opened and the requested file is written to standard output. If the server does not support passive mode ftp, this will fail.

If filename begins with neither of these strings, the file will be opened from the filesystem and its contents written to standard output.

See also fpassthru(), file(), fopen(), include(), require(), and virtual().

readlink

readlink -- Return the target of a symbolic link

Description

string readlink(string path);
Readlink() does the same as the readlink C function and returns the contents of the symbolic link path or 0 in case of error.

See also symlink(), readlink() and linkinfo().

rename

rename -- rename a file

Description

int rename(string oldname, string newname);
Attempts to rename oldname to newname.

Returns true on success and false on failure.

rewind

rewind -- rewind the position of a file pointer

Description

int rewind(int fp);
Sets the file position indicator for fp to the beginning of the file stream.

If an error occurs, returns 0.

The file pointer must be valid, and must point to a file successfully opened by fopen().

See also fseek() and ftell().

rmdir

rmdir -- remove directory

Description

int rmdir(string dirname);
Attempts to remove the directory named by pathname. The directory must be empty, and the relevant permissions must permit this.

If an error occurs, returns 0.

See also mkdir().

stat

stat -- give information about a file

Description

array stat(string filename);
Gathers the statistics of the file named by filename.

Returns an array with the statistics of the file with the following elements:

    device

    inode

    inode protection mode

    number of links

    user id of owner

    group id owner

    device type if inode device *

    size in bytes

    time of last access

    time of last modification

    time of last change

    blocksize for filesystem I/O *

    number of blocks allocated

* - only valid on systems supporting the st_blksize type--other systems (i.e. Windows) return -1

The results of this function are cached. See clearstatecache() for more details.

lstat

lstat -- give information about a file or symbolic link

Description

array lstat(string filename);
Gathers the statistics of the file or symbolic link named by filename. This function is identical to the stat() function except that if the filename parameter is a symbolic link, the status of the symbolic link is returned, not the status of the file pointed to by the symbolic link.

Returns an array with the statistics of the file with the following elements:

    device

    inode

    number of links

    user id of owner

    group id owner

    device type if inode device *

    size in bytes

    time of last access

    time of last modification

    time of last change

    blocksize for filesystem I/O *

    number of blocks allocated

* - only valid on systems supporting the st_blksize type--other systems (i.e. Windows) return -1

The results of this function are cached. See clearstatecache() for more details.

symlink

symlink -- Create a symbolic link

Description

int symlink(string target, string link);
symlink() creates a symbolic link from the existing target with the specified name link.

See also link() to create hard links, and readlink() along with linkinfo().

tempnam

tempnam -- create unique file name

Description

string tempnam(string dir, string prefix);
Creates a unique temporary filename in the specified directory. If the directory does not exist, tempnam() may generate a filename in the system's temporary directory.

Returns the new temporary filename, or the null string on failure.
Example 1. tempnam() example
$tmpfname = tempnam( "/tmp", "FOO" );

touch

touch -- set modification time of file

Description

int touch(string filename, int time);
Attempts to set the modification time of the file named by filename to the value given by time. If the option time is not given, uses the present time.

If the file does not exist, it is created.

Returns true on success and false otherwise.

umask

umask -- changes the current umask

Description

int umask(int mask);
Umask() sets PHP's umask to mask & 0777 and returns the old umask. When PHP is being used as a server module, the umask is restored when each request is finished.

Umask() without arguments simply returns the current umask.

unlink

unlink -- Delete a file

Description

int unlink(string filename);
Deletes filename. Similar to the Unix C unlink() function.

Returns 0 or FALSE on an error.

See also rmdir() for removing directories.

XVII. Functions related to HTTP

These functions let you manipulate the output sent back to the remote browser right down to the HTTP protocol level.

Table of Contents
header Send a raw HTTP header
setcookie Send a cookie

header

header -- Send a raw HTTP header

Description

int header(string string);
The Header() function is used at the top of an HTML file to send raw HTTP header strings. See the HTTP 1.1 Specification for more information on raw http headers. Note: Remember that the Header() function must be called before any actual output is sent either by normal HTML tags or from PHP. It is a very common error to read code with include() or with auto_prepend and have spaces or empty lines in this code that force output before header() is called.
Header("Location: http://www.php.net");  /* Redirect browser to PHP web site */
exit;  /* Make sure that code below does not get executed when we redirect. */
PHP scripts often generate dynamic HTML that must not be cached by the client browser or any proxy caches between the server and the client browser. Many proxies and clients can be forced to disable caching with
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");             // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); // always modified
  header("Cache-Control: no-cache, must-revalidate");           // HTTP/1.1
  header("Pragma: no-cache");                                   // HTTP/1.0

setcookie

setcookie -- Send a cookie

Description

int setcookie(string name, string value, int expire, string path, string domain, int secure);
SetCookie() defines a cookie to be sent along with the rest of the header information. Cookies must be sent before any other headers are sent (this is a restriction of Cookies, not PHP). This requires you to place calls to this function before any <html> or <head> tags.

All the arguments except the name argument are optional. If only the name argument is present, the cookie by that name will be deleted from the remote client. You may also replace any argument with an empty string ("") in order to skip that argument. The expire and secure arguments are integers and cannot be skipped with an empty string. Use a zero (0) instead. The expire argument is a regular Unix time integer as returned by the time() or mktime() functions. The secure indicates that the cookie should only be transmitted over a secure HTTPS connection.

Common Pitfalls:

Cookies will not become visable until the next loading of a page that the cookie should be visable for.

Multiple calls to setcookie in the same script will be performed in the reverse order. If you are trying to delete one cookie before inserting another you should put the insert before the delete.

Some examples follow:
Example 1. SetCookie examples
SetCookie("TestCookie","Test Value");
SetCookie("TestCookie",$value,time()+3600);  /* expire in 1 hour */
SetCookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);

Note that the value portion of the cookie will automatically be urlencoded when you send the cookie, and when it is received, it is automatically decoded and assigned to a variable by the same name as the cookie name. To see the contents of our test cookie in a script, simply use one of the following examples:

echo $TestCookie;
echo $HTTP_COOKIE_VARS["TestCookie"];
For more information on cookies, see Netscape's cookie specification at http://www.netscape.com/newsref/std/cookie_spec.html.

Microsoft Internet Explorer 4 with Service Pack 1 applied does not correctly deal with cookies that have their path parameter set.

Netscape Communicator 4.05 and Microsoft Internet Explorer 3.x appear to handle cookies incorrectly when the path and time are not set.

XVIII. Hyperwave functions

Introduction

Hyperwave has been developed at IICM in Graz. It started with the name Hyper-G and changed to Hyperwave when it was commercialised (If I remember properly it was in 1996).

Hyperwave is not free software. The current version, 4.1, is available at www.hyperwave.com. A time limited version can be ordered for free (30 days).

Hyperwave is an information system similar to a database (HIS, Hyperwave Information Server). Its focus is the storage and management of documents. A document can be any possible piece of data that may as well be stored in file. Each document is accompanied by its object record. The object record contains meta data for the document. The meta data is a list of attributes which can be extended by the user. Certain attributes are always set by the Hyperwave server, other may be modified by the user. An attribute is a name/value pair of the form name=value. The complete object record contains as many of those pairs as the user likes. The name of an attribute does not have to be unique, e.g. a title may appear several times within an object record. This makes sense if you want to specify a title in several languages. In such a case there is a convention, that each title value is preceded by the two letter language abbreviation followed by a colon, e.g. 'en:Title in English' or 'ge:Titel in deutsch'. Other attributes like a description or keywords are potential candidates. You may also replace the language abbreviation by any other string as long as it separated by colon from the rest of the attribute value.

Each object record has native a string representation with each name/value pair separated by a newline. The PHP3 Hyperwave module also knows a second representation which is an associated array with the attribute name being the key. Multilingual attribute values itself form another associated array with the key being the language abbreviation. Actually any multiple attribute forms an associated array with the string left to the colon in the attribute value being the key. (This is not fully implemented. Only the attributes Title, Description and Keyword are treated properly yet.)

Besides the documents, all hyper links contained in a document are stored as object records as well. Hyper links which are in a document will be removed from it and stored as individual objects, when the document is inserted into the database. The object record of the link contains information about where it starts and where it ends. In order to gain the original document you will have to retrieve the plain document without the links and the list of links and reinsert them (The functions hw_pipedocument() and hw_gettext() do this for you. The advantage of separating links from the document is obvious. Once a document to which a link is pointing to changes its name, the link can easily be modified accordingly. The document containing the link is not affected at all. You may even add a link to a document without modifying the document itself.

Saying that hw_pipedocument() and hw_gettext() do the link insertion automatically is not as simple as it sounds. Inserting links implies a certain hierarchy of the documents. On a web server this is given by the file system, but Hyperwave has its own hierarchy and names do not reflect the position of an object in that hierarchy. Therefore creation of links first of all requires a mapping from the Hyperwave hierarchy and namespace into a web hierarchy respective web namespace. The fundamental difference between Hyperwave and the web is the clear distinction between names and hierarchy in Hyperwave. The name does not contain any information about the objects position in the hierarchy. In the web the name also contains the information on where the object is located in the hierarchy. This leads to two possibles ways of mapping. Either the Hyperwave hierarchy and name of the Hyperwave object is reflected in the URL or the name only. To make things simple the second approach is used. Hyperwave object with name 'my_object' is mapped to 'http://host/my_object' disregarding where it resides in the Hyperwave hierarchy. An object with name 'parent/my_object' could be the child of 'my_object' in the Hyperwave hierarchy, though in a web namespace it appears to be just the opposite and the user might get confused. This can only be prevented by selecting reasonable object names.

Having made this decision a second problem arises. How do you involve php3? The URL http://host/my_object will not call any php3 script unless you tell your web server to rewrite it to e.g. 'http://host/php3_script/my_object' and the script 'php3_script' evaluates the $PATH_INFO variable and retrieves the object with name 'my_object' from the Hyperwave server. Their is just one little drawback which can be fixed easily. Rewriting any URL would not allow any access to other document on the web server. A php3 script for searching in the Hyperwave server would be impossible. Therefore you will need at least a second rewriting rule to exclude certain URLS like all e.g. starting with http://host/Hyperwave. This is basically sharing of a namespace by the web and Hyperwave server.

Based on the above mechanism links are insert into documents.

It gets more complicated if php3 is not run as a module/CGI script but as a standalone application e.g. to dump the content of the Hyperwave server on a CD-ROM. In such a case it makes sense to retain the Hyperwave hierarchy and map in onto the file system. This conflicts with the object names if they reflect its own hierarchy (e.g. by choosing names including '/'). Therefore '/' has to be replaced by another character, e.g. '_'. to be continued.

The network protocol to communicate with the Hyperwave server is called HG-CSP (Hyper-G Client/Server Protocol). It is based on messages to initiate certain actions, e.g. get object record. In early versions of the Hyperwave Server two native clients (Harmony, Amadeus) were provided for communication with the server. Those two disappeared when Hyperwave was commercialised. As a replacement a so called wavemaster was provided. The wavemaster is like a protocol converter from HTTP to HG-CSP. The idea is to do all the administration of the database and visualisation of documents by a web interface. The wavemaster implements a set of placeholders for certain actions to customise the interface. This set of placeholders is called the PLACE Language. PLACE lacks a lot of features of a real programming language and any extension to it only enlarges the list of placeholders. This has led to the use of JavaScript which IMO does not make life easier.

Adding Hyperwave support to PHP3 should fill in the gap of a missing programming language for interface customisation. It implements all the messages as defined by the HG-CSP but also provides more powerful commands to e.g. retrieve complete documents.

Hyperwave has its own terminology to name certain pieces of information. This has widely been taken over and extended. Almost all functions operate on one of the following data types.

    object ID: An unique integer value for each object in the Hyperwave server. It is also one of the attributes of the object record (ObjectID). Object ids are often used as an input parameter to specify an object.

    object record: A string with attribute-value pairs of the form attribute=value. The pairs are separated by a carriage return from each other. An object record can easily be converted into an object array with hw_object2array(). Several functions return object records. The names of those functions end with obj.

    object array: An associated array with all attributes of an object. The key is the attribute name. If an attribute occurs more than once in an object record it will result in another indexed or associated array. Attributes which are language depended (like the title, keyword, description) will form an associated array with the key set to the language abbreviation. All other multiple attributes will form an indexed array. php3 functions never return object arrays.

    hw_document: This is a complete new data type which holds the actual document, e.g. HTML, PDF etc. It is somewhat optimised for HTML documents but may be used for any format.

Several functions which return an array of object records do also return an associated array with statistical information about them. The array is the last element of the object record array. The statistical array contains the following entries:
Hidden


Number of object records with attribute PresentationHints set to Hidden.

CollectionHead


Number of object records with attribute PresentationHints set to CollectionHead.

FullCollectionHead


Number of object records with attribute PresentationHints set to FullCollectionHead.

CollectionHeadNr


Index in array of object records with attribute PresentationHints set to CollectionHead.

FullCollectionHeadNr


Index in array of object records with attribute PresentationHints set to FullCollectionHead.

Total


Total: Number of object records.


Integration with Apache

The Hyperwave module is best used when PHP3 is compiled as an apache module. In such a case the underlying Hyperwave server can be hidden from users almost completely if apache uses its rewriting engine. The following instructions will explain this.

Since PHP3 with Hyperwave support build into apache is intended to replace the native Hyperwave solution based on wavemaster I will assume that the apache server will only serve as a Hyperwave web interface. This is not necessary but it simplifies the configuration. The concept is quite simple. First of all you need a PHP3 script which evaluates the PATH_INFO variable and treats its value as the name of a Hyperwave object. Let's call this script 'Hyperwave'. The URL http://your.hostname/Hyperwave/name_of_object would than return the Hyperwave object with the name 'name_of_object'. Depending on the type of the object the script has to react accordingly. If it is a collection, it will probably return a list of children. If it is a document it will return the mime type and the content. A slight improvement can be achieved if the apache rewriting engine is used. From the users point of view it would be more straight forward if the URL http://your.hostname/name_of_object would return the object. The rewriting rule is quite easy:

RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L]
Now every URL relates to an object in the Hyperwave server. This causes a simple to solve problem. There is no way to execute a different script, e.g. for searching, than the 'Hyperwave' script. This can be fixed with another rewriting rule like the following:
RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]
This will reserve the directory /usr/local/apache/htdocs/hw for additional scripts and other files. Just make sure this rule is evaluated before the one above. There is just a little drawback: all Hyperwave objects whose name starts with 'hw/' will be shadowed. So, make sure you don't use such names. If you need more directories, e.g. for images just add more rules or place them all in one directory. Finally, don't forget to turn on the rewriting engine with
RewriteEngine on
My experiences have shown that you will need the following scripts:
    to return the object itself

    to allow searching

    to identify yourself

    to set your profile

    one for each additional function like to show the object attributes, to show information about users, to show the status of the server, etc.


Todo

There are still some things todo:
    The hw_InsertDocument has to be split into hw_InsertObject() and hw_PutDocument().

    The names of several functions are not fixed, yet.

    Most functions require the current connection as its first parameter. This leads to a lot of typing, which is quite often not necessary if there is just one open connection. A default connection will improve this.

Table of Contents
hw_Modifyobject modifies object record
hw_Children object ids of children
hw_ChildrenObj object records of children
hw_Close closes the Hyperwave connection
hw_Connect opens a connection
hw_Cp copies objects
hw_Deleteobject deletes object
hw_DocByAnchor object id object belonging to anchor
hw_DocByAnchorObj object record object belonging to anchor
hw_DocumentAttributes object record of hw_document
hw_DocumentBodyTag body tag of hw_document
hw_DocumentContent returns content of hw_document
hw_DocumentSetContent sets/replaces content of hw_document
hw_DocumentSize size of hw_document
hw_ErrorMsg returns error message
hw_EditText retrieve text document
hw_Error error number
hw_Free_Document frees hw_document
hw_GetParents object ids of parents
hw_GetParentsObj object records of parents
hw_GetChildColl object ids of child collections
hw_GetChildCollObj object records of child collections
hw_GetRemote Gets a remote document
hw_GetRemoteChildren Gets children of remote document
hw_GetSrcByDestObj Returns anchors pointing at object
hw_GetObject object record
hw_GetAndLock return bject record and lock object
hw_GetText retrieve text document
hw_GetObjectByQuery search object
hw_GetObjectByQueryObj search object
hw_GetObjectByQueryColl search object in collection
hw_GetObjectByQueryCollObj search object in collection
hw_GetChildDocColl object ids of child documents of collection
hw_GetChildDocCollObj object records of child documents of collection
hw_GetAnchors object ids of anchors of document
hw_GetAnchorsObj object records of anchors of document
hw_Mv moves objects
hw_Identify identifies as user
hw_InCollections check if object ids in collections
hw_Info info about connection
hw_InsColl insert collection
hw_InsDoc insert document
hw_InsertDocument upload any document
hw_InsertObject inserts an object record
hw_New_Document create new document
hw_Objrec2Array convert attributes from object record to object array
hw_OutputDocument prints hw_document
hw_pConnect make a persistent database connection
hw_PipeDocument retrieve any document
hw_Root root object id
hw_Unlock unlock object
hw_Username name of currently logged in user

hw_Modifyobject

hw_Modifyobject -- modifies object record

Description

int hw_modifyobject(int connection, int object_to_change, array remove, array add);
This command allows to remove, add, or modify individual attributes of an object record. The object is specified by the Object ID object_to_change. The first array remove is a list of attributes to remove. The second array add is a list of attributes to add. In order to modify an attribute one will have to remove the old one and add a new one. hw_modifyobject() will always remove the attributes before it adds attributes unless the value of the attribute to remove is not a string or array.

The keys of both arrays are the attributes name. The value of each array element can either be an array, a string or anything else. If it is an array each attribute value is constructed by the key of each element plus a colon and the value of each element. If it is a string it is taken as the attribute value. An empty string will result in a complete removal of that attribute. If the value is neither a string nor an array but something else, e.g. an integer, no operation at all will be performed on the attribute. This is neccessary if you want to to add a completely new attribute not just a new value for an existing attribute. If the remove array contained an empty string for that attribute, the attribute would be tried to removed which would fail since it doesn't exist. The following addition of a new value for that attribute would also fail. Setting the value for that attribute to e.g. 0 would not even try to remove it since the addition will work.

If you would like to change the attribute 'Name' with the current value 'books' into 'articles' you will have to create two arrays and call hw_modifyobject().
Example 1. modifying an attribute
       // $connect is an existing connection to the Hyperwave server
       // $objid is the ID of the object to modify
       $remarr = array("Name" => "books");
       $addarr = array("Name" => "articles");
       $hw_modifyobject($connect, $objid, $remarr, $addarr);
      
In order to delete/add a name=value pair from/to the object record just pass the remove/add array and set the last/third parameter to an empty array. If the attribute is the first one with that name to add, set attribute value in the remove array to an integer.
Example 2. adding a completly new attribute
       // $connect is an existing connection to the Hyperwave server
       // $objid is the ID of the object to modify
       $remarr = array("Name" => 0);
       $addarr = array("Name" => "articles");
       $hw_modifyobject($connect, $objid, $remarr, $addarr);
      

Note: Multilingual attributes, e.g. 'Title', can be modified in two ways. Either by providing the attributes value in its native form 'language':'title' or by providing an array with elements for each language as described above. The above example would than be:
Example 3. modifying Title attribute
       $remarr = array("Title" => "en:Books");
       $addarr = array("Title" => "en:Articles");
       $hw_modifyobject($connect, $objid, $remarr, $addarr);
      
or
Example 4. modifying Title attribute
       $remarr = array("Title" => array("en" => "Books"));
       $addarr = array("Title" => array("en" => "Articles", "ge"=>"Artikel"));
       $hw_modifyobject($connect, $objid, $remarr, $addarr);
      
This removes the english title 'Books' and adds the english title 'Articles' and the german title 'Artikel'.
Example 5. removing attribute
       $remarr = array("Title" => "");
       $addarr = array("Title" => "en:Articles");
       $hw_modifyobject($connect, $objid, $remarr, $addarr);
      
This will remove all attributes with the name 'Title' and adds a new 'Title' attribute. This comes in handy if you want to remove attributes recursively.

If you need to delete all attributes with a certain name you will have to pass an empty string as the attribute value.

Note: Only the attributes 'Title', 'Description' and 'Keyword' will properly handle the language prefix. If those attributes don't carry a language prefix, the prefix 'xx' will be assigned.

Returns TRUE if no error occurs otherwise FALSE.

hw_Children

hw_Children -- object ids of children

Description

array hw_children(int connection, int objectID);
Returns an array of object ids. Each id belongs to a child of the collection with ID objectID. The array contains all children both documents and collections.

hw_ChildrenObj

hw_ChildrenObj -- object records of children

Description

array hw_childrenobj(int connection, int objectID);
Returns an array of object records. Each object record belongs to a child of the collection with ID objectID. The array contains all children both documents and collections.

hw_Close

hw_Close -- closes the Hyperwave connection

Description

int hw_close(int connection);
Returns false if connection is not a valid connection index, otherwise true. Closes down the connection to a Hyperwave server with the given connection index.

hw_Connect

hw_Connect -- opens a connection

Description

int hw_connect(string host, int port, string username, string password);
Opens a connection to a Hyperwave server and returns a connection index on success, or false if the connection could not be made. Each of the arguments should be a quoted string, except for the port number. The username and password arguments are optional and can be left out. In such a case no identification with the server will be done. It is similar to identify as user anonymous. This function returns a connection index that is needed by other Hyperwave functions. You can have multiple connections open at once. Keep in mind, that the password is not encrypted.

See also hw_pConnect().

hw_Cp

hw_Cp -- copies objects

Description

int hw_cp(int connection, array object_id_array, int destination id);
Copies the objects with object ids as specified in the second parameter to the collection with the id destination id.

The value return is the number of copied objects.

See also hw_mv().

hw_Deleteobject

hw_Deleteobject -- deletes object

Description

int hw_deleteobject(int connection, int object_to_delete);
Deletes the object with the given object id in the second parameter. It will delete all instances of the object.

Returns TRUE if no error occurs otherwise FALSE.

See also hw_mv().

hw_DocByAnchor

hw_DocByAnchor -- object id object belonging to anchor

Description

int hw_docbyanchor(int connection, int anchorID);
Returns an th object id of the document to which anchorID belongs.

hw_DocByAnchorObj

hw_DocByAnchorObj -- object record object belonging to anchor

Description

string hw_docbyanchorobj(int connection, int anchorID);
Returns an th object record of the document to which anchorID belongs.

hw_DocumentAttributes

hw_DocumentAttributes -- object record of hw_document

Description

string hw_documentattributes(int hw_document);
Returns the object record of the document.

See also hw_DocumentBodyTag(), hw_DocumentSize().

hw_DocumentBodyTag

hw_DocumentBodyTag -- body tag of hw_document

Description

string hw_documentbodytag(int hw_document);
Returns the BODY tag of the document. If the document is an HTML document the BODY tag should be printed before the document.

See also hw_DocumentAttributes(), hw_DocumentSize().

hw_DocumentContent

hw_DocumentContent -- returns content of hw_document

Description

string hw_documentcontent(int hw_document);
Returns the content of the document. If the document is an HTML document the content is everything after the BODY tag. Information from the HEAD and BODY tag is in the stored in the object record.

See also hw_DocumentAttributes(), hw_DocumentSize(), hw_DocumentSetContent().

hw_DocumentSetContent

hw_DocumentSetContent -- sets/replaces content of hw_document

Description

string hw_documentsetcontent(int hw_document, string content);
Sets or replaces the content of the document. If the document is an HTML document the content is everything after the BODY tag. Information from the HEAD and BODY tag is in the stored in the object record. If you provide this information in the content of the document too, the Hyperwave server will change the object record accordingly when the document is inserted. Probably not a very good idea. If this functions fails the document will retain its old content.

See also hw_DocumentAttributes(), hw_DocumentSize(), hw_DocumentContent().

hw_DocumentSize

hw_DocumentSize -- size of hw_document

Description

int hw_documentsize(int hw_document);
Returns the size in bytes of the document.

See also hw_DocumentBodyTag(), hw_DocumentAttributes().

hw_ErrorMsg

hw_ErrorMsg -- returns error message

Description

string hw_errormsg(int connection);
Returns a string containing the last error message or 'No Error'. If false is returned, this function failed. The message relates to the last command.

hw_EditText

hw_EditText -- retrieve text document

Description

int hw_edittext(int connection, int hw_document);
Uploads the text document to the server. The object record of the document may not be modified while the document is edited. This function will only works for pure text documents. It will not open a special data connection and therefore blocks the control connection during the transfer.

See also hw_PipeDocument(), hw_FreeDocument(), hw_DocumentBodyTag(), hw_DocumentSize(), hw_OutputDocument(), hw_GetText().

hw_Error

hw_Error -- error number

Description

int hw_error(int connection);
Returns the last error number. If the return value is 0 no error has occurred. The error relates to the last command.

hw_Free_Document

hw_Free_Document -- frees hw_document

Description

int hw_free_document(int hw_document);
Frees the memory occupied by the Hyperwave document.

hw_GetParents

hw_GetParents -- object ids of parents

Description

array hw_getparentsobj(int connection, int objectID);
Returns an indexed array of object ids. Each object id belongs to a parent of the object with ID objectID.

hw_GetParentsObj

hw_GetParentsObj -- object records of parents

Description

array hw_getparentsobj(int connection, int objectID);
Returns an indexed array of object records plus an associated array with statistical information about the object records. The associated array is the last entry of the returned array. Each object record belongs to a parent of the object with ID objectID.

hw_GetChildColl

hw_GetChildColl -- object ids of child collections

Description

array hw_getchildcoll(int connection, int objectID);
Returns an array of object ids. Each object ID belongs to a child collection of the collection with ID objectID. The function will not return child documents.

See also hw_GetChildren(), hw_GetChildDocColl().

hw_GetChildCollObj

hw_GetChildCollObj -- object records of child collections

Description

array hw_getchildcollobj(int connection, int objectID);
Returns an array of object records. Each object records belongs to a child collection of the collection with ID objectID. The function will not return child documents.

See also hw_ChildrenObj(), hw_GetChildDocCollObj().

hw_GetRemote

hw_GetRemote -- Gets a remote document

Description

int hw_getremote(int connection, int objectID);
Returns a remote document. Remote documents in Hyperwave notation are documents retrieved from an external source. Common remote documents are for example external web pages or queries in a database. In order to be able to access external sources throught remote documents Hyperwave introduces the HGI (Hyperwave Gateway Interface) which is similar to the CGI. Currently, only ftp, http-servers and some databases can be accessed by the HGI. Calling hw_GetRemote() returns the document from the external source. If you want to use this function you should be very familiar with HGIs. You should also consider to use php3 instead of Hyperwave to access external sources. Adding database support by a Hyperwave gateway should be more difficult than doing it in php3.

See also hw_GetRemoteChildren().

hw_GetRemoteChildren

hw_GetRemoteChildren -- Gets children of remote document

Description

int hw_getremotechildren(int connection, string object record);
Returns the children of a remote document. Children of a remote document are remote documents itself. This makes sense if a database query has to be narrowed and is explained in Hyperwave Programmers' Guide. If the number of children is 1 the function will return the document itself formated by the Hyperwave Gateway Interface (HGI). If the number of children is greater than 1 it will return an array of object record with each maybe the input value for another call to hw_GetRemoteChildren(). Those object records are virtual and do not exist in the Hyperwave server, therefore they do not have a valid object ID. How exactely such an object record looks like is up to the HGI. If you want to use this function you should be very familiar with HGIs. You should also consider to use php3 instead of Hyperwave to access external sources. Adding database support by a Hyperwave gateway should be more difficult than doing it in php3.

See also hw_GetRemote().

hw_GetSrcByDestObj

hw_GetSrcByDestObj -- Returns anchors pointing at object

Description

array hw_getsrcbydestobj(int connection, int objectID);
Returns the object records of all anchors pointing to the object with ID objectID. The object can either be a document or an anchor of type destination.

See also hw_GetAnchors().

hw_GetObject

hw_GetObject -- object record

Description

array hw_getobject(int connection, int objectID);
Returns the object record for the object with ID objectID.

See also hw_GetAndLock().

hw_GetAndLock

hw_GetAndLock -- return bject record and lock object

Description

string hw_getandlock(int connection, int objectID);
Returns the object record for the object with ID objectID. It will also lock the object, so other users cannot access it until it is unlocked.

See also hw_Unlock(), hw_GetObject().

hw_GetText

hw_GetText -- retrieve text document

Description

int hw_gettext(int connection, int objectID, int rootID);
Returns the document with object ID objectID. If the document has anchors which can be inserted, they will be inserted already. The optional parameter rootID determines how links are inserted into the document. The default is 0 and will result in links that are constructed from the name of the link's destination object. This is useful for web applications. If a link points to an object with name 'internet_movie' the HTML link will be <A HREF="/internet_movie">. The actual location of the source and destination object in the document hierachy is disregarded. You will have to set up your web browser, to rewrite that URL to for example '/my_script.php3/internet_movie'. 'my_script.php3' will have to evaluate $PATH_INFO and retrieve the document.

If rootID is unequal to 0 the link is constructed from all the names starting at the object with the id rootID separated by a slash relative to the current object. If for example the above document 'internet_movie' is located at 'a-b-c-internet_movie' with '-' being the seperator between hierachy levels and the source document is located at 'a-b-d-source' the resulting HTML link would be: <A HREF="../c/internet_movie">. This is useful if you want to download the whole server content onto disk and map the document hierachy onto the file system.

This function will only work for pure text documents. It will not open a special data connection and therefore blocks the control connection during the transfer.

See also hw_PipeDocument(), hw_FreeDocument(), hw_DocumentBodyTag(), hw_DocumentSize(), hw_OutputDocument().

hw_GetObjectByQuery

hw_GetObjectByQuery -- search object

Description

array hw_getobjectbyquery(int connection, string query, int max_hits);
Searches for objects on the whole server and returns an array of object ids. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

See also hw_GetObjectByQueryObj().

hw_GetObjectByQueryObj

hw_GetObjectByQueryObj -- search object

Description

array hw_getobjectbyqueryobj(int connection, string query, int max_hits);
Searches for objects on the whole server and returns an array of object records. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

See also hw_GetObjectByQuery().

hw_GetObjectByQueryColl

hw_GetObjectByQueryColl -- search object in collection

Description

array hw_getobjectbyquerycoll(int connection, int objectID, string query, int max_hits);
Searches for objects in collection with ID objectID and returns an array of object ids. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

See also hw_GetObjectByQueryCollObj().

hw_GetObjectByQueryCollObj

hw_GetObjectByQueryCollObj -- search object in collection

Description

array hw_getobjectbyquerycollobj(int connection, int objectID, string query, int max_hits);
Searches for objects in collection with ID objectID and returns an array of object records. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

See also hw_GetObjectByQueryColl().

hw_GetChildDocColl

hw_GetChildDocColl -- object ids of child documents of collection

Description

array hw_getchilddoccoll(int connection, int objectID);
Returns array of object ids for child documents of a collection.

See also hw_GetChildren(), hw_GetChildColl().

hw_GetChildDocCollObj

hw_GetChildDocCollObj -- object records of child documents of collection

Description

array hw_getchilddoccollobj(int connection, int objectID);
Returns an array of object records for child documents of a collection.

See also hw_ChildrenObj(), hw_GetChildCollObj().

hw_GetAnchors

hw_GetAnchors -- object ids of anchors of document

Description

array hw_getanchors(int connection, int objectID);
Returns an array of object ids with anchors of the document with object ID objectID.

hw_GetAnchorsObj

hw_GetAnchorsObj -- object records of anchors of document

Description

array hw_getanchorsobj(int connection, int objectID);
Returns an array of object records with anchors of the document with object ID objectID.

hw_Mv

hw_Mv -- moves objects

Description

int hw_mv(int connection, array object id array, int source id, int destination id);
Moves the objects with object ids as specified in the second parameter from the collection with id source id to the collection with the id destination id. If the destination id is 0 the objects will be unlinked from the source collection. If this is the last instance of that object it will be deleted. If you want to delete all instances at once, use hw_deleteobject().

The value return is the number of moved objects.

See also hw_cp(), hw_deleteobject().

hw_Identify

hw_Identify -- identifies as user

Description

int hw_identify(string username, string password);
Identifies as user with username and password. Identification is only valid for the current session. I do not thing this function will be needed very often. In most cases it will be easier to identify with the opening of the connection.

See also hw_Connect().

hw_InCollections

hw_InCollections -- check if object ids in collections

Description

array hw_incollections(int connection, array object_id_array, array collection_id_array, int return_collections);
Checks whether a set of objects (documents or collections) specified by the object_id_array is part of the collections listed in collection_id_array. When the fourth parameter return_collections is 0, the subset of object ids that is part of the collections (i.e., the documents or collections that are children of one or more collections of collection ids or their subcollections, recursively) is returned as an array. When the fourth parameter is 1, however, the set of collections that have one or more objects of this subset as children are returned as an array. This option allows a client to, e.g., highlight the part of the collection hierarchy that contains the matches of a previous query, in a graphical overview.

hw_Info

hw_Info -- info about connection

Description

string hw_info(int connection);
Returns information about the current connection. The returned string has the following format: <Serverstring>, <Host>, <Port>, <Username>, <Port of Client>, <Byte swapping>

hw_InsColl

hw_InsColl -- insert collection

Description

int hw_inscoll(int connection, int objectID, array object_array);
Inserts a new collection with attributes as in object_array into collection with object ID objectID.

hw_InsDoc

hw_InsDoc -- insert document

Description

int hw_insdoc(int connection, int parentID, string object_record, string text);
Inserts a new document with attributes as in object_record into collection with object ID parentID. This function inserts either an object record only or an object record and a pure ascii text in text if text is given. If you want to insert a general document of any kind use hw_insertdocument() instead.

See also hw_InsertDocument(), hw_InsColl().

hw_InsertDocument

hw_InsertDocument -- upload any document

Description

int hw_insertdocument(int connection, int parent_id, int hw_document);
Uploads a document into the collection with parent_id. The document has to be created before with hw_NewDocument(). Make sure that the object record of the new document contains at least the attributes: Type, DocumentType, Title and Name. Possibly you also want to set the MimeType. The functions returns the object id of the new document or false.

See also hw_PipeDocument().

hw_InsertObject

hw_InsertObject -- inserts an object record

Description

int hw_insertobject(int connection, string object rec, string parameter);
Inserts an object into the server. The object can be any valid hyperwave object. See the HG-CSP documentation for a detailed information on how the parameters have to be.

Note: If you want to insert an Anchor, the attribute Position has always been set either to a start/end value or to 'invisible'. Invisible positions are needed if the annotation has no correspondig link in the annotation text.

See also hw_PipeDocument(), hw_InsertDocument(), hw_InsDoc(), hw_InsColl().

hw_New_Document

hw_New_Document -- create new document

Description

int hw_new_document(string object_record, string document_data, int document_size);
Returns a new Hyperwave document with document data set to document_data and object record set to object_record. The length of the document_data has to passed in document_sizeThis function does not insert the document into the Hyperwave server.

See also hw_FreeDocument(), hw_DocumentSize(), hw_DocumentBodyTag(), hw_OutputDocument(), hw_InsertDocument().

hw_Objrec2Array

hw_Objrec2Array -- convert attributes from object record to object array

Description

array hw_objrec2array(string object_record);
Converts an object_record into an object array. The keys of the resulting array are the attributes names. Multiple attributes like 'Title' in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. Currently only the attributes 'Title', 'Description' and 'Keyword' are treated properly.

hw_OutputDocument

hw_OutputDocument -- prints hw_document

Description

int hw_outputdocument(int hw_document);
Prints the document without the BODY tag.

hw_pConnect

hw_pConnect -- make a persistent database connection

Description

int hw_pconnect(string host, int port, string username, string password);
Returns a connection index on success, or false if the connection could not be made. Opens a persistent connection to a Hyperwave server. Each of the arguments should be a quoted string, except for the port number. The username and password arguments are optional and can be left out. In such a case no identification with the server will be done. It is similar to identify as user anonymous. This function returns a connection index that is needed by other Hyperwave functions. You can have multiple persistent connections open at once.

See also hw_Connect().

hw_PipeDocument

hw_PipeDocument -- retrieve any document

Description

int hw_pipedocument(int connection, int objectID);
Returns the Hyperwave document with object ID objectID. If the document has anchors which can be inserted, they will have been inserted already. The document will be transfered via a special data connection which does not block the control connection.

See also hw_GetText() for more on link insertion, hw_FreeDocument(), hw_DocumentSize(), hw_DocumentBodyTag(), hw_OutputDocument().

hw_Root

hw_Root -- root object id

Description

int hw_root();
Returns the object ID of the hyperroot collection. Currently this is always 0. The child collection of the hyperroot is the root collection of the connected server.

hw_Unlock

hw_Unlock -- unlock object

Description

int hw_unlock(int connection, int objectID);
Unlocks a document, so other users regain access.

See also hw_GetAndLock().

hw_Username

hw_Username -- name of currently logged in user

Description

string hw_getusername(int connection);
Returns the username of the connection.

XIX. Image functions

You can use the image functions in PHP to get the size of JPEG, GIF, and PNG images, and if you have the GD library (available at http://www.boutell.com/gd/) you will also be able to create and manipulate GIF images.

Table of Contents
GetImageSize get the size of a GIF, JPG or PNG image
ImageArc draw a partial ellipse
ImageChar draw a character horizontally
ImageCharUp draw a character vertically
ImageColorAllocate allocate a color for an image
ImageColorTransparent define a color as transparent
ImageCopyResized copy and resize part of an image
ImageCreate create a new image
ImageCreateFromGif create a new image from file or URL
ImageDashedLine draw a dashed line
ImageDestroy destroy an image
ImageFill flood fill
ImageFilledPolygon draw a filled polygon
ImageFilledRectangle draw a filled rectangle
ImageFillToBorder flood fill to specific color
ImageFontHeight get font height
ImageFontWidth get font width
ImageGif output image to browser or file
ImageInterlace enable or disable interlace
ImageLine draw a line
ImageLoadFont load a new font
ImagePolygon draw a polygon
ImageRectangle draw a rectangle
ImageSetPixel set a single pixel
ImageString draw a string horizontally
ImageStringUp draw a string vertically
ImageSX get image width
ImageSY get image height
ImageTTFBBox give the bounding box of a text using TypeType fonts
ImageTTFText write text to the image using a TrueType fonts
ImageColorAt get the index of the color of a pixel
ImageColorClosest get the index of the closest color to the specified color
ImageColorExact get the index of the specified color
ImageColorResolve get the index of the specified color or its closest possible alternative
ImageColorSet set the color for the specified palette index
ImageColorsForIndex get the colors for an index
ImageColorsTotal find out the number of colors in an image's palette
ImagePSLoadFont load a PostScript Type 1 from file
ImagePSFreeFont free memory used by a PostScript Type 1 font
ImagePSEncodeFont change the character encoding vector of a font
ImagePSText to draw a text string over an image using PostScript Type1 fonts
ImagePSBBox give the bounding box of a text rectangle using PostScript Type1 fonts

GetImageSize

GetImageSize -- get the size of a GIF, JPG or PNG image

Description

array getimagesize(string filename, array [imageinfo]);
The GetImageSize() function will determine the size of any GIFJPG or PNG image file and return the dimensions along with the file type and a height/width text string to be used inside a normal HTML IMG tag.

Returns an array with 4 elements. Index 0 contains the width of the image in pixels. Index 1 contains the height. Index 2 a flag indicating the type of the image. 1 = GIF, 2 = JPG, 3 = PNG. Index 3 is a text string with the correct "height=xxx width=xxx" string that can be used directly in an IMG tag.
Example 1. GetImageSize
<?php $size = GetImageSize("img/flag.jpg"); ?>
<IMG SRC="img/flag.jpg" <?php echo $size[3]; ?>>

The optional imageinfo parameter allows you to extract some extended information from the image file. Currently this will return the diffrent JPG APP markers in an associative Array. Some Programs use these APP markers to embedd text information in images. A very common one in to embed IPTC http://www.xe.net/iptc/ information in the APP13 marker. You can use the iptcparse() function to parse the binary APP13 marker into something readable.
Example 2. GetImageSize returning IPTC
<?php 
    $size = GetImageSize("testimg.jpg",&$info);
    if (isset($info["APP13"])) {
        $iptc = iptcparse($info["APP13"]);
        var_dump($iptc);
    }
?>

Note: This function does not require the GD image library.

ImageArc

ImageArc -- draw a partial ellipse

Description

int imagearc(int im, int cx, int cy, int w, int h, int s, int e, int col);
ImageArc draws a partial ellipse centered at cx, cy (top left is 0,0) in the image represented by im. w and h specifies the ellipse's width and height respectively while the start and end points are specified in degrees indicated by the s and e arguments.

ImageChar

ImageChar -- draw a character horizontally

Description

int imagechar(int im, int font, int x, int y, string c, int col);
ImageChar draws the first character of c in the image identified by id with its upper-left at x,y (top left is 0,0) with the color col. If font is 1, 2, 3, 4 or 5, a built-in font is used (with higher numbers corresponding to larger fonts).

See also imageloadfont().

ImageCharUp

ImageCharUp -- draw a character vertically

Description

int imagecharup(int im, int font, int x, int y, string c, int col);
ImageCharUp draws the character c vertically in the image identified by im at coordinates x, y (top left is 0, 0) with the color col. If font is 1, 2, 3, 4 or 5, a built-in font is used.

See also imageloadfont().

ImageColorAllocate

ImageColorAllocate -- allocate a color for an image

Description

int imagecolorallocate(int im, int red, int green, int blue);
ImageColorAllocate returns a color identifier representing the color composed of the given RGB components. The im argument is the return from the imagecreate() function. ImageColorAllocate must be called to create each color that is to be used in the image represented by im.
$white = ImageColorAllocate($im, 255,255,255);
$black = ImageColorAllocate($im, 0,0,0);

ImageColorTransparent

ImageColorTransparent -- define a color as transparent

Description

int imagecolortransparent(int im, int [col]);
ImageColorTransparent sets the transparent color in the im image to col. im is the image identifier returned by imagecreate() and col is a color identifier returned by imagecolorallocate().

The identifier of the new (or current, if none is specified) transparent color is returned.

ImageCopyResized

ImageCopyResized -- copy and resize part of an image

Description

int imagecopyresized(int dst_im, int src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
ImageCopyResized copies a rectangular portion of one image to another image. dst_im is the destination image, src_im is the source image identifier. If the source and destination coordinates and width and heights differ, appropriate stretching or shrinking of the image fragment will be performed. The coordinates refer to the upper left corner. This function can be used to copy regions within the same image (if dst_im is the same as src_im) but if the regions overlap the results will be unpredictable.

ImageCreate

ImageCreate -- create a new image

Description

int imagecreate(int x_size, int y_size);
ImageCreate returns an image identifier representing a blank image of size x_size by y_size.

ImageCreateFromGif

ImageCreateFromGif -- create a new image from file or URL

Description

int imagecreatefromgif(string filename);
ImageCreateFromGif returns an image identifier representing the image obtained from the given filename.

ImageCreateFromGif returns an empty string on failure. It also outputs an error message, which unfortunately displays as a broken link in a browser. To ease debugging the following example will produce an error gif:
Example 1. Example to handle an error during creation (courtesy vic@zymsys.com )
function LoadGif($imgname)
{
  $im = @imagecreatefromgif($imgname); /* Attempt to open */
  if ($im == "") { /* See if it failed */
    $im = ImageCreate(150,30); /* Create a blank image */
    $bgc = ImageColorAllocate($im,255,255,255);
    $tc  = ImageColorAllocate($im,0,0,0);
    ImageFilledRectangle($im,0,0,150,30,$bgc);
    ImageString($im,1,5,5,"Error loading $imgname",$tc); /* Output an errmsg */
  }
  return $im;
}

ImageDashedLine

ImageDashedLine -- draw a dashed line

Description

int imagedashedline(int im, int x1, int y1, int x2, int y2, int col);
ImageLine draws a dashed line from x1,y1 to x2,y2 (top left is 0,0) in image im of color col.

See also imageline().

ImageDestroy

ImageDestroy -- destroy an image

Description

int imagedestroy(int im);
ImageDestroy frees any memory associated with image im. im is the image identifier returned by the imagecreate() function.

ImageFill

ImageFill -- flood fill

Description

int imagefill(int im, int x, int y, int col);
ImageFill performs a flood fill starting at coordinate x, y (top left is 0,0) with color col in the image im.

ImageFilledPolygon

ImageFilledPolygon -- draw a filled polygon

Description

int imagefilledpolygon(int im, array points, int num_points, int col);
ImageFilledPolygon creates a filled polygon in image im. points is a PHP array containing the polygon's vertices, ie. points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. num_points is the total number of vertices.

ImageFilledRectangle

ImageFilledRectangle -- draw a filled rectangle

Description

int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col);
ImageFilledRectangle creates a filled rectangle of color col in image im starting at upper left coordinates x1, y1 and ending at bottom right coordinates x2, y2. 0, 0 is the top left corner of the image.

ImageFillToBorder

ImageFillToBorder -- flood fill to specific color

Description

int imagefilltoborder(int im, int x, int y, int border, int col);
ImageFillToBorder performs a flood fill whose border color is defined by border. The starting point for the fill is x,y (top left is 0,0) and the region is filled with color col.

ImageFontHeight

ImageFontHeight -- get font height

Description

int imagefontheight(int font);
Returns the pixel height of a character in the specified font.

See also imagefontwidth() and imageloadfont().

ImageFontWidth

ImageFontWidth -- get font width

Description

int imagefontwidth(int font);
Returns the pixel width of a character in font.

See also imagefontheight() and imageloadfont().

ImageGif

ImageGif -- output image to browser or file

Description

int imagegif(int im, string filename);
ImageGif creates the GIF file in filename from the image im. The im argument is the return from the imagecreate() function.

The image format will be GIF87a unless the image has been made transparent with imagecolortransparent(), in which case the image format will be GIF89a.

The filename argument is optional, and if left off, the raw image stream will be output directly. By sending an image/gif content-type using the header function, you can create a PHP script that outputs GIF images directly.

ImageInterlace

ImageInterlace -- enable or disable interlace

Description

int imageinterlace(int im, int [interlace]);
ImageInterlace() turns the interlace bit on or off. If interlace is 1 the im image will be interlaced, and if interlace is 0 the interlace bit is turned off.

This functions returns whether the interlace bit is set for the image.

ImageLine

ImageLine -- draw a line

Description

int imageline(int im, int x1, int y1, int x2, int y2, int col);
ImageLine draws a line from x1,y1 to x2,y2 (top left is 0,0) in image im of color col.

See also imagecreate() and imagecolorallocate().

ImageLoadFont

ImageLoadFont -- load a new font

Description

int imageloadfont(string file);
ImageLoadFont loads a user-defined bitmap font and returns an identifier for the font (that is always greater than 5, so it will not conflict with the built-in fonts).

The font file format is currently binary and architecture dependent. This means you should generate the font files on the same type of CPU as the machine you are running PHP on.

Table 1. Font file format
 
byte position C data type description
byte 0-3 int number of characters in the font
byte 4-7 int value of first character in the font (often 32 for space) 
byte 8-11 int pixel width of each character
byte 12-15 int pixel height of each character
byte 16- char array with character data, one byte per pixel in each character, for a total of (nchars*width*height) bytes. 
See also ImageFontWidth() and ImageFontHeight().

ImagePolygon

ImagePolygon -- draw a polygon

Description

int imagepolygon(int im, array points, int num_points, int col);
ImagePolygon creates a polygon in image id. points is a PHP array containing the polygon's vertices, ie. points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. num_points is the total number of vertices.

See also imagecreate().

ImageRectangle

ImageRectangle -- draw a rectangle

Description

int imagerectangle(int im, int x1, int y1, int x2, int y2, int col);
ImageRectangle creates a rectangle of color col in image im starting at upper left coordinate x1,y1 and ending at bottom right coordinate x2,y2. 0,0 is the top left corner of the image.

ImageSetPixel

ImageSetPixel -- set a single pixel

Description

int imagesetpixel(int im, int x, int y, int col);
ImageSetPixel draws a pixel at x,y (top left is 0,0) in image im of color col.

See also imagecreate() and imagecolorallocate().

ImageString

ImageString -- draw a string horizontally

Description

int imagestring(int im, int font, int x, int y, string s, int col);
ImageString draws the string s in the image identified by im at coordinates x,y (top left is 0,0) in color col. If font is 1, 2, 3, 4 or 5, a built-in font is used.

See also imageloadfont().

ImageStringUp

ImageStringUp -- draw a string vertically

Description

int imagestringup(int im, int font, int x, int y, string s, int col);
ImageStringUp draws the string s vertically in the image identified by im at coordinates x,y (top left is 0,0) in color col. If font is 1, 2, 3, 4 or 5, a built-in font is used.

See also imageloadfont().

ImageSX

ImageSX -- get image width

Description

int imagesx(int im);
ImageSX returns the width of the image identified by im.

See also imagecreate() and imagesy().

ImageSY

ImageSY -- get image height

Description

int imagesy(int im);
ImageSY returns the height of the image identified by im.

See also imagecreate() and imagesx().

ImageTTFBBox

ImageTTFBBox -- give the bounding box of a text using TypeType fonts

Description

array ImageTTFBBox(int size, int angle, string fontfile, string text);
This function calculates and returns the bounding box in pixels a TrueType text.
text


The string to be measured.

size


The font size.

fontfile


The name of the TrueType font file. (Can also be an URL.)

angle


Angle in degrees in which text will be measured.

ImageTTFBBox() returns an array with 8 elements representing four points making the bounding box of the text:
 
0 lower left corner, X position
1 lower left corner, Y position
2 lower right corner, X position
3 lower right corner, Y position
4 upper right corner, X position
5 upper right corner, Y position
6 upper left corner, X position
7 upper left corner, Y position
The points are relative to the text regardless of the angle, so "upper left" means in the top left-hand corner seeing the text horizontallty.

This function requires both the GD library and the Freetype library.

See also ImageTTFText().

ImageTTFText

ImageTTFText -- write text to the image using a TrueType fonts

Description

array ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text);
ImageTTFText draws the string text in the image identified by im, starting at coordinates x,y (top left is 0,0), at an angle of angle in color col, using the TrueType font file identified by fontfile.

The coordinates given by x,y will define the basepoint of the first character (roughly the lower-left corner of the character). This is different from the ImageString(), where x,y define the upper-right corner of the first character.

angle is in degrees, with 0 degrees being left-to-right reading text (3 o'clock direction), and higher values representing a counter-clockwise rotation. (i.e., a value of 90 would result in bottom-to-top reading text).

fontfile is the path to the TrueType font you wish to use.

text is the text string which may include UTF-8 character sequences (of the form: &#123; ) to access characters in a font beyond the first 255.

col is the color index. Using the negative of a color index has the effect of turning off antialiasing.

ImageTTFText() returns an array with 8 elements representing four points making the bounding box of the text. The order of the points is upper left, upper right, lower right, lower left. The points are relative to the text regardless of the angle, so "upper left" means in the top left-hand corner when you see the text horizontallty.

This example script will produce a black GIF 400x30 pixels, with the words "Testing..." in white in the font Arial.
Example 1. ImageTTFText
<?php
Header("Content-type: image/gif");
$im = imagecreate(400,30);
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
ImageTTFText($im, 20, 0, 10, 20, $white, "/path/arial.ttf", "Testing... Omega: &#937;");
ImageGif($im);
ImageDestroy($im);
?>

This function requires both the GD library and the FreeType library.

See also ImageTTFBBox().

ImageColorAt

ImageColorAt -- get the index of the color of a pixel

Description

int imagecolorat(int im, int x, int y);
Returns the index of the color of the pixel at the specified location in the image.

See also imagecolorset() and imagecolorsforindex().

ImageColorClosest

ImageColorClosest -- get the index of the closest color to the specified color

Description

int imagecolorclosest(int im, int red, int green, int blue);
Returns the index of the color in the palette of the image which is "closest" to the specified RGB value.

The "distance" between the desired color and each color in the palette is calculated as if the RGB values represented points in three-dimensional space.

See also imagecolorexact().

ImageColorExact

ImageColorExact -- get the index of the specified color

Description

int imagecolorexact(int im, int red, int green, int blue);
Returns the index of the specified color in the palette of the image.

If the color does not exist in the image's palette, -1 is returned.

See also imagecolorclosest().

ImageColorResolve

ImageColorResolve -- get the index of the specified color or its closest possible alternative

Description

int imagecolorresolve(int im, int red, int green, int blue);
This function is guaranteed to return a color index for a requested color, either the exact color or the closest possible alternative.

See also imagecolorclosest().

ImageColorSet

ImageColorSet -- set the color for the specified palette index

Description

bool imagecolorset(int im, int index, int red, int green, int blue);
This sets the specified index in the palette to the specified color. This is useful for creating flood-fill-like effects in paletted images without the overhead of performing the actual flood-fill.

See also imagecolorat().

ImageColorsForIndex

ImageColorsForIndex -- get the colors for an index

Description

array imagecolorsforindex(int im, int index);
This returns an associative array with red, green, and blue keys that contain the appropriate values for the specified color index.

See also imagecolorat() and imagecolorexact().

ImageColorsTotal

ImageColorsTotal -- find out the number of colors in an image's palette

Description

int imagecolorstotal(int im);
This returns the number of colors in the specified image's palette.

See also imagecolorat() and imagecolorsforindex().

ImagePSLoadFont

ImagePSLoadFont -- load a PostScript Type 1 from file

Description

int imagepsloadfont(string filename);
In the case everything went right, a valid font index will be returned and can be used for further purposes. Otherwise the function returns false and prints a message describing what went wrong.

See also imagepsfreefont().

ImagePSFreeFont

ImagePSFreeFont -- free memory used by a PostScript Type 1 font

Description

void imagepsfreefont(int fontindex);
See also imagepsloadfont().

ImagePSEncodeFont

ImagePSEncodeFont -- change the character encoding vector of a font

Description

int imagepsencodefont(string encodingfile);
Loads a character encoding vector from from a file and changes the fonts encoding vector to it. As a PostScript fonts default vector lacks most of the character positions above 127, you'll definitely want to change this if you use an other language than english. The exact format of this file is described in T1libs documentation. T1lib comes with two ready-to-use files, IsoLatin1.enc and IsoLatin2.enc.

If you find yourself using this function all the time, a much better way to define the encoding is to set ps.default_encoding in php3.ini to point to the right encoding file and all fonts you load will automatically have the right encoding.

ImagePSText

ImagePSText -- to draw a text string over an image using PostScript Type1 fonts

Descriptiom

array imagepstext(int image, string text, int font, int size, int foreground, int background, int x, int y, int space, int tightness, float angle, int antialias_steps);
size is expressed in pixels.

foreground is the color in which the text will be painted. background is the color to which the text will try to fade in with antialiasing. No pixels with the color background are actually painted, so the background image does not need to be of solid color.

The coordinates given by x, y will define the origin (or reference point) of the first character (roughly the lower-left corner of the character). This is different from the ImageString(), where x, y define the upper-right corner of the first character. Refer to PostScipt documentation about fonts and their measuring system if you have trouble understanding how this works.

space allows you to change the default value of a space in a font. This amount is added to the normal value and can also be negative.

tightness allows you to control the amount of white space between characters. This amount is added to the normal character width and can also be negative.

angle is in degrees.

antialias_steps allows you to control the number of colours used for antialiasing text. Allowed values are 4 and 16. The higher value is recommended for text sizes lower than 20, where the effect in text quality is quite visible. With bigger sizes, use 4. It's less computationally intensive.

Parameters space and tightness are expressed in character space units, where 1 unit is 1/1000th of an em-square.

Parameters space, tightness, angle and antialias are optional.

This function returns an array containing the following elements:

 
0 lower left x-coordinate
1 lower left y-coordinate
2 upper right x-coordinate
3 upper right y-coordinate
See also imagepsbbox().

ImagePSBBox

ImagePSBBox -- give the bounding box of a text rectangle using PostScript Type1 fonts

Description

array imagepsbbox(string text, int font, int size, int space, int width, float angle);
size is expressed in pixels.

space allows you to change the default value of a space in a font. This amount is added to the normal value and can also be negative.

tightness allows you to control the amount of white space between characters. This amount is added to the normal character width and can also be negative.

angle is in degrees.

Parameters space and tightness are expressed in character space units, where 1 unit is 1/1000th of an em-square.

Parameters space, tightness and angle are optional.

The bounding box is calculated using information available from character metrics, and unfortunately tends to differ slightly from the results achieved by actually rasterizing the text. If the angle is 0 degrees, you can expect the text to need 1 pixel more to every direction.

This function returns an array containing the following elements:

 
0 lower left x-coordinate
1 lower left y-coordinate
2 upper right x-coordinate
3 upper right y-coordinate
See also imagepstext().

XX. IMAP Functions

To get these functions to work, you have to compile PHP with --with-imap. That requires the c-client library to be installed. Grab the latest version from ftp://ftp.cac.washington.edu/imap/ and compile it. Then copy c-client/c-client.a to /usr/local/lib or some other directory on your link path and copy c-client/rfc822.h, mail.h and linkage.h to /usr/local/include or some other directory in your include path.

Table of Contents
imap_append Append a string message to a specified mailbox
imap_base64 Decode BASE64 encoded text
imap_body Read the message body
imap_check Check current mailbox
imap_close Close an IMAP stream
imap_createmailbox Create a new mailbox
imap_delete Mark a messge for deletion from current mailbox
imap_deletemailbox Delete a mailbox
imap_expunge Delete all messages marked for deletion
imap_fetchbody Fetch a particular section of the body of the message
imap_fetchstructure Read the structure of a particular message
imap_header Read the header of the message
imap_headers Returns headers for all messages in a mailbox
imap_listmailbox Read the list of mailboxes
imap_listsubscribed List all the subscribed mailboxes
imap_mail_copy Copy specified messages to a mailbox
imap_mail_move Move specified messages to a mailbox
imap_num_msg Gives the number of messages in the current mailbox
imap_num_recent Gives the number of recent messages in current mailbox
imap_open Open an IMAP stream to a mailbox
imap_ping Check if the IMAP stream is still active
imap_renamemailbox Rename an old mailbox to new mailbox
imap_reopen Reopen IMAP stream to new mailbox
imap_subscribe Subscribe to a mailbox
imap_undelete Unmark the message which is marked deleted
imap_unsubscribe Unsubscribe from a mailbox
imap_qprint Convert a quoted-printable string to an 8 bit string
imap_8bit Convert an 8bit string to a quoted-printable string.
imap_binary Convert an 8bit string to a base64 string.
imap_scanmailbox Read the list of mailboxes, takes a string to search for in the text of the mailbox
imap_mailboxmsginfo Get information about the current mailbox
imap_rfc822_write_address Returns a properly formatted email address given the mailbox, host, and personal info.
imap_rfc822_parse_adrlist Parses an address string
imap_setflag_full Sets flags on messages
imap_clearflag_full Clears flags on messages
imap_sort
imap_fetchheader Returns header for a message
imap_uid This function returns the UID for the given message sequence number.

imap_append

imap_append -- Append a string message to a specified mailbox

Description

int imap_append(int imap_stream, string mbox, string message, stringflags);
Returns true on sucess, false on error.

imap_append() appends a string message to the specified mailbox mbox. If the optional flags is specified, writes the flags to that mailbox also.

When talking to the Cyrus IMAP server, you must use "\r\n" as your end-of-line terminator instead of "\n" or the operation will fail.

imap_base64

imap_base64 -- Decode BASE64 encoded text

Description

string imap_base64(string text);
imap_base64() function decodes BASE-64 encoded text. The decoded message is returned as a string.

imap_body

imap_body -- Read the message body

Description

string imap_body(int imap_stream, int msg_number, int flags);
imap_body() returns the body of the message, numbered msg_number in the current mailbox. The optional flags are a bit mask with one or more of the following:
    FT_UID - The msgno is a UID

    FT_PEEK - Do not set the \Seen flag if not already set

    FT_INTERNAL - The return string is in internal format, will not canonicalize to CRLF.

imap_check

imap_check -- Check current mailbox

Description

array imap_check(int imap_stream);
Returns information about the current mailbox. Returns FALSE on failure.

The imap_check() function checks the current mailbox status on the server and returns the information in an object with following properties.

        Date : date of the message

Driver : driver
Mailbox : name of the mailbox
Nmsgs : number of messages
Recent : number of recent messages
 

imap_close

imap_close -- Close an IMAP stream

Description

int imap_close(int imap_stream, int flags);
Close the imap stream. Takes an optional flag CL_EXPUNGE, which will silently expunge the mailbox before closing.

imap_createmailbox

imap_createmailbox -- Create a new mailbox

Description

int imap_createmailbox(int imap_stream, string mbox);
imap_createmailbox() creates a new mailbox specified by mbox.

Returns true on success and false on error.

imap_delete

imap_delete -- Mark a messge for deletion from current mailbox

Description

int imap_delete(int imap_stream, int msg_number);
Returns true.

imap_delete() function marks message pointed by msg_number for deletion. Actual deletion of the messages is done by imap_expunge().

imap_deletemailbox

imap_deletemailbox -- Delete a mailbox

Description

int imap_deletemailbox(int imap_stream, string mbox);
imap_deletemailbox() deletes the specified mailbox.

Returns true on success and false on error.

imap_expunge

imap_expunge -- Delete all messages marked for deletion

Description

int imap_expunge(int imap_stream);
imap_expunge() deletes all the messages marked for deletion by imap_delete().

Returns true.

imap_fetchbody

imap_fetchbody -- Fetch a particular section of the body of the message

Description

string imap_fetchbody(int imap_stream, int msg_number, string part_number, flags flags);
This function causes a fetch of a particular section of the body of the specified messages as a text string and returns that text string. The section specification is a string of integers delimited by period which index into a body part list as per the IMAP4 specification. Body parts are not decoded by this function.

The options for imap_fetchbody ()e a bitmask with one or more of the following

    FT_UID - The msgono is a UID

    FT_PEEK - Do not set the \Seen flag if not already set

    FT_UID - The return string is in "internal" format, without any attempt to canonicalize CRLF

imap_fetchstructure

imap_fetchstructure -- Read the structure of a particular message

Description

array imap_fetchstructure(int imap_stream, int msg_number);
This function causes a fetch of all the structured information for the given msg_number. The returned value is an object with following elements.
 type, encoding, ifsubtype, subtype, ifdescription, description, ifid,

 id, lines, bytes, ifparameters
 
It also returns an array of objects called parameters[]. This object has following properties.
attribute, value

 
In case of multipart, it also returns an array of objects of all the properties, called parts[].

imap_header

imap_header -- Read the header of the message

Description

object imap_header(int imap_stream, int msg_number, int fromlength, int subjectlength, int defaulthost);
This function returns an object of various header elements
       remail,date,Date,subject,Subject,in_reply_to,message_id,newsgroups,

       followup_to,references
toaddress (full to: line, up to 1024 characters)

to[] (returns an array of objects from the To line, containing:)
   personal
   adl
   mailbox
   host

fromaddress (full from: line, up to 1024 characters)

from[] (returns an array of objects from the From line, containing:)
   personal
   adl
   mailbox
   host

ccaddress (full cc: line, up to 1024 characters)
cc[] (returns an array of objects from the Cc line, containing:)
   personal
   adl
   mailbox
   host

bccaddress (full bcc line, up to 1024 characters)
bcc[] (returns an array of objects from the Bcc line, containing:)
   personal
   adl
   mailbox
   host

reply_toaddress (full reply_to: line, up to 1024 characters)
reply_to[] (returns an array of objects from the Reply_to line, containing:)
   personal
   adl
   mailbox
   host

senderaddress (full sender: line, up to 1024 characters)
sender[] (returns an array of objects from the sender line, containing:)
   personal
   adl
   mailbox
   host

return_path (full return-path: line, up to 1024 characters)
return_path[] (returns an array of objects from the return_path line, containing:)
   personal
   adl
   mailbox
   host

udate ( mail message date in unix time)

fetchfrom (from line formatted to fit fromlength characters)
fetchsubject (subject line formatted to fit subjectlength characters)
 

imap_headers

imap_headers -- Returns headers for all messages in a mailbox

Description

array imap_headers(int imap_stream);
Returns an array of string formatted with header info. One element per mail message.

imap_listmailbox

imap_listmailbox -- Read the list of mailboxes

Description

array imap_listmailbox(int imap_stream, string ref, string pat);
Returns an array containing the names of the mailboxes.

imap_listsubscribed

imap_listsubscribed -- List all the subscribed mailboxes

Description

array imap_listsubscribed(int imap_stream, string ref, string pattern);
Returns an array of all the mailboxes that you have subscribed. The ref and pattern arguments specify the base location to search from and the pattern the mailbox name must match.

imap_mail_copy

imap_mail_copy -- Copy specified messages to a mailbox

Description

int imap_mail_copy(int imap_stream, string msglist, string mbox, int flags);
Returns true on success and false on error.

Copies mail messages specified by msglist to specified mailbox. msglist is a range not just message numbers.

flags is a bitmask of one or more of

    CP_UID - the sequence numbers contain UIDS

    CP_MOVE - Delete the messages from the current mailbox after copying

imap_mail_move

imap_mail_move -- Move specified messages to a mailbox

Description

int imap_mail_move(int imap_stream, string msglist, string mbox);
Moves mail messages specified by msglist to specified mailbox. msglist is a range not just message numbers.

Returns true on success and false on error.

imap_num_msg

imap_num_msg -- Gives the number of messages in the current mailbox

Description

int imap_num_msg(int stream_id);
Return the number of messages in the current mailbox.

imap_num_recent

imap_num_recent -- Gives the number of recent messages in current mailbox

Description

int imap_num_recent(int imap_stream);
Returns the number of recent messages in the current mailbox.

imap_open

imap_open -- Open an IMAP stream to a mailbox

Description

int imap_open(string mailbox, string username, string password, int flags);
Returns an IMAP stream on success and false on error. This function can also be used to open streams to POP3 and NNTP servers. To connect to an IMAP server running on port 143 on the local machine, do the following:
 
$mbox = imap_open("{localhost:143}INBOX","user_id","password");
To connect to a POP3 server on port 110 on the local server, use:
$mbox = imap_open("{localhost/pop3:110}INBOX","user_id","password");
To connect to an NNTP server on port 119 on the local server, use:
$nntp = imap_open("{localhost/nntp:119}comp.test","","");
To connect to a remote server replace "localhost" with the name or the IP address of the server you want to connect to.

The options are a bit mask with one or more of the following:

    OP_READONLY - Open mailbox read-only

    OP_ANONYMOUS - Dont use or update a .newsrc for news

    OP_HALFOPEN - For IMAP and NNTP names, open a connection but dont open a mailbox

    CL_EXPUNGE - Expunge mailbox automatically upon mailbox close

imap_ping

imap_ping -- Check if the IMAP stream is still active

Description

int imap_ping(int imap_stream);
Returns true if the stream is still alive, false otherwise.

imap_ping() function pings the stream to see it is still active. It may discover new mail; this is the preferred method for a periodic "new mail check" as well as a "keep alive" for servers which have inactivity timeout.

imap_renamemailbox

imap_renamemailbox -- Rename an old mailbox to new mailbox

Description

int imap_renamemailbox(int imap_stream, string old_mbox, string new_mbox);
This function renames on old mailbox to new mailbox.

Returns true on success and false on error.

imap_reopen

imap_reopen -- Reopen IMAP stream to new mailbox

Description

int imap_reopen(string imap_stream, string mailbox, string [flags]);
Returns true on success and false on error.

This function reopens the specified stream to new mailbox.

The options are a bit mask with one or more of the following:

    OP_READONLY - Open mailbox read-only

    OP_ANONYMOUS - Dont use or update a .newsrc for news

    OP_HALFOPEN - For IMAP and NNTP names, open a connection but dont open a mailbox

    CL_EXPUNGE - Expunge mailbox automatically upon mailbox close

imap_subscribe

imap_subscribe -- Subscribe to a mailbox

Description

int imap_subscribe(int imap_stream, string mbox);
Subscribe to a new mailbox.

Returns true on success and false on error.

imap_undelete

imap_undelete -- Unmark the message which is marked deleted

Description

int imap_undelete(int imap_stream, int msg_number);
This function removes the deletion flag for a specified message, which is set by imap_delete().

Returns true on success and false on error.

imap_unsubscribe

imap_unsubscribe -- Unsubscribe from a mailbox

Description

int imap_unsubscribe(int imap_stream, string mbox);
Unsubscribe from a specified mailbox.

Returns true on success and false on error.

imap_qprint

imap_qprint -- Convert a quoted-printable string to an 8 bit string

Description

string imap_qprint(string string);
Convert a quoted-printable string to an 8 bit string

Returns an 8 bit (binary) string

imap_8bit

imap_8bit -- Convert an 8bit string to a quoted-printable string.

Description

string imap_8bit(string string);
Convert an 8bit string to a quoted-printable string.

Returns a quoted-printable string

imap_binary

imap_binary -- Convert an 8bit string to a base64 string.

Description

string imap_binary(string string);
Convert an 8bit string to a base64 string.

Returns a base64 string

imap_scanmailbox

imap_scanmailbox -- Read the list of mailboxes, takes a string to search for in the text of the mailbox

Description

array imap_scanmailbox(int imap_stream, string string);
Returns an array containing the names of the mailboxes that have string in the text of the mailbox.

imap_mailboxmsginfo

imap_mailboxmsginfo -- Get information about the current mailbox

Description

array imap_mailboxmsginfo(int imap_stream);
Returns information about the current mailbox. Returns FALSE on failure.

The imap_mailboxmsginfo() function checks the current mailbox status on the server and returns the information in an object with following properties.

       Date : date of the message

       Driver : driver
       Mailbox : name of the mailbox
       Nmsgs : number of messages
       Recent : number of recent messages
       Unread : number of unread messages
       Size : mailbox size
 

imap_rfc822_write_address

imap_rfc822_write_address -- Returns a properly formatted email address given the mailbox, host, and personal info.

Description

string imap_rfc822_write_address(string mailbox, string host, string personal);
Returns a properly formatted email address given the mailbox, host, and personal info.

imap_rfc822_parse_adrlist

imap_rfc822_parse_adrlist -- Parses an address string

Description

string imap_rfc822_parse_adrlist(string address, string default_host);
This function parses the address tring and for each address, returns an array of objects. The 4 objects are:
     mailbox - the mailbox name (username)

     host   - the host name
     personal - the personal name
     adl - at domain source route
 

imap_setflag_full

imap_setflag_full -- Sets flags on messages

Description

string imap_setflag_full(int stream, string sequence, string flag, string options);
This function causes a store to add the specified flag to the flags set for the messages in the specified sequence.

The options are a bit mask with one or more of the following:

        ST_UID          The sequence argument contains UIDs instead of

                         sequence numbers
 

imap_clearflag_full

imap_clearflag_full -- Clears flags on messages

Description

string imap_clearflag_full(int stream, string sequence, string flag, string options);
This function causes a store to delete the specified flag to the flags set for the messages in the specified sequence.

The options are a bit mask with one or more of the following:

        ST_UID          The sequence argument contains UIDs instead of

                         sequence numbers
 

imap_sort

imap_sort --

Description

string imap_sort(int stream, int criteria, int reverse, int options);
Returns an array of message numbers sorted by the given parameters

Rev is 1 for reverse-sorting.

Criteria can be one (and only one) of the following:

                SORTDATE        message Date

                SORTARRIVAL     arrival date
                SORTFROM        mailbox in first From address
                SORTSUBJECT     message Subject
                SORTTO          mailbox in first To address
                SORTCC          mailbox in first cc address
                SORTSIZE        size of message in octets
 
The flags are a bitmask of one or more of the following:
        SE_UID          Return UIDs instead of sequence numbers

        SE_NOPREFETCH   Don't prefetch searched messages.
 

imap_fetchheader

imap_fetchheader -- Returns header for a message

Description

stringimap_fetchheader(int imap_stream, int msgno, int flags);
This function causes a fetch of the complete, unfiltered RFC 822 format header of the specified message as a text string and returns that text string.

The options are:

        FT_UID          The msgno argument is a UID

        FT_INTERNAL     The return string is in "internal" format,
                         without any attempt to canonicalize to CRLF
                          newlines
        FT_PREFETCHTEXT The RFC822.TEXT should be pre-fetched at the
                         same time.  This avoids an extra RTT on an
                         IMAP connection if a full message text is
                         desired (e.g. in a "save to local file"
                         operation)
 

imap_uid

imap_uid -- This function returns the UID for the given message sequence number.

Description

string imap_uid(string mailbox, int msgno);
This function returns the UID for the given message sequence number.

XXI. PHP options & information

Table of Contents
error_log send an error message somewhere
error_reporting set which PHP errors are reported
getenv Get the value of an environment variable.
get_cfg_var Get the value of a PHP configuration option.
get_current_user Get the name of the owner of the current PHP script.
get_magic_quotes_gpc Get the current active configuration setting of magic quotes gpc.
get_magic_quotes_runtime Get the current active configuration setting of magic_quotes_runtime.
getlastmod Get time of last page modification.
getmyinode Get the inode of the current script.
getmypid Get PHP's process ID.
getmyuid Get PHP script owner's UID.
getrusage Get the current resource usages.
phpinfo Output lots of PHP information.
phpversion Get the current PHP version.
putenv Set the value of an environment variable.
set_magic_quotes_runtime Set the current active configuration setting of magic_quotes_runtime.
set_time_limit limit the maximum execution time

error_log

error_log -- send an error message somewhere

Description

int error_log(string message, int message_type, string [destination], string [extra_headers]);
Sends an error message to the web server's error log, a TCP port or to a file. The first parameter, message, is the error message that should be logged. The second parameter, message_type says where the message should go:
Table 1. error_log() log types
 
0 message is sent to PHP's system logger, using the Operating System's system logging mechanism or a file, depending on what the error_log configuration directive is set to. 
1 message is sent by email to the address in the destination parameter. This is the only message type where the fourth parameter, extra_headers is used. This message type uses the same internal function as Mail() does. 
2 message is sent through the PHP debugging connection. This option is only available if remote debugging has been enabled. In this case, the destination parameter specifies the host name or IP address and optionally, port number, of the socket receiving the debug information. 
3 message is appended to the file destination
Example 1. error_log() examples
// Send notification through the server log if we can not
// connect to the database.
if (!Ora_Logon($username, $password)) {
    error_log("Oracle database not available!", 0);
}

// Notify administrator by email if we run out of FOO
if (!($foo = allocate_new_foo()) {
    error_log("Big trouble, we're all out of FOOs!", 1,
              "operator@mydomain.com");
}

// other ways of calling error_log():
error_log("You messed up!", 2, "127.0.0.1:7000");
error_log("You messed up!", 2, "loghost");
error_log("You messed up!", 3, "/var/tmp/my-errors.log");

error_reporting

error_reporting -- set which PHP errors are reported

Description

int error_reporting(int [level]);
Sets PHP's error reporting level and returns the old level. The error reporting level is a bitmask of the following values (follow the links for the internal values to get their meanings):
Table 1. error_reporting() bit values
 
value internal name
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING

getenv

getenv -- Get the value of an environment variable.

Description

string getenv(string varname);
Returns the value of the environment variable varname, or false on an error.
$ip = getenv("REMOTE_ADDR"); // get the ip number from the user

get_cfg_var

get_cfg_var -- Get the value of a PHP configuration option.

Description

string get_cfg_var(string varname);
Returns the current value of the PHP configuration variable specified by varname, or false if an error occurs.

It will not return configuration information set when the PHP was compiled, or read from an Apache configuration file (using the php3_configuration_option directives).

To check whether the system is using a php3.ini file, try retrieving the value of the cfg_file_path configuration setting. If this is available, a php3.ini file is being used.

get_current_user

get_current_user -- Get the name of the owner of the current PHP script.

Description

string get_current_user(void);
Returns the name of the owner of the current PHP script.

See also getmyuid(), getmypid(), getmyinode(), and getlastmod().

get_magic_quotes_gpc

get_magic_quotes_gpc -- Get the current active configuration setting of magic quotes gpc.

Description

long get_magic_quotes_gpc(void);
Returns the current active configuration setting of magic_quotes_gpc. (0 for off, 1 for on)

See also get_magic_quotes_runtime(), set_magic_quotes_runtime().

get_magic_quotes_runtime

get_magic_quotes_runtime -- Get the current active configuration setting of magic_quotes_runtime.

Description

long get_magic_quotes_runtime(void);
Returns the current active configuration setting of magic_quotes_runtime. (0 for off, 1 for on)

See also get_magic_quotes_gpc(), set_magic_quotes_runtime().

getlastmod

getlastmod -- Get time of last page modification.

Description

int getlastmod(void);
Returns the time of the last modification of the current page. The value returned is a Unix timestamp, suitable for feeding to date(). Returns false on error.
Example 1. getlastmod() example
// outputs e.g. 'Last modified: March 04 1998 20:43:59.'
echo "Last modified: ".date( "F d Y H:i:s.", getlastmod() );
      

See alse date(), getmyuid(), get_current_user(), getmyinode(), and getmypid().

getmyinode

getmyinode -- Get the inode of the current script.

Description

int getmyinode(void);
Returns the current script's inode, or false on error.

See also getmyuid(), get_current_user(), getmypid(), and getlastmod().

getmypid

getmypid -- Get PHP's process ID.

Description

int getmypid(void);
Returns the current PHP process ID, or false on error.

Note that when running as a server module, separate invocations of the script are not guaranteed to have distinct pids.

See also getmyuid(), get_current_user(), getmyinode(), and getlastmod().

getmyuid

getmyuid -- Get PHP script owner's UID.

Description

int getmyuid(void);
Returns the user ID of the current script, or false on error.

See also getmypid(), get_current_user(), getmyinode(), and getlastmod().

getrusage

getrusage -- Get the current resource usages.

Description

array getrusage(int [who]);
This is an interface to getrusage(2). It returns an associative array containing the data returned from the system call. If who is 1, getrusage will be called with RUSAGE_CHILDREN. All entries are accessible by using their documented field names.
Example 1. Getrusage Example
$dat = getrusage();
echo $dat["ru_nswap"];         # number of swaps
echo $dat["ru_majflt"];        # number of page faults
echo $dat["ru_utime.tv_sec"];  # user time used (seconds)
echo $dat["ru_utime.tv_usec"]; # user time used (microseconds)
See your system's man page for more details.

phpinfo

phpinfo -- Output lots of PHP information.

Description

int phpinfo(void);
Outputs a large amount of information about the current state of PHP. This includes information about PHP compilation options and extensions, the PHP version, server information and environment (if compiled as a module), the PHP environment, OS version information, paths, master and local values of configuration options, HTTP headers, and the GNU Public License.

See also phpversion().

phpversion

phpversion -- Get the current PHP version.

Description

string phpversion(void);
Returns a string containing the version of the currently running PHP parser.
Example 1. phpversion() example
// prints e.g. 'Current PHP version: 3.0rel-dev'
echo "Current PHP version: ".phpversion();
      

See also phpinfo().

putenv

putenv -- Set the value of an environment variable.

Description

void putenv(string setting);
Adds setting to the environment.
Example 1. Setting an Environment Variable
putenv("UNIQID=$uniqid");
      

set_magic_quotes_runtime

set_magic_quotes_runtime -- Set the current active configuration setting of magic_quotes_runtime.

Description

long set_magic_quotes_runtime(int new_setting);
Set the current active configuration setting of magic_quotes_runtime. (0 for off, 1 for on)

See also get_magic_quotes_gpc(), get_magic_quotes_runtime().

set_time_limit

set_time_limit -- limit the maximum execution time

Description

void set_time_limit(int seconds);
Set the number of seconds a script is allowed to run. If this is reached, the script returns a fatal error. The default limit is 30 seconds or, if it exists, the max_execution_time value defined in php3.ini. If seconds is set to zero, no time limit is imposed.

When called, set_time_limit() restarts the timeout counter from zero. In other words, if the timeout is the default 30 seconds, and 25 seconds into script execution a call such as set_time_limit( 20 ) is made, the script will run for a total of 45 seconds before timing out.

XXII. Informix Functions

The Informix driver for Online (ODS) 7.x, SE 7.x and Universal Server (IUS) 9.x is implemented in "functions/ifx.ec" and "functions/php3_ifx.h". ODS 7.x support is fairly complete, with full support for BYTE and TEXT columns. IUS 9.x support is partly finished: the new data types are there, but SLOB and CLOB support is still under construction.

Configuration notes:

Before you run the "configure" script, make sure that the "INFORMIXDIR" variable has been set.

The configure script will autodetect the libraries and include directories, if you run "configure --with_informix=yes". You can overide this detection by specifying "IFX_LIBDIR", "IFX_LIBS" and "IFX_INCDIR" in the environment. The configure script will also try to detect your Informix server version. It will set the "HAVE_IFX_IUS" conditional compilation variable if your Informix version >= 9.00.

Some notes on the use of BLOBs (TEXT and BYTE columns):

BLOBs are normally addressed by integer BLOB identifiers. Select queries return a "blob id" for every BYTE and TEXT column. You can get at the contents with "string_var = ifx_get_blob($blob_id);" if you choose to get the BLOBs in memory (with : "ifx_blobinfile(0);"). If you prefer to receive the content of BLOB columns in a file, use "ifx_blobinfile(1);", and "ifx_get_blob($blob_id);" will get you the filename. Use normal file I/O to get at the blob contents.

For insert/update queries you must create these "blob id's" yourself with "ifx_create_blob(..);". You then plug the blob id's into an array, and replace the blob columns with a question mark (?) in the query string. For updates/inserts, you are responsible for setting the blob contents with ifx_update_blob(...).

The behaviour of BLOB columns can be altered by configuration variables that also can be set at runtime :

configuration variable : ifx.textasvarchar

configuration variable : ifx.byteasvarchar

runtime functions :

ifx_textasvarchar(0) : use blob id's for select queries with TEXT columns

ifx_byteasvarchar(0) : use blob id's for select queries with BYTE columns

ifx_textasvarchar(1) : return TEXT columns as if they were VARCHAR columns, without the use of blob id's for select queries.

ifx_byteasvarchar(1) : return BYTE columns as if they were VARCHAR columns, without the use of blob id's for select queries.

configuration variable : ifx.blobinfile

runtime function :

ifx_blobinfile_mode(0) : return BYTE columns in memory, the blob id lets you get at the contents.

ifx_blobinfile_mode(1) : return BYTE columns in a file, the blob id lets you get at the file name.

If you set ifx_text/byteasvarchar to 1, you can use TEXT and BYTE columns in select queries just like normal (but rather long) VARCHAR fields. Since all strings are "counted" in PHP3, this remains "binary safe". It is up to you to handle this correctly. The returned data can contain anything, you are responsible for the contents.

If you set ifx_blobinfile to 1, use the file name returned by ifx_get_blob(..) to get at the blob contents. Note that in this case YOU ARE RESPONSIBLE FOR DELETING THE TEMPORARY FILES CREATED BY INFORMIX when fetching the row. Every new row fetched will create new temporary files for every BYTE column.

The location of the temporary files can be influenced by the environment variable "blobdir", default is "." (the current directory). Something like : putenv(blobdir=tmpblob"); will ease the cleaning up of temp files accidentally left behind (their names all start with "blb").

Automatically trimming "char" (SQLCHAR and SQLNCHAR) data:

This can be set with the configuration variable

ifx.charasvarchar : if set to 1 trailing spaces will be automatically trimmed.

NULL values:

The configuration variable ifx.nullformat (and the runtime function ifx_nullformat()) when set to true will return NULL columns as the string "NULL", when set to false they return the empty string. This allows you to discriminate between NULL columns and empty columns.

Table of Contents
ifx_connect Open Informix server connection
ifx_pconnect Open persistent Informix connection
ifx_close Close Informix connection
ifx_query Send Informix query
ifx_prepare Prepare an SQL-statement for execution
ifx_do Execute a previously prepared SQL-statement
ifx_error Returns error code of last Informix call
ifx_errormsg Returns error message of last Informix call
ifx_affected_rows Get number of rows affected by a query
ifx_getsqlca Get the contents of sqlca.sqlerrd[0..5] after a query
ifx_fetch_row Get row as enumerated array
ifx_htmltbl_result Formats all rows of a query into a HTML table
ifx_fieldtypes List of Informix SQL fields
ifx_fieldproperties List of SQL fieldproperties
ifx_num_fields Returns the number of columns in the query
ifx_num_rows Count the rows already fetched a query
ifx_free_result Releases resources for the query
ifx_create_char Creates an char object
ifx_free_char Deletes the char object
ifx_update_char Updates the content of the char object
ifx_get_char Return the content of the char object
ifx_create_blob Creates an blob object
ifx_copy_blob Duplicates the given blob object
ifx_free_blob Deletes the blob object
ifx_get_blob Return the content of a blob object
ifx_update_blob Updates the content of the blob object
ifx_blobinfile_mode Set the default blob mode for all select queries
ifx_textasvarchar Set the default text mode
ifx_byteasvarchar Set the default byte mode
ifx_nullformat Sets the default return value on a fetch row
ifxus_create_slob Creates an slob object and opens it
ifx_free_slob Deletes the slob object
ifxus_close_slob Deletes the slob object
ifxus_open_slob Opens an slob object
ifxus_tell_slob Returns the current file or seek position
ifxus_seek_slob Sets the current file or seek position
ifxus_read_slob Reads nbytes of the slob object
ifxus_write_slob Writes a string into the slob object

ifx_connect

ifx_connect -- Open Informix server connection

Description

int ifx_connect(string [database] , string [userid] , string [password] );
Returns an connection identifier on success, or FALSE on error.

ifx_connect() establishes a connection to an Informix server. All of the arguments are optional, and if they're missing, defaults are taken from values supplied in php3.ini (ifx.default_host for the host (Informix libraries will use $INFORMIXSERVER environment value if not defined), ifx.default_user for user, ifx.default_password for the password (none if not defined).

In case a second call is made to ifx_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling ifx_close().

See also ifx_pconnect(), and ifx_close().
Example 1. Connect to a Informix database
$conn_id = ifx_pconnect (mydb@ol_srv1, "imyself", "mypassword");
      

ifx_pconnect

ifx_pconnect -- Open persistent Informix connection

Description

int ifx_pconnect(string [database] , string [userid] , string [password] );
Returns: A positive Informix persistent link identifier on success, or false on error

ifx_pconnect() acts very much like ifx_connect() with two major differences.

This function behaves exactly like ifx_connect() when PHP is not running as an Apache module. First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (ifx_close() will not close links established by ifx_pconnect()).

This type of links is therefore called 'persistent'.

See also: ifx_connect().

ifx_close

ifx_close -- Close Informix connection

Description

int ifx_close(int [link_identifier] );
Returns: always true.

ifx_close() closes the link to an Informix database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

ifx_close() will not close persistent links generated by ifx_pconnect().

See also: ifx_connect(), and ifx_pconnect().
Example 1. Closing a Informix connection
$conn_id = ifx_connect (mydb@ol_srv, "itsme", "mypassword");
... some queries and stuff ...
ifx_close($conn_id);
      

ifx_query

ifx_query -- Send Informix query

Description

int ifx_query(string query, int [link_identifier] , int [cursor_type] , mixed [blobidarray] );
Returns: A positive Informix result identifier on success, or false on error.

An integer "result_id" used by other functions to retrieve the query results. Sets "affected_rows" for retrieval by the ifx_affected_rows() function.

ifx_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if ifx_connect() was called, and use it.

Executes query on connection conn_id. For "select-type" queries a cursor is declared and opened. The optional cursor_type parameter allows you to make this a "scroll" and/or "hold" cursor. It's a mask and can be either IFX_SCROLL, IFX_HOLD, or both or'ed together. Non-select queries are "execute immediate".

For either query type the number of (estimated or real) affected rows is saved for retrieval by ifx_affected_rows().

If you have BLOB (BYTE or TEXT) columns in an update query, you can add a blobidarray parameter containing the corresponding "blob ids", and you should replace those columns with a "?" in the query text.

If the contents of the TEXT (or BYTE) column allow it, you can also use "ifx_textasvarchar(1)" and "ifx_byteasvarchar(1)". This allows you to treat TEXT (or BYTE) columns just as if they were ordinary (but long) VARCHAR columns for select queries, and you don't need to bother with blob id's.

With ifx_textasvarchar(0) or ifx_byteasvarchar(0) (the default situation), select queries will return BLOB columns as blob id's (integer value). You can get the value of the blob as a string or file with the blob functions (see below).

See also: ifx_connect().
Example 1. Show all rows of the "orders" table as a html table
ifx_textasvarchar(1);      // use "text mode" for blobs
$res_id = ifx_query("select * from orders", $conn_id);
if (! $res_id) {
    printf("Can't select orders : %s\n<br>%s<br>\n", ifx_error());
    ifx_errormsg();
    die;
}
ifx_htmltbl_result($res_id, "border=\"1\"");
ifx_free_result($res_id);
      
Example 2. Insert some values into the "catalog" table
                      // create blob id's for a byte and text column
$textid = ifx_create_blob(0, 0, "Text column in memory");
$byteid = ifx_create_blob(1, 0, "Byte column in memory");
                      // store blob id's in a blobid array
$blobidarray[] = $textid;
$blobidarray[] = $byteid;
                      // launch query
$query = "insert into catalog (stock_num, manu_code, " .
         "cat_descr,cat_picture) values(1,'HRO',?,?)";
$res_id = ifx_query($query, $conn_id, $blobidarray);
if (! $res_id) {
  ... error ...
}
                     // free result id
ifx_free_result($res_id);
      

ifx_prepare

ifx_prepare -- Prepare an SQL-statement for execution

Description

int ifx_prepare(string query, int conn_id, int [cursor_def], mixed blobidarray);
Returns a integer result_id for use by ifx_do(). Sets affected_rows for retrieval by the ifx_affected_rows() function.

Prepares query on connection conn_id. For "select-type" queries a cursor is declared and opened. The optional cursor_type parameter allows you to make this a "scroll" and/or "hold" cursor. It's a mask and can be either IFX_SCROLL, IFX_HOLD, or both or'ed together.

For either query type the estimated number of affected rows is saved for retrieval by ifx_affected_rows().

If you have BLOB (BYTE or TEXT) columns in the query, you can add a blobidarray parameter containing the corresponding "blob ids", and you should replace those columns with a "?" in the query text.

If the contents of the TEXT (or BYTE) column allow it, you can also use "ifx_textasvarchar(1)" and "ifx_byteasvarchar(1)". This allows you to treat TEXT (or BYTE) columns just as if they were ordinary (but long) VARCHAR columns for select queries, and you don't need to bother with blob id's.

With ifx_textasvarchar(0) or ifx_byteasvarchar(0) (the default situation), select queries will return BLOB columns as blob id's (integer value). You can get the value of the blob as a string or file with the blob functions (see below).

See also: ifx_do().

ifx_do

ifx_do -- Execute a previously prepared SQL-statement

Description

int ifx_do(int result_id);
Returns TRUE on success, FALSE on error.

Executes a previously prepared query or opens a cursor for it.

Does NOT free result_id on error.

Also sets the real number of ifx_affected_rows() for non-select statements for retrieval by ifx_affected_rows()

See also: ifx_prepare(). There is a example.

ifx_error

ifx_error -- Returns error code of last Informix call

Description

string ifx_error(void);
The Informix error codes (SQLSTATE & SQLCODE) formatted as follows :

x [SQLSTATE = aa bbb SQLCODE=cccc]

where x = space : no error

E : error

N : no more data

W : warning

? : undefined

If the "x" character is anything other than space, SQLSTATE and SQLCODE describe the error in more detail.

See the Informix manual for the description of SQLSTATE and SQLCODE

Returns in a string one character describing the general results of a statement and both SQLSTATE and SQLCODE associated with the most recent SQL statement executed. The format of the string is "(char) [SQLSTATE=(two digits) (three digits) SQLCODE=(one digit)]". The first character can be ' ' (space) (success), 'W' (the statement caused some warning), 'E' (an error happened when executing the statement) or 'N' (the statement didn't return any data).

See also: ifx_errormsg()

ifx_errormsg

ifx_errormsg -- Returns error message of last Informix call

Description

string ifx_errormsg(int [errorcode]);
Returns the Informix error message associated with the most recent Informix error, or, when the optional "errorcode" param is present, the error message corresponding to "errorcode".

See also: ifx_error()

printf("%s\n<br>", ifx_errormsg(-201));

ifx_affected_rows

ifx_affected_rows -- Get number of rows affected by a query

Description

int ifx_affected_rows(int result_id);
result_id is a valid result id returned by ifx_query() or ifx_prepare().

Returns the number of rows affected by a query associated with result_id.

For inserts, updates and deletes the number is the real number (sqlerrd[2]) of affected rows. For selects it is an estimate (sqlerrd[0]). Don't rely on it.

Useful after ifx_prepare() to limit queries to reasonable result sets.

See also: ifx_num_rows()
 
Example 1. Informix affected rows
$rid = ifx_prepare ("select * from emp where name like " . $name, $connid);
if (! $rid) {
    ... error ...
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
    printf ("Too many rows in result set (%d)\n<br>", $rowcount);
    die ("Please restrict your query<br>\n");
}
      

ifx_getsqlca

ifx_getsqlca -- Get the contents of sqlca.sqlerrd[0..5] after a query

Description

array ifx_getsqlca(int result_id);
result_id is a valid result id returned by ifx_query() or ifx_prepare().

Returns a pseudo-row (assiociative arry) with sqlca.sqlerrd[0] to sqlca.sqlerrd[5] after the query associated with result_id.

For inserts, updates and deletes the values returned are those as set by the server after executing the query. This gives access to the number of affected rows and the serial insert value. For selects the values are those saved after the prepare statement. This gives access to the estimated number of affected rows. The use of this function saves the overhead of executing a "select dbinfo('sqlca.sqlerrdx')" query, as it retrieves the values that were saved by the ifx driver at the appropriate moment.
 
Example 1. Retrieve Informix sqlca.sqlerrd[x] values
/* assume the first column of 'sometable' is a serial */
$qid = ifx_query("insert into sometable values(0, '2nd column', 'another column' ", $connid);
if (! $qid) {
    ... error ...
}
$sqlca = ifx_getsqlca ($qid);
$serial_value = $sqlca["sqlerrd1"];
echo "The serial value of the inserted row is : " . $serial_value<br>\n"; 
      

ifx_fetch_row

ifx_fetch_row -- Get row as enumerated array

Description

array ifx_fetch_row(int result_id, mixed [position] );
Returns an associative array that corresponds to the fetched row, or false if there are no more rows.

Blob columns are returned as integer blob id values for use in ifx_get_blob() unless you have used ifx_textasvarchar(1) or ifx_byteasvarchar(1), in which case blobs are returned as string values. Returns FALSE on error

result_id is a valid resultid returned by ifx_query() or ifx_prepare() (select type queries only!).

[position] is an optional parameter for a "fetch" operation on "scroll" cursors: "NEXT", "PREVIOUS", "CURRENT", "FIRST", "LAST" or a number. If you specify a number, an "absolute" row fetch is executed. This parameter is optional, and only valid for scrollcursors.

ifx_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

Subsequent call to ifx_fetch_row() would return the next row in the result set, or false if there are no more rows.
 
Example 1. Informix fetch rows
$rid = ifx_prepare ("select * from emp where name like " . $name,
                     $connid, IFX_SCROLL);
if (! $rid) {
    ... error ...
}
$rowcount = ifx_affected_rows($rid);
if ($rowcount > 1000) {
    printf ("Too many rows in result set (%d)\n<br>", $rowcount);
    die ("Please restrict your query<br>\n");
}
if (! ifx_do ($rid)) {
   ... error ...
}
$row = ifx_fetch_row ($rid, "NEXT");
while (is_array($row)) {
    for(reset($row); $fieldname=key($row); next($row)) {
        $fieldvalue = $row[$fieldname];
        printf ("%s = %s,", $fieldname, $fieldvalue);
    }
    printf("\n<br>");
    $row = ifx_fetch_row ($rid, "NEXT");
}
ifx_free_result ($rid);
     

ifx_htmltbl_result

ifx_htmltbl_result -- Formats all rows of a query into a HTML table

Description

int ifx_htmltbl_result(int result_id, string [html_table_options]);
Returns the number of rows fetched or FALSE on error.

Formats all rows of the result_id query into a html table. The optional second argument is a string of <table> tag options
 
Example 1. Informix results as HTML table
$rid = ifx_prepare ("select * from emp where name like " . $name,
                     $connid, IFX_SCROLL);
if (! $rid) {
   ... error ...
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
    printf ("Too many rows in result set (%d)\n<br>", $rowcount);
    die ("Please restrict your query<br>\n");
}
if (! ifx_do($rid) {
  ... error ...
}

ifx_htmltbl_result ($rid, "border=\"2\"");

ifx_free_result($rid);
      

ifx_fieldtypes

ifx_fieldtypes -- List of Informix SQL fields

Description

array ifx_fieldtypes(int result_id);
Returns an associative array with fieldnames as key and the SQL fieldtypes as data for query with result_id. Returns FALSE on error.
 
Example 1. Fielnames and SQL fieldtypes
$types = ifx_fieldtypes ($resultid);
if (! isset ($types)) {
  ... error ...
}
for ($i = 0; $i < count($types); $i++) {
    $fname = key($types);
    printf("%s :\t type =  %s\n", $fname, $types[$fname]);
    next($types);
}
     

ifx_fieldproperties

ifx_fieldproperties -- List of SQL fieldproperties

Description

array ifx_fieldproperties(int result_id);
Returns an associative array with fieldnames as key and the SQL fieldproperties as data for a query with result_id. Returns FALSE on error.

Returns the Informix SQL fieldproperies of every field in the query as an associative array. Properties are encoded as: "SQLTYPE;length;precision;scale;ISNULLABLE" where SQLTYPE = the Informix type like "SQLVCHAR" etc. and ISNULLABLE = "Y" or "N".
 
Example 1. Informix SQL fieldproperties
$properties = ifx_fieldtypes ($resultid);
if (! isset($properties)) {
  ... error ...
}
for ($i = 0; $i < count($properties); $i++) {
    $fname = key ($properties);
    printf ("%s:\t type =  %s\n", $fname, $properties[$fname]);
    next ($properties);
}
     

ifx_num_fields

ifx_num_fields -- Returns the number of columns in the query

Description

int ifx_num_fields(int result_id);
Returns the number of columns in query for result_id or FALSE on error

After preparing or executing a query, this call gives you the number of columns in the query.

ifx_num_rows

ifx_num_rows -- Count the rows already fetched a query

Description

int ifx_num_rows(int result_id);
Gives the number of rows fetched so far for a query with result_id after a ifx_query() or ifx_do() query.

ifx_free_result

ifx_free_result -- Releases resources for the query

Description

int ifx_free_result(int result_id);
Releases resources for the query associated with result_id. Returns FALSE on error.

ifx_create_char

ifx_create_char -- Creates an char object

Description

int ifx_create_char(string param);
Creates an char object. param should be the char content.

ifx_free_char

ifx_free_char -- Deletes the char object

Description

int ifx_free_char(int bid);
Deletes the charobject for the given char object-id bid. Returns FALSE on error otherwise TRUE.

ifx_update_char

ifx_update_char -- Updates the content of the char object

Description

int ifx_update_char(int bid, string content);
Updates the content of the char object for the given char object bid. content is a string with new data. Returns FALSE on error otherwise TRUE.

ifx_get_char

ifx_get_char -- Return the content of the char object

Description

int ifx_get_char(int bid);
Returns the content of the char object for the given char object-id bid.

ifx_create_blob

ifx_create_blob -- Creates an blob object

Description

int ifx_create_blob(int type, int mode, string param);
Creates an blob object.

type: 1 = TEXT, 0 = BYTE

mode: 0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

param: if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Return FALSE on error, otherwise the new blob object-id.

ifx_copy_blob

ifx_copy_blob -- Duplicates the given blob object

Description

int ifx_copy_blob(int bid);
Duplicates the given blob object. bid is the ID of the blob object.

Returns FALSE on error otherwise the new blob object-id.

ifx_free_blob

ifx_free_blob -- Deletes the blob object

Description

int ifx_free_blob(int bid);
Deletes the blobobject for the given blob object-id bid. Returns FALSE on error otherwise TRUE.

ifx_get_blob

ifx_get_blob -- Return the content of a blob object

Description

int ifx_get_blob(int bid);
Returns the content of the blob object for the given blob object-id bid.

ifx_update_blob

ifx_update_blob -- Updates the content of the blob object

Description

ifx_update_blob(int bid, string content);
Updates the content of the blob object for the given blob object bid. content is a string with new data. Returns FALSE on error otherwise TRUE.

ifx_blobinfile_mode

ifx_blobinfile_mode -- Set the default blob mode for all select queries

Description

void ifx_blobinfile_mode(int mode);
Set the default blob mode for all select queries. Mode "0" means save Byte-Blobs in memory, and mode "1" means save Byte-Blobs in a file.

ifx_textasvarchar

ifx_textasvarchar -- Set the default text mode

Description

void ifx_textasvarchar(int mode);
Sets the default text mode for all select-queries. Mode "0" will return a blob id, and mode "1" will return a varchar with text content.

ifx_byteasvarchar

ifx_byteasvarchar -- Set the default byte mode

Description

void ifx_byteasvarchar(int mode);
Sets the default byte mode for all select-queries. Mode "0" will return a blob id, and mode "1" will return a varchar with text content.

ifx_nullformat

ifx_nullformat -- Sets the default return value on a fetch row

Description

void ifx_nullformat(int mode);
Sets the default return value of a NULL-value on a fetch row. Mode "0" returns "", and mode "1" returns "NULL".

ifxus_create_slob

ifxus_create_slob -- Creates an slob object and opens it

Description

int ifxus_create_slob(int mode);
Creates an slob object and opens it. Modes: 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> or-mask. You can also use constants named IFX_LO_RDONLY, IFX_LO_WRONLY etc. Return FALSE on error otherwise the new slob object-id.

ifx_free_slob

ifx_free_slob -- Deletes the slob object

Description

int ifxus_free_slob(int bid);
Deletes the slob object. bid is the Id of the slob object. Returns FALSE on error otherwise TRUE.

ifxus_close_slob

ifxus_close_slob -- Deletes the slob object

Description

int ifxus_close_slob(int bid);
Deletes the slob object on the given slob object-id bid. Return FALSE on error otherwise TRUE.

ifxus_open_slob

ifxus_open_slob -- Opens an slob object

Description

int ifxus_open_slob(long bid, int mode);
Opens an slob object. bid should be an existing slob id. Modes: 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> or-mask. Returns FALSE on error otherwise the new slob object-id.

ifxus_tell_slob

ifxus_tell_slob -- Returns the current file or seek position

Description

int ifxus_tell_slob(long bid);
Returns the current file or seek position of an open slob object bid should be an existing slob id. Return FALSE on error otherwise the seek position.

ifxus_seek_slob

ifxus_seek_slob -- Sets the current file or seek position

Description

int ifxus_seek_blob(long bid, int mode, long offset);
Sets the current file or seek position of an open slob object. bid should be an existing slob id. Modes: 0 = LO_SEEK_SET, 1 = LO_SEEK_CUR, 2 = LO_SEEK_END and offset is an byte offset. Return FALSE on error otherwise the seek position.

ifxus_read_slob

ifxus_read_slob -- Reads nbytes of the slob object

Description

int ifxus_read_slob(long bid, long nbytes);
Reads nbytes of the slob object. bid is a existing slob id and nbytes is the number of bytes zu read. Return FALSE on error otherwise the string.

ifxus_write_slob

ifxus_write_slob -- Writes a string into the slob object

Description

int ifxus_write_slob(long bid, string content);
Writes a string into the slob object. bid is a existing slob id and content the content to write. Return FALSE on error otherwise bytes written.

ibase_connect

ibase_connect --

Description

ibase_connect( );

ibase_pconnect

ibase_pconnect --

Description

ibase_pconnect( );

ibase_close

ibase_close --

Description

ibase_close( );

ibase_query

ibase_query --

Description

ibase_query( );

ibase_fetch_row

ibase_fetch_row --

Description

ibase_fetch_row( );

ibase_free_result

ibase_free_result --

Description

ibase_free_result( );

ibase_prepare

ibase_prepare --

Description

ibase_prepare( );

ibase_bind

ibase_bind --

Description

ibase_bind( );

ibase_execute

ibase_execute --

Description

ibase_execute( );

ibase_free_query

ibase_free_query --

Description

ibase_free_query( );

ibase_timefmt

ibase_timefmt --

Description

ibase_timefmt( );

XXIV. LDAP Functions

Introduction to LDAP

LDAP is the Lightweight Directory Access Protocol, and is a protocol used to access "Directory Servers". The Directory is a special kind of database that holds information in a tree structure.

The concept is similar to your hard disk directory structure, except that in this context, the root directory is "The world" and the first level subdirectories are "countries". Lower levels of the directory structure contain entries for companies, organisations or places, while yet lower still we find directory entries for people, and perhaps equipment or documents.

To refer to a file in a subdirectory on your hard disk, you might use something like

    /usr/local/myapp/docs

The forwards slash marks each division in the reference, and the sequence is read from left to right.

The equivalent to the fully qualified file reference in LDAP is the "distinguished name", referred to simply as "dn". An example dn might be.

    cn=John Smith,ou=Accounts,o=My Company,c=US

The comma marks each division in the reference, and the sequence is read from right to left. You would read this dn as ..

    country = US
    organization = My Company
    organizationalUnit = Accounts
    commonName = John Smith

In the same way as there are no hard rules about how you organise the directory structure of a hard disk, a directory server manager can set up any structure that is meaningful for the purpose. However, there are some conventions that are used. The message is that you can not write code to access a directory server unless you know something about its structure, any more than you can use a database without some knowledge of what is available.


Complete code example

Retrieve information for all entries where the surname starts with "S" from a directory server, displaying an extract with name and email address.
 
Example 1. LDAP search example
<?php
// basic sequence with LDAP is connect, bind, search, interpret search
// result, close connection

echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost");  // must be a valid LDAP server!
echo "connect result is ".$ds."<p>";

if ($ds) { 
    echo "Binding ..."; 
    $r=ldap_bind($ds);     // this is an "anonymous" bind, typically
                           // read-only access echo "Bind result is
    echo "Bind result is ".$r."<p>";

    echo "Searching for (sn=S*) ...";
    // Search surname entry
    $sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");  
    echo "Search result is ".$sr."<p>";

    echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."<p>";

    echo "Getting entries ...<p>";
    $info = ldap_get_entries($ds, $sr);
    echo "Data for ".$info["count"]." items returned:<p>";

    for ($i=0; $i<$info["count"]; $i++) {
        echo "dn is: ". $info[$i]["dn"] ."<br>";
        echo "first cn entry is: ". $info[$i]["cn"][0] ."<br>";
        echo "first email entry is: ". $info[$i]["mail"][0] ."<p>";
    }

    echo "Closing connection";
    ldap_close($ds);

} else {
    echo "<h4>Unable to connect to LDAP server</h4>";
}
?>

Using the PHP LDAP calls

You will need to get and compile LDAP client libraries from either the University of Michigan ldap-3.3 package or the Netscape Directory SDK. You will also need to recompile PHP with LDAP support enabled before PHP's LDAP calls will work.

Before you can use the LDAP calls you will need to know ..

    The name or address of the directory server you will use

    The "base dn" of the server (the part of the world directory that is held on this server, which could be "o=My Company,c=US")

    Whether you need a password to access the server (many servers will provide read access for an "anonymous bind" but require a password for anything else)

The typical sequence of LDAP calls you will make in an application will follow this pattern:

  ldap_connect()    // establish connection to server
     |
  ldap_bind()       // anonymous or authenticated "login"
     |
  do something like search or update the directory
  and display the results
     |
  ldap_close()      // "logout"


More Information

Lots of information about LDAP can be found at The Netscape SDK contains a helpful Programmer's Guide in .html format.
Table of Contents
ldap_add Add entries to LDAP directory
ldap_mod_add Add attribute values to current attributes
ldap_mod_del Delete attribute values from current attributes
ldap_mod_replace Replace attribute values with new ones
ldap_bind Bind to LDAP directory
ldap_close Close link to LDAP server
ldap_connect Connect to an LDAP server
ldap_count_entries Count the number of entries in a search
ldap_delete Delete an entry from a directory
ldap_dn2ufn Convert DN to User Friendly Naming format
ldap_explode_dn Splits DN into its component parts
ldap_first_attribute Return first attribute
ldap_first_entry Return first result id
ldap_free_result Free result memory
ldap_get_attributes Get attributes from a search result entry
ldap_get_dn Get the DN of a result entry
ldap_get_entries Get all result entries
ldap_get_values Get all values from a result entry
ldap_list Single-level search
ldap_modify Modify an LDAP entry
ldap_next_attribute Get the next attribute in result
ldap_next_entry Get next result entry
ldap_read Read an entry
ldap_search Search LDAP tree
ldap_unbind Unbind from LDAP directory

ldap_add

ldap_add -- Add entries to LDAP directory

Description

int ldap_add(int link_identifier, string dn, array entry);
returns true on success and false on error.

The ldap_add() function is used to add entries in the LDAP directory. The DN of the entry to be added is specified by dn. Array entry specifies the information about the entry. The values in the entries are indexed by individual attributes. In case of multiple values for an attribute, they are indexed using integers starting with 0.

    entry["attribute1"] = value

    entry["attribute2"][0] = value1
    entry["attribute2"][1] = value2
Example 1. Complete example with authenticated bind
<?php
$ds=ldap_connect("localhost");  // assuming the LDAP server is on this host

if ($ds) {
    // bind with appropriate dn to give update access
    $r=ldap_bind($ds,"cn=root, o=My Company, c=US", "secret");

    // prepare data
    $info["cn"]="John Jones";
    $info["sn"]="Jones";
    $info["mail"]="jonj@here.and.now";
    $info["objectclass"]="person";

    // add data to directory
    $r=ldap_add($ds, "cn=John Jones, o=My Company, c=US", $info);

    ldap_close($ds);
} else {
    echo "Unable to connect to LDAP server"; 
}
?>

ldap_mod_add

ldap_mod_add -- Add attribute values to current attributes

Description

int ldap_mod_add(int link_identifier, string dn, array entry);
returns true on success and false on error.

This function adds attribute(s) to the specified dn. It performs the modification at the attribute level as opposed to the object level. Object-level additions are done by the ldap_add() function.

ldap_mod_del

ldap_mod_del -- Delete attribute values from current attributes

Description

int ldap_mod_del(int link_identifier, string dn, array entry);
returns true on success and false on error.

This function removes attribute(s) from the specified dn. It performs the modification at the attribute level as opposed to the object level. Object-level deletions are done by the ldap_del() function.

ldap_mod_replace

ldap_mod_replace -- Replace attribute values with new ones

Description

int ldap_mod_replace(int link_identifier, string dn, array entry);
returns true on success and false on error.

This function replaces attribute(s) from the specified dn. It performs the modification at the attribute level as opposed to the object level. Object-level modifications are done by the ldap_modify() function.

ldap_bind

ldap_bind -- Bind to LDAP directory

Description

int ldap_bind(int link_identifier, string [bind_rdn], string [bind_password]);
Binds to the LDAP directory with specified RDN and password. Returns true on success and false on error.

ldap_bind() does a bind operation on the directory. bind_rdn and bind_password are optional. If not specified, anonymous bind is attempted.

ldap_close

ldap_close -- Close link to LDAP server

Description

int ldap_close(int link_identifier);
Returns true on success, false on error.

ldap_close() closes the link to the LDAP server that's associated with the specified link_identifier.

This call is internally identical to ldap_unbind(). The LDAP API uses the call ldap_unbind(), so perhaps you should use this in preference to ldap_close().

ldap_connect

ldap_connect -- Connect to an LDAP server

Description

int ldap_connect(string [hostname], int [port]);
Returns a positive LDAP link identifier on success, or false on error.

ldap_connect() establishes a connection to a LDAP server on a specified hostname and port. Both the arguments are optional. If no arguments are specified then the link identifier of the already opened link will be returned. If only hostname is specified, then the port defaults to 389.

ldap_count_entries

ldap_count_entries -- Count the number of entries in a search

Description

int ldap_count_entries(int link_identifier, int result_identifier);
Returns number of entries in the result or false on error.

ldap_count_entries() returns the number of entries stored in the result of previous search operations. result_identifier identifies the internal ldap result.

ldap_delete

ldap_delete -- Delete an entry from a directory

Description

int ldap_delete(int link_identifier, string dn);
Returns true on success and false on error.

ldap_delete() function delete a particular entry in LDAP directory specified by dn.

ldap_dn2ufn

ldap_dn2ufn -- Convert DN to User Friendly Naming format

Description

string ldap_dn2ufn(string dn);
ldap_dn2ufn() function is used to turn a DN into a more user-friendly form, stripping off type names.

ldap_explode_dn

ldap_explode_dn -- Splits DN into its component parts

Description

array ldap_explode_dn(string dn, int with_attrib);
ldap_explode_dn() function is used to split the a DN returned by ldap_get_dn() and breaks it up into its component parts. Each part is known as Relative Distinguished Name, or RDN. ldap_explode_dn() returns an array of all those components. with_attrib is used to request if the RDNs are returned with only values or their attributes as well. To get RDNs with the attributes (i.e. in attribute=value format) set with_attrib to 0 and to get only values set it to 1.

ldap_first_attribute

ldap_first_attribute -- Return first attribute

Description

string ldap_first_attribute(int link_identifier, int result_entry_identifier, int ber_identifier);
Returns the first attribute in the entry on success and false on error.

Similar to reading entries, attributes are also read one by one from a particular entry. ldap_first_attribute() returns the first attribute in the entry pointed by the entry identifier. Remaining attributes are retrieved by calling ldap_next_attribute() successively. ber_identifier is the identifier to internal memory location pointer. It is passed by reference. The same ber_identifier is passed to the ldap_next_attribute() function, which modifies that pointer.

see also ldap_get_attributes()

ldap_first_entry

ldap_first_entry -- Return first result id

Description

int ldap_first_entry(int link_identifier, int result_identifier);
Returns the result entry identifier for the first entry on success and false on error.

Entries in the LDAP result are read sequentially using the ldap_first_entry() and ldap_next_entry() functions. ldap_first_entry() returns the entry identifier for first entry in the result. This entry identifier is then supplied to lap_next_entry() routine to get successive entries from the result.

see also ldap_get_entries().

ldap_free_result

ldap_free_result -- Free result memory

Description

int ldap_free_result(int result_identifier);
Returns true on success and false on error.

ldap_free_result() frees up the memory allocated internally to store the result and pointed by the result_identifier. All result memory will be automatically freed when the script terminates.

Typically all the memory allocated for the ldap result gets freed at the end of the script. In case the script is making successive searches which return large result sets, ldap_free_result() could be called to keep the runtime memory usage by the script low.

ldap_get_attributes

ldap_get_attributes -- Get attributes from a search result entry

Description

array ldap_get_attributes(int link_identifier, int result_entry_identifier);
Returns a complete entry information in a multi-dimensional array on success and false on error.

ldap_get_attributes() function is used to simplify reading the attributes and values from an entry in the search result. The return value is a multi-dimensional array of attributes and values.

Having located a specific entry in the directory, you can find out what information is held for that entry by using this call. You would use this call for an application which "browses" directory entries and/or where you do not know the structure of the directory entries. In many applications you will be searching for a specific attribute such as an email address or a surname, and won't care what other data is held.

return_value["count"] = number of attributes in the entry

return_value[0] = first attribute
return_value[n] = nth attribute

return_value["attribute"]["count"] = number of values for attribute
return_value["attribute"][0] = first value of the attribute
return_value["attribute"][i] = ith value of the attribute

Example 1. Show the list of attributes held for a particular directory entry 
// $ds is the link identifier for the directory

// $sr is a valid search result from a prior call to
// one of the ldap directory search calls

$entry = ldap_first_entry($ds, $sr);

$attrs = ldap_get_attributes($ds, $entry);

echo $attrs["count"]." attributes held for this entry:<p>";

for ($i=0; $i<$attrs["count"]; $i++)
    echo $attrs[$i]."<br>";

see also ldap_first_attribute() and ldap_next_attribute()

ldap_get_dn

ldap_get_dn -- Get the DN of a result entry

Description

string ldap_get_dn(int link_identifier, int result_entry_identifier);
Returns the DN of the result entry and false on error.

ldap_get_dn() function is used to find out the DN of an entry in the result.

ldap_get_entries

ldap_get_entries -- Get all result entries

Description

array ldap_get_entries(int link_identifier, int result_identifier);
Returns a complete result information in a multi-dimenasional array on success and false on error.

ldap_get_entries() function is used to simplify reading multiple entries from the result and then reading the attributes and multiple values. The entire information is returned by one function call in a multi-dimensional array. The structure of the array is as follows.

The attribute index is converted to lowercase. (Attributes are case-insensitive for directory servers, but not when used as array indices)

return_value["count"] = number of entries in the result

return_value[0] : refers to the details of first entry

return_value[i]["dn"] =  DN of the ith entry in the result

return_value[i]["count"] = number of attributes in ith entry
return_value[i][j] = jth attribute in the ith entry in the result

return_value[i]["attribute"]["count"] = number of values for
    attribute in ith entry
return_value[i]["attribute"][j] = jth value of attribute in ith entry

see also ldap_first_entry() and ldap_next_entry()

ldap_get_values

ldap_get_values -- Get all values from a result entry

Description

array ldap_get_values(int link_identifier, int result_entry_identifier, string attribute);
Returns an array of values for the attribute on success and false on error.

ldap_get_values() function is used to read all the values of the attribute in the entry in the result. entry is specified by the result_entry_identifier. The number of values can be found by indexing "count" in the resultant array. Individual values are accessed by integer index in the array. The first index is 0.

This call needs a result_entry_identifier, so needs to be preceded by one of the ldap search calls and one of the calls to get an individual entry.

You application will either be hard coded to look for certain attributes (such as "surname" or "mail") or you will have to use the ldap_get_attributes() call to work out what attributes exist for a given entry.

LDAP allows more than one entry for an attribute, so it can, for example, store a number of email addresses for one person's directory entry all labeled with the attribute "mail"

return_value["count"] = number of values for attribute

return_value[0] = first value of attribute
return_value[i] = ith value of attribute
Example 1. List all values of the "mail" attribute for a directory entry 
// $ds is a valid link identifier for a directory server

// $sr is a valid search result from a prior call to
//     one of the ldap directory search calls

// $entry is a valid entry identifier from a prior call to
//        one of the calls that returns a directory entry

$values = ldap_get_values($ds, $entry,"mail");

echo $values["count"]." email addresses for this entry.<p>";

for ($i=0; $i < $values["count"]; $i++)
    echo $values[$i]."<br>";

ldap_list

ldap_list -- Single-level search

Description

int ldap_list(int link_identifier, string base_dn, string filter, array [attributes]);
Returns a search result identifier or false on error.

ldap_list() performs the search for a specified filter on the directory with the scope LDAP_SCOPE_ONELEVEL.

LDAP_SCOPE_ONELEVEL means that the search should only return information that is at the level immediately below the base dn given in the call. (Equivalent to typing "ls" and getting a list of files and folders in the current working directory.)

This call takes an optional fourth parameter which is an array of the attributes required. See ldap_search() notes.
Example 1. Produce a list of all organizational units of an organization 
// $ds is a valid link identifier for a directory server

$basedn = "o=My Company, c=US";
$justthese = array("ou");

$sr=ldap_list($ds, $basedn, "ou=*", $justthese);

$info = ldap_get_entries($ds, $sr);

for ($i=0; $i<$info["count"]; $i++)
    echo $info[$i]["ou"][0] ;

ldap_modify

ldap_modify -- Modify an LDAP entry

Description

int ldap_modify(int link_identifier, string dn, array entry);
Returns true on success and false on error.

ldap_modify() function is used to modify the existing entries in the LDAP directory. The structure of the entry is same as in ldap_add().

ldap_next_attribute

ldap_next_attribute -- Get the next attribute in result

Description

string ldap_next_attribute(int link_identifier, int result_entry_identifier, int ber_identifier);
Returns the next attribute in an entry on success and false on error.

ldap_next_attribute() is called to retrieve the attributes in an entry. The internal state of the pointer is maintained by the ber_identifier. It is passed by reference to the function. The first call to ldap_next_attribute() is made with the result_entry_identifier returned from ldap_first_attribute().

see also ldap_get_attributes()

ldap_next_entry

ldap_next_entry -- Get next result entry

Description

int ldap_next_entry(int link_identifier, int result_entry_identifier);
Returns entry identifier for the next entry in the result whose entries are being read starting with ldap_first_entry(). If there are no more entries in the result then it returns false.

ldap_next_entry() function is used to retrieve the entries stored in the result. Successive calls to the ldap_next_entry() return entries one by one till there are no more entries. The first call to ldap_next_entry() is made after the call to ldap_first_entry() with the result_identifier as returned from the ldap_first_entry().

see also ldap_get_entries()

ldap_read

ldap_read -- Read an entry

Description

int ldap_read(int link_identifier, string base_dn, string filter, array [attributes]);
Returns a search result identifier or false on error.

ldap_read() performs the search for a specified filter on the directory with the scope LDAP_SCOPE_BASE. So it is equivalent to reading an entry from the directory.

An empty filter is not allowed. If you want to retrieve absolutely all information for this entry, use a filter of "objectClass=*". If you know which entry types are used on the directory server, you might use an appropriate filter such as "objectClass=inetOrgPerson".

This call takes an optional fourth parameter which is an array of the attributes required. See ldap_search() notes.

ldap_search

ldap_search -- Search LDAP tree

Description

int ldap_search(int link_identifier, string base_dn, string filter, array [attributes]);
Returns a search result identifier or false on error.

ldap_search() performs the search for a specified filter on the directory with the scope of LDAP_SCOPE_SUBTREE. This is equivalent to searching the entire directory. base_dn specifies the base DN for the directory.

There is a optional fourth parameter, that can be added to restrict the attributes and values returned by the server to just those required. This is much more efficient than the default action (which is to return all attributes and their associated values). The use of the fourth parameter should therefore be considered good practice.

The fourth parameter is a standard PHP string array of the required attributes, eg array("mail","sn","cn") Note that the "dn" is always returned irrespective of which attributes types are requested.

Note too that some directory server hosts will be configured to return no more than a preset number of entries. If this occurs, the server will indicate that it has only returned a partial results set.

The search filter can be simple or advanced, using boolean operators in the format described in the LDAP doumentation (see the Netscape Directory SDK for full information on filters).

The example below retrieves the organizational unit, surname, given name and email address for all people in "My Company" where the surname or given name contains the substring $person. This example uses a boolean filter to tell the server to look for information in more than one attribute.
Example 1. LDAP search
// $ds is a valid link identifier for a directory server

// $person is all or part of a person's name, eg "Jo"

$dn = "o=My Company, c=US";
$filter="(|(sn=$person*)(givenname=$person*))";
$justthese = array( "ou", "sn", "givenname", "mail");

$sr=ldap_search($ds, $dn, $filter, $justthese);

$info = ldap_get_entries($ds, $sr);

print $info["count"]." entries returned<p>";

ldap_unbind

ldap_unbind -- Unbind from LDAP directory

Description

int ldap_unbind(int link_identifier);
Returns true on success and false on error.

ldap_unbind() function unbinds from the LDAP directory.

XXV. Mail Functions

The mail() function allows you to send mail.

Table of Contents
mail send mail

mail

mail -- send mail

Description

bool mail(string to, string subject, string message, string [additional_headers]);
Mail() automatically mails the message specified in message to the receiver specified in to. Multiple recipients can be specified by putting a space between each address in to.
Example 1. Sending mail.
mail("rasmus@lerdorf.on.ca", "My Subject", "Line 1\nLine 2\nLine 3");
      

If a fourth string argument is passed, this string is inserted at the end of the header. This is typically used to add extra headers. Multiple extra headers are separated with a newline.
Example 2. Sending mail with extra headers.
mail("nobody@aol.com", "the subject", $message,
     "From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());
      

XXVI. Mathematical Functions

Introduction

These math functions will only handle values within the range of the long and double types on your computer. If you need to handle bigger numbers, take a look at the arbitrary precision math functions.

Math constants

The following values are defined as constants in PHP by the math extension:
Table 1. Math constants
 
Constant Value Description
M_PI 3.14159265358979323846 The value of ¶ (pi)
Table of Contents
Abs absolute value
Acos arc cosine
Asin arc sine
Atan arc tangent
Atan2 arc tangent of two variables
base_convert convert a number between arbitrary bases
BinDec binary to decimal
Ceil round fractions up
Cos cosine
DecBin decimal to binary
DecHex decimal to hexadecimal
DecOct decimal to octal
Exp e to the power of...
Floor round fractions down
getrandmax show largest possible random value
HexDec hexadecimal to decimal
Log natural logarithm
Log10 base-10 logarithm
max find highest value
min find lowest value
mt_rand generate a better random value
mt_srand seed the better random number generator
mt_getrandmax show largest possible random value
number_format format a number with grouped thousands
OctDec octal to decimal
pi get value of pi
pow exponential expression
rand generate a random value
round Rounds a float.
Sin sine
Sqrt square root
srand seed the random number generator
Tan tangent

Abs

Abs -- absolute value

Description

mixed abs(mixed number);
Returns the absolute value of number. If the argument number is float, return type is also float, otherwise it is int.

Acos

Acos -- arc cosine

Description

float acos(float arg);
Returns the arc cosine of arg in radians.

See also asin() and atan().

Asin

Asin -- arc sine

Description

float asin(float arg);
Returns the arc sine of arg in radians.

See also acos() and atan().

Atan

Atan -- arc tangent

Description

float atan(float arg);
Returns the arc tangent of arg in radians.

See also acos() and atan().

Atan2

Atan2 -- arc tangent of two variables

Description

float atan2(float y, float x);
This function calculates the arc tangent of the two variables x and y. It is similar to calculating the arc tangent of y / x, except that the signs of both arguments are used to determine the quadrant of the result.

The function returns the result in radians, which is between -PI and PI (inclusive).

See also acos() and atan().

base_convert

base_convert -- convert a number between arbitrary bases

Description

strin base_convert(string number, int frombase, int tobase);
Returns a string containing number represented in base tobase. The base in which number is given is specified in frombase. Both frombase and tobase have to be between 2 and 36, inclusive. Digits in numbers with a base higher than 10 will be represented with the letters a-z, with a meaning 10, b meaning 11 and z meaning 36.
Example 1. base_convert()
$binary = base_convert($hexadecimal, 16, 2);

BinDec

BinDec -- binary to decimal

Description

int bindec(string binary_string);
Returns the decimal equivalent of the binary number represented by the binary_string argument.

OctDec converts a binary number to a decimal number. The largest number that can be converted is 31 bits of 1's or 2147483647 in decimal.

See also the decbin() function.

Ceil

Ceil -- round fractions up

Description

int ceil(float number);
Returns the next highest integer value from number. Using ceil() on integers is absolutely a waste of time.

NOTE: PHP/FI 2's ceil() returned a float. Use: $new = (double)ceil($number); to get the old behaviour.

See also floor() and round().

Cos

Cos -- cosine

Description

float cos(float arg);
Returns the cosine of arg in radians.

See also sin() and tan().

DecBin

DecBin -- decimal to binary

Description

string decbin(int number);
Returns a string containing a binary representation of the given number argument. The largest number that can be converted is 2147483647 in decimal resulting to a string of 31 1's.

See also the bindec() function.

DecHex

DecHex -- decimal to hexadecimal

Description

string dechex(int number);
Returns a string containing a hexadecimal representation of the given number argument. The largest number that can be converted is 2147483647 in decimal resulting to "7fffffff".

See also the hexdec() function.

DecOct

DecOct -- decimal to octal

Description

string decoct(int number);
Returns a string containing an octal representation of the given number argument. The largest number that can be converted is 2147483647 in decimal resulting to "17777777777". See also octdec().

Exp

Exp -- e to the power of...

Description

float exp(float arg);
Returns e raised to the power of arg.

See also pow().

Floor

Floor -- round fractions down

Description

int floor(float number);
Returns the next lowest integer value from number. Using floor() on integers is absolutely a waste of time.

NOTE: PHP/FI 2's floor() returned a float. Use: $new = (double)floor($number); to get the old behaviour.

See also ceil() and round().

getrandmax

getrandmax -- show largest possible random value

Description

int getrandmax(void );
Returns the maximum value that can be returned by a call to rand().

See also rand(), srand() mt_rand(), mt_srand() and mt_getrandmax().

HexDec

HexDec -- hexadecimal to decimal

Description

int hexdec(string hex_string);
Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument. HexDec converts a hexadecimal string to a decimal number. The largest number that can be converted is 7fffffff or 2147483647 in decimal.

See also the dechex() function.

Log

Log -- natural logarithm

Description

float log(float arg);
Returns the natural logarithm of arg.

Log10

Log10 -- base-10 logarithm

Description

float log10(float arg);
Returns the base-10 logarithm of arg.

max

max -- find highest value

Description

mixed max(mixed arg1, mixed arg2, mixed argn);
max() returns the numerically highest of the parameter values.

If the first parameter is an array, max() returns the highest value in that array. If the first parameter is an integer, string or double, you need at least two parameters and max() returns the biggest of these values. You can compare an unlimited number of values.

If one or more of the values is a double, all the values will be treated as doubles, and a double is returned. If none of the values is a double, all of them will be treated as integers, and an integer is returned.

min

min -- find lowest value

Description

mixed min(mixed arg1, mixed arg2, mixed argn);
min() returns the numerically lowest of the parameter values.

If the first parameter is an array, min() returns the lowest value in that array. If the first parameter is an integer, string or double, you need at least two parameters and min() returns the lowest of these values. You can compare an unlimited number of values.

If one or more of the values is a double, all the values will be treated as doubles, and a double is returned. If none of the values is a double, all of them will be treated as integers, and an integer is returned.

mt_rand

mt_rand -- generate a better random value

Description

int mt_rand([int min], [int max]);
Many random number generators of older libcs have dubious or unknown characteristics and are slow. By default, PHP uses the libc random number generator with the rand() function. mt_rand() function is a drop-in replacement for this. It uses a random number generator with known characteristics, the Mersenne Twister, which will produce random numbers that should be suitable for cryptographic purposes and is four times faster than what the average libc provides. The Homepage of the Mersenne Twister can be found at http://www.math.keio.ac.jp/~matumoto/emt.html, and an optimized version of the MT source is available from http://www.scp.syr.edu/~marc/hawk/twister.html.

If called without the optional min,max arguments mt_rand() returns a pseudo-random value between 0 and RAND_MAX. If you want a random number between 5 and 15 (inclusive), for example, use mt_rand(5,15).

Remember to seed the random number generator before use with mt_srand().

See also mt_srand(), mt_getrandmax(), srand(), rand() and getrandmax().

mt_srand

mt_srand -- seed the better random number generator

Description

void mt_srand(int seed);
Seeds the random number generator with seed.
// seed with microseconds since last "whole" second
mt_srand((double)microtime()*1000000);
$randval = mt_rand();
See also mt_rand(), mt_getrandmax(), srand(), rand() and getrandmax().

mt_getrandmax

mt_getrandmax -- show largest possible random value

Description

int mt_getrandmax(void );
Returns the maximum value that can be returned by a call to mt_rand().

See also mt_rand(), mt_srand() rand(), srand() and getrandmax().

number_format

number_format -- format a number with grouped thousands

Description

string number_format(float number, int decimals, string dec_point, string thousands_sep);
number_format() returns a formatted version of number. This function accepts either one, two or four parameters (not three):

If only one parameter is given, number will be formatted without decimals, but with a comma (",") between every group of thousands.

If two parameters are given, number will be formatted with decimals decimals with a dot (".") in front, and a comma (",") between every group of thousands.

If all four parameters are given, number will be formatted with decimals decimals, dec_point instead of a dot (".") before the decimals and thousands_sep instead of a comma (",") between every group of thousands.

OctDec

OctDec -- octal to decimal

Description

int octdec(string octal_string);
Returns the decimal equivalent of the octal number represented by the octal_string argument. OctDec converts an octal string to a decimal number. The largest number that can be converted is 17777777777 or 2147483647 in decimal.

See also decoct().

pi

pi -- get value of pi

Description

double pi(void );
Returns an approximation of pi.

pow

pow -- exponential expression

Description

float pow(float base, float exp);
Returns base raised to the power of exp.

See also exp().

rand

rand -- generate a random value

Description

int rand([int min], [int max]);
If called without the optional min,max arguments rand() returns a pseudo-random value between 0 and RAND_MAX. If you want a random number between 5 and 15 (inclusive), for example, use rand(5,15).

Remember to seed the random number generator before use with srand().

See also srand(), getrandmax(), mt_rand(), mt_srand() and mt_getrandmax().

round

round -- Rounds a float.

Description

double round(double val);
Returns the rounded value of val.
$foo = round( 3.4 );   // $foo == 3.0
$foo = round( 3.5 );   // $foo == 4.0
$foo = round( 3.6 );   // $foo == 4.0
See also ceil() and floor().

Sin

Sin -- sine

Description

float sin(float arg);
Returns the sine of arg in radians.

See also cos() and tan().

Sqrt

Sqrt -- square root

Description

float sqrt(float arg);
Returns the square root of arg.

srand

srand -- seed the random number generator

Description

void srand(int seed);
Seeds the random number generator with seed.
// seed with microseconds since last "whole" second
srand((double)microtime()*1000000);
$randval = rand();
See also rand(), getrandmax(), mt_rand(), mt_srand() and mt_getrandmax().

Tan

Tan -- tangent

Description

float tan(float arg);
Returns the tangent of arg in radians.

See also sin() and cos().

XXVII. mcrypt functions

These functions are intended to work with mcrypt.

This is an interface to the mcrypt library. mcrypt supports a wide area of block algorithms such as DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB cipher modes. Additionally, it supports RC6 and IDEA which are considered "non-free".

To use it, download libmcrypt-x.x.tar.gz from here and follow the included installation instructions. You need to compile PHP with the --with-mcrypt parameter to enable this extension.

mcrypt can be used to encrypt and decrypt using the above mentioned ciphers. The four important mcrypt commands (mcrypt_cfb(), mcrypt_cbc(), mcrypt_ecb(), and mcrypt_ofb()) can operate in both modes which are named MCRYPT_ENCRYPT and MCRYPT_DECRYPT, respectively.
Example 1. Encrypt an input value with TripleDES in ECB mode
<?php
$key = "this is a very secret key";
$input = "Let us meet at 9 o' clock at the secret place.";

$encrypted_data = mcrypt_ecb(MCRYPT_TripleDES, $key, $input, MCRYPT_ENCRYPT);
?>
     
This example will give you the encrypted data as a string in $encrypted_data.

mcrypt can operate in four cipher modes (CBC, OFB, CFB, and ECB). We will outline the normal use for each of these modes. For a more complete reference and discussion see Applied Cryptography by Schneier (ISBN 0-471-11709-9).

    ECB (electronic codebook) is suitable for random data, such as encrypting other keys. Since data there is short and random, the disadvantages of ECB have a favorable negative effect.

    CBC (cipher block chaining) is especially suitable for encrypting files where the security is increased over ECB significantly.

    CFB (cipher feedback) is the best mode for encrypting byte streams where single bytes must be encrypted.

    OFB (output feedback) is comparable to CFB, but can be used in applications where error propagation cannot be tolerated.

PHP does not support encrypting/decrypting bit streams currently. As of now, PHP only supports handling of strings.

For a complete list of supported ciphers, see the defines at the end of mcrypt.h. The general rule is that you can access the cipher from PHP with MCRYPT_ciphername.

Here is a short list of ciphers which are currently supported by PHP3/mcrypt. If a cipher is not listed here, but is listed by mcrypt as supported, you can safely assume that this documentation is outdated.

    MCRYPT_BLOWFISH

    MCRYPT_DES

    MCRYPT_TripleDES

    MCRYPT_ThreeWAY

    MCRYPT_GOST

    MCRYPT_CRYPT

    MCRYPT_DES_COMPAT

    MCRYPT_SAFER64

    MCRYPT_SAFER128

    MCRYPT_CAST128

    MCRYPT_TEAN

    MCRYPT_RC2

    MCRYPT_TWOFISH (for older mcrypt 2.x versions)

    MCRYPT_TWOFISH128 (TWOFISHxxx are available in newer 2.x versions)

    MCRYPT_TWOFISH192

    MCRYPT_TWOFISH256

    MCRYPT_RC6

    MCRYPT_IDEA

You must (in CFB and OFB mode) or can (in CBC mode) supply an initialization vector (IV) to the respective cipher function. The IV must be unique and must be the same when decrypting/encrypting. With data which is stored encrypted, you can take the output of a function of the index under which the data is stored (e.g. the MD5 key of the filename). Alternatively, you can transmit the IV together with the encrypted data (see chapter 9.3 of Applied Cryptography by Schneier (ISBN 0-471-11709-9) for a discussion of this topic).
Table of Contents
mcrypt_get_cipher_name Get the name of the specified cipher
mcrypt_get_block_size Get the block size of the specified cipher
mcrypt_get_key_size Get the key size of the specified cipher
mcrypt_create_iv Create an initialization vector (IV) from a random source
mcrypt_cbc Encrypt/decrypt data in CBC mode
mcrypt_cfb Encrypt/decrypt data in CFB mode
mcrypt_ecb Encrypt/decrypt data in ECB mode
mcrypt_ofb Encrypt/decrypt data in OFB mode

mcrypt_get_cipher_name

mcrypt_get_cipher_name -- Get the name of the specified cipher

Description

string mcrypt_get_cipher_name(int cipher);
mcrypt_get_cipher_name() is used to get the name of the specified cipher.

mcrypt_get_cipher_name() takes the cipher number as an argument and returns the name of the cipher or false, if the cipher does not exist.
Example 1. mcrypt_get_cipher_name example
<?php
$cipher = MCRYPT_TripleDES;

print mcrypt_get_cipher_name($cipher);
?>
      

The above example will produce:

TripleDES

mcrypt_get_block_size

mcrypt_get_block_size -- Get the block size of the specified cipher

Description

int mcrypt_get_block_size(int cipher);
mcrypt_get_block_size() is used to get the size of a block of the specified cipher.

mcrypt_get_block_size() takes one argument, the cipher and returns the size in bytes.

See also: mcrypt_get_key_size()

mcrypt_get_key_size

mcrypt_get_key_size -- Get the key size of the specified cipher

Description

int mcrypt_get_key_size(int cipher);
mcrypt_get_key_size() is used to get the size of a key of the specified cipher.

mcrypt_get_key_size() takes one argument, the cipher and returns the size in bytes.

See also: mcrypt_get_block_size()

mcrypt_create_iv

mcrypt_create_iv -- Create an initialization vector (IV) from a random source

Description

string mcrypt_create_iv(int size, int source);
mcrypt_create_iv() is used to create an IV.

mcrypt_create_iv() takes two arguments, size determines the size of the IV, source specifies the source of the IV.

The source can be MCRYPT_RAND (system random number generator), MCRYPT_DEV_RANDOM (read data from /dev/random) and MCRYPT_DEV_URANDOM (read data from /dev/urandom). If you use MCRYPT_RAND, make sure to call srand() before to initialize the random number generator.
Example 1. mcrypt_create_iv example
<?php
$cipher = MCRYPT_TripleDES;
$block_size = mcrypt_get_block_size($cipher);
$iv = mcrypt_create_iv($block_size, MCRYPT_DEV_RANDOM);
?>
      

mcrypt_cbc

mcrypt_cbc -- Encrypt/decrypt data in CBC mode

Description

int mcrypt_cbc(int cipher, string key, string data, int mode, string [iv]);
mcrypt_cbc() encrypts or decrypts (depending on mode) the data with cipher and key in CBC cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

iv is the optional initialization vector.

See also: mcrypt_cfb(), mcrypt_ecb(), mcrypt_ofb()

mcrypt_cfb

mcrypt_cfb -- Encrypt/decrypt data in CFB mode

Description

int mcrypt_cfb(int cipher, string key, string data, int mode, string iv);
mcrypt_cfb() encrypts or decrypts (depending on mode) the data with cipher and key in CFB cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

iv is the initialization vector.

See also: mcrypt_cbc(), mcrypt_ecb(), mcrypt_ofb()

mcrypt_ecb

mcrypt_ecb -- Encrypt/decrypt data in ECB mode

Description

int mcrypt_ecb(int cipher, string key, string data, int mode);
mcrypt_ecb() encrypts or decrypts (depending on mode) the data with cipher and key in ECB cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

See also: mcrypt_cbc(), mcrypt_cfb(), mcrypt_ofb()

mcrypt_ofb

mcrypt_ofb -- Encrypt/decrypt data in OFB mode

Description

int mcrypt_ofb(int cipher, string key, string data, int mode, string iv);
mcrypt_ofb() encrypts or decrypts (depending on mode) the data with cipher and key in OFB cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

iv is the initialization vector.

See also: mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb()

XXVIII. mhash functions

These functions are intended to work with mhash.

This is an interface to the mhash library. mhash supports a wide area of hash algorithms such as MD5, SHA1, GOST and many others.

To use it, download mhash-x.x.x.tar.gz from here and follow the included installation instructions. You need to compile PHP with the --with-mhash parameter to enable this extension.

mhash can be used to create checksums, message digests and more.
Example 1. Compute the SHA1 key and print it out as hex
<?php
$input = "Let us meet at 9 o' clock at the secret place.";
$hash = mhash(MHASH_SHA1, $input);

print "The hash is ".bin2hex($hash)."\n";

?>
     
This will produce:

The hash is d3b85d710d8f6e4e5efd4d5e67d041f9cecedafe
For a complete list of supported hashes, see the documentation of mhash. The general rule is that you can access the hash from PHP with MHASH_HASHNAME.

Here is a list of hashes which are currently supported by mhash. If a hash is not listed here, but is listed by mhash as supported, you can safely assume that this documentation is outdated.

    MHASH_MD5

    MHASH_SHA1

    MHASH_HAVAL

    MHASH_RIPEMD160

    MHASH_RIPEMD128

    MHASH_SNEFRU

    MHASH_TIGER

    MHASH_GOST

    MHASH_CRC32

    MHASH_CRC32B

Table of Contents
mhash_get_hash_name Get the name of the specified hash
mhash_get_block_size Get the block size of the specified hash
mhash_count Get the highest available hash id
mhash Compute hash

mhash_get_hash_name

mhash_get_hash_name -- Get the name of the specified hash

Description

string mhash_get_hash_name(int hash);
mhash_get_hash_name() is used to get the name of the specified hash.

mhash_get_hash_name() takes the hash id as an argument and returns the name of the hash or false, if the hash does not exist.
Example 1. mhash_get_hash_name example
<?php
$hash = MHASH_MD5;

print mhash_get_hash_name($hash);
?>
      
The above example will print out:

MD5

mhash_get_block_size

mhash_get_block_size -- Get the block size of the specified hash

Description

int mhash_get_block_size(int hash);
mhash_get_block_size() is used to get the size of a block of the specified hash.

mhash_get_block_size() takes one argument, the hash and returns the size in bytes or false, if the hash does not exist.

mhash_count

mhash_count -- Get the highest available hash id

Description

int mhash_count();
mhash_count() returns the highest available hash id. Hashes are numbered from 0 to this hash id.
Example 1. Traversing all hashes
<?php

$nr = mhash_count();

for($i = 0; $i <= $nr; $i++) {
    echo sprintf("The blocksize of %s is %d\n", 
            mhash_get_hash_name($i),
            mhash_get_block_size($i));
}
?>
      

mhash

mhash -- Compute hash

Description

string mhash(int hash, string data);
mhash() applies a hash function specified by hash to the data and returns the resulting hash (also called digest).

XXIX. Miscellaneous Functions

These functions were placed here because none of the other categories seemed to fit.

Table of Contents
connection_aborted Return true if client disconnected
connection_status Returns connection status bitfield
connection_timeout Return true if script timed out
eval Evaluate a string as PHP code
extract Import variables into the symbol table from an array
die Output a message and terminate the current script
exit Terminate current script
function_exists Return true if the given function has been defined
ignore_user_abort Set whether a client disconnect should abort script execution
iptcparse Parse a binary IPTC http://www.xe.net/iptc/ block into single tags.
leak Leak memory
pack pack data into binary string
register_shutdown_function Register a function for execution on shutdown.
serialize generates a storable representation of a value
sleep Delay execution
unpack unpack data from binary string
unserialize creates a PHP value from a stored representation
uniqid generate a unique id
usleep Delay execution in microseconds

connection_aborted

connection_aborted -- Return true if client disconnected

Description

int connection_aborted(void );
Returns true if client disconnected. See the Connection Handling description in the Feature chapter for a complete explanation.

connection_status

connection_status -- Returns connection status bitfield

Description

int connection_status(void );
Returns the connection status bitfield. See the Connection Handling description in the Feature chapter for a complete explanation.

connection_timeout

connection_timeout -- Return true if script timed out

Description

int connection_timeout(void );
Returns true if script timed out. See the Connection Handling description in the Feature chapter for a complete explanation.

eval

eval -- Evaluate a string as PHP code

Description

void eval(string code_str);
eval() evaluates the string given in code_str as PHP code. Among other things, this can be useful for storing code in a database text field for later execution.

There are some factors to keep in mind when using eval(). Remember that the string passed must be valid PHP code, including things like terminating statements with a semicolon so the parser doesn't die on the line after the eval(), and properly escaping things in code_str.

Also remember that variables given values under eval() will retain these values in the main script afterwards.
Example 1. eval() example - simple text merge
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.<br>';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>
      

The above example will show:

This is a $string with my $name in it.
This is a cup with my coffee in it.

extract

extract -- Import variables into the symbol table from an array

Description

void extract(array var_array, int [extract_type], string [prefix]);
This function is used to import variables from an array into the current symbol table. It takes associative array var_array and treats keys as variable names and values as variable values. For each key/value pair it will create a variable in the current symbol table, subject to extract_type and prefix parameters.

extract() checks for colissions with existing variables. The way collisions are treated is determined by extract_type. It can be one of the following values:

EXTR_OVERWRITE


If there is a collision, overwrite the existing variable.

EXTR_SKIP


If there is a collision, don't overwrite the existing variable.

EXTR_PREFIX_SAME


If there is a collision, prefix the new variable with prefix.

EXTR_PREFIX_ALL


Prefix all variables with prefix.

If extract_type is not specified, it is assumed to be EXTR_OVERWRITE.

Note that prefix is only required if extract_type is EXTR_PREFIX_SAME or EXTR_PREFIX_ALL.

extract() checks each key to see if it constitues a valid variable name, and if it does only then does it proceed to import it.

A possible use for extract is to import into symbol table variables contained in an associative array returned by wddx_deserialize().
Example 1. extract example
<?

/* Suppose that $var_array is an array returned from
   wddx_deserialize */
$size = "large";
$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

print "$color, $size, $shape, $wddx_size\n";

?>
      

The above example will produce:

blue, large, sphere, medium
The $size wasn't overwritten, becaus we specified EXTR_PREFIX_SAME, which resulted in $wddx_size being created. If EXTR_SKIP was specified, then $wddx_size wouldn't even have been created. EXTR_OVERWRITE would have cause $size to have value "medium", and EXTR_PREFIX_ALL would result in new variables being named $wddx_color, $wddx_size, and $wddx_shape.

die

die -- Output a message and terminate the current script

Description

void die(string message);
This language construct outputs a message and terminates parsing of the script. It does not return.
Example 1. die example
<?php
$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
  or die "unable to open file ($filename)";
?>
      

exit

exit -- Terminate current script

Description

void exit(void);
This language construct terminates parsing of the script. It does not return.

function_exists

function_exists -- Return true if the given function has been defined

Description

int function_exists(string function_name);
Checks the list of defined functions for function_name. Returns true if the given function name was found, false otherwise.

ignore_user_abort

ignore_user_abort -- Set whether a client disconnect should abort script execution

Description

int ignore_user_abort(int [setting]);
This function sets whether a client disconnect should cause a script to be aborted. It will return the previous setting and can be called without an argument to not change the current setting and only return the current setting. See the Connection Handling section in the Features chapter for a complete description of connection handling in PHP.

iptcparse

iptcparse -- Parse a binary IPTC http://www.xe.net/iptc/ block into single tags.

Description

array iptcparse(string iptcblock);
This function parses a binary IPTC block into its single tags. It returns an array using the tagmarker as an index and the value as the value. It returns false on error or if no IPTC data was found. See GetImageSize() for a sample.

leak

leak -- Leak memory

Description

void leak(int bytes);
Leak() leaks the specified amount of memory.

This is useful when debugging the memory manager, which automatically cleans up "leaked" memory when each request is completed.

pack

pack -- pack data into binary string

Description

string pack(string format, mixed [args]...);
Pack given arguments into binary string according to format. Returns binary string containing data.

The idea to this function was taken from Perl and all formatting codes work the same as there. The format string consists of format codes followed by an optional repeater argument. The repeater argument can be either an integer value or * for repeating to the end of the input data. For a, A, h, H the repeat count specifies how many characters of one data argument are taken, for @ it is the absolute position where to put the next data, for everything else the repeat count specifies how many data arguments are consumed and packed into the resulting binary string. Currently implemented are

    a NUL-padded string

    A SPACE-padded string

    h Hex string, low nibble first

    H Hex string, high nibble first

    c signed char

    C unsigned char

    s signed short (always 16 bit, machine byte order)

    S unsigned short (always 16 bit, machine byte order)

    n unsigned short (always 16 bit, big endian byte order)

    v unsigned short (always 16 bit, little endian byte order)

    i signed integer (machine dependant size and byte order)

    I unsigned integer (machine dependant size and byte order)

    l signed long (always 32 bit, machine byte order)

    L unsigned long (always 32 bit, machine byte order)

    N unsigned long (always 32 bit, big endian byte order)

    V unsigned long (always 32 bit, little endian byte order)

    f float (machine dependent size and representation)

    d double (machine dependent size and representation)

    x NUL byte

    X Back up one byte

    @ NUL-fill to absolute position

Example 1. pack format string
$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
The resulting binary string will be 6 bytes long and contain the byte sequence 0x12, 0x34, 0x78, 0x56, 0x41, 0x42. 

Note that the distinction between signed and unsigned values only affects the function unpack(), where as function pack() gives the same result for signed and unsigned format codes.

Also note that PHP internally stores integral values as signed values of a machine dependant size. If you give it an unsigned integral value too large to be stored that way it is converted to a double which often yields an undesired result.

register_shutdown_function

register_shutdown_function -- Register a function for execution on shutdown.

Description

int register_shutdown_function(string func);
Registers the function named by func to be executed when script processing is complete.

Common Pitfalls:

Since no output is allowed to the browser in this function, you will be unable to debug it using statements such as print or echo.

serialize

serialize -- generates a storable representation of a value

Description

string serialize(mixed value);
serialize() returns a string containing a byte-stream representation of value that can be stored anywhere.

This is useful for storing or passing PHP values around without losing their type and structure.

To make the serialized string into a PHP value again, use unserialize(). serialize() handles the types integerdoublestringarray (multidimensional) and object (object properties will be serialized, but methods are lost).
Example 1. serialize example
// $session_data contains a multi-dimensional array with session
// information for the current user.  We use serialize() to store
// it in a database at the end of the request.

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
                     "UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array(serialize($session_data), $PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata)) {
    $stmt = odbc_prepare($conn,
                         "INSERT INTO sessions (id, data) VALUES(?, ?)");
    if (!odbc_execute($stmt, &$sqldata)) {
        /* Something went wrong.  Bitch, whine and moan. */
    }
}

sleep

sleep -- Delay execution

Description

void sleep(int seconds);
The sleep function delays program execution for the given number of seconds.

See also usleep().

unpack

unpack -- unpack data from binary string

Description

array unpack(string format, string data);
Unpack from binary string into array according to format. Returns array containing unpacked elements of binary string.

Unpack works slightly different from Perl as the unpacked data is stored in an associative array. To accomplish this you have to name the different format codes and separate them by a slash /.
Example 1. unpack format string
$array = unpack("c2chars/nint", $binarydata);
The resulting array will contain the entries "chars1", "chars2" and "int". 

For an explanation of the format codes see also: pack()

Note that PHP internally stores integral values as signed. If you unpack a large unsigned long and it is of the same size as PHP internally stored values the result will be a negative number even though unsigned unpacking was specified.

unserialize

unserialize -- creates a PHP value from a stored representation

Description

mixed unserialize(string str);
unserialize() takes a single serialized variable (see serialize()) and converts it back into a PHP value. The converted value is returned, and can be an integerdoublestringarray or object. If an object was serialized, its methods are not preserved in the returned value.
Example 1. unserialize example
// Here, we use unserialize() to load session data from a database
// into $session_data.  This example complements the one described
// with serialize().

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata) || !odbc_fetch_into($stmt, &$tmp)) {
    // if the execute or fetch fails, initialize to empty array
    $session_data = array();
} else {
    // we should now have the serialized data in $tmp[0].
    $session_data = unserialize($tmp[0]);
    if (!is_array($session_data)) {
        // something went wrong, initialize to empty array
        $session_data = array();
    }
}

uniqid

uniqid -- generate a unique id

Description

int uniqid(string prefix);
uniqid() returns a prefixed unique identifier based on current time in microseconds. The prefix can be useful for instance if you generate identifiers simultaneously on several hosts that might happen to generate the identifier at the same microsecond. The prefix can be up to 114 characters long.

If you need a unique identifier or token and you intend to give out that token to the user via the network (i.e. session cookies), it is recommended that you use something along the lines of

$token = md5(uniqid("")); // no random portion
$better_token = md5(uniqid(rand())); // better, difficult to guess
This will create a 32 character identifier (a 128 bit hex number) that is extremely difficult to predict.

usleep

usleep -- Delay execution in microseconds

Description

void usleep(int micro_seconds);
The sleep function delays program execution for the given number of micro_seconds.

See also sleep().

XXX. mSQL Functions

Table of Contents
msql send mSQL query
msql_affected_rows returns number of affected rows
msql_close close mSQL connection
msql_connect open mSQL connection
msql_create_db create mSQL database
msql_createdb create mSQL database
msql_data_seek move internal row pointer
msql_dbname get current mSQL database name
msql_drop_db drop (delete) mSQL database
msql_dropdb drop (delete) mSQL database
msql_error returns error message of last msql call
msql_fetch_array fetch row as array
msql_fetch_field get field information
msql_fetch_object fetch row as object
msql_fetch_row get row as enumerated array
msql_fieldname get field name
msql_field_seek set field offset
msql_fieldtable get table name for field
msql_fieldtype get field type
msql_fieldflags get field flags
msql_fieldlen get field length
msql_free_result free result memory
msql_freeresult free result memory
msql_list_fields list result fields
msql_listfields list result fields
msql_list_dbs list mSQL databases on server
msql_listdbs list mSQL databases on server
msql_list_tables list tables in an mSQL database
msql_listtables list tables in an mSQL database
msql_num_fields get number of fields in result
msql_num_rows get number of rows in result
msql_numfields get number of fields in result
msql_numrows get number of rows in result
msql_pconnect open persistent mSQL connection
msql_query send mSQL query
msql_regcase make regular expression for case insensitive match
msql_result get result data
msql_select_db select mSQL database
msql_selectdb select mSQL database
msql_tablename get table name of field

msql

msql -- send mSQL query

Description

int msql(string database, string query, int link_identifier);
Returns a positive mSQL query identifier to the query result, or false on error.

msql() selects a database and executes a query on it. If the optional link identifier isn't specified, the function will try to find an open link to the mSQL server and if no such link is found it'll try to create one as if msql_connect() was called with no arguments (see msql_connect()).

msql_affected_rows

msql_affected_rows -- returns number of affected rows

Description

int msql_affected_rows(int query_identifier);
Returns number of affected ("touched") rows by a specific query (i.e. the number of rows returned by a SELECT, the number of rows modified by an update, or the number of rows removed by a delete).

See also: msql_query()

msql_close

msql_close -- close mSQL connection

Description

int msql_close(int link_identifier);
Returns true on success, false on error.

msql_close() closes the link to a mSQL database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

msql_close() will not close persistent links generated by msql_pconnect().

See also: msql_connect() and msql_pconnect().

msql_connect

msql_connect -- open mSQL connection

Description

int msql_connect(string hostname);
Returns a positive mSQL link identifier on success, or false on error.

msql_connect() establishes a connection to a mSQL server. The hostname argument is optional, and if it's missing, localhost is assumed.

In case a second call is made to msql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling msql_close().

See also msql_pconnect(), msql_close().

msql_create_db

msql_create_db -- create mSQL database

Description

int msql_create_db(string database name, int [link_identifier] );
msql_create_db() attempts to create a new database on the server associated with the specified link identifier.

See also: msql_drop_db().

msql_createdb

msql_createdb -- create mSQL database

Description

int msql_createdb(string database name, int [link_identifier] );
Identical to msql_create_db().

msql_data_seek

msql_data_seek -- move internal row pointer

Description

int msql_data_seek(int query_identifier, int row_number);
Returns true on success, false on failure.

msql_data_seek() moves the internal row pointer of the mSQL result associated with the specified query identifier to pointer to the specifyed row number. The next call to msql_fetch_row() would return that row.

See also: msql_fetch_row().

msql_dbname

msql_dbname -- get current mSQL database name

Description

string msql_dbname(int query_identifier, int i);
msql_dbname() returns the database name stored in position i of the result pointer returned from the msql_listdbs() function. The msql_numrows() function can be used to determine how many database names are available.

msql_drop_db

msql_drop_db -- drop (delete) mSQL database

Description

int msql_drop_db(string database_name, int link_identifier);
Returns true on success, false on failure.

msql_drop_db() attempts to drop (remove) an entire database from the server associated with the specified link identifier.

See also: msql_create_db().

msql_dropdb

msql_dropdb -- drop (delete) mSQL database

Description

See msql_drop_db().

msql_error

msql_error -- returns error message of last msql call

Description

string msql_error( );
Errors coming back from the mSQL database backend no longer issue warnings. Instead, use these functions to retrieve the error string.

msql_fetch_array

msql_fetch_array -- fetch row as array

Description

int msql_fetch_array(int query_identifier);
Returns an array that corresponds to the fetched row, or false if there are no more rows.

msql_fetch_array() is an extended version of msql_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

Be careful if you are retrieving results from a query that may return a record that contains only one field that has a value of 0 (or an empty string, or NULL).

An important thing to note is that using msql_fetch_array() is NOT significantly slower than using msql_fetch_row(), while it provides a significant added value.

For further details, also see msql_fetch_row()

msql_fetch_field

msql_fetch_field -- get field information

Description

object msql_fetch_field(int query_identifier, int field_offset);
Returns an object containing field information

msql_fetch_field() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retreived by msql_fetch_field() is retreived.

The properties of the object are:

    name - column name

    table - name of the table the column belongs to

    not_null - 1 if the column cannot be null

    primary_key - 1 if the column is a primary key

    unique - 1 if the column is a unique key

    type - the type of the column

See also msql_field_seek().

msql_fetch_object

msql_fetch_object -- fetch row as object

Description

int msql_fetch_object(int query_identifier);
Returns an object with properties that correspond to the fetched row, or false if there are no more rows.

msql_fetch_object() is similar to msql_fetch_array(), with one difference - an object is returned, instead of an array. Indirectly, that means that you can only access the data by the field names, and not by their offsets (numbers are illegal property names).

Speed-wise, the function is identical to msql_fetch_array(), and almost as quick as msql_fetch_row() (the difference is insignificant).

See also: msql_fetch_array() and msql_fetch_row().

msql_fetch_row

msql_fetch_row -- get row as enumerated array

Description

array msql_fetch_row(int query_identifier);
Returns an array that corresponds to the fetched row, or false if there are no more rows.

msql_fetch_row() fetches one row of data from the result associated with the specified query identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

Subsequent call to msql_fetch_row() would return the next row in the result set, or false if there are no more rows.

See also: msql_fetch_array(), msql_fetch_object(), msql_data_seek(), and msql_result().

msql_fieldname

msql_fieldname -- get field name

Description

string msql_fieldname(int query_identifier, int field);
msql_fieldname() returns the name of the specified field. query_identifier is the query identifier, and field is the field index. msql_fieldname($result, 2); will return the name of the second field in the result associated with the result identifier.

msql_field_seek

msql_field_seek -- set field offset

Description

int msql_field_seek(int query_identifier, int field_offset);
Seeks to the specified field offset. If the next call to msql_fetch_field() won't include a field offset, this field would be returned.

See also: msql_fetch_field().

msql_fieldtable

msql_fieldtable -- get table name for field

Description

int msql_fieldtable(int query_identifier, int field);
Returns the name of the table field was fetched from.

msql_fieldtype

msql_fieldtype -- get field type

Description

string msql_fieldtype(int query_identifier, int i);
msql_fieldtype() is similar to the msql_fieldname() function. The arguments are identical, but the field type is returned. This will be one of "int", "string" or "real".

msql_fieldflags

msql_fieldflags -- get field flags

Description

string msql_fieldflags(int query_identifier, int i);
msql_fieldflags() returns the field flags of the specified field. Currently this is either, "not null", "primary key", a combination of the two or "" (an empty string).

msql_fieldlen

msql_fieldlen -- get field length

Description

int msql_fieldlen(int query_identifier, int i);
msql_fieldlen() returns the length of the specified field.

msql_free_result

msql_free_result -- free result memory

Description

int msql_free_result(int query_identifier);
msql_free_result() frees the memory associated with query_identifier. When PHP completes a request, this memory is freed automatically, so you only need to call this function when you want to make sure you don't use too much memory while the script is running.

msql_freeresult

msql_freeresult -- free result memory

Description

See msql_free_result()

msql_list_fields

msql_list_fields -- list result fields

Description

int msql_list_fields(string database, string tablename);
msql_list_fields() retrieves information about the given tablename. Arguments are the database name and the table name. A result pointer is returned which can be used with msql_fieldflags(), msql_fieldlen(), msql_fieldname(), and msql_fieldtype(). A query identifier is a positive integer. The function returns -1 if a error occurs. A string describing the error will be placed in $phperrmsg, and unless the function was called as @msql_list_fields() then this error string will also be printed out.

See also msql_error().

msql_listfields

msql_listfields -- list result fields

Description

See msql_list_fields().

msql_list_dbs

msql_list_dbs -- list mSQL databases on server

Description

int msql_list_dbs(void);
msql_list_dbs() will return a result pointer containing the databases available from the current msql daemon. Use the msql_dbname() function to traverse this result pointer.

msql_listdbs

msql_listdbs -- list mSQL databases on server

Description

See msql_list_dbs().

msql_list_tables

msql_list_tables -- list tables in an mSQL database

Description

int msql_list_tables(string database);
msql_list_tables() takes a database name and result pointer much like the msql() function. The msql_tablename() function should be used to extract the actual table names from the result pointer.

msql_listtables

msql_listtables -- list tables in an mSQL database

Description

See msql_list_tables().

msql_num_fields

msql_num_fields -- get number of fields in result

Description

int msql_num_fields(int query_identifier);
msql_num_fields() returns the number of fields in a result set.

See also: msql(), msql_query(), msql_fetch_field(), and msql_num_rows().

msql_num_rows

msql_num_rows -- get number of rows in result

Description

int msql_num_rows(int query_identifier);
msql_num_rows() returns the number of rows in a result set.

See also: msql(), msql_query(), and msql_fetch_row().

msql_numfields

msql_numfields -- get number of fields in result

Description

int msql_numfields(int query_identifier);
Identical to msql_num_fields().

msql_numrows

msql_numrows -- get number of rows in result

Description

int msql_numrows(void);
Identical to msql_num_rows().

msql_pconnect

msql_pconnect -- open persistent mSQL connection

Description

int msql_pconnect(string hostname);
Returns a positive mSQL persistent link identifier on success, or false on error.

msql_pconnect() acts very much like msql_connect() with two major differences.

First, when connecting, the function would first try to find a (persistent) link that's already open with the same host. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (msql_close() will not close links established by msql_pconnect()).

This type of links is therefore called 'persistent'.

msql_query

msql_query -- send mSQL query

Description

int msql_query(string query, int link_identifier);
msql_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if msql_connect() was called, and use it.

Returns a positive mSQL query identifier on success, or false on error.

See also: msql(), msql_select_db(), and msql_connect().

msql_regcase

msql_regcase -- make regular expression for case insensitive match

Description

See sql_regcase().

msql_result

msql_result -- get result data

Description

int msql_result(int query_identifier, int i, mixed field);
Returns the contents of the cell at the row and offset in the specified mSQL result set.

msql_result() returns the contents of one cell from a mSQL result set. The field argument can be the field's offset, or the field's name, or the field's table dot field's name (fieldname.tablename). If the column name has been aliased ('select foo as bar from...'), use the alias instead of the column name.

When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than msql_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

Recommended high-performance alternatives: msql_fetch_row(), msql_fetch_array(), and msql_fetch_object().

msql_select_db

msql_select_db -- select mSQL database

Description

int msql_select_db(string database_name, int link_identifier);
Returns true on success, false on error.

msql_select_db() sets the current active database on the server that's associated with the specified link identifier. If no link identifier is specified, the last opened link is assumed. If no link is open, the function will try to establish a link as if msql_connect() was called, and use it.

Every subsequent call to msql_query() will be made on the active database.

See also: msql_connect(), msql_pconnect(), and msql_query().

msql_selectdb

msql_selectdb -- select mSQL database

Description

See msql_select_db().

msql_tablename

msql_tablename -- get table name of field

Description

string msql_tablename(int query_identifier, int field);
msql_tablename() takes a result pointer returned by the msql_list_tables() function as well as an integer index and returns the name of a table. The msql_numrows() function may be used to determine the number of tables in the result pointer.
Example 1. msql_tablename() example
<?php 
msql_connect ("localhost");
$result = msql_list_tables("wisconsin");
$i = 0;
while ($i < msql_numrows($result)) {
    $tb_names[$i] = msql_tablename($result, $i);
    echo $tb_names[$i] . "<BR>";
    $i++; 
}
?>

XXXI. MS SQL Server Functions

Table of Contents
mssql_affected_rows get number of affected rows in last query
mssql_close close MS SQL Server connection
mssql_connect open MS SQL server connection
mssql_data_seek move internal row pointer
mssql_fetch_array fetch row as array
mssql_fetch_field get field information
mssql_fetch_object fetch row as object
mssql_fetch_row get row as enumerated array
mssql_field_seek set field offset
mssql_free_result free result memory
mssql_num_fields get number of fields in result
mssql_num_rows get number of rows in result
mssql_pconnect open persistent MS SQL connection
mssql_query send MS SQL query
mssql_result get result data
mssql_select_db select MS SQL database

mssql_affected_rows

mssql_affected_rows -- get number of affected rows in last query

Description

int mssql_affected_rows(int [link_identifier] );
Returns: The number of affected rows by the last query.

mssql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query on the server associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

This command is not effective for SELECT statements, only on statements which modify records. To retrieve the number of rows returned from a SELECT, use mssql_num_rows().

mssql_close

mssql_close -- close MS SQL Server connection

Description

int mssql_close(int link_identifier);
Returns: true on success, false on error

mssql_close() closes the link to a MS SQL Server database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

mssql_close() will not close persistent links generated by mssql_pconnect().

See also: mssql_connect(), mssql_pconnect().

mssql_connect

mssql_connect -- open MS SQL server connection

Description

int mssql_connect(string servername, string username, string password);
Returns: A positive MS SQL link identifier on success, or false on error.

mssql_connect() establishes a connection to a MS SQL server. The servername argument has to be a valid servername that is defined in the 'interfaces' file.

In case a second call is made to mssql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mssql_close().

See also mssql_pconnect(), mssql_close().

mssql_data_seek

mssql_data_seek -- move internal row pointer

Description

int mssql_data_seek(int result_identifier, int row_number);
Returns: true on success, false on failure

mssql_data_seek() moves the internal row pointer of the MS SQL result associated with the specified result identifier to pointer to the specifyed row number. The next call to mssql_fetch_row() would return that row.

See also: mssql_data_seek().

mssql_fetch_array

mssql_fetch_array -- fetch row as array

Description

int mssql_fetch_array(int result);
Returns: An array that corresponds to the fetched row, or false if there are no more rows.

mssql_fetch_array() is an extended version of mssql_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

An important thing to note is that using mssql_fetch_array() is NOT significantly slower than using mssql_fetch_row(), while it provides a significant added value.

For further details, also see mssql_fetch_row()

mssql_fetch_field

mssql_fetch_field -- get field information

Description

object mssql_fetch_field(int result, int field_offset);
Returns an object containing field information.

mssql_fetch_field() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retreived by mssql_fetch_field() is retreived.

The properties of the object are:

    name - column name. if the column is a result of a function, this property is set to computed#N, where #N is a serial number.

    column_source - the table from which the column was taken

    max_length - maximum length of the column

    numeric - 1 if the column is numeric

See also mssql_field_seek()

mssql_fetch_object

mssql_fetch_object -- fetch row as object

Description

int mssql_fetch_object(int result);
Returns: An object with properties that correspond to the fetched row, or false if there are no more rows.

mssql_fetch_object() is similar to mssql_fetch_array(), with one difference - an object is returned, instead of an array. Indirectly, that means that you can only access the data by the field names, and not by their offsets (numbers are illegal property names).

Speed-wise, the function is identical to mssql_fetch_array(), and almost as quick as mssql_fetch_row() (the difference is insignificant).

See also: mssql_fetch-array() and mssql_fetch-row().

mssql_fetch_row

mssql_fetch_row -- get row as enumerated array

Description

array mssql_fetch_row(int result);
Returns: An array that corresponds to the fetched row, or false if there are no more rows.

mssql_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

Subsequent call to mssql_fetch_rows() would return the next row in the result set, or false if there are no more rows.

See also: mssql_fetch_array(), mssql_fetch_object(), mssql_data_seek(), mssql_fetch_lengths(), and mssql_result().

mssql_field_seek

mssql_field_seek -- set field offset

Description

int mssql_field_seek(int result, int field_offset);
Seeks to the specified field offset. If the next call to mssql_fetch_field() won't include a field offset, this field would be returned.

See also: mssql_fetch_field().

mssql_free_result

mssql_free_result -- free result memory

Description

int mssql_free_result(int result);
mssql_free_result() only needs to be called if you are worried about using too much memory while your script is running. All result memory will automatically be freed when the script, you may call mssql_free_result() with the result identifier as an argument and the associated result memory will be freed.

mssql_num_fields

mssql_num_fields -- get number of fields in result

Description

int mssql_num_fields(int result);
mssql_num_fields() returns the number of fields in a result set.

See also: mssql_db_query(), mssql_query(), mssql_fetch_field(), mssql_num_rows().

mssql_num_rows

mssql_num_rows -- get number of rows in result

Description

int mssql_num_rows(string result);
mssql_num_rows() returns the number of rows in a result set.

See also: mssql_db_query(), mssql_query() and, mssql_fetch_row().

mssql_pconnect

mssql_pconnect -- open persistent MS SQL connection

Description

int mssql_pconnect(string servername, string username, string password);
Returns: A positive MS SQL persistent link identifier on success, or false on error

mssql_pconnect() acts very much like mssql_connect() with two major differences.

First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (mssql_close() will not close links established by mssql_pconnect()).

This type of links is therefore called 'persistent'.

mssql_query

mssql_query -- send MS SQL query

Description

int mssql_query(string query, int link_identifier);
Returns: A positive MS SQL result identifier on success, or false on error.

mssql_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if mssql_connect() was called, and use it.

See also: mssql_db_query(), mssql_select_db(), and mssql_connect().

mssql_result

mssql_result -- get result data

Description

int mssql_result(int result, int i, mixed field);
Returns: The contents of the cell at the row and offset in the specified MS SQL result set.

mssql_result() returns the contents of one cell from a MS SQL result set. The field argument can be the field's offset, or the field's name, or the field's table dot field's name (fieldname.tablename). If the column name has been aliased ('select foo as bar from...'), use the alias instead of the column name.

When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than mssql_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

Recommended high-performance alternatives: mssql_fetch_row(), mssql_fetch_array(), and mssql_fetch_object().

mssql_select_db

mssql_select_db -- select MS SQL database

Description

int mssql_select_db(string database_name, int link_identifier);
Returns: true on success, false on error

mssql_select_db() sets the current active database on the server that's associated with the specified link identifier. If no link identifier is specified, the last opened link is assumed. If no link is open, the function will try to establish a link as if mssql_connect() was called, and use it.

Every subsequent call to mssql_query() will be made on the active database.

See also: mssql_connect(), mssql_pconnect(), and mssql_query()

XXXII. MySQL Functions

These functions allow you to access MySQL database servers.

More information about MySQL can be found at http://www.mysql.com/.

Table of Contents
mysql_affected_rows Get number of affected rows in previous MySQL operation
mysql_close close MySQL connection
mysql_connect Open a connection to a MySQL Server
mysql_create_db Create a MySQL database
mysql_data_seek Move internal result pointer
mysql_db_query Send an MySQL query to MySQL
mysql_drop_db Drop (delete) a MySQL database
mysql_errno Returns the number of the error message from previous MySQL operation
mysql_error Returns the text of the error message from previous MySQL operation
mysql_fetch_array Fetch a result row as an associative array
mysql_fetch_field Get column information from a result and return as an object
mysql_fetch_lengths Get max data size of each output in a result
mysql_fetch_object Fetch a result row as an object
mysql_fetch_row Get a result row as an enumerated array
mysql_field_name Get the name of the specified field in a result
mysql_field_seek Set result pointer to a specified field offset
mysql_field_table Get name of the table the specified field is in
mysql_field_type Get the type of the specified field in a result
mysql_field_flags Get the flags associated with the specified field in a result
mysql_field_len Returns the length of the specified field
mysql_free_result Free result memory
mysql_insert_id Get the id generated from the previous INSERT operation
mysql_list_fields List MySQL result fields
mysql_list_dbs List databases available on on MySQL server
mysql_list_tables List tables in a MySQL database
mysql_num_fields Get number of fields in result
mysql_num_rows Get number of rows in result
mysql_pconnect Open a persistent connection to a MySQL Server
mysql_query Send an SQL query to MySQL
mysql_result Get result data
mysql_select_db Select a MySQL database
mysql_tablename get table name of field

mysql_affected_rows

mysql_affected_rows -- Get number of affected rows in previous MySQL operation

Description

int mysql_affected_rows(int [link_identifier] );
mysql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query on the server associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

If the last query was a DELETE query with no WHERE clause, all of the records will have been deleted from the table but this function will return zero.

This command is not effective for SELECT statements, only on statements which modify records. To retrieve the number of rows returned from a SELECT, use mysql_num_rows().

mysql_close

mysql_close -- close MySQL connection

Description

int mysql_close(int [link_identifier] );
Returns: true on success, false on error

mysql_close() closes the link to a MySQL database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

mysql_close() will not close persistent links generated by mysql_pconnect().

See also: mysql_connect(), and mysql_pconnect().

mysql_connect

mysql_connect -- Open a connection to a MySQL Server

Description

int mysql_connect(string [hostname] [:port] , string [username] , string [password] );
Returns: A positive MySQL link identifier on success, or false on error.

mysql_connect() establishes a connection to a MySQL server. All of the arguments are optional, and if they're missing, defaults are assumed ('localhost', user name of the user that owns the server process, empty password). The hostname string can also include a port number. eg. "hostname:port"

In case a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mysql_close().

See also mysql_pconnect(), and mysql_close().

mysql_create_db

mysql_create_db -- Create a MySQL database

Description

int mysql_create_db(string database name, int [link_identifier] );
mysql_create_db() attempts to create a new database on the server associated with the specified link identifier.

See also: mysql_drop_db(). For downwards compatibility mysql_createdb() can also be used.

mysql_data_seek

mysql_data_seek -- Move internal result pointer

Description

int mysql_data_seek(int result_identifier, int row_number);
Returns: true on success, false on failure

mysql_data_seek() moves the internal row pointer of the MySQL result associated with the specified result identifier to point to the specified row number. The next call to mysql_fetch_row() would return that row.

mysql_db_query

mysql_db_query -- Send an MySQL query to MySQL

Description

int mysql_db_query(string database, string query, int [link_identifier] );
Returns: A positive MySQL result identifier to the query result, or false on error.

mysql_db_query() selects a database and executes a query on it. If the optional link identifier isn't specified, the function will try to find an open link to the MySQL server and if no such link is found it'll try to create one as if mysql_connect() was called with no arguments

See also mysql_connect(). For downwards compatibility mysql() can also be used.

mysql_drop_db

mysql_drop_db -- Drop (delete) a MySQL database

Description

int mysql_drop_db(string database_name, int [link_identifier] );
Returns: true on success, false on failure.

mysql_drop_db() attempts to drop (remove) an entire database from the server associated with the specified link identifier.

See also: mysql_create_db(). For downward compatibility mysql_dropdb() can also be used.

mysql_errno

mysql_errno -- Returns the number of the error message from previous MySQL operation

Description

int mysql_errno(int [link_identifier] );
Errors coming back from the mySQL database backend no longer issue warnings. Instead, use these functions to retrieve the error number.
<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>
See also: mysql_error()

mysql_error

mysql_error -- Returns the text of the error message from previous MySQL operation

Description

string mysql_error(int [link_identifier] );
Errors coming back from the mySQL database backend no longer issue warnings. Instead, use these functions to retrieve the error string.
<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>
See also: mysql_errno()

mysql_fetch_array

mysql_fetch_array -- Fetch a result row as an associative array

Description

array mysql_fetch_array(int result, int [result_typ]);
Returns an array that corresponds to the fetched row, or false if there are no more rows.

mysql_fetch_array() is an extended version of mysql_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

If two or more columns of the result have the same field names, the last column will take precedence. To access the other column(s) of the same name, you must the numeric index of the column or make an alias for the column.

select t1.f1 as foo t2.f1 as bar from t1, t2
An important thing to note is that using mysql_fetch_array() is NOT significantly slower than using mysql_fetch_row(), while it provides a significant added value.

The optional second argument result_typ in mysql_fetch_array() is a constant and can take the following values: MYSQL_ASSOC, MYSQL_NUM, and MYSQL_BOTH.

For further details, also see mysql_fetch_row()
 
Example 1. mysql fetch array
<?php 
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
    echo $row["user_id"];
    echo $row["fullname"];
}
mysql_free_result($result);
?>

mysql_fetch_field

mysql_fetch_field -- Get column information from a result and return as an object

Description

object mysql_fetch_field(int result, int [field_offset] );
Returns an object containing field information.

mysql_fetch_field() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by mysql_fetch_field() is retrieved.

The properties of the object are:

    name - column name

    table - name of the table the column belongs to

    max_length - maximum length of the column

    not_null - 1 if the column cannot be null

    primary_key - 1 if the column is a primary key

    unique_key - 1 if the column is a unique key

    multiple_key - 1 if the column is a non-unique key

    numeric - 1 if the column is numeric

    blob - 1 if the column is a BLOB

    type - the type of the column

    unsigned - 1 if the column is unsigned

    zerofill - 1 if the column is zero-filled

See also mysql_field_seek()

mysql_fetch_lengths

mysql_fetch_lengths -- Get max data size of each output in a result

Description

array mysql_fetch_lengths(int result);
Returns: An array that corresponds to the lengths of each field in the last row fetched by mysql_fetch_row(), or false on error.

mysql_fetch_lengths() stores the lengths of each result column in the last row returned by mysql_fetch_row() in an array, starting at offset 0.

See also: mysql_fetch_row().

mysql_fetch_object

mysql_fetch_object -- Fetch a result row as an object

Description

object mysql_fetch_object(int result, int [result_typ]);
Returns an object with properties that correspond to the fetched row, or false if there are no more rows.

mysql_fetch_object() is similar to mysql_fetch_array(), with one difference - an object is returned, instead of an array. Indirectly, that means that you can only access the data by the field names, and not by their offsets (numbers are illegal property names).

The optional argument result_typ is a constant and can take the following values: MYSQL_ASSOC, MYSQL_NUM, and MYSQL_BOTH.

Speed-wise, the function is identical to mysql_fetch_array(), and almost as quick as mysql_fetch_row() (the difference is insignificant).
Example 1. mysql fetch object
<?php 
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
}
mysql_free_result($result);
?>

See also: mysql_fetch_array() and mysql_fetch_row().

mysql_fetch_row

mysql_fetch_row -- Get a result row as an enumerated array

Description

array mysql_fetch_row(int result);
Returns: An array that corresponds to the fetched row, or false if there are no more rows.

mysql_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

Subsequent call to mysql_fetch_row() would return the next row in the result set, or false if there are no more rows.

See also: mysql_fetch_array(), mysql_fetch_object(), mysql_data_seek(), mysql_fetch_lengths(), and mysql_result().

mysql_field_name

mysql_field_name -- Get the name of the specified field in a result

Description

string mysql_field_name(int result, int field_index);
mysql_field_name() returns the name of the specified field. Arguments to the function is the result identifier and the field index, ie. mysql_field_name($result,2);

Will return the name of the second field in the result associated with the result identifier.

For downwards compatibility mysql_fieldname() can also be used.

mysql_field_seek

mysql_field_seek -- Set result pointer to a specified field offset

Description

int mysql_field_seek(int result, int field_offset);
Seeks to the specified field offset. If the next call to mysql_fetch_field() won't include a field offset, this field would be returned.

See also: mysql_fetch_field().

mysql_field_table

mysql_field_table -- Get name of the table the specified field is in

Description

string mysql_field_table(int result, int field_offset);
Get the table name for field. For downward compatibility mysql_fieldtable() can also be used.

mysql_field_type

mysql_field_type -- Get the type of the specified field in a result

Description

string mysql_field_type(int result, int field_offset);
mysql_field_type() is similar to the mysql_field_name() function. The arguments are identical, but the field type is returned. This will be one of "int", "real", "string", "blob", or others as detailed in the MySQL documentation.
Example 1. mysql field types
<?php 
mysql_connect("localhost:3306");
mysql_select_db("wisconsin");
$result = mysql_query("SELECT * FROM onek");
$fields = mysql_num_fields($result);
$rows   = mysql_num_rows($result);
$i = 0;
$table = mysql_field_table($result, $i);
echo "Your '".$table."' table has ".$fields." fields and ".$rows." records <BR>";
echo "The table has the following fields <BR>"; 
while ($i < $fields) {
    $type  = mysql_field_type  ($result, $i);
    $name  = mysql_field_name  ($result, $i);
    $len   = mysql_field_len   ($result, $i);
    $flags = mysql_field_flags ($result, $i);
    echo $type." ".$name." ".$len." ".$flags."<BR>";
    $i++;
}
mysql_close();
?>

For downward compatibility mysql_fieldtype() can also be used.

mysql_field_flags

mysql_field_flags -- Get the flags associated with the specified field in a result

Description

string mysql_field_flags(int result, int field_offset);
mysql_field_flags() returns the field flags of the specified field. The flags are reported as a single word per flag separated by a single space, so that you can split the returned value using explode().

The following flags are reported, if your version of MySQL is current enough to support them: "not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp".

For downward compatibility mysql_fieldflags() can also be used.

mysql_field_len

mysql_field_len -- Returns the length of the specified field

Description

int mysql_field_len(int result, int field_offset);
mysql_field_len() returns the length of the specified field. For downward compatibility mysql_fieldlen() can also be used.

mysql_free_result

mysql_free_result -- Free result memory

Description

int mysql_free_result(int result);
mysql_free_result() only needs to be called if you are worried about using too much memory while your script is running. All associated result memory for the specified result identifier will automatically be freed.

For downward compatibility mysql_freeresult() can also be used.

mysql_insert_id

mysql_insert_id -- Get the id generated from the previous INSERT operation

Description

int mysql_insert_id(int [link_identifier] );
mysql_insert_id() returns the ID generated for an AUTO_INCREMENTED field. This function takes no arguments. It will return the auto-generated ID returned by the last INSERT query performed.

mysql_list_fields

mysql_list_fields -- List MySQL result fields

Description

int mysql_list_fields(string database_name, string table_name, int [link_identifier] );
mysql_list_fields() retrieves information about the given tablename. Arguments are the database name and the table name. A result pointer is returned which can be used with mysql_field_flags(), mysql_field_len(), mysql_field_name(), and mysql_field_type().

A result identifier is a positive integer. The function returns -1 if a error occurs. A string describing the error will be placed in $phperrmsg, and unless the function was called as @mysql() then this error string will also be printed out.

For downward compatibility mysql_listfields() can also be used.

mysql_list_dbs

mysql_list_dbs -- List databases available on on MySQL server

Description

int mysql_list_dbs(int [link_identifier] );
mysql_list_dbs() will return a result pointer containing the databases available from the current mysql daemon. Use the mysql_tablename() function to traverse this result pointer.

For downward compatibility mysql_listdbs() can also be used.

mysql_list_tables

mysql_list_tables -- List tables in a MySQL database

Description

int mysql_list_tables(string database, int [link_identifier] );
mysql_list_tables() takes a database name and result pointer much like the mysql_db_query() function. The mysql_tablename() function should be used to extract the actual table names from the result pointer.

For downward compatibility mysql_listtables() can also be used.

mysql_num_fields

mysql_num_fields -- Get number of fields in result

Description

int mysql_num_fields(int result);
mysql_num_fields() returns the number of fields in a result set.

See also: mysql_db_query(), mysql_query(), mysql_fetch_field(), mysql_num_rows().

For downward compatibility mysql_numfields() can also be used.

mysql_num_rows

mysql_num_rows -- Get number of rows in result

Description

int mysql_num_rows(int result);
mysql_num_rows() returns the number of rows in a result set.

See also: mysql_db_query(), mysql_query() and, mysql_fetch_row().

For downward compatibility mysql_numrows() can also be used.

mysql_pconnect

mysql_pconnect -- Open a persistent connection to a MySQL Server

Description

int mysql_pconnect(string [hostname] [:port] , string [username] , string [password] );
Returns: A positive MySQL persistent link identifier on success, or false on error

mysql_pconnect() acts very much like mysql_connect() with two major differences.

First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (mysql_close() will not close links established by mysql_pconnect()).

This type of links is therefore called 'persistent'.

mysql_query

mysql_query -- Send an SQL query to MySQL

Description

int mysql_query(string query, int [link_identifier] );
mysql_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If link_identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if mysql_connect() was called, and use it.

This function returns TRUE or FALSE to indicate the success of UPDATE, INSERT, and DELETE queries. For SELECT queries it returns a new result identifier. The resources used by the query can then be freed by calling mysql_free_result().

See also: mysql_db_query(), mysql_select_db(), and mysql_connect().

mysql_result

mysql_result -- Get result data

Description

int mysql_result(int result, int row, mixed field);
mysql_result() returns the contents of one cell from a MySQL result set. The field argument can be the field's offset, or the field's name, or the field's table dot field's name (fieldname.tablename). If the column name has been aliased ('select foo as bar from...'), use the alias instead of the column name.

When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than mysql_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

Calls mysql_result() should not be mixed with calls to other functions that deal with the result set.

Recommended high-performance alternatives: mysql_fetch_row(), mysql_fetch_array(), and mysql_fetch_object().

mysql_select_db

mysql_select_db -- Select a MySQL database

Description

int mysql_select_db(string database_name, int [link_identifier] );
Returns: true on success, false on error

mysql_select_db() sets the current active database on the server that's associated with the specified link identifier. If no link identifier is specified, the last opened link is assumed. If no link is open, the function will try to establish a link as if mysql_connect() was called, and use it.

Every subsequent call to mysql_query() will be made on the active database.

See also: mysql_connect(), mysql_pconnect(), and mysql_query()

For downward compatibility mysql_selectdb() can also be used.

mysql_tablename

mysql_tablename -- get table name of field

Description

string mysql_tablename(int result, int i);
mysql_tablename() takes a result pointer returned by the mysql_list_tables() function as well as an integer index and returns the name of a table. The mysql_num_rows() function may be used to determine the number of tables in the result pointer.
Example 1. mysql_tablename() example
<?php 
mysql_connect ("localhost:3306");
$result = mysql_listtables ("wisconsin");
$i = 0;
while ($i < mysql_num_rows ($result)) {
    $tb_names[$i] = mysql_tablename ($result, $i);
    echo $tb_names[$i] . "<BR>";
    $i++;
}
?>

XXXIII. Sybase Functions

Table of Contents
sybase_affected_rows get number of affected rows in last query
sybase_close close Sybase connection
sybase_connect open Sybase server connection
sybase_data_seek move internal row pointer
sybase_fetch_array fetch row as array
sybase_fetch_field get field information
sybase_fetch_object fetch row as object
sybase_fetch_row get row as enumerated array
sybase_field_seek set field offset
sybase_free_result free result memory
sybase_num_fields get number of fields in result
sybase_num_rows get number of rows in result
sybase_pconnect open persistent Sybase connection
sybase_query send Sybase query
sybase_result get result data
sybase_select_db select Sybase database

sybase_affected_rows

sybase_affected_rows -- get number of affected rows in last query

Description

int sybase_affected_rows(int [link_identifier] );
Returns: The number of affected rows by the last query.

sybase_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query on the server associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

This command is not effective for SELECT statements, only on statements which modify records. To retrieve the number of rows returned from a SELECT, use sybase_num_rows().

sybase_close

sybase_close -- close Sybase connection

Description

int sybase_close(int link_identifier);
Returns: true on success, false on error

sybase_close() closes the link to a Sybase database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

sybase_close() will not close persistent links generated by sybase_pconnect().

See also: sybase_connect(), sybase_pconnect().

sybase_connect

sybase_connect -- open Sybase server connection

Description

int sybase_connect(string servername, string username, string password);
Returns: A positive Sybase link identifier on success, or false on error.

sybase_connect() establishes a connection to a Sybase server. The servername argument has to be a valid servername that is defined in the 'interfaces' file.

In case a second call is made to sybase_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling sybase_close().

See also sybase_pconnect(), sybase_close().

sybase_data_seek

sybase_data_seek -- move internal row pointer

Description

int sybase_data_seek(int result_identifier, int row_number);
Returns: true on success, false on failure

sybase_data_seek() moves the internal row pointer of the Sybase result associated with the specified result identifier to pointer to the specifyed row number. The next call to sybase_fetch_row() would return that row.

See also: sybase_data_seek().

sybase_fetch_array

sybase_fetch_array -- fetch row as array

Description

int sybase_fetch_array(int result);
Returns: An array that corresponds to the fetched row, or false if there are no more rows.

sybase_fetch_array() is an extended version of sybase_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

An important thing to note is that using sybase_fetch_array() is NOT significantly slower than using sybase_fetch_row(), while it provides a significant added value.

For further details, also see sybase_fetch_row()

sybase_fetch_field

sybase_fetch_field -- get field information

Description

object sybase_fetch_field(int result, int field_offset);
Returns an object containing field information.

sybase_fetch_field() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retreived by sybase_fetch_field() is retreived.

The properties of the object are:

    name - column name. if the column is a result of a function, this property is set to computed#N, where #N is a serial number.

    column_source - the table from which the column was taken

    max_length - maximum length of the column

    numeric - 1 if the column is numeric

See also sybase_field_seek()

sybase_fetch_object

sybase_fetch_object -- fetch row as object

Description

int sybase_fetch_object(int result);
Returns: An object with properties that correspond to the fetched row, or false if there are no more rows.

sybase_fetch_object() is similar to sybase_fetch_array(), with one difference - an object is returned, instead of an array. Indirectly, that means that you can only access the data by the field names, and not by their offsets (numbers are illegal property names).

Speed-wise, the function is identical to sybase_fetch_array(), and almost as quick as sybase_fetch_row() (the difference is insignificant).

See also: sybase_fetch-array() and sybase_fetch-row().

sybase_fetch_row

sybase_fetch_row -- get row as enumerated array

Description

array sybase_fetch_row(int result);
Returns: An array that corresponds to the fetched row, or false if there are no more rows.

sybase_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

Subsequent call to sybase_fetch_rows() would return the next row in the result set, or false if there are no more rows.

See also: sybase_fetch_array(), sybase_fetch_object(), sybase_data_seek(), sybase_fetch_lengths(), and sybase_result().

sybase_field_seek

sybase_field_seek -- set field offset

Description

int sybase_field_seek(int result, int field_offset);
Seeks to the specified field offset. If the next call to sybase_fetch_field() won't include a field offset, this field would be returned.

See also: sybase_fetch_field().

sybase_free_result

sybase_free_result -- free result memory

Description

int sybase_free_result(int result);
sybase_free_result() only needs to be called if you are worried about using too much memory while your script is running. All result memory will automatically be freed when the script, you may call sybase_free_result() with the result identifier as an argument and the associated result memory will be freed.

sybase_num_fields

sybase_num_fields -- get number of fields in result

Description

int sybase_num_fields(int result);
sybase_num_fields() returns the number of fields in a result set.

See also: sybase_db_query(), sybase_query(), sybase_fetch_field(), sybase_num_rows().

sybase_num_rows

sybase_num_rows -- get number of rows in result

Description

int sybase_num_rows(string result);
sybase_num_rows() returns the number of rows in a result set.

See also: sybase_db_query(), sybase_query() and, sybase_fetch_row().

sybase_pconnect

sybase_pconnect -- open persistent Sybase connection

Description

int sybase_pconnect(string servername, string username, string password);
Returns: A positive Sybase persistent link identifier on success, or false on error

sybase_pconnect() acts very much like sybase_connect() with two major differences.

First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (sybase_close() will not close links established by sybase_pconnect()).

This type of links is therefore called 'persistent'.

sybase_query

sybase_query -- send Sybase query

Description

int sybase_query(string query, int link_identifier);
Returns: A positive Sybase result identifier on success, or false on error.

sybase_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if sybase_connect() was called, and use it.

See also: sybase_db_query(), sybase_select_db(), and sybase_connect().

sybase_result

sybase_result -- get result data

Description

int sybase_result(int result, int i, mixed field);
Returns: The contents of the cell at the row and offset in the specified Sybase result set.

sybase_result() returns the contents of one cell from a Sybase result set. The field argument can be the field's offset, or the field's name, or the field's table dot field's name (fieldname.tablename). If the column name has been aliased ('select foo as bar from...'), use the alias instead of the column name.

When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than sybase_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

Recommended high-performance alternatives: sybase_fetch_row(), sybase_fetch_array(), and sybase_fetch_object().

sybase_select_db

sybase_select_db -- select Sybase database

Description

int sybase_select_db(string database_name, int link_identifier);
Returns: true on success, false on error

sybase_select_db() sets the current active database on the server that's associated with the specified link identifier. If no link identifier is specified, the last opened link is assumed. If no link is open, the function will try to establish a link as if sybase_connect() was called, and use it.

Every subsequent call to sybase_query() will be made on the active database.

See also: sybase_connect(), sybase_pconnect(), and sybase_query()

XXXIV. Network Functions

Table of Contents
fsockopen Open Internet or Unix domain socket connection.
pfsockopen Open persistent Internet or Unix domain socket connection.
set_socket_blocking Set blocking/non-blocking mode on a socket
gethostbyaddr Get the Internet host name corresponding to a given IP address.
gethostbyname Get the IP address corresponding to a given Internet host name.
gethostbynamel Get a list of IP addresses corresponding to a given Internet host name.
checkdnsrr Check DNS records corresponding to a given Internet host name or IP address.
getmxrr Get MX records corresponding to a given Internet host name.
openlog open connection to system logger
syslog generate a system log message
closelog close connection to system logger
debugger_on enable internal PHP debugger
debugger_off disable internal PHP debugger

fsockopen

fsockopen -- Open Internet or Unix domain socket connection.

Description

int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
Initiates a stream connection in the Internet (AF_INET) or Unix (AF_UNIX) domain. For the Internet domain, it will open a TCP socket connection to hostname on port port. For the Unix domain, hostname will be used as the path to the socket, port must be set to 0 in this case. The optional timeout can be used to set a timeout in seconds for the connect system call.

fsockopen() returns a file pointer which may be used together with the other file functions (such as fgets(), fgetss(), fputs(), fclose(), feof()).

If the call fails, it will return false and if the optional errno and errstr arguments are present they will be set to indicate the actual system level error that occurred on the system-level connect() call. If the returned errno is 0 and the function returned false, it is an indication that the error occurred before the connect() call. This is most likely due to a problem initializing the socket. Note that the errno and errstr arguments must be passed by reference.

Depending on the environment, the Unix domain or the optional connect timeout may not be available.

The socket will by default be opened in blocking mode. You can switch it to non-blocking mode by using set_socket_blocking().
Example 1. fsockopen example
$fp = fsockopen("www.php.net", 80, &$errno, &$errstr, 30);
if(!$fp) {
        echo "$errstr ($errno)<br>\n";
} else {
        fputs($fp,"GET / HTTP/1.0\n\n");
        while(!feof($fp)) {
                echo fgets($fp,128);
        }
        fclose($fp);
}
          
See also: pfsockopen()

pfsockopen

pfsockopen -- Open persistent Internet or Unix domain socket connection.

Description

int pfsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
This function behaves exactly as fsockopen() with the difference that the connection is not closed after the script finishes. It is the persistent version of fsockopen().

set_socket_blocking

set_socket_blocking -- Set blocking/non-blocking mode on a socket

Description

int set_socket_blocking(int socket descriptor, int mode);
If mode is false, the given socket descriptor will be switched to non-blocking mode, and if true, it will be switched to blocking mode. This affects calls like fgets() that read from the socket. In non-blocking mode an fgets() call will always return right away while in blocking mode it will wait for data to become available on the socket.

gethostbyaddr

gethostbyaddr -- Get the Internet host name corresponding to a given IP address.

Description

string gethostbyaddr(string ip_address);
Returns the host name of the Internet host specified by ip_address. If an error occurs, returns ip_address.

See also gethostbyname().

gethostbyname

gethostbyname -- Get the IP address corresponding to a given Internet host name.

Description

string gethostbyname(string hostname);
Returns the IP address of the Internet host specified by hostname.

See also gethostbyaddr().

gethostbynamel

gethostbynamel -- Get a list of IP addresses corresponding to a given Internet host name.

Description

array gethostbynamel(string hostname);
Returns a list of IP addresses to which the Internet host specified by hostname resolves.

See also gethostbyname(), gethostbyaddr(), checkdnsrr(), getmxrr(), and the named(8) manual page.

checkdnsrr

checkdnsrr -- Check DNS records corresponding to a given Internet host name or IP address.

Description

int checkdnsrr(string host, string [type]);
Searches DNS for records of type type corresponding to host. Returns true if any records are found; returns false if no records were found or if an error occurred.

type may be any one of: A, MX, NS, SOA, PTR, CNAME, or ANY. The default is MX.

host may either be the IP address in dotted-quad notation or the host name.

See also getmxrr(), gethostbyaddr(), gethostbyname(), gethostbynamel(), and the named(8) manual page.

getmxrr

getmxrr -- Get MX records corresponding to a given Internet host name.

Description

int getmxrr(string hostname, array mxhosts, array [weight]);
Searches DNS for MX records corresponding to hostname. Returns true if any records are found; returns false if no records were found or if an error occurred.

A list of the MX records found is placed into the array mxhosts. If the weight array is given, it will be filled with the weight information gathered.

See also checkdnsrr(), gethostbyname(), gethostbynamel(), gethostbyaddr(), and the named(8) manual page.

openlog

openlog -- open connection to system logger

Description

int openlog(string ident, int option, int facility);
openlog() opens a connection to the system logger for a program. The string ident is added to each message. Values for option and facility are given in the next section. The use of openlog() is optional; It will automatically be called by syslog() if necessary, in which case ident will default to false. See also syslog() and closelog().

syslog

syslog -- generate a system log message

Description

int syslog(int priority, string message);
syslog() generates a log message that will be distributed by the system logger. priority is a combination of the facility and the level, values for which are given in the next section. The remaining argument is the message to send, except that the two characters %m will be replaced by the error message string (strerror) corresponding to the present value of errno.

More information on the syslog facilities can be found in the man pages for syslog on Unix machines.

On Windows NT, the syslog service is emulated using the Event Log.

closelog

closelog -- close connection to system logger

Description

int closelog(void);
closelog() closes the descriptor being used to write to the system logger. The use of closelog() is optional.

debugger_on

debugger_on -- enable internal PHP debugger

Description

int debugger_on(string address);
Enables the internal PHP debugger, connecting it to address. The debugger is still under development.

debugger_off

debugger_off -- disable internal PHP debugger

Description

int debugger_off(void);
Disables the internal PHP debugger. The debugger is still under development.

XXXV. NIS Functions

NIS (formerly called Yellow Pages) allows network management of important administrative files (e.g. the password file). For more information refer to the NIS manpage and Introduction to YP/NIS. There is also a book called Managing NFS and NIS by Hal Stern.

To get these functions to work, you have to configure PHP with --with-yp.

Table of Contents
yp_get_default_domain Fetches the machines default NIS domain.
yp_order Returns the order number for a map.
yp_master Returns the machine name of the master NIS server for a map.
yp_match Returns the mached line
yp_first Returns the first key-value pair from the named map.
yp_next Returns the next key-value pair in the named map.
yp_errno Returns the error code of the previous operation
yp_err_string Returns the error string associated with the previous operation.

yp_get_default_domain

yp_get_default_domain -- Fetches the machines default NIS domain.

Description

int yp_get_default_domain(void );
yp_get_default_domain() returns the default domain of the node or FALSE. Can be used as the domain parameter for successive NIS calls.

A NIS domain can be described a group of NIS maps. Every host that needs to look up information binds itself to a certain domain. Refer to the documents mentioned at the beginning for more detailed information.
Example 1. Example for the default domain
<?php
    $domain = yp_get_default_domain();

    if(!$domain) {
        echo yp_errno() . ": " . yp_err_string();
    }

    echo "Default NIS domain is: " . $domain;
?>
      

See also: yp_errno and yp_err_string

yp_order

yp_order -- Returns the order number for a map.

Description

int yp_order(string domain, string map);
yp_order() returns the order number for a map or FALSE.
Example 1. Example for the NIS order
<?php
    $number = yp_order($domain,$mapname);

    if(!$number) {
        echo yp_errno() . ": " . yp_err_string();
    }

    echo "Order number for this map is: " . $order;
?>
      

See also: yp_get_default_domain yp_errno and yp_err_string

yp_master

yp_master -- Returns the machine name of the master NIS server for a map.

Description

string yp_master(string domain, string map);
yp_master() returns the machine name of the master NIS server for a map.
Example 1. Example for the NIS master
<?php
    $number = yp_master($domain, $mapname);

    if(!$number) {
        echo yp_errno() . ": " . yp_err_string();
    }

    echo "Master for this map is: " . $master;
?>
      

See also: yp_get_default_domain yp_errno and yp_err_string

yp_match

yp_match -- Returns the mached line

Description

string yp_match(string domain, string map, string key);
yp_match() returns the value associated with the passed key out of the specified map or FALSE. This key must be exact.
Example 1. Example for NIS match
<?php
    $entry = yp_match($domain, "passwd.byname", "joe");

    if(!$entry) {
        echo yp_errno() . ": " . yp_err_string();
    }

    echo "Matched entry is: " . $entry;
?>
      

In this case this could be: joe:##joe:11111:100:Joe User:/home/j/joe:/usr/local/bin/bash

See also: yp_get_default_domain yp_errno and yp_err_string

yp_first

yp_first -- Returns the first key-value pair from the named map.

Description

string[] yp_first(string domain, string map);
yp_first() returns the first key-value pair from the named map in the named domain, otherwise FALSE.
Example 1. Example for the NIS first
<?php
    $entry = yp_first($domain, "passwd.byname");

    if(!$entry) {
        echo yp_errno() . ": " . yp_err_string();
    }

    $key = key($entry);
    echo "First entry in this map has key " . $key 
          . " and value " . $entry[$key];
?>
      

See also: yp_get_default_domain yp_errno and yp_err_string

yp_next

yp_next -- Returns the next key-value pair in the named map.

Description

string[] yp_next(string domain, string map, string key);
yp_next() returns the next key-value pair in the named map after the specified key or FALSE.
Example 1. Example for NIS next
<?php
    $entry = yp_next($domain, "passwd.byname", "joe");

    if(!$entry) {
        echo yp_errno() . ": " . yp_err_string();
    }

    $key = key($entry);

    echo "The next entry after joe has key " . $key 
          . " and value " . $entry[$key];
?>
      

See also: yp_get_default_domain, yp_errno and yp_err_string

yp_errno

yp_errno -- Returns the error code of the previous operation

Description

int yp_errno();
yp_errno() returns the error code of the previous operation.

Possible errors are:
 
1 args to function are bad
2 RPC failure - domain has been unbound
3 can't bind to server on this domain
4 no such map in server's domain
5 no such key in map
6 internal yp server or client error
7 resource allocation failure
8 no more records in map database
9 can't communicate with portmapper
10 can't communicate with ypbind
11 can't communicate with ypserv
12 local domain name not set
13 yp database is bad
14 yp version mismatch
15 access violation
16 database busy

See also: yp_err_string

yp_err_string

yp_err_string -- Returns the error string associated with the previous operation.

Description

string yp_err_string(void );
yp_err_string() returns the error message associated with the previous operation. Useful to indicate what exactly went wrong.
Example 1. Example for NIS errors
<?php
    echo "Error: " . yp_err_string();
?>
      

See also: yp_errno

XXXVI. ODBC Functions

Table of Contents
odbc_autocommit Toggle autocommit behaviour
odbc_binmode handling of binary column data
odbc_close Close an ODBC connection
odbc_close_all Close all ODBC connections
odbc_commit Commit an ODBC transaction
odbc_connect Connect to a datasource
odbc_cursor Get cursorname
odbc_do synonym for odbc_exec()
odbc_exec Prepare and execute a SQL statement
odbc_execute execute a prepared statement
odbc_fetch_into Fetch one result row into array
odbc_fetch_row Fetch a row
odbc_field_name Get the columnname
odbc_field_type datatype of a field
odbc_field_len get the Length of a field
odbc_free_result free resources associated with a result
odbc_longreadlen handling of LONG columns
odbc_num_fields number of columns in a result
odbc_pconnect Open a persistent database connection
odbc_prepare Prepares a statement for execution
odbc_num_rows Number of rows in a result
odbc_result get result data
odbc_result_all Print result as HTML table
odbc_rollback Rollback a transaction
odbc_setoption Adjust ODBC settings. Returns false if an error occurs, otherwise true.

odbc_autocommit

odbc_autocommit -- Toggle autocommit behaviour

Description

int odbc_autocommit(int connection_id, int [OnOff]);
Without the OnOff parameter, this function returns auto-commit status for connection_id. True is returned if auto-commit is on, false if it is off or an error occurs.

If OnOff is true, auto-commit is enabled, if it is false auto-commit is disabled. Returns true on success, false on failure.

By default, auto-commit is on for a connection. Disabling auto-commit is equivalent with starting a transaction.

See also odbc_commit() and odbc_rollback().

odbc_binmode

odbc_binmode -- handling of binary column data

Description

int odbc_binmode(int result_id, int mode);
(ODBC SQL types affected: BINARY, VARBINARY, LONGVARBINARY)
    ODBC_BINMODE_PASSTHRU: Passthru BINARY data

    ODBC_BINMODE_RETURN: Return as is

    ODBC_BINMODE_CONVERT: Convert to char and return

When binary SQL data is converted to character C data, each byte (8 bits) of source data is represented as two ASCII characters. These characters are the ASCII character representation of the number in its hexadecimal form. For example, a binary 00000001 is converted to "01" and a binary 11111111 is converted to "FF".
Table 1. LONGVARBINARY handling
 
binmode longreadlen result
ODBC_BINMODE_PASSTHRU 0 passthru
ODBC_BINMODE_RETURN 0 passthru
ODBC_BINMODE_CONVERT 0 passthru
ODBC_BINMODE_PASSTHRU 0 passthru
ODBC_BINMODE_PASSTHRU >0 passthru
ODBC_BINMODE_RETURN >0 return as is
ODBC_BINMODE_CONVERT >0 return as char
If odbc_fetch_into() is used, passthru means that an empty string is returned for these columns.

If result_id is 0, the settings apply as default for new results.

Note: Default for longreadlen is 4096 and binmode defaults to ODBC_BINMODE_RETURN. Handling of binary long columns is also affected by odbc_longreadlen()

odbc_close

odbc_close -- Close an ODBC connection

Description

void odbc_close(int connection_id);
odbc_close() will close down the connection to the database server associated with the given connection identifier.
Note: This function will fail if there are open transactions on this connection. The connection will remain open in this case.

odbc_close_all

odbc_close_all -- Close all ODBC connections

Description

void odbc_close_all(void);
odbc_close_all() will close down all connections to database server(s).
Note: This function will fail if there are open transactions on a connection. This connection will remain open in this case.

odbc_commit

odbc_commit -- Commit an ODBC transaction

Description

int odbc_commit(int connection_id);
Returns: true on success, false on failure. All pending transactions on connection_id are committed.

odbc_connect

odbc_connect -- Connect to a datasource

Description

int odbc_connect(string dsn, string user, string password, int [cursor_type]);
Returns an ODBC connection id or 0 (false) on error.

The connection id returned by this functions is needed by other ODBC functions. You can have multiple connections open at once. The optional fourth parameter sets the type of cursor to be used for this connection. This parameter is not normally needed, but can be useful for working around problems with some ODBC drivers.

With some ODBC drivers, executing a complex stored procedure may fail with an error similar to: "Cannot open a cursor on a stored procedure that has anything other than a single select statement in it". Using SQL_CUR_USE_ODBC may avoid that error. Also, some drivers don't support the optional row_number parameter in odbc_fetch_row(). SQL_CUR_USE_ODBC might help in that case, too.

The following constants are defined for cursortype:

    SQL_CUR_USE_IF_NEEDED

    SQL_CUR_USE_ODBC

    SQL_CUR_USE_DRIVER

    SQL_CUR_DEFAULT

For persistent connections see odbc_pconnect().

odbc_cursor

odbc_cursor -- Get cursorname

Description

string odbc_cursor(int result_id);
odbc_cursor will return a cursorname for the given result_id.

odbc_do

odbc_do -- synonym for odbc_exec()

Description

string odbc_do(int conn_id, string query);
odbc_do will execute a query on the given connection

odbc_exec

odbc_exec -- Prepare and execute a SQL statement

Description

int odbc_exec(int connection_id, string query_string);
Returns false on error. Returns an ODBC result identifier if the SQL command was executed successfully.

odbc_exec() will send an SQL statement to the database server specified by connection_id. This parameter must be a valid identifier returned by odbc_connect() or odbc_pconnect().

See also: odbc_prepare() and odbc_execute() for multiple execution of SQL statements.

odbc_execute

odbc_execute -- execute a prepared statement

Description

int odbc_execute(int result_id, array [parameters_array]);
Executes a statement prepared with odbc_prepare(). Returns true on successful execution, false otherwise. The array arameters_array only needs to be given if you really have parameters in your statement.

odbc_fetch_into

odbc_fetch_into -- Fetch one result row into array

Description

int odbc_fetch_into(int result_id, int [rownumber], array result_array);
Returns the number of columns in the result; false on error. result_array must be passed by reference, but it can be of any type since it will be converted to type array. The array will contain the column values starting at array index 0.

odbc_fetch_row

odbc_fetch_row -- Fetch a row

Description

int odbc_fetch_row(int result_id, int [row_number]);
If odbc_fetch_row() was succesful (there was a row), true is returned. If there are no more rows, false is returned.

odbc_fetch_row() fetches a row of the data that was returned by odbc_do() / odbc_exec(). After odbc_fetch_row() is called, the fields of that row can be accessed with odbc_result().

If row_number is not specified, odbc_fetch_row() will try to fetch the next row in the result set. Calls to odbc_fetch_row() with and without row_number can be mixed.

To step through the result more than once, you can call odbc_fetch_row() with row_number 1, and then continue doing odbc_fetch_row() without row_number to review the result. If a driver doesn't support fetching rows by number, the row_number parameter is ignored.

odbc_field_name

odbc_field_name -- Get the columnname

Description

string odbc_fieldname(int result_id, int field_number);
odbc_field_name() will return the name of the field occupying the given column number in the given ODBC result identifier. Field numbering starts at 1. false is returned on error.

odbc_field_type

odbc_field_type -- datatype of a field

Description

string odbc_field_type(int result_id, int field_number);
odbc_field_type() will return the SQL type of the field referecend by number in the given ODBC result identifier. Field numbering starts at 1.

odbc_field_len

odbc_field_len -- get the Length of a field

Description

int odbc_field_len(int result_id, int field_number);
odbc_field_len() will return the length of the field referecend by number in the given ODBC result identifier. Field numbering starts at 1.

odbc_free_result

odbc_free_result -- free resources associated with a result

Description

int odbc_free_result(int result_id);
Always returns true.

odbc_free_result() only needs to be called if you are worried about using too much memory while your script is running. All result memory will automatically be freed when the script is finished. But, if you are sure you are not going to need the result data anymore in a script, you may call odbc_free_result(), and the memory associated with result_id will be freed.

Note: If auto-commit is disabled (see odbc_autocommit()) and you call odbc_free_result() before commiting, all pending transactions are rolled back.

odbc_longreadlen

odbc_longreadlen -- handling of LONG columns

Description

int odbc_longreadlen(int result_id, int length);
(ODBC SQL types affected: LONG, LONGVARBINARY) The number of bytes returned to PHP is controled by the parameter length. If it is set to 0, Long column data is passed thru to the client.
Note: Handling of LONGVARBINARY columns is also affected by odbc_binmode()

odbc_num_fields

odbc_num_fields -- number of columns in a result

Description

int odbc_num_fields(int result_id);
odbc_num_fields() will return the number of fields (columns) in an ODBC result. This function will return -1 on error. The argument is a valid result identifier returned by odbc_exec().

odbc_pconnect

odbc_pconnect -- Open a persistent database connection

Description

int odbc_pconnect(string dsn, string user, string password, int [cursor_type]);
Returns an ODBC connection id or 0 (false) on error. This function is much like odbc_connect(), except that the connection is not really closed when the script has finished. Future requests for a connection with the same dsn, user, password combination (via odbc_connect() and odbc_pconnect()) can reuse the persistent connection.
Note: Persistent connections have no effect if PHP is used as a CGI program.
For information about the optional cursor_type parameter see the odbc_connect() function. For more information on persistent connections, refer to the PHP3 FAQ.

odbc_prepare

odbc_prepare -- Prepares a statement for execution

Description

int odbc_prepare(int connection_id, string query_string);
Returns false on error.

Returns an ODBC result identifier if the SQL command was prepared successfully. The result identifier can be used later to execute the statement with odbc_execute().

odbc_num_rows

odbc_num_rows -- Number of rows in a result

Description

int odbc_num_rows(int result_id);
odbc_num_rows() will return the number of rows in an ODBC result. This function will return -1 on error. For INSERT, UPDATE and DELETE statements odbc_num_rows() returns the number of rows affected. For a SELECT clause this can be the number of rows available.

Note: Using odbc_num_rows() to determine the number of rows available after a SELECT will return -1 with many drivers.

odbc_result

odbc_result -- get result data

Description

string odbc_result(int result_id, mixed field);
Returns the contents of the field.

field can either be an integer containing the column number of the field you want; or it can be a string containing the name of the field. For example:

     $item_3 = odbc_result($Query_ID, 3 );
     $item_val = odbc_result($Query_ID, "val");
The first call to odbc_result() returns the value of the third field in the current record of the query result. The second function call to odbc_result() returns the value of the field whose field name is "val" in the current record of the query result. An error occurs if a column number parameter for a field is less than one or exceeds the number of columns (or fields) in the current record. Similarly, an error occurs if a field with a name that is not one of the fieldnames of the table(s) that is(are) being queried.

Field indices start from 1. Regarding the way binary or long column data is returned refer to odbc_binmode () and odbc_longreadlen().

odbc_result_all

odbc_result_all -- Print result as HTML table

Description

int odbc_result_all(int result_id, string [format]);
Returns the number of rows in the result or false on error.

odbc_result_all() will print all rows from a result identifier produced by odbc_exec(). The result is printed in HTML table format. With the optional string argument format, additional overall table formatting can be done.

odbc_rollback

odbc_rollback -- Rollback a transaction

Description

int odbc_rollback(int connection_id);
Rolls back all pending statements on connection_id. Returns true on success, false on failure.

odbc_setoption

odbc_setoption -- Adjust ODBC settings. Returns false if an error occurs, otherwise true.

Description

int odbc_setoption(int id, int function, int option, int param);
This function allows fiddling with the ODBC options for a particular connection or query result. It was written to help find work arounds to problems in quirky ODBC drivers. You should probably only use this function if you are an ODBC programmer and understand the effects the various options will have. You will certainly need a good ODBC reference to explain all the different options and values that can be used. Different driver versions support different options.

Because the effects may vary depending on the ODBC driver, use of this function in scripts to be made publicly available is strongly discouraged. Also, some ODBC options are not available to this function because they must be set before the connection is established or the query is prepared. However, if on a particular job it can make PHP work so your boss doesn't tell you to use a commercial product, that's all that really matters.

Id is a connection id or result id on which to change the settings.For SQLSetConnectOption(), this is a connection id. For SQLSetStmtOption(), this is a result id.

function is the ODBC function to use. The value should be 1 for SQLSetConnectOption() and 2 for SQLSetStmtOption().

Parmeter option is the option to set.

Parameter param is the value for the given option.
Example 1. ODBC Setoption Examples
// 1. Option 102 of SQLSetConnectOption() is SQL_AUTOCOMMIT.
//    Value 1 of SQL_AUTOCOMMIT is SQL_AUTOCOMMIT_ON.
//    This example has the same effect as
//    odbc_autocommit($conn, true);

odbc_setoption ($conn, 1, 102, 1);

// 2. Option 0 of SQLSetStmtOption() is SQL_QUERY_TIMEOUT.
//    This example sets the query to timeout after 30 seconds.

$result = odbc_prepare ($conn, $sql);
odbc_setoption ($result, 2, 0, 30);
odbc_execute ($result);
       

XXXVII. Oracle 8 functions

These functions allow you to access Oracle8 and Oracle7 databases. It uses the Oracle8 Call-Interface (OCI8). You will need the Oracle8 client libraries to use this driver.

This driver is more flexible that the normal PHP3 Ora_ driver. It supports binding of global and local PHP3 variables to Oracle placeholders, has full LOB, FILE and ROWID support and allows you to use user-supplied define variables.

Table of Contents
OCIDefineByName Use a PHP variable for the define-step during a SELECT
OCIBindByName Bind a PHP variable to an Oracle Placeholder
OCILogon Establishes a connection to Oracle
OCILogOff Disconnects from Oracle
OCIExecute Execute a statement
OCICommit Commits outstanding transactions
OCIRollback Rolls back outstanding transactions
OCINumRows Gets the number of affectend rows
OCIResult Returns coulumn value for fetched row
OCIFetch Fetches the next row into result-buffer
OCIFetchInto Fetches the next row into result-array
OCIColumnIsNULL test whether a result column is NULL
OCIColumnSize return result column size

OCIDefineByName

OCIDefineByName -- Use a PHP variable for the define-step during a SELECT

Description

int OCIDefineByName(int stmt, string Column-Name, mixed &variable, int [type]);
OCIDefineByName() uses fetches SQL-Columns into user-defined PHP-Variables. Be careful that Oracle user ALL-UPPERCASE column-names, whereby in your select you can also write lower-case. OCIDefineByName() expects the Column-Name to be in uppercase. If you define a variable that doesn't exists in you select statement, no error will be given!

If you need to define an abstract Datatype (LOB/ROWID/BFILE) you need to allocate it first using OCINewDescriptor() function. See also the OCIBindByName() function.
 
Example 1. OCIDefineByName
<?php
/* OCIDefineByPos example thies@digicol.de (980219) */

$conn = OCILogon("scott","tiger");

$stmt = OCIParse($conn,"select empno, ename from emp");

/* the define MUST be done BEFORE ociexecute! */

OCIDefineByName($stmt,"EMPNO",&$empno);
OCIDefineByName($stmt,"ENAME",&$ename);

OCIExecute($stmt);

while (OCIFetch($stmt)) {
    echo "empno:".$empno."\n";
    echo "ename:".$ename."\n";
}

OCIFreeStatement($stmt);
OCILogoff($conn);
?>

OCIBindByName

OCIBindByName -- Bind a PHP variable to an Oracle Placeholder

Description

int OCIBindByName(int stmt, string ph_name, mixed &variable, intlength, int [type]);
OCIBindByName() binds the PHP variable variable to the Oracle placeholder ph_name. Whether it will be used for input or output will be determined run-time, and the necessary storage space will be allocated. The length paramter sets the maximum length for the bind. If you set length to -1 OCIBindByName() will use the current length of variable to set the maximum length.

If you need to bind an abstract Datatype (LOB/ROWID/BFILE) you need to allocate it first using OCINewDescriptor() function. The length is not used for abstract Datatypes and should be set to -1. The type variable tells oracle, what kind of descriptor we want to use. Possible values are: OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) and OCI_B_ROWID (ROWID).
 
Example 1. OCIDefineByName
<?php
/* OCIBindByPos example thies@digicol.de (980221)

  inserts 3 resords into emp, and uses the ROWID for updating the 
  records just after the insert.
*/

$conn = OCILogon("scott","tiger");

$stmt = OCIParse($conn,"insert into emp (empno, ename) ".
                                           "values (:empno,:ename) ".
                                           "returning ROWID into :rid");

$data = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim");

$rowid = OCINewDescriptor($conn,OCI_D_ROWID);

OCIBindByName($stmt,":empno",&$empno,32);
OCIBindByName($stmt,":ename",&$ename,32);
OCIBindByName($stmt,":rid",&$rowid,-1,OCI_B_ROWID);

$update = OCIParse($conn,"update emp set sal = :sal where ROWID = :rid");
OCIBindByName($update,":rid",&$rowid,-1,OCI_B_ROWID);
OCIBindByName($update,":sal",&$sal,32);

$sal = 10000;

while (list($empno,$ename) = each($data)) {
        OCIExecute($stmt);
        OCIExecute($update);
} 

$rowid->free();

OCIFreeStatement($update);
OCIFreeStatement($stmt);

$stmt = OCIParse($conn,"select * from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
while (OCIFetchInto($stmt,&$arr,OCI_ASSOC)) {
        var_dump($arr);
}
OCIFreeStatement($stmt);

/* delete our "junk" from the emp table.... */
$stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
OCIFreeStatement($stmt);

OCILogoff($conn);
?>

OCILogon

OCILogon -- Establishes a connection to Oracle

Description

int OCILogon(string username, string password, string [OCACLE_SID]);
OCILogon() returns an connection identified needed for most other OCI calls.

OCILogOff

OCILogOff -- Disconnects from Oracle

Description

int OCILogOff(int connection);
OCILogOff() closes an Oracle connection.

OCIExecute

OCIExecute -- Execute a statement

Description

int OCIExecute(int statement, int [mode]);
OCIExecute() executes a previously parsed statement. (see OCIParse()). The optional mode allows you to specify the execution-mode (default is OCI_COMMIT_ON_SUCCESS). If you don't want statements to be commited automaticly specify OCI_DEFAULT as your mode.

OCICommit

OCICommit -- Commits outstanding transactions

Description

int OCICommit(int connection);
OCICommit() commits all outstanding statements for Oracle connection connection.

OCIRollback

OCIRollback -- Rolls back outstanding transactions

Description

int OCIRollback(int connection);
OCICommit() rolls back all outstanding statements for Oracle connection connection.

OCINumRows

OCINumRows -- Gets the number of affectend rows

Description

int OCINumRows(int statement);
OCINumRows() returns the number of rows affected for eg update-statements. This funtions will not tell you the number of rows that a select will return!

OCIResult

OCIResult -- Returns coulumn value for fetched row

Description

int OCIResult(int statement, mixed column);
OCIResult() returns the data for column column in the current row (see OCIFetch()).OCIResult() will return everything as strings except for abstract types (ROWIDs, LOBs and FILEs).

OCIFetch

OCIFetch -- Fetches the next row into result-buffer

Description

int OCIFetch(int statement);
OCIFetch() fetches the next row (for SELECT statements) into the internal result-buffer.

OCIFetchInto

OCIFetchInto -- Fetches the next row into result-array

Description

int OCIFetchInto(array &result, int [mode]);
OCIFetchInto() fetches the next row (for SELECT statements) into the result array. OCIFetchInto() will overwrite the previous content of result. By default result will contain a one-based array of all columns that are not NULL.

The mode parameter allows you to change the default behaviour. You can specify more than one flag by simply addig them up (eg OCI_ASSOC+OCI_RETURN_NULLS). The known flags are:
 
OCI_ASSOC Return an associative array.
OCI_NUM Return an numbered array starting with one. (DEFAULT)
OCI_RETURN_NULLS Return empty columns.
OCI_RETURN_LOBS Return the value of a LOB instead of the desxriptor.

OCIColumnIsNULL

OCIColumnIsNULL -- test whether a result column is NULL

Description

int OCIColumnIsNULL(int stmt, mixed column);
OCIColumnIsNULL() returns true if the returned column col in the result from the statement stmt is NULL. You can either use the column-number (1-Based) or the column-name for the col parameter.

OCIColumnSize

OCIColumnSize -- return result column size

Description

int OCIColumnSize(int stmt, mixed column);
OCIColumnSize() returns the size of the column as given by Oracle. You can either use the column-number (1-Based) or the column-name for the col parameter.

XXXVIII. Oracle functions

Table of Contents
Ora_Bind bind a PHP variable to an Oracle parameter
Ora_Close close an Oracle cursor
Ora_ColumnName get name of Oracle result column
Ora_ColumnType get type of Oracle result column
Ora_Commit commit an Oracle transaction
Ora_CommitOff disable automatic commit
Ora_CommitOn enable automatic commit
Ora_Error get Oracle error message
Ora_ErrorCode get Oracle error code
Ora_Exec execute parsed statement on an Oracle cursor
Ora_Fetch fetch a row of data from a cursor
Ora_GetColumn get data from a fetched row
Ora_Logoff close an Oracle connection
Ora_Logon open an Oracle connection
Ora_Open open an Oracle cursor
Ora_Parse parse an SQL statement
Ora_Rollback roll back transaction

Ora_Bind

Ora_Bind -- bind a PHP variable to an Oracle parameter

Description

int ora_bind(int cursor, string PHP variable name, string SQL parameter name, int length, int [type]);
Returns true if the bind succeeds, otherwise false. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

This function binds the named PHP variable with a SQL parameter. The SQL parameter must be in the form ":name". With the optional type parameter, you can define whether the SQL parameter is an in/out (0, default), in (1) or out (2) parameter. As of PHP 3.0.1, you can use the constants ORA_BIND_INOUT, ORA_BIND_IN and ORA_BIND_OUT instead of the numbers.

ora_bind must be called after ora_parse() and before ora_exec(). Input values can be given by assignment to the bound PHP variables, after calling ora_exec() the bound PHP variables contain the output values if available.

<?php
ora_parse($curs, "declare tmp INTEGER; begin tmp := :in; :out := tmp; :x := 7.77; end;");
ora_bind($curs, "result", ":x", $len, 2);
ora_bind($curs, "input", ":in", 5, 1);
ora_bind($curs, "output", ":out", 5, 2);
$input = 765;
ora_exec($curs);
echo "Result: $result<BR>Out: $output<BR>In: $input";
?>

Ora_Close

Ora_Close -- close an Oracle cursor

Description

int ora_close(int cursor);
Returns true if the close succeeds, otherwise false. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

This function closes a data cursor opened with ora_open().

Ora_ColumnName

Ora_ColumnName -- get name of Oracle result column

Description

string Ora_ColumnName(int cursor, int column);
Returns the name of the field/column column on the cursor cursor. The returned name is in all uppercase letters.

Ora_ColumnType

Ora_ColumnType -- get type of Oracle result column

Description

string Ora_ColumnType(int cursor, int column);
Returns the Oracle data type name of the field/column column on the cursor cursor. The returned type will be one of the following:
 
"VARCHAR2"
"VARCHAR"
"CHAR"
"NUMBER"
"LONG"
"LONG RAW"
"ROWID"
"DATE"
"CURSOR"

Ora_Commit

Ora_Commit -- commit an Oracle transaction

Description

int ora_commit(int conn);
Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions. This function commits an Oracle transaction. A transaction is defined as all the changes on a given connection since the last commit/rollback, autocommit was turned off or when the connection was established.

Ora_CommitOff

Ora_CommitOff -- disable automatic commit

Description

int ora_commitoff(int conn);
Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

This function turns off automatic commit after each ora_exec().

Ora_CommitOn

Ora_CommitOn -- enable automatic commit

Description

int ora_commiton(int conn);
This function turns on automatic commit after each ora_exec() on the given connection.

Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Error

Ora_Error -- get Oracle error message

Description

string Ora_Error(int cursor);
Returns an error message of the form XXX-NNNNN where XXX is where the error comes from and NNNNN identifies the error message.

The cursor parameter can as of PHP 3. 0.6 also be a connection id.

On UNIX versions of Oracle, you can find details about an error message like this: $ oerr ora 00001 00001, 00000, "unique constraint (%s.%s) violated" // *Cause: An update or insert statement attempted to insert a duplicate key // For Trusted ORACLE configured in DBMS MAC mode, you may see // this message if a duplicate entry exists at a different level. // *Action: Either remove the unique restriction or do not insert the key

Ora_ErrorCode

Ora_ErrorCode -- get Oracle error code

Description

int Ora_ErrorCode(int cursor);
Returns the numeric error code of the last executed statement on the specified cursor.

The cursor parameter can as of PHP 3. 0.6 also be a connection id.

Ora_Exec

Ora_Exec -- execute parsed statement on an Oracle cursor

Description

int ora_exec(int cursor);
Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Fetch

Ora_Fetch -- fetch a row of data from a cursor

Description

int ora_fetch(int cursor);
Returns true (a row was fetched) or false (no more rows, or an error occured). If an error occured, details can be retrieved using the ora_error() and ora_errorcode() functions. If there was no error, ora_errorcode() will return 0. Retrieves a row of data from the specified cursor.

Ora_GetColumn

Ora_GetColumn -- get data from a fetched row

Description

mixed ora_getcolumn(int cursor, mixed column);
Returns the column data. If an error occurs, False is returned and ora_errorcode() will return a non-zero value. Note, however, that a test for False on the results from this function may be true in cases where there is not error as well (NULL result, empty string, the number 0, the string "0"). Fetches the data for a column or function result.

Ora_Logoff

Ora_Logoff -- close an Oracle connection

Description

int ora_logoff(int connection);
Returns true on success, False on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions. Logs out the user and disconnects from the server.

Ora_Logon

Ora_Logon -- open an Oracle connection

Description

int ora_logon(string user, string password);
Establishes a connection between PHP and an Oracle database with the given username and password.

Connections can be made using SQL*Net by supplying the TNS name to user like this:

$conn = Ora_Logon("user@TNSNAME", "pass");
If you have character data with non-ASCII characters, you should make sure that NLS_LANG is set in your environment. For server modules, you should set it in the server's environment before starting the server.

Returns a connection index on success, or false on failure. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Open

Ora_Open -- open an Oracle cursor

Description

int ora_open(int connection);
Opens an Oracle cursor associated with connection.

Returns a cursor index or False on failure. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Parse

Ora_Parse -- parse an SQL statement

Description

int ora_parse(int cursor_ind, string sql_statement, int defer);
This function parses an SQL statement or a PL/SQL block and associates it with the given cursor. Returns 0 on success or -1 on error.

Ora_Rollback

Ora_Rollback -- roll back transaction

Description

int ora_rollback(int connection);
This function undoes an Oracle transaction. (See ora_commit() for the definition of a transaction.)

Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

XXXIX. PCRE functions

These functions are intended for work with Perl Compatible Regular Expressions.

The syntax for patterns used in these functions closely resembles Perl. The expression should be enclosed in the delimiters, a forward slash (/), for example. Any character can be used for delimiter as long as it's not alphanumeric or backslash (\). If the delimiter character has to be used in the expression itself, it needs to be escaped by backslash.

The ending delimiter may be followed by various options that affect the matching. See Pattern Options.
Example 1. Examples of valid patterns
    /<\/\w+>/

    |(\d{3})-\d+|Sm

    /^(?i)php[34]/

Example 2. Examples of invalid patterns
    /href='(.*)' - missing ending delimiter

    /\w+\s*\w+/J - unknown option 'J'

    1-\d3-\d3-\d4| - missing starting delimiter 

Table of Contents
preg_match Perform a regular expression match
preg_match_all Perform a global regular expression match
preg_replace Perform a regular expression search and replace
preg_split Split string by a regular expression
Pattern Options describes possible options in regex patterns

preg_match

preg_match -- Perform a regular expression match

Description

int preg_match(string pattern, string subject, array [matches]);
Searches subject for a match to the regular expression given in pattern.

If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that match the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.

Returns true if a match for pattern was found in the subject string, or false if not match was found or an error occurred.
Example 1. Getting the page number out of a string
if (preg_match("/page\s+#(\d+)/i", "Go to page #9.", $parts))
    print "Next page is $parts[1]";
else
    print "Page not found.";
      
See also preg_match_all(), preg_replace(), and preg_split().

preg_match_all

preg_match_all -- Perform a global regular expression match

Description

int preg_match_all(string pattern, string subject, array matches, int [order]);
Searches subject for all matches to the regular expression given in pattern and puts them in matches in the order specified by order.

After the first match is found, the subsequent searches are continued on from end of the last match.

order can be one of two things:

PREG_PATTERN_ORDER


Orders results so that $matches[0] is an array of full pattern matches, $matches[1] is an array of strings matched by the first parenthesized subpattern, and so on.

preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<div align=left>a test</div>", $out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n"
This example will produce:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
So, $out[0] contains array of strings that matched full pattern, and $out[1] contains array of strings enclosed by tags.
PREG_SET_ORDER


Orders results so that $matches[0] is an array of first set of matches, $matches[1] is an array of second set of matches, and so on.

preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<div align=left>a test</div>", $out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n"
This example will produce:
<b>example: </b>, example: 
<div align=left>this is a test</div>, this is a test
In this case, $matches[0] is the first set of matches, and $matches[0][0] has text matched by full pattern, $matches[0][1] has text matched by first subpattern and so on. Similarly, $matches[1] is the second set of matches, etc.
If order is not specified, it is assumed to be PREG_PATTERN_ORDER.

Returns the number of full pattern matches, or false if no match is found or an error occurred.
Example 1. Getting all phone numbers out of some text.
preg_match_all("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
               "Call 555-1212 or 1-800-555-1212", $phones);
      

See also preg_match(), preg_replace(), and preg_split().

preg_replace

preg_replace -- Perform a regular expression search and replace

Description

mixed preg_replace(mixed pattern, mixed replacement, mixed subject);
Searches subject for matches to pattern and replaces them with replacement .

replacement may contain references of the form \\n. Every such reference will be replaced by the text captured by the n'th parenthesized pattern. n can be from 0 to 99, and \\0 refers to the text matched by the whole pattern. Opening parentheses are counted from left to right (starting from 1) to obtain the number of the capturing subpattern.

If no matches are found in subject, then it will be returned unchanged.

Every parameter to preg_replace() can be an array.

If subject is an array, then the search and replace is performed on every entry of subject, and the return value is an array as well.

If pattern and replacement are arrays, then preg_replace() takes a value from each array and uses them to do search and replace on subject. If replacement has fewer values than pattern, then empty string is used for the rest of replacement values. If pattern is an array and replacement is a string; then this replacement string is used for every value of pattern. The converse would not make sense, though.
Example 1. Replacing several values
$patterns = array("/(19|20\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
$replace = array("\\3/\\4/\\1", "$\\1 =");
print preg_replace($patterns, $replace, "{startDate} = 1999-5-27");
      
This example will produce:

      $startDate = 5/27/1999
See also preg_match(), preg_match_all(), and preg_split().

preg_split

preg_split -- Split string by a regular expression

Description

array preg_split(string pattern, string subject, int [limit]);
Returns an array containing substrings of subject split along boundaries matched by pattern.

If limit is specified, then only substrings up to limit are returned.
Example 1. Getting parts of search string
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
      
See also preg_match(), preg_match_all(), and preg_replace().

Pattern Options

Pattern Options -- describes possible options in regex patterns

Description

The current possible PCRE options are listed below. The names in parentheses refer internal PCRE names for these options.
i (PCRE_CASELESS)


If this option is set, letters in the pattern match both upper and lower case letters.

m (PCRE_MULTILINE)


By default, PCRE treats the subject string as consisting of a single "line" of characters (even if it actually contains several newlines). The "start of line" metacharacter (^) matches only at the start of the string, while the "end of line" metacharacter ($) matches only at the end of the string, or before a terminating newline (unless E option is set). This is the same as Perl.

When this option is set, the "start of line" and "end of line" constructs match immediately following or immediately before any newline in the subject string, respectively, as well as at the very start and end. This is equivalent to Perl's /m option. If there are no "\n" characters in a subject string, or no occurrences of ^ or $ in a pattern, setting this option has no effect.

s (PCRE_DOTALL)


If this option is set, a dot metacharater in the pattern matches all characters, including newlines. Without it, newlines are excluded. This option is equivalent to Perl's /s option. A negative class such as [^a] always matches a newline character, independent of the setting of this option.

x (PCRE_EXTENDED)


If this option is set, whitespace data characters in the pattern are totally ignored except when escaped or inside a character class, and characters between an unescaped # outside a character class and the next newline character, inclusive, are also ignored. This is equivalent to Perl's /x option, and makes it possible to include comments inside complicated patterns. Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence (?( which introduces a conditional subpattern.

A (PCRE_ANCHORED)


If this option is set, the pattern is forced to be "anchored", that is, it is constrained to match only at the start of the string which is being searched (the "subject string"). This effect can also be achieved by appropriate constructs in the pattern itself, which is the only way to do it in Perl.

E (PCRE_DOLLAR_ENDONLY)


If this option is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this option, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines). This option is ignored if m option is set. There is no equivalent to this option in Perl.

S


When a pattern is going to be used several times, it is worth spending more time analyzing it in order to speed up the time taken for matching. If this option is set, then this extra analysis is performed. At present, studying a pattern is useful only for non-anchored patterns that do not have a single fixed starting character.

U (PCRE_UNGREEDY)


This option inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by "?". It is not compatible with Perl. It can also be set by a (?U) option setting within the pattern.

X (PCRE_EXTRA)


This option turns on additional functionality of PCRE that is incompatible with Perl. Any backslash in a pattern that is followed by a letter that has no special meaning causes an error, thus reserving these combinations for future expansion. By default, as in Perl, a backslash followed by a letter with no special meaning is treated as a literal. There are at present no other features controlled by this option.

XL. PDF Functions

You can use the pdf functions in PHP to create pdf files if you have the PDF library (available at http://www.ifconnection.de/~tm/) by Thomas Merz. Please consult the excelent documentation for pdflib shipped with the source distribution of pdflib or available at http://www.ifconnection.de/~tm/software/pdflib/PDFlib-0.6.pdf. As long as this documentation is not complete the pdflib documentation should be your first choice. The functions in pdflib and the php3 module have the same name. The parameters are also identical. You should also understand some of the concepts of pdf to efficiently use this module.

The pdf module introduces two new types of variables. They are called pdfdoc and pdfinfo. pdfdoc is a pointer to a PDF document and almost all functions need it as its first parameter. pdfinfo contains meta data about the PDF document.

In order to output text into a PDF document you will need to provide the afm file for each font. By default these afm files are searched for in a directory named 'fonts' relative to the directory where the php3 script is located.

Most of the functions are fairly easy to use. The most difficult part is probably to create a very simple pdf document at all. The following example should help to get started. It creates the file test.pdf with one page. The page contains the text "Times-Roman" in an outlined 30pt font. The text is underlined.
 
Example 1. PDF_get_info
<?php
$fp = fopen("test.pdf", "w");
$info = PDF_get_info();
pdf_set_info_author($info, "Uwe Steinmann");
PDF_set_info_title($info, "Test for PHP3 wrapper of PDFlib 0.6");
PDF_set_info_author($info, "Name of Author");
pdf_set_info_creator($info, "See Author");
pdf_set_info_subject($info, "Testing");
$pdf = PDF_open($fp, $info);
PDF_begin_page($pdf, 595, 842);
PDF_add_outline($pdf, "Page 1");
pdf_set_font($pdf, "Times-Roman", 30, 4);
pdf_set_text_rendering($pdf, 1);
PDF_show_xy($pdf, "Times Roman outlined", 50, 750);
pdf_moveto($pdf, 50, 740);
pdf_lineto($pdf, 330, 740);
pdf_stroke($pdf);
PDF_end_page($pdf);
PDF_close($pdf);
echo "<A HREF=gettest.php3>finished</A>";
?>
    
The php3 file gettext.php3 just outputs the pdf document. 
<?php
  $fp = fopen("test.pdf", "r");
  header("Content-type: application/pdf");
  fpassthru($fp);
  fclose($fp);
?>

Table of Contents
PDF_get_info Returns a default info structure for a pdf document
PDF_set_info_creator Fills the creator field of the info structure
PDF_set_info_title Fills the title field of the info structure
PDF_set_info_subject Fills the subject field of the info structure
PDF_set_info_keywords Fills the keywords field of the info structure
PDF_set_info_author Fills the author field of the info structure
PDF_open Opens a new pdf document
PDF_close Closes the pdf document
PDF_begin_page Starts page
PDF_end_page Ends page
PDF_show Output text at current position
PDF_show_xy Output text at position
PDF_set_font Select the current font face and size
PDF_set_leading Sets distance between text lines
PDF_set_text_rendering Determines how text is rendered
PDF_set_horiz_scaling Sets horizontal scaling of text
PDF_set_text_rise Sets the text rise
PDF_set_text_matrix Sets the text matrix
PDF_set_text_pos Sets text position
PDF_set_char_spacing Sets character spacing
PDF_set_word_spacing Sets spacing between words
PDF_continue_text Output text in next line
PDF_stringwidth Returns width of text in current font
PDF_save Saves current enviroment
PDF_restore Restores formerly saved enviroment
PDF_translate Sets origin of coordinate system
PDF_scale Sets scaling
PDF_rotate Sets rotation
PDF_setflat Sets flatness
PDF_setlinejoin Sets linejoin parameter
PDF_setlinecap Sets linecap aparameter
PDF_setmiterlimit Sets miter limit
PDF_setlinewidth Sets line width
PDF_setdash Sets dash pattern
PDF_moveto Sets current point
PDF_curveto Draws a curve
PDF_lineto Draws a line
PDF_circle Draw a circle
PDF_arc Draws an arc
PDF_rect Draw a rectangle
PDF_closepath Close path
PDF_stroke Draw line along path
PDF_closepath_stroke Close path and draw line along path
PDF_fill Fill current path
PDF_fill_stroke Fill and stroke current path
PDF_closepath_fill_stroke Close, fill and stroke current path
PDF_endpath Ends current path
PDF_clip Clips to current path
PDF_setgray_fill Sets filling color to gray value
PDF_setgray_stroke Sets drawing color to gray value
PDF_setgray Sets drawing and filling color to gray value
PDF_setrgbcolor_fill Sets filling color to rgb color value
PDF_setrgbcolor_stroke Sets drawing color to rgb color value
PDF_setrgbcolor Sets drawing and filling color to rgb color value
PDF_add_outline Adds bookmark for current page
PDF_set_transition Sets transition between pages
PDF_set_duration Sets duration between pages
PDF_open_jpeg Opens a JPEG image
PDF_close_image Closes an image
PDF_place_image Places an image on the page
PDF_put_image Stores an image in the PDF for later use
PDF_execute_image Places a stored image on the page

PDF_get_info

PDF_get_info -- Returns a default info structure for a pdf document

Description

info pdf_get_info(string filename);
The PDF_get_info() function will return a default info structure for the pdf document. It can be filled with appropriate information like the author, subject etc.

See also PDF_set_info_creator(), PDF_set_info_subject().

PDF_set_info_creator

PDF_set_info_creator -- Fills the creator field of the info structure

Description

void pdf_set_info_creator(info info, string creator);
The PDF_set_info_creator() function sets the creator of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.
Note: This function is not part of the pdf library.
See also PDF_get_info(), PDF_set_info_subject().

PDF_set_info_title

PDF_set_info_title -- Fills the title field of the info structure

Description

void pdf_set_info_title(info info, string title);
The PDF_set_info_title() function sets the title of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.
Note: This function is not part of the pdf library.
See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_set_info_subject

PDF_set_info_subject -- Fills the subject field of the info structure

Description

void pdf_set_info_subject(info info, string subject);
The PDF_set_info_subject() function sets the subject of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.
Note: This function is not part of the pdf library.
See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_set_info_keywords

PDF_set_info_keywords -- Fills the keywords field of the info structure

Description

void pdf_set_info_keywords(info info, string keywords);
The PDF_set_info_keywords() function sets the keywords of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.
Note: This function is not part of the pdf library.
See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_set_info_author

PDF_set_info_author -- Fills the author field of the info structure

Description

void pdf_set_info_author(info info, string author);
The PDF_set_info_author() function sets the author of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.
Note: This function is not part of the pdf library.
See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_open

PDF_open -- Opens a new pdf document

Description

int pdf_open(int file, int info);
The PDF_open() function opens a new pdf document. The corresponding file has to be opened with fopen() and the file descriptor passed as argument file. info is the an info structure that has to be created with pdf_get_info(). The info structure will be deleted within this function.
Note: The return value is needed as the first parameter in all other functions writing to the pdf document.
See also fopen(), PDF_get_info().

PDF_close

PDF_close -- Closes the pdf document

Description

void pdf_close(int pdf document);
The PDF_close() function closes the pdf document.

Note: Due to an unclean implementation of the pdflib 0.6 the internal closing of the document also closes the file. This should not be done because pdflib didn't open the file, but expects an already open file when PDF_open() is called. Consequently it shouldn't close the file. In order to fix this just take out line 190 of the file p_basic.c in the pdflib source distribution until the next release of pdflib will fix this.

See also PDF_open(), fclose().

PDF_begin_page

PDF_begin_page -- Starts page

Description

void pdf_begin_page(int pdf document, double height, double width);
The PDF_begin_page() function starts a new page with height height and width width.

See also PDF_end_page().

PDF_end_page

PDF_end_page -- Ends page

Description

void pdf_end_page(int pdf document);
The PDF_end_page() function ends a page.

See also PDF_end_page().

PDF_show

PDF_show -- Output text at current position

Description

void pdf_show(int pdf document, string text);
The PDF_show() function outputs the string in text at the current position.

See also PDF_show_xy(), PDF_set_text_pos().

PDF_show_xy

PDF_show_xy -- Output text at position

Description

void pdf_show_xy(int pdf document, string text, double x-koor, double y-koor);
The PDF_show_xy() function outputs the string in text at position with coordinates (x-koor, y-koor).

See also PDF_show().

PDF_set_font

PDF_set_font -- Select the current font face and size

Description

void pdf_set_font(int pdf document, string font name, double size, int encoding);
The PDF_set_font() function sets the the current font face, font size and encoding. You will need to provide the Adobe Font Metrics (afm-files) for the font in the font path (default is ./fonts). The last parameter encoding can take the following values: 0 = builtin, 1 = pdfdoc, 2 = macroman, 3 = macexpert, 4 = winansi. You should not pass a value greater than 5, because pdflib 0.6 does a poor error checking and dies for greater values.

See also PDF_info().

PDF_set_leading

PDF_set_leading -- Sets distance between text lines

Description

void pdf_set leading(int pdf document, double distance);
The PDF_set_leading() function sets the distance between text lines. This will be used if text is output by PDF_continue_text().

See also PDF_continue_text().

PDF_set_text_rendering

PDF_set_text_rendering -- Determines how text is rendered

Description

void pdf_set_text_rendering(int pdf document, int mode);
The PDF_set_text_rendering() function determines how text is rendered. The possible values for mode are 0=fill text, 1=stroke text, 2=fill and stroke text, 3=invisible, 4=fill text and add it to cliping path, 5=stroke text and add it to clipping path, 6=fill and stroke text and add it to cliping path, 7=add it to clipping path.

PDF_set_horiz_scaling

PDF_set_horiz_scaling -- Sets horizontal scaling of text

Description

void pdf_set_horiz_scaling(int pdf document, double scale);
The PDF_set_horiz_scaling() function sets the horizontal scaling to scale percent.

PDF_set_text_rise

PDF_set_text_rise -- Sets the text rise

Description

void pdf_set_text_rise(int pdf document, double value);
The PDF_set_text_rise() function sets the text rising to value units.

PDF_set_text_matrix

PDF_set_text_matrix -- Sets the text matrix

Description

void pdf_set_text_matrix(int pdf document, array matrix);
The PDF_set_text_matrix() function sets a matrix which describes a transformation applied on the current text font.

PDF_set_text_pos

PDF_set_text_pos -- Sets text position

Description

void pdf_set_text_pos(int pdf document, double x-koor, double y-koor);
The PDF_set_text_pos() function sets the position of text for the next pdf_show() function call.

See also PDF_show(), PDF_show_xy().

PDF_set_char_spacing

PDF_set_char_spacing -- Sets character spacing

Description

void pdf_set_char_spacing(int pdf document, double space);
The PDF_set_char_spacing() function sets the spacing between characters.

See also PDF_set_word_spacing(), PDF_set_text_leading().

PDF_set_word_spacing

PDF_set_word_spacing -- Sets spacing between words

Description

void pdf_set_word_spacing(int pdf document, double space);
The PDF_set_word_spacing() function sets the spacing between words.

See also PDF_set_char_spacing(), PDF_set_text_leading().

PDF_continue_text

PDF_continue_text -- Output text in next line

Description

void pdf_continue_text(int pdf document, string text);
The PDF_continue_text() function outputs the string in text in the next line.

See also PDF_show_xy(), PDF_set_text_leading(), PDF_set_text_pos().

PDF_stringwidth

PDF_stringwidth -- Returns width of text in current font

Description

double pdf_stringwidth(int pdf document, string text);
The PDF_stringwidth() function returns the width of the string in text. It requires a font to be set before.

See also PDF_set_font().

PDF_save

PDF_save -- Saves current enviroment

Description

void pdf_save(int pdf document);
The PDF_save() function saves the current enviroment. It works like the postscript command gsave. Very useful if you want to translate or rotate an object without effecting other objects.

See also PDF_restore().

PDF_restore

PDF_restore -- Restores formerly saved enviroment

Description

void pdf_restore(int pdf document);
The PDF_restore() function restores the enviroment saved with PDF_save(). It works like the postscript command grestore. Very useful if you want to translate or rotate an object without effecting other objects.
Example 1. PDF_get_info
<?php PDF_save($pdf);
// do all kinds of rotations, transformations, ...
PDF_restore($pdf) ?>

See also PDF_save().

PDF_translate

PDF_translate -- Sets origin of coordinate system

Description

void pdf_translate(int pdf document, double x-koor, double y-koor);
The PDF_translate() function set the origin of coordinate system to the point (x-koor, y-koor).

PDF_scale

PDF_scale -- Sets scaling

Description

void pdf_scale(int pdf document, double x-scale, double y-scale);
The PDF_scale() function set the scaling factor in both directions.

PDF_rotate

PDF_rotate -- Sets rotation

Description

void pdf_rotate(int pdf document, double angle);
The PDF_rotate() function set the rotation in degress to angle.

PDF_setflat

PDF_setflat -- Sets flatness

Description

void pdf_setflat(int pdf document, double value);
The PDF_setflat() function set the flatness to a value between 0 and 100.

PDF_setlinejoin

PDF_setlinejoin -- Sets linejoin parameter

Description

void pdf_setlinejoin(int pdf document, long value);
The PDF_setlinejoin() function set the linejoin parameter between a value of 0 and 2.

PDF_setlinecap

PDF_setlinecap -- Sets linecap aparameter

Description

void pdf_setlinecap(int pdf document, int value);
The PDF_setlinecap() function set the linecap parameter between a value of 0 and 2.

PDF_setmiterlimit

PDF_setmiterlimit -- Sets miter limit

Description

void pdf_setmiterlimit(int pdf document, double value);
The PDF_setmiterlimit() function set the miter limit to a value greater of equal than 1.

PDF_setlinewidth

PDF_setlinewidth -- Sets line width

Description

void pdf_setlinewidth(int pdf document, double width);
The PDF_setlinewidth() function set the line width to width.

PDF_setdash

PDF_setdash -- Sets dash pattern

Description

void pdf_setdash(int pdf document, double white, double black);
The PDF_setdash() function set the dash pattern white white units and black black units. If both are 0 a solid line is set.

PDF_moveto

PDF_moveto -- Sets current point

Description

void pdf_moveto(int pdf document, double x-koor, double y-koor);
The PDF_moveto() function set the current point to the coordinates x-koor and y-koor.

PDF_curveto

PDF_curveto -- Draws a curve

Description

void pdf_curveto(int pdf document, double x1, double y1, double x2, double y2, double x3, double y3);
The PDF_curveto() function draws a Bezier curve from the current point to the point (x3, y3) using (x1, y1) and (x2, y2) as control points.

See also PDF_moveto(), PDF_lineto().

PDF_lineto

PDF_lineto -- Draws a line

Description

void pdf_lineto(int pdf document, double x-koor, double y-koor);
The PDF_lineto() function draws a line from the current point to the point with coordinates (x-koor, y-koor).

See also PDF_moveto(), PDF_curveto().

PDF_circle

PDF_circle -- Draw a circle

Description

void pdf_circle(int pdf document, double x-koor, double y-koor, double radius);
The PDF_circle() function draws a circle with center at point (x-koor, y-koor) and radius radius.

See also PDF_arc().

PDF_arc

PDF_arc -- Draws an arc

Description

void pdf_arc(int pdf document, double x-koor, double y-koor, double radius, double start, double end);
The PDF_arc() function draws an arc with center at point (x-koor, y-koor) and radius radius, starting at angle start and ending at angle end.

See also PDF_circle().

PDF_rect

PDF_rect -- Draw a rectangle

Description

void pdf_rect(int pdf document, double x-koor, double y-koor, double width, double height);
The PDF_rect() function draws a rectangle with its lower left corner at point (x-koor, y-koor). This width is set to widgth. This height is set to height.

PDF_closepath

PDF_closepath -- Close path

Description

void pdf_closepath(int pdf document);
The PDF_closepath() function closes the current path.

PDF_stroke

PDF_stroke -- Draw line along path

Description

void pdf_stroke(int pdf document);
The PDF_stroke() function draws a line along current path.

See also PDF_closepath(), PDF_closepath_stroke().

PDF_closepath_stroke

PDF_closepath_stroke -- Close path and draw line along path

Description

void pdf_closepath_stroke(int pdf document);
The PDF_closepath_stroke() function is a combination of PDF_closepath() and PDF_stroke(). Than clears the path.

See also PDF_closepath(), PDF_stroke().

PDF_fill

PDF_fill -- Fill current path

Description

void pdf_fill(int pdf document);
The PDF_fill() function fills the interior of the current path with the current fill color.

See also PDF_closepath(), PDF_stroke(), PDF_setgray_fill(), PDF_setgray(), PDF_setrgbcolor_fill(), PDF_setrgbcolor().

PDF_fill_stroke

PDF_fill_stroke -- Fill and stroke current path

Description

void pdf_fill_stroke(int pdf document);
The PDF_fill_stroke() function fills the interior of the current path with the current fill color and draws current path.

See also PDF_closepath(), PDF_stroke(), PDF_fill(), PDF_setgray_fill(), PDF_setgray(), PDF_setrgbcolor_fill(), PDF_setrgbcolor().

PDF_closepath_fill_stroke

PDF_closepath_fill_stroke -- Close, fill and stroke current path

Description

void pdf_closepath_fill_stroke(int pdf document);
The PDF_closepath_fill_stroke() function closes, fills the interior of the current path with the current fill color and draws current path.

See also PDF_closepath(), PDF_stroke(), PDF_fill(), PDF_setgray_fill(), PDF_setgray(), PDF_setrgbcolor_fill(), PDF_setrgbcolor().

PDF_endpath

PDF_endpath -- Ends current path

Description

void pdf_endpath(int pdf document);
The PDF_endpath() function ends the current path but does not close it.

See also PDF_closepath().

PDF_clip

PDF_clip -- Clips to current path

Description

void pdf_clip(int pdf document);
The PDF_clip() function clips all drawing to the current path.

PDF_setgray_fill

PDF_setgray_fill -- Sets filling color to gray value

Description

void pdf_setgray_fill(int pdf document, double value);
The PDF_setgray_fill() function sets the current gray value to fill a path.

See also PDF_setrgbcolor_fill().

PDF_setgray_stroke

PDF_setgray_stroke -- Sets drawing color to gray value

Description

void pdf_setgray_stroke(int pdf document, double gray value);
The PDF_setgray_stroke() function sets the current drawing color to the given gray value.

See also PDF_setrgbcolor_stroke().

PDF_setgray

PDF_setgray -- Sets drawing and filling color to gray value

Description

void pdf_setgray(int pdf document, double gray value);
The PDF_setgray_stroke() function sets the current drawing and filling color to the given gray value.

See also PDF_setrgbcolor_stroke(), PDF_setrgbcolor_fill().

PDF_setrgbcolor_fill

PDF_setrgbcolor_fill -- Sets filling color to rgb color value

Description

void pdf_setrgbcolor_fill(int pdf document, double red value, double green value, double blue value);
The PDF_setrgbcolor_fill() function sets the current rgb color value to fill a path.

See also PDF_setrgbcolor_fill().

PDF_setrgbcolor_stroke

PDF_setrgbcolor_stroke -- Sets drawing color to rgb color value

Description

void pdf_setrgbcolor_stroke(int pdf document, double red value, double green value, double blue value);
The PDF_setrgbcolor_stroke() function sets the current drawing color to the given rgb color value.

See also PDF_setrgbcolor_stroke().

PDF_setrgbcolor

PDF_setrgbcolor -- Sets drawing and filling color to rgb color value

Description

void pdf_setrgbcolor(int pdf document, double red value, double green value, double blue value);
The PDF_setrgbcolor_stroke() function sets the current drawing and filling color to the given rgb color value.

See also PDF_setrgbcolor_stroke(), PDF_setrgbcolor_fill().

PDF_add_outline

PDF_add_outline -- Adds bookmark for current page

Description

void pdf_add_outline(int pdf document, string text);
The PDF_add_outline() function adds a bookmark with text text that points to the current page.

Unfortunately pdflib does not make a copy of the string, which forces PHP3 to allocate the memory. Currently this piece of memory is not been freed by any PDF function but will be taken care of by the PHP3 memory manager.

PDF_set_transition

PDF_set_transition -- Sets transition between pages

Description

void pdf_set_transition(int pdf document, int transition);
The PDF_set_transition() function set the transition between following pages. The value of transition can be 0 for none, 1 for two lines sweeping across the screen reveal the page, 2 for multiple lines sweeping across the screen reveal the page, 3 for a box reveals the page, 4 for a single line sweeping across the screen reveals the page, 5 for the old page dissolves to reveal the page, 6 for the dissolve effect moves from one screen edge to another, 7 for the old page is simply replaced by the new page (default)

PDF_set_duration

PDF_set_duration -- Sets duration between pages

Description

void pdf_set_duration(int pdf document, double duration);
The PDF_set_duration() function set the duration between following pages in seconds.

PDF_open_jpeg

PDF_open_jpeg -- Opens a JPEG image

Description

int pdf_open_jpeg(int pdf document, string file name);
The PDF_open_jpeg() function opens an image stored in the file with the name file name. The format of the image has to be jpeg.

See also PDF_close_image(),

PDF_close_image

PDF_close_image -- Closes an image

Description

void pdf_close_image(int image);
The PDF_close_image() function closes an image which has been opened with any of the PDF_open_xxx() functions.

See also PDF_open_jpeg(),

PDF_place_image

PDF_place_image -- Places an image on the page

Description

void pdf_place_image(int pdf document, int image, double x-koor, double y-koor, double scale);
The PDF_place_image() function places an image on the page at postion (x-koor, x-koor). The image can be scaled at the same time.

PDF_put_image

PDF_put_image -- Stores an image in the PDF for later use

Description

void pdf_put_image(int pdf document, int image);
The PDF_put_image function places an image in the PDF file without showing it. The stored image can be displayed with the PDF_execute_image() function. This is useful when using the same image multiple times.

PDF_execute_image

PDF_execute_image -- Places a stored image on the page

Description

void pdf_execute_image(int pdf document, int image, double x-coor, double y-coor, double scale);
The PDF_execute_image function displays an image that has been put in the PDF file with the PDF_put_image() function on the current page at the given coordinates.

The image can be scaled while displaying it. A scale of 1.0 will show the image in the original size.

XLI. PostgreSQL functions

Postgres, developed originally in the UC Berkeley Computer Science Department, pioneered many of the object-relational concepts now becoming available in some commercial databases. It provides SQL92/SQL3 language support, transaction integrity, and type extensibility. PostgreSQL is a public-domain, open source descendant of this original Berkeley code.

PostgreSQL is available without cost. The current version is available at www.PostgreSQL.org.

Since version 6.3 (03/02/1998) PostgreSQL use unix domain sockets, a table is given to this new possibilities. This socket will be found in /tmp/.s.PGSQL.5432. This option can be enabled with the '-i' flag to postmaster and it's meaning is: "listen on TCP/IP sockets as well as Unix domain socket".

Table 1. Postmaster and PHP
 
Postmaster PHP Status
postmaster & pg_connect("", "", "", "", "dbname"); OK
postmaster -i & pg_connect("", "", "", "", "dbname"); OK
postmaster & pg_connect("localhost", "", "", "", "dbname"); Unable to connect to PostgreSQL server: connectDB() failed: Is the postmaster running and accepting TCP/IP (with -i) connection at 'localhost' on port '5432'? in /path/to/file.php3 on line 20.
postmaster -i & pg_connect("localhost", "", "", "", "dbname"); OK
One can also establish a connection with the following command: $conn = pg_Connect("host=localhost port=5432 dbname=chris");

To use the large object (lo) interface, it is necessary to enclose it within a transaction block. A transaction block starts with a begin and if the transaction was valid ends with commit and end. If the transaction fails the transaction should be closed with abort and rollback.
Example 1. Using Large Objects
<?php
$database = pg_Connect ("", "", "", "", "jacarta");
pg_exec ($database, "begin");
    $oid = pg_locreate ($database);
    echo ("$oid\n");
    $handle = pg_loopen ($database, $oid, "w");
    echo ("$handle\n");
    pg_lowrite ($handle, "gaga");
    pg_loclose ($handle);
pg_exec ($database, "commit")
pg_exec ($database, "end")
?>

Table of Contents
pg_Close closes a PostgreSQL connection
pg_cmdTuples returns number of affected tuples
pg_Connect opens a connection
pg_DBname database name
pg_ErrorMessage error message
pg_Exec execute a query
pg_Fetch_Array fetch row as array
pg_Fetch_Object fetch row as object
pg_Fetch_Row get row as enumerated array
pg_FieldIsNull Test if a field is NULL
pg_FieldName Returns the name of a field
pg_FieldNum Returns the number of a column
pg_FieldPrtLen Returns the printed length
pg_FieldSize Returns the internal storage size of the named field
pg_FieldType Returns the type name for the corresponding field number
pg_FreeResult Frees up memory
pg_GetLastOid Returns the last object identifier
pg_Host Returns the host name
pg_loclose close a large object
pg_locreate create a large object
pg_loopen open a large object
pg_loread read a large object
pg_loreadall read a entire large object
pg_lounlink delete a large object
pg_lowrite write a large object
pg_NumFields Returns the number of fields
pg_NumRows Returns the number of rows
pg_Options Returns options
pg_pConnect make a persistent database connection
pg_Port Returns the port number
pg_Result Returns values from a result identifier
pg_tty Returns the tty name

pg_Close

pg_Close -- closes a PostgreSQL connection

Description

bool pg_close(int connection);
Returns false if connection is not a valid connection index, true otherwise. Closes down the connection to a PostgreSQL database associated with the given connection index.

pg_cmdTuples

pg_cmdTuples -- returns number of affected tuples

Description

int pg_cmdtuples(int result_id);
pg_cmdTuples() returns the number of tuples (instances) affected by INSERT, UPDATE, and DELETE queries. If no tuple is affected the function will return 0.
Example 1. pg_cmdtuples
<?php
$result = pg_exec($conn, "INSERT INTO verlag VALUES ('Autor')");
$cmdtuples = pg_cmdtuples($result);
echo $cmdtuples . " <- cmdtuples affected.";
?>

pg_Connect

pg_Connect -- opens a connection

Description

int pg_connect(string host, string port, string options, string tty, string dbname);
Returns a connection index on success, or false if the connection could not be made. Opens a connection to a PostgreSQL database. Each of the arguments should be a quoted string, including the port number. The options and tty arguments are optional and can be left out. This function returns a connection index that is needed by other PostgreSQL functions. You can have multiple connections open at once.

A connection can also established with the following command: $conn = pg_connect("dbname=marliese port=5432"); Other parameters besides dbname and port are host, tty and options.

See also pg_pConnect().

pg_DBname

pg_DBname -- database name

Description

string pg_dbname(int connection);
Returns the name of the database that the given PostgreSQL connection index is connected to, or false if connection is not a valid connection index.

pg_ErrorMessage

pg_ErrorMessage -- error message

Description

string pg_errormessage(int connection);
Returns a string containing the error message, false on failure. Details about the error probably cannot be retrieved using the pg_errormessage() function if an error occured on the last database action for which a valid connection exists, this function will return a string containing the error message generated by the backend server.

pg_Exec

pg_Exec -- execute a query

Description

int pg_exec(int connection, string query);
Returns a result index if query could be executed, false on failure or if connection is not a valid connection index. Details about the error can be retrieved using the pg_ErrorMessage() function if connection is valid. Sends an SQL statement to the PostgreSQL database specified by the connection index. The connection must be a valid index that was returned by pg_Connect(). The return value of this function is an index to be used to access the results from other PostgreSQL functions.
Note: PHP2 returned 1 if the query was not expected to return data (inserts or updates, for example) and greater than 1 even on selects that did not return anything. No such assumption can be made in PHP3.

pg_Fetch_Array

pg_Fetch_Array -- fetch row as array

Description

array pg_fetch_array(int result, int row);
Returns: An array that corresponds to the fetched row, or false if there are no more rows.

pg_fetch_array() is an extended version of pg_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

An important thing to note is that using pg_fetch_array() is NOT significantly slower than using pg_fetch_row(), while it provides a significant added value.

For further details, also see pg_fetch_row()
 
Example 1. PostgreSQL fetch array
<?php 
$conn = pg_pconnect("","","","","publisher");
if (!$conn) {
    echo "An error occured.\n";
    exit;
}

$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
    echo "An error occured.\n";
    exit;
}

$arr = pg_fetch_array ($result, 0);
echo $arr[0] . " <- array\n";

$arr = pg_fetch_array ($result, 1);
echo $arr["author"] . " <- array\n";
?>

pg_Fetch_Object

pg_Fetch_Object -- fetch row as object

Description

object pg_fetch_object(int result, int row);
Returns: An object with properties that correspond to the fetched row, or false if there are no more rows.

pg_fetch_object() is similar to pg_fetch_array(), with one difference - an object is returned, instead of an array. Indirectly, that means that you can only access the data by the field names, and not by their offsets (numbers are illegal property names).

Speed-wise, the function is identical to pg_fetch_array(), and almost as quick as pg_fetch_row() (the difference is insignificant).

See also: pg_fetch_array() and pg_fetch_row().
Example 1. Postgres fetch object
<?php 
$database = "verlag";
$db_conn = pg_connect ("localhost", "5432", "", "", $database);
if (!$db_conn): ?>
    <H1>Failed connecting to postgres database <? echo $database ?></H1> <?
    exit;
endif;

$qu = pg_exec ($db_conn, "SELECT * FROM verlag ORDER BY autor");
$row = 0; // postgres needs a row counter other dbs might not 

while ($data = pg_fetch_object ($qu, $row)):
    echo $data->autor." (";
    echo $data->jahr ."): ";
    echo $data->titel."<BR>";
    $row++;
endwhile; ?>

<PRE><?
$fields[] = Array ("autor", "Author");
$fields[] = Array ("jahr",  "  Year");
$fields[] = Array ("titel", " Title");

$row= 0; // postgres needs a row counter other dbs might not
while ($data = pg_fetch_object ($qu, $row)):
    echo "----------\n";
    reset ($fields);
    while (list (,$item) = each ($fields)):
        echo $item[1].": ".$data->$item[0]."\n";
    endwhile;
    $row++;
endwhile;
echo "----------\n"; ?>
</PRE> <?php
pg_freeResult ($qu);
pg_close ($db_conn);
?>

pg_Fetch_Row

pg_Fetch_Row -- get row as enumerated array

Description

array pg_fetch_row(int result, int row);
Returns: An array that corresponds to the fetched row, or false if there are no more rows.

pg_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

Subsequent call to pg_fetch_row() would return the next row in the result set, or false if there are no more rows.

See also: pg_fetch_array(), pg_fetch_object(), pg_result().
Example 1. Postgres fetch row
<?php 
$conn = pg_pconnect("","","","","publisher");
if (!$conn) {
    echo "An error occured.\n";
    exit;
}

$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
    echo "An error occured.\n";
    exit;
}

$row = pg_fetch_row ($result, 0);
echo $row[0] . " <- row\n";

$row = pg_fetch_row ($result, 1);
echo $row[0] . " <- row\n";

$row = pg_fetch_row ($result, 2);
echo $row[1] . " <- row\n";
?>

pg_FieldIsNull

pg_FieldIsNull -- Test if a field is NULL

Description

int pg_fieldisnull(int result_id, int row, mixed field);
Test if a field is NULL or not. Returns 0 if the field in the given row is not NULL. Returns 1 if the field in the given row is NULL. Field can be specified as number or fieldname. Row numbering starts at 0.

pg_FieldName

pg_FieldName -- Returns the name of a field

Description

string pg_fieldname(int result_id, int field_number);
pg_FieldName() will return the name of the field occupying the given column number in the given PostgreSQL result identifier. Field numbering starts from 0.

pg_FieldNum

pg_FieldNum -- Returns the number of a column

Description

int pg_fieldnum(int result_id, string field_name);
pg_FieldNum() will return the number of the column slot that corresponds to the named field in the given PosgreSQL result identifier. Field numbering starts at 0. This function will return -1 on error.

pg_FieldPrtLen

pg_FieldPrtLen -- Returns the printed length

Description

int pg_fieldprtlen(int result_id, int row_number, string field_name);
pg_FieldPrtLen() will return the actual printed length (number of characters) of a specific value in a PostgreSQL result. Row numbering starts at 0. This function will return -1 on an error.

pg_FieldSize

pg_FieldSize -- Returns the internal storage size of the named field

Description

int pg_fieldsize(int result_id, string field_name);
pg_FieldSize() will return the internal storage size (in bytes) of the named field in the given PostgreSQL result. A field size of -1 indicates a variable length field. This function will return false on error.

pg_FieldType

pg_FieldType -- Returns the type name for the corresponding field number

Description

int pg_fieldtype(int result_id, int field_number);
pg_FieldType() will return a string containing the type name of the given field in the given PostgreSQL result identifier. Field numbering starts at 0.

pg_FreeResult

pg_FreeResult -- Frees up memory

Description

int pg_freeresult(int result_id);
pg_FreeResult() only needs to be called if you are worried about using too much memory while your script is running. All result memory will automatically be freed when the script is finished. But, if you are sure you are not going to need the result data anymore in a script, you may call pg_FreeResult() with the result identifier as an argument and the associated result memory will be freed.

pg_GetLastOid

pg_GetLastOid -- Returns the last object identifier

Description

int pg_getlastoid(int result_id);
pg_GetLastOid() can be used to retrieve the Oid assigned to an inserted tuple if the result identifier is used from the last command sent via pg_Exec() and was an SQL INSERT. This function will return a positive integer if there was a valid Oid. It will return -1 if an error occured or the last command sent via pg_Exec() was not an INSERT.

pg_Host

pg_Host -- Returns the host name

Description

string pg_host(int connection_id);
pg_Host() will return the host name of the given PostgreSQL connection identifier is connected to.

pg_loclose

pg_loclose -- close a large object

Description

void pg_loclose(int fd);
pg_loclose() closes an Inversion Large Object. fd is a file descriptor for the large object from pg_loopen().

pg_locreate

pg_locreate -- create a large object

Description

int pg_locreate(int conn);
pg_locreate() creates an Inversion Large Object and returns the oid of the large object. conn specifies a valid database connection. PostgreSQL access modes INV_READ, INV_WRITE, and INV_ARCHIVE are not supported, the object is created always with both read and write access. INV_ARCHIVE has been removed from PostgreSQL itself (version 6.3 and above).

pg_loopen

pg_loopen -- open a large object

Description

int pg_loopen(int conn, int objoid, string mode);
pg_loopen() open an Inversion Large Object and returns file descriptor of the large object. The file descriptor encapsulates information about the connection. Do not close the connection before closing the large object file descriptor. objoid specifies a valid large object oid and mode can be either "r", "w", or "rw".

pg_loread

pg_loread -- read a large object

Description

string pg_loread(int fd, int len);
pg_loread() reads at most len bytes from a large object and returns it as a string. fd specifies a valid large object file descriptor andlen specifies the maximum allowable size of the large object segment.

pg_loreadall

pg_loreadall -- read a entire large object

Description

void pg_loreadall(int fd);
pg_loreadall() reads a large object and passes it straight through to the browser after sending all pending headers. Mainly intended for sending binary data like images or sound.

pg_lounlink

pg_lounlink -- delete a large object

Description

void pg_lounlink(int conn, int lobjid);
pg_lounlink() deletes a large object with the lobjid identifier for that large object.

pg_lowrite

pg_lowrite -- write a large object

Description

int pg_lowrite(int fd, string buf);
pg_lowrite() writes at most to a large object from a variable buf and returns the number of bytes actually written, or false in the case of an error. fd is a file descriptor for the large object from pg_loopen().

pg_NumFields

pg_NumFields -- Returns the number of fields

Description

int pg_numfields(int result_id);
pg_NumFields() will return the number of fields (columns) in a PostgreSQL result. The argument is a valid result identifier returned by pg_Exec(). This function will return -1 on error.

pg_NumRows

pg_NumRows -- Returns the number of rows

Description

int pg_numrows(int result_id);
pg_NumRows() will return the number of rows in a PostgreSQL result. The argument is a valid result identifier returned by pg_Exec(). This function will return -1 on error.

pg_Options

pg_Options -- Returns options

Description

string pg_options(int connection_id);
pg_Options() will return a string containing the options specified on the given PostgreSQL connection identifier.

pg_pConnect

pg_pConnect -- make a persistent database connection

Description

int pg_pconnect(string host, string port, string options, string tty, string dbname);
Returns a connection index on success, or false if the connection could not be made. Opens a persistent connection to a PostgreSQL database. Each of the arguments should be a quoted string, including the port number. The options and tty arguments are optional and can be left out. This function returns a connection index that is needed by other PostgreSQL functions. You can have multiple persistent connections open at once. See also pg_Connect().

A connection can also established with the following command: $conn = pg_pconnect("dbname=marliese port=5432"); Other parameters besides dbname and port are host, tty and options.

pg_Port

pg_Port -- Returns the port number

Description

int pg_port(int connection_id);
pg_Port() will return the port number that the given PostgreSQL connection identifier is connected to.

pg_Result

pg_Result -- Returns values from a result identifier

Description

mixed pg_result(int result_id, int row_number, mixed fieldname);
pg_Result() will return values from a result identifier produced by pg_Exec(). The row_number and fieldname sepcify what cell in the table of results to return. Row numbering starts from 0. Instead of naming the field, you may use the field index as an unquoted number. Field indices start from 0.

PostgreSQL has many built in types and only the basic ones are directly supported here. All forms of integer, boolean and oid types are returned as integer values. All forms of float, and real types are returned as double values. All other types, including arrays are returned as strings formatted in the same default PostgreSQL manner that you would see in the psql program.

pg_tty

pg_tty -- Returns the tty name

Description

string pg_tty(int connection_id);
pg_tty() will return the tty name that server side debugging output is sent to on the given PostgreSQL connection identifier.

XLII. Regular expression functions

Table of Contents
ereg regular expression match
ereg_replace replace regular expression
eregi case insensitive regular expression match
eregi_replace replace regular expression case insensitive
split split string into array by regular expression
sql_regcase make regular expression for case insensitive match

ereg

ereg -- regular expression match

Description

int ereg(string pattern, string string, array [regs]);
Searchs string for matches to the regular expression given in pattern.

If matches are found for parenthesized substrings of pattern and the function is called with the third argument regs, the matches will be stored in the elements of regs. $regs[1] will contain the substring which starts at the first left parenthesis; $regs[2] will contain the substring starting at the second, and so on. $regs[0] will contain a copy of string.

Searching is case sensitive.

Returns true if a match for pattern was found in string, or false if no matches were found or an error occurred.

The following code snippet takes a date in ISO format (YYYY-MM-DD) and prints it in DD.MM.YYYY format:
Example 1. ereg() example
if ( ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs ) ) {
    echo "$regs[3].$regs[2].$regs[1]";
} else {
    echo "Invalid date format: $date";
}

See also eregi(), ereg_replace(), and eregi_replace().

ereg_replace

ereg_replace -- replace regular expression

Description

string ereg_replace(string pattern, string replacement, string string);
This function scans string for matches to pattern, then replaces the matched text with replacement.

If pattern contains parenthesized substrings, replacement may contain substrings of the form \\digit, which will be replaced by the text matching the digit'th parenthesized substring; \\0 will produce the entire contents of string. Up to nine substrings may be used. Parentheses may be nested, in which case they are counted by the opening parenthesis.

If no matches are found in string, then string will be returned unchanged.

For example, the following code snippet prints "This was a test" three times:
Example 1. ereg_replace() example
$string = "This is a test";
echo ereg_replace( " is", " was", $string );
echo ereg_replace( "( )is", "\\1was", $string );
echo ereg_replace( "(( )is)", "\\2was", $string );
See also ereg(), eregi(), and eregi_replace().

eregi

eregi -- case insensitive regular expression match

Description

int eregi(string pattern, string string, array [regs]);
This function is identical to ereg() save that this ignores case distinction when matching alphabetic characters.

See also ereg(), ereg_replace(), and eregi_replace().

eregi_replace

eregi_replace -- replace regular expression case insensitive

Description

string eregi_replace(string pattern, string replacement, string string);
This function is identical to ereg_replace() save that this ignores case distinction when matching alphabetic characters.

See also ereg(), eregi(), and ereg_replace().

split

split -- split string into array by regular expression

Description

array split(string pattern, string string, int [limit]);
Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by pattern. If an error occurs, returns false.

To get the first five fields from a line from /etc/passwd:
Example 1. split() example
$passwd_list = split( ":", $passwd_line, 5 );

Note that pattern is case-sensitive.

See also: explode() and implode().

sql_regcase

sql_regcase -- make regular expression for case insensitive match

Description

string sql_regcase(string string);
Returns a valid regular expression which will match string, ignoring case. This expression is string with each character converted to a bracket expression; this bracket expression contains that character's uppercase and lowercase form if applicable, otherwise it contains the original character twice.
Example 1. sql_regcase() example
echo sql_regcase( "Foo bar" );
prints
[Ff][Oo][Oo][  ][Bb][Aa][Rr]
.

This can be used to achieve case insensitive pattern matching in products which support only case sensitive regular expressions.

XLIII. Semaphore and Shared Memory Functions

This module provides semaphore functions using System V semaphores. Semaphores may be used to provide exclusive access to resources on the current machine, or to limit the number of processes that may simultaneously use a resource.

This module provides also shared memory functions using System V shared memory. Shared memory may be used to provide access to global variables. Different httpd-daemons and even other programs (such as Perl, C, ...) are able to access this data to provide a global data-exchange. Remember, that shared memory is NOT safe against simultaneous access. Use semaphores for synchronization.

Table 1. Limits of shared memory by the Unix OS
 
SHMMAX max size of shared memory, normally 131072 bytes
SHMMIN minimum size of shared memory, normally 1 byte
SHMMNI max amount of shared memory segments, normally 100
SHMSEG max amount of shared memory per process, normally 6
Table of Contents
sem_get get a semaphore id
sem_acquire acquire a semaphore
sem_release release a semaphore
shm_attach Creates or open a shared memory segment
shm_detach Disconnects from shared memory segment
shm_remove Removes shared memory from Unix systems
shm_put_var Inserts or updates a variable in shared memory
shm_get_var Returns a variable from shared memory
shm_remove_var Removes a variable from shared memory

sem_get

sem_get -- get a semaphore id

Description

int sem_get(int key, int [max_acquire] , int [perm] );
Returns: A positive semaphore identifier on success, or false on error.

sem_get() returns an id that can be used to access the System V semaphore with the given key. The semaphore is created if necessary using the permission bits specified in perm (defaults to 0666). The number of processes that can acquire the semaphore simultaneously is set to max_acquire (defaults to 1). Actually this value is set only if the process finds it is the only process currently attached to the semaphore.

A second call to sem_get() for the same key will return a different semaphore identifier, but both identifiers access the same underlying semaphore.

See also: sem_acquire() and sem_release().

sem_acquire

sem_acquire -- acquire a semaphore

Description

int sem_acquire(int sem_identifier);
Returns: true on success, false on error

sem_acquire() blocks (if necessary) until the semaphore can be acquired. A process attempting to acquire a semaphore which it has already acquired will block forever if acquiring the semaphore would cause its max_acquire value to be exceeded.

After processing a request, any semaphores acquired by the process but not explicitly released will be released automatically and a warning will be generated.

See also: sem_get() and sem_release().

sem_release

sem_release -- release a semaphore

Description

int sem_release(int sem_identifier);
Returns: true on success, false on error

sem_release() releases the semaphore if it is currently acquired by the calling process, otherwise a warning is generated.

After releasing the semaphore, sem_acquire() may be called to re-acquire it.

See also: sem_get() and sem_acquire().

shm_attach

shm_attach -- Creates or open a shared memory segment

Description

int shm_attach(int key, int [memsize], int [perm]);
shm_attach() returns an id that that can be used to access the System V shared memory with the given key, the first call creates the shared memory segment with mem_size (default: sysvshm.init_mem in php3.ini, otherwise 10000 bytes) and the optional perm-bits (default: 666).

A second call to shm_attach() for the same key will return a different shared memory identifier, but both identifiers access the same underlying shared memory. memsize and perm will be ignored.

shm_detach

shm_detach -- Disconnects from shared memory segment

Description

int shm_detach(int shm_identifier);
shm_detach() disconnects from the shared memory given by the shm_identifier created by shm_attach(). Remember, that shared memory still exist in the Unix system and the data is still present.

shm_remove

shm_remove -- Removes shared memory from Unix systems

Description

int shm_remove(int shm_identifier);
Removes shared memory from Unix systems. All data will be destroyed.

shm_put_var

shm_put_var -- Inserts or updates a variable in shared memory

Description

int shm_put_var(int shm_identifier, int variable_key, mixed variable);
Inserts or updates a variable with a given variable_key. All variable-types (double, int, string, array) are supported.

shm_get_var

shm_get_var -- Returns a variable from shared memory

Description

mixed shm_get_var(int id, int variable_key);
shm_get_var() returns the variable with a given variable_key. The variable is still present in the shared memory.

shm_remove_var

shm_remove_var -- Removes a variable from shared memory

Description

int shm_remove_var(int id, int variable_key);
Removes a variable with a given variable_key and frees the occupied memory.

XLIV. Solid Functions

The Solid functions are deprecated, you probably want to use the Unified ODBC functions instead.

Table of Contents
solid_close close a Solid connection
solid_connect connect to a Solid data source
solid_exec execute a Solid query
solid_fetchrow fetch row of data from Solid query
solid_fieldname get name of column from Solid query
solid_fieldnum get index of column from Solid query
solid_freeresult free result memory from Solid query
solid_numfields get number of fields in Solid result
solid_numrows get number of rows in Solid result
solid_result get data from Solid results

solid_close

solid_close -- close a Solid connection

Description

See odbc_close().

solid_connect

solid_connect -- connect to a Solid data source

Description

See odbc_connect().

solid_exec

solid_exec -- execute a Solid query

Description

See odbc_exec().

solid_fetchrow

solid_fetchrow -- fetch row of data from Solid query

Descriptio

See odbc_fetch_row()

solid_fieldname

solid_fieldname -- get name of column from Solid query

Description

See odbc_field_name().

solid_fieldnum

solid_fieldnum -- get index of column from Solid query

Description

See odbc_field_num().

solid_freeresult

solid_freeresult -- free result memory from Solid query

Description

See odbc_free_result().

solid_numfields

solid_numfields -- get number of fields in Solid result

Description

See odbc_num_fields().

solid_numrows

solid_numrows -- get number of rows in Solid result

Description

See odbc_num_rows().

solid_result

solid_result -- get data from Solid results

Description

See odbc_result().

XLV. SNMP Functions

In order to use the SNMP functions on Unix you need to install the ucd-snmp package. There is a link to the current version in the PHP FAQ. On Windows these functions are only available on NT and not on Win95/98.

Table of Contents
snmpget Fetch an SNMP object
snmpwalk Fetch all the SNMP objects from an agent
snmpwalkoid Query for a tree of information about a network entity
snmp_get_quick_print Fetch the current value of the UCD library's quick_print setting
snmp_set_quick_print Set the value of quick_print within the UCD SNMP library.

snmpget

snmpget -- Fetch an SNMP object

Description

int snmpget(string hostname, string community, string object_id);
Returns SNMP object value on success and false on error.

The snmpget() function is used to read the value of an SNMP object specified by the object_id. SNMP agent is specified by the hostname and the read community is specified by the community parameter.

snmpget("127.0.0.1", "public", "system.SysContact.0")

 

snmpwalk

snmpwalk -- Fetch all the SNMP objects from an agent

Description

array snmpwalk(string hostname, string community, string object_id, int [timeout] , int [retries] );
Returns an array of SNMP object values starting from the object_id() as root and false on error.

snmpwalk() function is used to read all the values from an SNMP agent specified by the hostname. Community specifies the read community for that agent. A null object_id is taken as the root of the SNMP objects tree and all objects under that tree are returned as an array. If object_id is specified, all the SNMP objects below that object_id are returned.

 
$a = snmpwalk("127.0.0.1", "public", ""); 
Above function call would return all the SNMP objects from the SNMP agent running on localhost. One can step through the values with a loop
for ($i=0; $i<count($a); $i++) {
    echo $a[$i];
}

snmpwalkoid

snmpwalkoid -- Query for a tree of information about a network entity

Description

array snmpwalkoid(string hostname, string community, string object_id, int [timeout] , int [retries] );
Returns an associative array with object ids and their respective object value starting from the object_id as root and false on error.

snmpwalkoid() function is used to read all object ids and their respective values from an SNMP agent specified by the hostname. Community specifies the read community for that agent. A null object_id is taken as the root of the SNMP objects tree and all objects under that tree are returned as an array. If object_id is specified, all the SNMP objects below that object_id are returned.

The existence of snmpwalkoid() and snmpwalk() has historical reasons. Both functions are provided for backward compatibility.

 
$a = snmpwalkoid("127.0.0.1", "public", ""); 
Above function call would return all the SNMP objects from the SNMP agent running on localhost. One can step through the values with a loop
for (reset($a); $i = key($a); next($a)) {
    echo "$i: $a[$i]<br>\n";
}

snmp_get_quick_print

snmp_get_quick_print -- Fetch the current value of the UCD library's quick_print setting

Description

boolean snmp_get_quick_print(void );
Returns the current value stored in the UCD Library for quick_print. quick_print is off by default.
 
$quickprint = snmp_get_quick_print();
Above function call would return 0 (false) if quick_print is on, and 1 (true) if quick_print is on.

snmp_get_quick_print() is only available when using the UCD SNMP library. This function is not applicable to Windows NT.

See: snmp_set_quick_print() for a description of what quick_print actually does.

snmp_set_quick_print

snmp_set_quick_print -- Set the value of quick_print within the UCD SNMP library.

Description

void snmp_set_quick_print(boolean quick_print);
Sets the value of quick_print within the UCD SNMP library. When this is set (1), the SNMP library will return 'quick printed' values. This means that just the value will be printed. When quick_print is not enabled (default) the UCD SNMP library prints extra information including the type of the value (i.e. IpAddress or OID). Additionally, if quick_print is not enabled, the library prints additional hex values for all strings of three characters or less.

Setting quick_print is often used when using the information returned rather then displaying it.

 
snmp_set_quick_print(0);
$a = snmpget("127.0.0.1", "public", ".1.3.6.1.2.1.2.2.1.9.1");
echo "$a<BR>\n";
snmp_set_quick_print(1);
$a = snmpget("127.0.0.1", "public", ".1.3.6.1.2.1.2.2.1.9.1");
echo "$a<BR>\n";
The first value printed might be: 'Timeticks: (0) 0:00:00.00', whereas with quick_print enabled, just '0:00:00.00' would be printed.

By default the UCD SNMP library returns verbose values, quick_print is used to return only the value.

Currently strings are still returned with extra quotes, this will be corrected in a later release.

snmp_set_quick_print() is only available when using the UCD SNMP library. This function is not applicable to Windows NT.

XLVI. String functions

These functions all manipulate strings in various ways. Some more specialized sections can be found in the regular expression and URL handling sections.

Table of Contents
AddSlashes quote string with slashes
bin2hex convert binary data into hexadecimal representation
Chop remove trailing whitespace
Chr return a specific character
chunk_split Split a string into smaller chunks
convert_cyr_string Convert from one Cyrillic character set to another
crypt DES-encrypt a string
echo output one or more strings
explode split a string by string
flush flush the output buffer
get_meta_tags Extracts all meta tag content attributes from a file and returns an array
htmlspecialchars Convert special characters to HTML entities.
htmlentities Convert all applicable characters to HTML entities.
implode join array elements with a string
join join array elements with a string
ltrim Strip whitespace from the beginning of a string.
md5 calculate the md5 hash of a string
nl2br Converts newlines to HTML line breaks.
Ord return ASCII value of character
parse_str parses the string into variables
print output a string
printf output a formatted string
quoted_printable_decode Convert a quoted-printable string to an 8 bit string
QuoteMeta quote meta characters
rawurldecode decode URL-encoded strings
rawurlencode URL-encode according to RFC1738
setlocale set locale information
similar_text calculate the similarity between two strings
soundex calculate the soundex key of a string
sprintf return a formatted string
strchr Find the first occurrence of a character.
strcmp binary safe string comparison
strcspn find length of initial segment not matching mask
strip_tags Strip HTML and PHP tags from a string
StripSlashes un-quote string quoted with addslashes
strlen get string length
strrpos Find position of last occurrence of a char in a string.
strpos Find position of first occurrence of a string.
strrchr Find the last occurrence of a character in a string.
strrev Reverse a string.
strspn find length of initial segment matching mask
strstr Find first occurrence of a string.
strtok tokenize string
strtolower Make a string lowercase.
strtoupper Make a string uppercase.
str_replace Replace all occurrences of needle in haystack with str
strtr Translate certain characters.
substr Return part of a string.
trim Strip whitespace from the beginning and end of a string.
ucfirst Make a string's first character uppercase
ucwords Uppercase the first character of each word in a string

AddSlashes

AddSlashes -- quote string with slashes

Description

string addslashes(string str);
Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the null byte).

See also stripslashes(), htmlspecialchars() and quotemeta().

bin2hex

bin2hex -- convert binary data into hexadecimal representation

Description

string bin2hex(string str);
Returns an ASCII string containing the hexadecimal representation of str. The conversion is done byte-wise with the high-nibble first.

Chop

Chop -- remove trailing whitespace

Description

string chop(string str);
Returns the argument string without trailing whitespace.
Example 1. chop() example
$trimmed = Chop($line);

See also trim().

Chr

Chr -- return a specific character

Description

string chr(int ascii);
Returns a one-character string containing the character specified by ascii.
Example 1. chr() example
$str .= chr(27); /* add an escape character at the end of $str */

/* Often this is more useful */
$str = sprintf("The string ends in escape: %c", 27);
This function complements ord(). See also sprintf() with a format string of %c.

chunk_split

chunk_split -- Split a string into smaller chunks

Description

string chunk_split(string string, int [chunklen] , string [end] );
Can be used to split a string into smaller chunks which is useful for e.g. converting base64_encode output to match RFC 2045 behaviour. It inserts every chunklen (defaults to 76) chars the string end (defaults to "\r\n"). It returns the new string leaving the original string untouched.
Example 1. chr_replace() example
# format $data using RFC 2045 semantics

$new_string = chunk_split(base64_encode($data));
This function is significantly faster than ereg_replace().

convert_cyr_string

convert_cyr_string -- Convert from one Cyrillic character set to another

Description

string convert_cyr_string(string str, string from, string to);
This function converts the given string from one Cyrillic character set to another. The from and to arguments are single characters that represent the source and target Cyrillic character sets. The supported types are:
    k - koi8-r

    w - windows-1251

    i - iso8859-5

    a - x-cp866

    d - x-cp866

    m - x-mac-cyrillic

crypt

crypt -- DES-encrypt a string

Description

string crypt(string str, string [salt]);
crypt() will encrypt a string using the standard Unix DES encryption method. Arguments are a string to be encrypted and an optional two-character salt string to base the encryption on. See the Unix man page for your crypt function for more information.

If the salt argument is not provided, it will be randomly generated by PHP.

Some operating systems support more than one type of encryption. In fact, sometimes the standard DES encryption is replaced by an MD5 based encryption algorithm. The encryption type is triggered by the salt argument. At install time, PHP determines the capabilities of the crypt function and will accept salts for other encryption types. If no salt is provided, PHP will auto-generate a standard 2-character DES salt by default unless the default encryption type on the system is MD5 in which case a random MD5-compatible salt is generated. PHP sets a constant named CRYPT_SALT_LENGTH which tells you whether a regular 2-character salt applies to your system or the longer 12-char MD5 salt is applicable.

The standard DES encryption crypt() contains the salt as the first two characters of the output.

On systems where the crypt() function supports multiple encryption types, the following constants are set to 0 or 1 depending on whether the given type is available:

    CRYPT_STD_DES - Standard DES encryption with a 2-char SALT

    CRYPT_EXT_DES - Extended DES encryption with a 9-char SALT

    CRYPT_MD5 - MD5 encryption with a 12-char SALT starting with $1$

    CRYPT_BLOWFISH - Extended DES encryption with a 16-char SALT starting with $2$

There is no decrypt function, since crypt() uses a one-way algorithm.

echo

echo -- output one or more strings

Description

echo(string arg1, string [argn]...);
Outputs all parameters.

echo() is not actually a function (it is a language construct) so you are not required to use parantheses with it.
Example 1. echo example
echo "Hello World";

See also: print() printf() flush()

explode

explode -- split a string by string

Description

array explode(string separator, string string);
Returns an array of strings containing the elements separated by separator.
Example 1. explode() example
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);

See also split() and implode().

flush

flush -- flush the output buffer

Description

void flush(void);
Flushes the output buffers of PHP and whatever backend PHP is using (CGI, a web server, etc.) This effectively tries to push all the output so far to the user's browser.

get_meta_tags

get_meta_tags -- Extracts all meta tag content attributes from a file and returns an array

Description

array get_meta_tags(string filename, int [use_include_path]);
Opens filename and parses it line by line for <meta> tags of the form
Example 1. Meta Tags Example
<meta name="author" content="name">
<meta name="tags" content="php3 documentation">
</head> <!-- parsing stops here -->
(pay attention to line endings - PHP3 uses a native function to parse the input, so a Mac file won't work on Unix).

The value of the name property becomes the key, the value of the content property becomes the value of the returned array, so you can easily use standard array functions to traverse it or access single values. Special characters in the value of the name property are substituted with '_', the rest is converted to lower case.

Setting use_include_path to 1 will result in PHP3 trying to open the file along the standard include path.

htmlspecialchars

htmlspecialchars -- Convert special characters to HTML entities.

Description

string htmlspecialchars(string string);
Certain characters have special significance in HTML, and should be represented by HTML entities if they are to preserve their meanings. This function returns a string with these conversions made.

This function is useful in preventing user-supplied text from containing HTML markup, such as in a message board or guest book application.

At present, the translations that are done are:

    '&' (ampersand) becomes '&amp;'

    '"' (double quote) becomes '&quot;'

    '<' (less than) becomes '&lt;'

    '>' (greater than) becomes '&gt;'

Note that this functions does not translate anything beyond what is listed above. For full entity translation, see htmlentities().

See also htmlentities() and nl2br().

htmlentities

htmlentities -- Convert all applicable characters to HTML entities.

Description

string htmlentities(string string);
This function is identical to htmlspecialchars() in all ways, except that all characters which have HTML entity equivalents are translated into these entities.

At present, the ISO-8859-1 character set is used.

See also htmlspecialchars() and nl2br().

implode

implode -- join array elements with a string

Description

string implode(array pieces, string glue);
Returns a string containing a string representation of all the array elements in the same order, with the glue string between each element.
Example 1. implode() example
$colon_separated = implode($array, ":");

See also explode(), join(), and split().

join

join -- join array elements with a string

Description

string join(array pieces, string glue);
join() is an alias to implode(), and is identical in every way.

ltrim

ltrim -- Strip whitespace from the beginning of a string.

Description

string ltrim(string str);
This function strips whitespace from the start of a string and returns the stripped string.

See also chop() and trim().

md5

md5 -- calculate the md5 hash of a string

Description

string md5(string str);
Calculates the MD5 hash of str using the RSA Data Security, Inc. MD5 Message-Digest Algorithm.

nl2br

nl2br -- Converts newlines to HTML line breaks.

Description

string nl2br(string string);
Returns string with '<BR>' inserted before all newlines.

See also htmlspecialchars() and htmlentities().

Ord

Ord -- return ASCII value of character

Description

int ord(string string);
Returns the ASCII value of the first character of string. This function complements chr().
Example 1. ord() example
if (ord($str) == 10) {
    echo("The first character of \$str is a line feed.\n");
}

See also chr().

parse_str

parse_str -- parses the string into variables

Description

void parse_str(string str);
Parses str as if it were the query string passed via an URL and sets variables in the current scope.
Example 1. Using parse_str()
$str = "first=value&second[]=this+works&second[]=another";
parse_str($str);
echo $first; /* prints "value" */
echo $second[0]; /* prints "this works" */
echo $second[1]; /* prints "another" */
      

print

print -- output a string

Description

print(string arg);
Outputs arg.

See also: echo() printf() flush()

printf

printf -- output a formatted string

Description

int printf(string format, mixed [args]...);
Produces output according to format, which is described in the documentation for sprintf().

See also: print(), sprintf(), and flush().

quoted_printable_decode

quoted_printable_decode -- Convert a quoted-printable string to an 8 bit string

Description

string quoted_printable_decode(string str);
This function returns an 8-bit binary string corresponding to the decoded quoted printable string. This function is similar to imap_qprint(), except this one does not require the IMAP module to work.

QuoteMeta

QuoteMeta -- quote meta characters

Description

int quotemeta(string str);
Returns a version of str with a backslash character (\) before every character that is among these:
. \\ + * ? [ ^ ] ( $ )
See also addslashes(), htmlentities(), htmlspecialchars(), nl2br(), and stripslashes().

rawurldecode

rawurldecode -- decode URL-encoded strings

Description

string rawurldecode(string str);
Returns a string in which the sequences with percent (%) signs followed by two hex digits have been replaced with literal characters. For example, the string
foo%20bar%40baz
decodes into
foo bar@baz
See also rawurlencode().

rawurlencode

rawurlencode -- URL-encode according to RFC1738

Description

string rawurlencode(string str);
Returns a string in which all non-alphanumeric characters except
-_.
have been replaced with a percent (%) sign followed by two hex digits. This is the encoding described in RFC1738 for protecting literal characters from being interpreted as special URL delimiters, and for protecting URL's from being mangled by transmission media with character conversions (like some email systems). For example, if you want to include a password in an ftp url:
Example 1. rawurlencode() example 1
echo '<A HREF="ftp://user:', rawurlencode ('foo @+%/'),
     '@ftp.my.com/x.txt">';
Or, if you pass information in a path info component of the url:
Example 2. rawurlencode() example 2
echo '<A HREF="http://x.com/department_list_script/',
     rawurlencode ('sales and marketing/Miami'), '">';

See also rawurldecode().

setlocale

setlocale -- set locale information

Description

string setlocale(string category, string locale);
category is a string specifying the category of the functions affected by the locale setting:
    LC_ALL for all of the below

    LC_COLLATE for string comparison - not currently implemented in PHP

    LC_CTYPE for character classification and conversion, for example strtoupper()

    LC_MONETARY for localeconv() - not currently implemented in PHP

    LC_NUMERIC for decimal separator

    LC_TIME for date and time formatting with strftime()

If locale is the empty string "", the locale names will be set from the values of environment variables with the same names as the above categories, or from "LANG".

If locale is zero or "0", the locale setting is not affected, only the current setting is returned.

Setlocale returns the new current locale, or false if the locale functionality is not implemented in the plattform, the specified locale does not exist or the category name is invalid. An invalid category name also causes a warning message.

similar_text

similar_text -- calculate the similarity between two strings