downloads | documentation | faq | getting help | mailing lists | reporting bugs | sites | links | my 
search for in the  
view the version of this page
Last updated: Thu, 21 Aug 2003

LXVI. Network Functions



No external libraries are needed to build this extension.


There is no installation needed to use these functions; they are part of the PHP core.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

Table 1. Network Configuration Options

For further details and definition of the PHP_INI_* constants see ini_set().

Here's a short explanation of the configuration directives.

define_syslog_variables boolean

Whether or not to define the various syslog variables (e.g. $LOG_PID, $LOG_CRON, etc.). Turning it off is a good idea performance-wise. At runtime, you can define these variables by calling define_syslog_variables().

Resource Types

This extension has no resource types defined.

Predefined Constants

The constants below are always available as part of the PHP core.

Table 2. openlog() Options

LOG_CONS if there is an error while sending data to the system logger, write directly to the system console
LOG_NDELAY open the connection to the logger immediately
LOG_ODELAY (default) delay opening the connection until the first message is logged
LOG_PERRORprint log message also to standard error
LOG_PIDinclude PID with each message

Table 3. openlog() Facilities

LOG_AUTH security/authorization messages (use LOG_AUTHPRIV instead in systems where that constant is defined)
LOG_AUTHPRIVsecurity/authorization messages (private)
LOG_CRONclock daemon (cron and at)
LOG_DAEMONother system daemons
LOG_KERNkernel messages
LOG_LOCAL0 ... LOG_LOCAL7reserved for local use, these are not available in Windows
LOG_LPRline printer subsystem
LOG_MAILmail subsystem
LOG_NEWSUSENET news subsystem
LOG_SYSLOGmessages generated internally by syslogd
LOG_USERgeneric user-level messages
LOG_UUCPUUCP subsystem

Table 4. syslog() Priorities (in descending order)

LOG_EMERGsystem is unusable
LOG_ALERTaction must be taken immediately
LOG_CRITcritical conditions
LOG_ERRerror conditions
LOG_WARNINGwarning conditions
LOG_NOTICEnormal, but significant, condition
LOG_INFOinformational message
LOG_DEBUGdebug-level message

Table 5. dns_get_record() Options

DNS_AIPv4 Address Resource
DNS_MXMail Exchanger Resource
DNS_CNAMEAlias (Canonical Name) Resource
DNS_NSAuthoritative Name Server Resource
DNS_PTRPointer Resource
DNS_HINFOHost Info Resource (See IANA's Operating System Names for the meaning of these values)
DNS_SOAStart of Authority Resource
DNS_TXTText Resource
DNS_ANYAny Resource Record. On most systems this returns all resource records, however it should not be counted upon for critical uses. Try DNS_ALL instead.
DNS_AAAAIPv6 Address Resource
DNS_ALLItteratively query the name server for each available record type.
Table of Contents
checkdnsrr --  Check DNS records corresponding to a given Internet host name or IP address
closelog -- Close connection to system logger
debugger_off -- Disable internal PHP debugger (PHP 3)
debugger_on -- Enable internal PHP debugger (PHP 3)
define_syslog_variables -- Initializes all syslog related constants
dns_check_record -- Synonym for checkdnsrr()
dns_get_mx -- Synonym for getmxrr()
dns_get_record --  Fetch DNS Resource Records associated with a hostname
fsockopen --  Open Internet or Unix domain socket connection
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
getmxrr --  Get MX records corresponding to a given Internet host name
getprotobyname --  Get protocol number associated with protocol name
getprotobynumber --  Get protocol name associated with protocol number
getservbyname --  Get port number associated with an Internet service and protocol
getservbyport --  Get Internet service which corresponds to port and protocol
ip2long --  Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address.
long2ip --  Converts an (IPv4) Internet network address into a string in Internet standard dotted format
openlog -- Open connection to system logger
pfsockopen --  Open persistent Internet or Unix domain socket connection
socket_get_status --  Alias of stream_get_meta_data().
socket_set_blocking -- Alias for stream_set_blocking()
socket_set_timeout -- Alias for stream_set_timeout()
syslog -- Generate a system log message

add a note add a note User Contributed Notes
Network Functions
null at tty dot net dot ru
13-Oct-2003 06:51
Ported Net::Netmask perl module:
anderson at piq dot com dot br
07-Aug-2003 12:10
If you want to get the interface of an IP, based on the local route table, use this.

function GetIfaceforIP($user_ip)
    $route = "/bin/netstat -rn";

    exec($route, $aoutput);
    foreach($aoutput as $key => $line)
        if($key > 1)
            $line = ereg_replace("[[:space:]]+",",",$line);
            list($network, $gateway, $mask, $flags, $mss, $window, $irtt, $iface) = explode(",", $line)
            if((ip2long($user_ip) & ip2long($mask)) == ip2long($network))
                return $iface;
03-Apr-2003 11:11
Alternative cidr_conv function - a little easier to follow

function cidr_conv($cidr_address) {
  $first = substr($cidr_address, 0, strpos($cidr_address, "/"));
  $netmask = substr(strstr($cidr_address, "/"), 1);

  $first_bin = str_pad(decbin(ip2long($first)), 32, "0", STR_PAD_LEFT);
  $netmask_bin = str_pad(str_repeat("1", (integer)$netmask), 32, "0", STR_PAD_RIGHT);
  for ($i = 0; $i < 32; $i++) {
    if ($netmask_bin[$i] == "1")
      $last_bin .= $first_bin[$i];
      $last_bin .= "1";

  $last = long2ip(bindec($last_bin));

  return "$first - $last";
trevor-hemsley at nospam dot dial dot pipex dot com
17-Oct-2002 01:53
Previous example of IP range to CIDR list does not cope with ranges as well as the perl Net::Netmask range2cidrlist() function. In PHP this looks like

function imask($this)
// use base_convert not dechex because dechex is broken and returns 0x80000000 instead of 0xffffffff
return base_convert((pow(2,32) - pow(2, (32-$this)))), 1016);

while (
$tbit 0)
$im hexdec(imask($tbit-1));
$imand $ibase $im;
if (
$imand != $ibase)

// this function returns an array of cidr lists that map the range given
$s explode("."$istart);
// PHP ip2long does not handle leading zeros on IP addresses! 172.016 comes back as 172.14, seems to be treated as octal!
$start "";
$dot "";
while (list(
$key,$val) = each($s))
$start sprintf("%s%s%d",$start,$dot,$val);
$dot ".";
$end "";
$dot "";
$e explode(".",$iend);
while (list(
$key,$val) = each($e))
$end sprintf("%s%s%d",$end,$dot,$val);
$dot ".";
$start ip2long($start);
$end ip2long($end);
$result = array();
while (
$end $start)
$maxsize imaxblock($start,32);
$x log($end $start 1)/log(2);
$maxdiff floor(32 floor($x));
$ip long2ip($start);
if (
$maxsize $maxdiff)
$maxsize $maxdiff;
$start += pow(2, (32-$maxsize));
13-Oct-2002 05:49
... and this one will do the opposite (o return NULL for invalid netblocks) : -> -> ->

function ip2cidr($ip_start,$ip_end) {
if(long2ip(ip2long($ip_start))!=$ip_start or long2ip(ip2long($ip_end))!=$ip_end) return NULL;
if($ipl_start>0 && $ipl_end<0) $delta=($ipl_end+4294967296)-$ipl_start;
else $delta=$ipl_end-$ipl_start;
if(ip2long($ip_start)==0 && substr_count($netmask,"1")==32) return "";
if($delta<0 or ($delta>0 && $delta%2==0)) return NULL;
for($mask=0;$mask<32;$mask++) if($netmask[$mask]==1) break;
if(substr_count($netmask,"0")!=$mask) return NULL;
return "$ip_start/$mask";
15-Dec-2001 11:46
PHP miss CIDR functions.

This one will convert a CIDR like this: -> -
127.0/16 -> -

function cidrconv($net) {
$n=3-substr_count($net, ".");
if ($n>0) { for ($i=$n;$i>0;$i--) $start.=".0"; }
for ($i=0;$i<32;$i++) {
if ($bits1[$i]==$bits2[$i]) $final.=$bits1[$i];
if ($bits1[$i]==1 and $bits2[$i]==0) $final.=$bits1[$i];
if ($bits1[$i]==0 and $bits2[$i]==1) $final.=$bits2[$i];
return $start." - ".long2ip(bindec($final));
philip at cornado dot c()m
05-Jul-2001 04:20
More socket functions can be seen here :

 Last updated: Thu, 21 Aug 2003
show source | credits | sitemap | mirror sites 
Copyright © 2001-2003 The PHP Group
All rights reserved.
This mirror generously provided by:
Last updated: Sat 01 Nov 2003 04:13:36 EST EST