# params

function_name: intval
name: base
type: int
initializer: 10
description:
<p class="para">
       The base for the conversion
      </p>
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
        If <code class="parameter">base</code> is 0, the base used is determined
        by the format of <code class="parameter">value</code>:
        <ul class="itemizedlist">
         <li class="listitem">
          <span class="simpara">
           if string includes a &quot;0x&quot; (or &quot;0X&quot;) prefix, the base is taken
           as 16 (hex); otherwise,
          </span>
         </li>
         <li class="listitem">
          <span class="simpara">
           if string starts with a &quot;0b&quot; (or &quot;0B&quot;), the base is taken
           as 2 (binary); otherwise,
          </span>
         </li>
         <li class="listitem">
          <span class="simpara">
           if string starts with &quot;0&quot;, the base is taken as 8 (octal);
           otherwise,
          </span>
         </li>
         <li class="listitem">
          <span class="simpara">
           the base is taken as 10 (decimal).
          </span>
         </li>
        </ul>
       </p>
      </p></blockquote>


function_name: is_callable
name: syntax_only
type: bool
description:
<p class="para">
       If set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> the function only verifies that
       <code class="parameter">value</code> might be a function or method. It will only
       reject simple variables that are not strings, or an array that does
       not have a valid structure to be used as a callback. The valid ones
       are supposed to have only 2 entries, the first of which is an object
       or a string, and the second a string.
      </p>


function_name: is_callable
name: callable_name
type: string
description:
<p class="para">
       Receives the &quot;callable name&quot;.  In the example below it is
       &quot;someClass::someMethod&quot;.  Note, however, that despite the implication
       that someClass::SomeMethod() is a callable static method, this is not
       the case.
      </p>


function_name: print_r
name: return
type: bool
description:
<p class="para">
       If you would like to capture the output of <span class="function">print_r</span>, 
       use the <code class="parameter">return</code> parameter.  When this parameter is set
       to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, <span class="function">print_r</span> will return the information rather than print it.
      </p>


function_name: serialize
name: value
type: mixed
description:
<p class="para">
       The value to be serialized. <span class="function">serialize</span>
       handles all types, except the <span class="type">resource</span>-type and some <span class="type">object</span>s (see note below).
       You can even <span class="function">serialize</span> arrays that contain
       references to itself. Circular references inside the array/object you 
       are serializing will also be stored. Any other 
       reference will be lost.
      </p>
      <p class="para">
       When serializing objects, PHP will attempt to call the member functions
       <a href="language.oop5.magic.html#object.serialize" class="link">__serialize()</a> or
       <a href="language.oop5.magic.html#object.sleep" class="link">__sleep()</a> prior to serialization.
       This is to allow the object to do any last minute clean-up, etc. prior 
       to being serialized. Likewise, when the object is restored using 
       <span class="function">unserialize</span> the <a href="language.oop5.magic.html#object.unserialize" class="link">__unserialize()</a> or
       <a href="language.oop5.magic.html#object.wakeup" class="link">__wakeup()</a> member function is called.
      </p>
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
       Object&#039;s private members have the class name prepended to the member
       name; protected members have a &#039;*&#039; prepended to the member name.
       These prepended values have null bytes on either side.
       </p>
      </p></blockquote>


function_name: strval
name: value
type: mixed
description:
<p class="para">
       The variable that is being converted to a <span class="type">string</span>.
      </p>
      <p class="para">
       <code class="parameter">value</code> may be any scalar type, <span class="type">null</span>,
       or an <span class="type">object</span> that implements the <a href="language.oop5.magic.html#object.tostring" class="link">__toString()</a>
       method. You cannot use <span class="function">strval</span> on arrays or on
       objects that do not implement the
       <a href="language.oop5.magic.html#object.tostring" class="link">__toString()</a> method.
      </p>


function_name: unserialize
name: data
type: string
description:
<p class="para">
       The serialized string.
      </p>
      <p class="para">
       If the variable being unserialized is an object, after successfully 
       reconstructing the object PHP will automatically attempt to call the
       <a href="language.oop5.magic.html#object.unserialize" class="link">__unserialize()</a> or <a href="language.oop5.magic.html#object.wakeup" class="link">__wakeup()</a> methods (if one exists).
      </p>
      <p class="para">
       <blockquote class="note"><p><strong class="note">Note</strong>: 
        <strong>unserialize_callback_func directive</strong><br />
        <p class="para">
         It&#039;s possible to set a callback-function which will be called,
         if an undefined class should be instantiated during unserializing.
         (to prevent getting an incomplete <span class="type">object</span> &quot;__PHP_Incomplete_Class&quot;.)
         Use your <var class="filename">php.ini</var>, <span class="function">ini_set</span> or <var class="filename">.htaccess</var> 
         to define <a href="var.configuration.html#ini.unserialize-callback-func" class="link">unserialize_callback_func</a>.
         Everytime an undefined class should be instantiated, it&#039;ll be called.  To disable this feature just
         empty this setting.
        </p>
       </p></blockquote>
      </p>


function_name: unserialize
name: options
type: array
initializer: []
description:
<p class="para">
       Any options to be provided to <span class="function">unserialize</span>, as an
       associative array.
      </p>
      <table class="doctable table">
       <caption><strong>Valid options</strong></caption>
       
        <thead>
         <tr>
          <th>Name</th>
          <th>Type</th>
          <th>Description</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td><code class="literal">allowed_classes</code></td>
          <td><span class="type">mixed</span></td>
          <td>
           <span class="simpara">
            Either an <span class="type">array</span> of class names which should be
            accepted, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> to accept no classes, or <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> to accept all
            classes. If this option is defined and
            <span class="function">unserialize</span> encounters an object of a class
            that isn&#039;t to be accepted, then the object will be instantiated as
            <span class="classname">__PHP_Incomplete_Class</span> instead.
           </span>
           <span class="simpara">
            Omitting this option is the same as defining it as <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>: PHP
            will attempt to instantiate objects of any class.
           </span>
          </td>
         </tr>

         <tr>
          <td><code class="literal">max_depth</code></td>
          <td><span class="type">int</span></td>
          <td>
           <span class="simpara">
            The maximum depth of structures permitted during unserialization,
            and is intended to prevent stack overflows. The default depth limit
            is <code class="literal">4096</code> and can be disabled by setting
            <code class="literal">max_depth</code> to <code class="literal">0</code>.
           </span>
          </td>
         </tr>

        </tbody>
       
      </table>


function_name: var_export
name: return
type: bool
description:
<p class="para">
       If used and set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, <span class="function">var_export</span> will return
       the variable representation instead of outputting it.
      </p>


function_name: OAuth.__construct
name: signature_method
type: string
description:
<p class="para">
       This optional parameter defines which signature method to use, by default it is <strong><code><a href="oauth.constants.html#constant.oauth-sig-method-hmacsha1">OAUTH_SIG_METHOD_HMACSHA1</a></code></strong> (HMAC-SHA1).
      </p>


function_name: OAuth.__construct
name: auth_type
type: int
description:
<p class="para">
       This optional parameter defines how to pass the OAuth parameters
       to a consumer, by default it is
       <strong><code><a href="oauth.constants.html#constant.oauth-auth-type-authorization">OAUTH_AUTH_TYPE_AUTHORIZATION</a></code></strong> (in the 
       <code class="literal">Authorization</code> header).
      </p>


function_name: OAuth.fetch
name: http_method
type: string
description:
<p class="para">
       One of the <strong><code>OAUTH_HTTP_METHOD_*</code></strong>
       <a href="oauth.constants.html" class="link">OAUTH constants</a>, which includes
       GET, POST, PUT, HEAD, or DELETE.
      </p>
      <p class="para">
       HEAD (<strong><code><a href="oauth.constants.html#constant.oauth-http-method-head">OAUTH_HTTP_METHOD_HEAD</a></code></strong>) can be useful for
       discovering information prior to the request (if OAuth credentials are
       in the <code class="literal">Authorization</code> header).
      </p>


function_name: OAuth.getAccessToken
name: auth_session_handle
type: string
description:
<p class="para">
       Authorization session handle, this parameter does not have any
       citation in the core OAuth 1.0 specification but may be 
       implemented by large providers. 
       <a href="http://oauth.pbwiki.com/ScalableOAuth/" class="link external">&raquo;&nbsp;See ScalableOAuth</a>
       for more information.
      </p>


function_name: OAuth.getAccessToken
name: verifier_token
type: string
description:
<p class="para">
       For service providers which support 1.0a, a <code class="parameter">verifier_token</code>
       must be passed while exchanging the request token for the access
       token. If the <code class="parameter">verifier_token</code> is present in <code class="parameter">$_GET</code> 
       or <code class="parameter">$_POST</code> it is passed automatically and the caller 
       does not need to specify a <code class="parameter">verifier_token</code> (usually if the access token 
       is exchanged at the oauth_callback URL).
       <a href="http://oauth.pbwiki.com/ScalableOAuth/" class="link external">&raquo;&nbsp;See ScalableOAuth</a>
       for more information.
      </p>


function_name: OAuth.getAccessToken
name: http_method
type: string
description:
<p class="para">
       HTTP method to use, e.g. <code class="literal">GET</code> or <code class="literal">POST</code>.
      </p>


function_name: OAuth.getRequestToken
name: callback_url
type: string
description:
<p class="para">
       OAuth callback URL. If <code class="parameter">callback_url</code> is passed and is an empty value, it is set to &quot;oob&quot; to address the OAuth 2009.1 advisory.
      </p>


function_name: OAuth.setRequestEngine
name: reqengine
type: int
description:
<p class="para">
      The desired request engine. Set to <strong><code><a href="oauth.constants.html#constant.oauth-reqengine-streams">OAUTH_REQENGINE_STREAMS</a></code></strong>
      to use PHP Streams, or <strong><code><a href="oauth.constants.html#constant.oauth-reqengine-curl">OAUTH_REQENGINE_CURL</a></code></strong> to use
      <a href="book.curl.html" class="link">Curl</a>.
     </p>


function_name: OAuthProvider.checkOAuthRequest
name: method
type: string
description:
<p class="para">
      The <acronym class="acronym">HTTP</acronym> method. Optionally pass in one of the 
      <strong><code>OAUTH_HTTP_METHOD_*</code></strong> <a href="oauth.constants.html" class="link">OAuth constants</a>.
     </p>


function_name: OAuthProvider.__construct
name: params_array
type: array
description:
<p class="para">
      Setting these optional parameters is limited to the
      <a href="features.commandline.html" class="link">CLI SAPI</a>.
     </p>


function_name: OAuthProvider.generateToken
name: strong
type: bool
description:
<p class="para">
      Setting to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> means <code class="literal">/dev/random</code> will be used for
      entropy, as otherwise the non-blocking <code class="literal">/dev/urandom</code> is used.
      This parameter is ignored on Windows.
     </p>


function_name: OAuthProvider.isRequestTokenEndpoint
name: will_issue_request_token
type: bool
description:
<p class="para">
      Sets whether or not it will issue a request token, thus determining if
       <span class="methodname">OAuthProvider::tokenHandler</span> needs to be called.
     </p>


function_name: OAuthProvider.setParam
name: param_val
type: mixed
description:
<p class="para">
      The optional parameter value.
     </p>
     <p class="para">
      To exclude a parameter from signature verification, set
      its value to <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>.
     </p>


function_name: use_soap_error_handler
name: enable
type: bool
description:
<p class="para">
       Set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> to send error details to clients.
      </p>


function_name: SoapClient.__call
name: args
type: array
description:
<p class="para">
       An array of the arguments to pass to the function.
       This can be either an ordered or an associative array.
       Note that most SOAP servers require parameter names to be provided, in which case this must be an associative array.
      </p>


function_name: SoapClient.__construct
name: wsdl
type: null
description:
<p class="para">
       URI of a WSDL file describing the service, which is used to automatically
       configure the client. If not provided, the client will operate in non-WSDL
       mode.
      </p>
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
        By default, the WSDL file will be cached for performance. To disable
        or configure this caching, see
        <a href="" class="link">SOAP Configure Options</a>
        and the <a href="soapclient.construct.html#soapclient.construct.options.cache-wsdl" class="link">
        <code class="literal">cache_wsdl</code> option</a>.
       </p>
      </p></blockquote>


function_name: SoapClient.__construct
name: options
type: array
initializer: []
description:
<p class="para">
       An associative array specifying additional options for the SOAP client.
       If <code class="parameter">wsdl</code> is provided, this is optional; otherwise,
       at least <code class="literal">location</code> and <code class="literal">url</code> must be
       provided.
       <dl>
        
         <dt id="soapclient.construct.options.location">
          <code class="parameter">location</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           The URL of the SOAP server to send the request to.
          </p>
          <p class="para">
           Required if the <code class="parameter">wsdl</code> parameter is not provided.
           If both a <code class="parameter">wsdl</code> parameter and
           <code class="literal">location</code> option are provided, the
           <code class="literal">location</code> option will over-ride any location
           specified in the WSDL file.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.uri">
          <code class="parameter">uri</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           The target namespace of the SOAP service.
          </p>
          <p class="para">
           Required if the <code class="parameter">wsdl</code> parameter is not provided;
           ignored otherwise.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.style">
          <code class="parameter">style</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           Specifies the binding style to use for this client, using the constants
           <strong><code><a href="soap.constants.html#constant.soap-rpc">SOAP_RPC</a></code></strong> and <strong><code><a href="soap.constants.html#constant.soap-document">SOAP_DOCUMENT</a></code></strong>.
           <strong><code><a href="soap.constants.html#constant.soap-rpc">SOAP_RPC</a></code></strong> indicates RPC-style binding, where the
           SOAP request body contains a standard encoding of a function call.
           <strong><code><a href="soap.constants.html#constant.soap-document">SOAP_DOCUMENT</a></code></strong> indicates document-style binding,
           where the SOAP request body contains an XML document with
           service-defined meaning.
          </p>
          <p class="para">
           If the <code class="parameter">wsdl</code> parameter is provided, this
           option is ignored, and the style is read from the WSDL file.
          </p>
          <p class="para">
           If neither this option nor the <code class="parameter">wsdl</code> parameter
           is provided, RPC-style is used.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.use">
          <code class="parameter">use</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           Specifies the encoding style to use for this client, using the
           constants <strong><code><a href="soap.constants.html#constant.soap-encoded">SOAP_ENCODED</a></code></strong> or <strong><code><a href="soap.constants.html#constant.soap-literal">SOAP_LITERAL</a></code></strong>.
           <strong><code><a href="soap.constants.html#constant.soap-encoded">SOAP_ENCODED</a></code></strong> indicates encoding using the types
           defined in the SOAP specification.
           <strong><code><a href="soap.constants.html#constant.soap-literal">SOAP_LITERAL</a></code></strong> indicates encoding using a schema
           defined by the service.
          </p>
          <p class="para">
           If the <code class="parameter">wsdl</code> parameter is provided, this
           option is ignored, and the encoding is read from the WSDL file.
          </p>
          <p class="para">
           If neither this option nor the <code class="parameter">wsdl</code> parameter
           is provided, the &quot;encoded&quot; style is used.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.soap-version">
          <code class="parameter">soap_version</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           Specifies the version of the SOAP protocol to use:
           <strong><code><a href="soap.constants.html#constant.soap-1-1">SOAP_1_1</a></code></strong> for SOAP 1.1,
           or <strong><code><a href="soap.constants.html#constant.soap-1-2">SOAP_1_2</a></code></strong> for SOAP 1.2.
          </p>
          <p class="para">
           If omitted, SOAP 1.1 is used.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.authentication">
          <code class="parameter">authentication</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           Specifies the authentication method when using HTTP authentication
           in requests. The value may be either
           <strong><code><a href="soap.constants.html#constant.soap-authentication-basic">SOAP_AUTHENTICATION_BASIC</a></code></strong>
           or <strong><code><a href="soap.constants.html#constant.soap-authentication-digest">SOAP_AUTHENTICATION_DIGEST</a></code></strong>.
          </p>
          <p class="para">
           If omitted, and the <code class="literal">login</code> option is provided,
           Basic Authentication is used.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.login">
          <code class="parameter">login</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Username to use with HTTP Basic or Digest Authentication.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.password">
          <code class="parameter">password</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Password to use with HTTP Basic or Digest Authentication.
          </p>
          <p class="para">
           Not to be confused with <code class="literal">passphrase</code>,
           which is used with HTTPS Client Certificate authentication.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.local-cert">
          <code class="parameter">local_cert</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Path to a client certificate for use with HTTPS authentication.
           It must be a <acronym class="acronym">PEM</acronym> encoded file which contains your certificate
           and private key.
          </p>
          <p class="para">
           The file can also include a chain of issuers, which must come
           after the client certificate.
          </p>
          <p class="para">
           Can also be set via
           <a href="soapclient.construct.html#soapclient.construct.options.stream-context" class="link">
           <code class="parameter">stream_context</code></a>,
           which also supports specifying a separate private key file.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.passphrase">
          <code class="parameter">passphrase</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Passphrase for the client certificate specified in the
           <code class="literal">local_cert</code> option.
          </p>
          <p class="para">
           Not to be confused with <code class="literal">password</code>,
           which is used for Basic or Digest Authentication.
          </p>
          <p class="para">
           Can also be set via
           <a href="soapclient.construct.html#soapclient.construct.options.stream-context" class="link">
           <code class="parameter">stream_context</code></a>.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.proxy-host">
          <code class="parameter">proxy_host</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Hostname to use as a proxy server for HTTP requests.
          </p>
          <p class="para">
           The <code class="literal">proxy_port</code> option must also be specified.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.proxy-port">
          <code class="parameter">proxy_port</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           TCP port to use when connecting to the proxy server
           specified in <code class="literal">proxy_host</code>.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.proxy-login">
          <code class="parameter">proxy_login</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Optional username to authenticate with the proxy server
           specified in <code class="literal">proxy_host</code>, using HTTP
           Basic Authentication.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.proxy-password">
          <code class="parameter">proxy_password</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Optional password to authenticate with the proxy server
           specified in <code class="literal">proxy_host</code>, using HTTP
           Basic Authentication.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.compression">
          <code class="parameter">compression</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           Enables compression of HTTP SOAP requests and responses.
          </p>
          <p class="para">
           The value should be the bitwise OR of three parts:
           an optional <strong><code><a href="soap.constants.html#constant.soap-compression-accept">SOAP_COMPRESSION_ACCEPT</a></code></strong>,
           to send an &quot;Accept-Encoding&quot; header; either
           <strong><code><a href="soap.constants.html#constant.soap-compression-gzip">SOAP_COMPRESSION_GZIP</a></code></strong>
           or <strong><code><a href="soap.constants.html#constant.soap-compression-deflate">SOAP_COMPRESSION_DEFLATE</a></code></strong> to indicate
           the compression algorithm to use; and a number between 1 and 9
           to indicate the level of compression to use in the request.
           For example, to enable two-way gzip compression with the maximum
           compression level, use
           <code class="literal">SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9</code>.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.encoding">
          <code class="parameter">encoding</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Defines the internal character encoding. Requests are always sent
           in UTF-8, and converted to and from this encoding.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.trace">
          <code class="parameter">trace</code>
          <span class="type">bool</span>
         </dt>
         <dd>
          <p class="para">
           Captures request and response information, which can then be
           accessed with the methods
            <span class="methodname">SoapClient::__getLastRequest</span>,
            <span class="methodname">SoapClient::__getLastRequestHeaders</span>,
            <span class="methodname">SoapClient::__getLastResponse</span>,
           and  <span class="methodname">SoapClient::__getLastResponseHeaders</span>.
          </p>
          <p class="para">
           If omitted, defaults to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.classmap">
          <code class="parameter">classmap</code>
          <span class="type">array</span>
         </dt>
         <dd>
          <p class="para">
           Used to map types defined in the WSDL to PHP classes.
           It should be specified as an associative <span class="type">array</span> with
           type names from the WSDL as keys and names of PHP classes as values.
           Note that the type names of an element is not necessarily the same as
           the element (tag) name.
          </p>
          <p class="para">
           The provided class names should always be fully qualified with any
           <a href="language.namespaces.html" class="link">namespaces</a>, and never
           start with a leading <code class="literal">\</code>. The correct form can be
           generated by using
           <a href="language.oop5.basic.html#language.oop5.basic.class.class" class="link">::class</a>.
          </p>
          <p class="para">
           Note that when creating a class, the constructor will not be called,
           but magic <a href="language.oop5.overloading.html#object.set" class="link">__set()</a> and
           <a href="language.oop5.overloading.html#object.get" class="link">__get()</a> methods for individual
           properties will be.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.typemap">
          <code class="parameter">typemap</code>
          <span class="type">array</span>
         </dt>
         <dd>
          <p class="para">
           Used to define type mappings using user-defined callback functions.
           Each type mapping should be an array with keys
           <code class="literal">type_name</code> (<span class="type">string</span> specifying the
           XML element type);
           <code class="literal">type_ns</code> (<span class="type">string</span> containing namespace
           URI);
           <code class="literal">from_xml</code> (<span class="type">callable</span> accepting one
           string parameter and returning an object) and
           <code class="literal">to_xml</code> (<span class="type">callable</span> accepting one
           object parameter and returning a string).
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.exceptions">
          <code class="parameter">exceptions</code>
          <span class="type">bool</span>
         </dt>
         <dd>
          <p class="para">
           Defines whether errors throw exceptions of type
           <span class="classname">SoapFault</span>.
          </p>
          <p class="para">
           Defaults to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.connection-timeout">
          <code class="parameter">connection_timeout</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           Defines a timeout in seconds for the connection to the SOAP service.
           This option does not define a timeout for services with slow responses.
           To limit the time to wait for calls to finish the
           <a href="filesystem.configuration.html#ini.default-socket-timeout" class="link">default_socket_timeout</a>
           configuration option is available.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.cache-wsdl">
          <code class="parameter">cache_wsdl</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           If the <code class="parameter">wsdl</code> parameter is provided, and the
           <a href="soap.configuration.html#ini.soap.wsdl-cache-enabled" class="link">soap.wsdl_cache_enabled</a>
           configuration option is on, this option determines the type of caching.
           One of <strong><code><a href="soap.constants.html#constant.wsdl-cache-none">WSDL_CACHE_NONE</a></code></strong>,
           <strong><code><a href="soap.constants.html#constant.wsdl-cache-disk">WSDL_CACHE_DISK</a></code></strong>,
           <strong><code><a href="soap.constants.html#constant.wsdl-cache-memory">WSDL_CACHE_MEMORY</a></code></strong> or
           <strong><code><a href="soap.constants.html#constant.wsdl-cache-both">WSDL_CACHE_BOTH</a></code></strong>.
          </p>
          <p class="para">
           Two types of cache are available: in-memory caching, which caches the WSDL
           in the memory of the current process; and disk caching, which caches the
           WSDL in a file on disk, shared between all processes.
           The directory to use for the disk cache is determined by the
           <a href="soap.configuration.html#ini.soap.wsdl-cache-dir" class="link">soap.wsdl_cache_dir</a>
           configuration option.
           Both caches use the same lifetime, determined by the
           <a href="soap.configuration.html#ini.soap.wsdl-cache-ttl" class="link">soap.wsdl_cache_ttl</a>
           configuration option. The in-memory cache also has a maximum number of entries
           determined by the
           <a href="soap.configuration.html#ini.soap.wsdl-cache-limit" class="link">soap.wsdl_cache_limit</a>
           configuration option.
          </p>
          <p class="para">
           If not specified, the <a href="soap.configuration.html#ini.soap.wsdl-cache" class="link">
           soap.wsdl_cache</a> configuration option will be used.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.user-agent">
          <code class="parameter">user_agent</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           The value to use in the <code class="literal">User-Agent</code> HTTP header
           when making requests.
          </p>
          <p class="para">
           Can also be set via <a href="soapclient.construct.html#soapclient.construct.options.stream-context" class="link">
           <code class="parameter">stream_context</code></a>.
          </p>
          <p class="para">
           If not specified, the user agent will be <code class="literal">&quot;PHP-SOAP/&quot;</code>
           followed by the value of <strong><code><a href="reserved.constants.html#constant.php-version">PHP_VERSION</a></code></strong>.
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.stream-context">
          <code class="parameter">stream_context</code>
          <span class="type">resource</span>
         </dt>
         <dd>
          <p class="para">
           A <a href="context.html" class="link">stream context</a> created by
           <span class="function">stream_context_create</span>, which allows additional
           options to be set.
          </p>
          <p class="para">
           The context may include <a href="context.socket.html" class="link">socket context options</a>,
           <a href="context.ssl.html" class="link">SSL context options</a>,
           plus selected <a href="context.http.html" class="link">HTTP context options</a>:
           <code class="literal">content_type</code>, <code class="literal">header</code>,
           <code class="literal">max_redirects</code>, <code class="literal">protocol_version</code>,
           and <code class="literal">user_agent</code>.
          </p>
          <p class="para">
           Note that the following HTTP headers are generated automatically or from other
           options, and will be ignored if specified in the <code class="literal">&#039;header&#039;</code>
           context option: <code class="literal">host</code>, <code class="literal">connection</code>,
           <code class="literal">user-agent</code>, <code class="literal">content-length</code>,
           <code class="literal">content-type</code>, <code class="literal">cookie</code>,
           <code class="literal">authorization</code>, and <code class="literal">proxy-authorization</code>
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.features">
          <code class="parameter">features</code>
          <span class="type">int</span>
         </dt>
         <dd>
          <p class="para">
           A bitmask to enable one or more of the following features:
           <dl>
            
             <dt>
              <strong><code><a href="soap.constants.html#constant.soap-single-element-arrays">SOAP_SINGLE_ELEMENT_ARRAYS</a></code></strong>
             </dt>
             <dd>
              <p class="para">
               When decoding a response to an array, the default behaviour is to detect whether
               an element name appears once or multiple times in a particular parent element.
               For elements which appear only once, an object property allows direct access to
               the content; for elements which appear more than once, the property contains an
               array with the content of each matching element.
              </p>
              <p class="para">
               If the <strong><code><a href="soap.constants.html#constant.soap-single-element-arrays">SOAP_SINGLE_ELEMENT_ARRAYS</a></code></strong> feature is enabled,
               elements which appear only once are placed in a single-element array, so that
               access is consistent for all elements. This only has an effect when using a WSDL
               containing a schema for the response. See Examples section for an illustration.
              </p>
             </dd>
            
            
             <dt>
              <strong><code><a href="soap.constants.html#constant.soap-use-xsi-array-type">SOAP_USE_XSI_ARRAY_TYPE</a></code></strong>
             </dt>
             <dd>
              <p class="para">
               When the <a href="soapclient.construct.html#soapclient.construct.options.use" class="link"><code class="literal">use</code>
               option</a> or WSDL property is set to <code class="literal">encoded</code>,
               force arrays to use a type of <code class="literal">SOAP-ENC:Array</code>, rather than a
               schema-specific type.
              </p>
             </dd>
            
            
             <dt>
              <strong><code><a href="soap.constants.html#constant.soap-wait-one-way-calls">SOAP_WAIT_ONE_WAY_CALLS</a></code></strong>
             </dt>
             <dd>
              <p class="para">
               Wait for a response even if the WSDL indicates a one-way request.
              </p>
             </dd>
            
           </dl>
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.keep-alive">
          <code class="parameter">keep_alive</code>
          <span class="type">bool</span>
         </dt>
         <dd>
          <p class="para">
           a boolean value defining whether
           to send the <code class="literal">Connection: Keep-Alive</code> header or
           <code class="literal">Connection: close</code>.
          </p>
          <p class="para">
           Defaults to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>
          </p>
         </dd>
        
        
         <dt id="soapclient.construct.options.ssl-method">
          <code class="parameter">ssl_method</code>
          <span class="type">string</span>
         </dt>
         <dd>
          <p class="para">
           Specifies the SSL or TLS protocol version to use with secure HTTP
           connections, instead of the default negotiation.
           Specifying <strong><code><a href="soap.constants.html#constant.soap-ssl-method-sslv2">SOAP_SSL_METHOD_SSLv2</a></code></strong>
           or <strong><code><a href="soap.constants.html#constant.soap-ssl-method-sslv3">SOAP_SSL_METHOD_SSLv3</a></code></strong> will force use of SSL 2
           or SSL 3, respectively.
           Specifying <strong><code><a href="soap.constants.html#constant.soap-ssl-method-sslv23">SOAP_SSL_METHOD_SSLv23</a></code></strong> has no effect;
           the constant exists only for backwards compatibility.
           As of PHP 7.2, specifying <strong><code><a href="soap.constants.html#constant.soap-ssl-method-tls">SOAP_SSL_METHOD_TLS</a></code></strong>
           also has no effect; in earlier versions, it forced use of TLS 1.0.
          </p>
          <p class="para">
           Note that SSL versions 2 and 3 are considered insecure, and may not
           be supported by the installed OpenSSL library.
          </p>
          <p class="para">
           This option is <em>DEPRECATED</em> as of PHP 8.1.0.
           A more flexible alternative, which allows specifying
           individual versions of TLS, is to use the
           <a href="soapclient.construct.html#soapclient.construct.options.stream-context" class="link">
           <code class="parameter">stream_context</code></a> option with
           the &#039;crypto_method&#039; context parameter.
           <div class="example" id="example-38">
            <p><strong>Example # Specifying use of TLS 1.3 only</strong></p>
            <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$context </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">([<br />    </span><span style="color: #DD0000">'ssl' </span><span style="color: #007700">=&gt; [<br />        </span><span style="color: #DD0000">'crypto_method' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT<br />     </span><span style="color: #007700">]<br />]);<br /></span><span style="color: #0000BB">$client </span><span style="color: #007700">= new </span><span style="color: #0000BB">SoapClient</span><span style="color: #007700">(</span><span style="color: #DD0000">"some.wsdl"</span><span style="color: #007700">, [</span><span style="color: #DD0000">'context' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$context</span><span style="color: #007700">]);</span></span></code></div>
            </div>

           </div>
          </p>
         </dd>
        
       </dl>
      </p>


function_name: SoapClient.__doRequest
name: oneWay
type: bool
description:
<p class="para">
       If <code class="parameter">oneWay</code> is set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, this method returns nothing.
       Use this where a response is not expected.
      </p>


function_name: SoapClient.__setCookie
name: value
type: null
description:
<p class="para">
       The value of the cookie. If not specified, the cookie will be deleted.
      </p>


function_name: SoapClient.__setSoapHeaders
name: headers
type: null
description:
<p class="para">
       The headers to be set. It could be <span class="classname">SoapHeader</span>
       object or array of <span class="classname">SoapHeader</span> objects.
       If not specified or set to <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, the headers will be deleted.
      </p>


function_name: SoapClient.__soapCall
name: args
type: array
description:
<p class="para">
       An array of the arguments to pass to the function. This can be either
       an ordered or an associative array. Note that most SOAP servers require
       parameter names to be provided, in which case this must be an
       associative array.
      </p>


function_name: SoapClient.__soapCall
name: options
type: null
description:
<p class="para">
       An associative array of options to pass to the client.
      </p>
      <p class="para">
       The <code class="literal">location</code> option is the URL of the remote Web service.
      </p>
      <p class="para">
       The <code class="literal">uri</code> option is the target namespace of the SOAP service.
      </p>
      <p class="para">
        The <code class="literal">soapaction</code> option is the action to call.
      </p>


function_name: SoapClient.__soapCall
name: outputHeaders
type: array
description:
<p class="para">
       If supplied, this array will be filled with the headers from the SOAP response.
      </p>


function_name: SoapServer.addFunction
name: functions
type: int
description:
<p class="para">
       To export one function, pass the function name into this parameter as
       a string.
      </p>
      <p class="para">
       To export several functions, pass an array of function names.
      </p>
      <p class="para">
       To export all the functions, pass a special constant <strong><code><a href="soap.constants.html#constant.soap-functions-all">SOAP_FUNCTIONS_ALL</a></code></strong>.
      </p>
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
        <code class="parameter">functions</code> must receive all input arguments in the same
        order as defined in the WSDL file (They should not receive any output parameters
        as arguments) and return one or more values. To return several values they must
        return an array with named output parameters.
       </p>
      </p></blockquote>


function_name: SoapServer.__construct
name: wsdl
type: null
description:
<p class="para">
       To use the SoapServer in WSDL mode, pass the URI of a WSDL file.
       Otherwise, pass <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> and set the <code class="literal">uri</code> option to the
       target namespace for the server.
      </p>


function_name: SoapServer.__construct
name: options
type: array
initializer: []
description:
<p class="para">
       Allow setting a default SOAP version (<code class="literal">soap_version</code>),
       internal character encoding (<code class="literal">encoding</code>),
       and actor URI (<code class="literal">actor</code>).
      </p>
      <p class="para">
       The <code class="literal">classmap</code> option can be used to map some WSDL
       types to PHP classes. This option must be an array with WSDL types
       as keys and names of PHP classes as values.
      </p>
      <p class="para">
       The <code class="literal">typemap</code> option is an array of type mappings.
       Type mapping is an array with keys <code class="literal">type_name</code>,
       <code class="literal">type_ns</code> (namespace URI), <code class="literal">from_xml</code>
       (callback accepting one string parameter) and <code class="literal">to_xml</code>
       (callback accepting one object parameter).
      </p>
      <p class="para">
       The <code class="literal">cache_wsdl</code> option is one of
       <strong><code><a href="soap.constants.html#constant.wsdl-cache-none">WSDL_CACHE_NONE</a></code></strong>,
       <strong><code><a href="soap.constants.html#constant.wsdl-cache-disk">WSDL_CACHE_DISK</a></code></strong>,
       <strong><code><a href="soap.constants.html#constant.wsdl-cache-memory">WSDL_CACHE_MEMORY</a></code></strong> or
       <strong><code><a href="soap.constants.html#constant.wsdl-cache-both">WSDL_CACHE_BOTH</a></code></strong>.
      </p>
      <p class="para">
       There is also a <code class="literal">features</code> option which can be set to
       <strong><code><a href="soap.constants.html#constant.soap-wait-one-way-calls">SOAP_WAIT_ONE_WAY_CALLS</a></code></strong>,
       <strong><code><a href="soap.constants.html#constant.soap-single-element-arrays">SOAP_SINGLE_ELEMENT_ARRAYS</a></code></strong>,
       <strong><code><a href="soap.constants.html#constant.soap-use-xsi-array-type">SOAP_USE_XSI_ARRAY_TYPE</a></code></strong>.
      </p>
      <p class="para">
       The <code class="literal">send_errors</code> option can be set to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> to sent a
       generic error message (&quot;Internal error&quot;) instead of the specific error
       message sent otherwise.
      </p>


function_name: SoapServer.fault
name: name
type: string
initializer: ""
description:
<p class="para">
       The name of the fault. This can be used to select a name from a WSDL file.
      </p>


function_name: SoapServer.handle
name: request
type: null
description:
<p class="para">
       The SOAP request. If this argument is omitted, the request is assumed to be
       in the raw POST data of the HTTP request.
      </p>


function_name: SoapServer.setClass
name: args
type: mixed
description:
<p class="para">
       These optional parameters will be passed to the default class constructor
       during object creation.
      </p>


function_name: SoapServer.setPersistence
name: mode
type: int
description:
<p class="para">
       One of the <code class="literal">SOAP_PERSISTENCE_XXX</code> constants.
      </p>
      <p class="para">
       <strong><code><a href="soap.constants.html#constant.soap-persistence-request">SOAP_PERSISTENCE_REQUEST</a></code></strong> - SoapServer data does not persist between
       requests. This is the <strong>default</strong> behavior of any SoapServer
       object after setClass is called. 
      </p>
      <p class="para">
       <strong><code><a href="soap.constants.html#constant.soap-persistence-session">SOAP_PERSISTENCE_SESSION</a></code></strong> - SoapServer data persists between requests.
       This is accomplished by serializing the SoapServer class data into
       <var class="varname">$_SESSION[&#039;_bogus_session_name&#039;]</var>, because of this 
       <span class="function">session_start</span> must be called before this persistence mode is set. 
      </p>


function_name: SoapHeader.__construct
name: data
type: mixed
description:
<p class="para">
       A SOAP header&#039;s content. It can be a PHP value or a
       <span class="classname">SoapVar</span> object.
      </p>


function_name: SoapHeader.__construct
name: actor
type: string
description:
<p class="para">
       Value of the <code class="literal">actor</code> attribute of the SOAP header
       element.
      </p>


function_name: SoapParam.__construct
name: data
type: mixed
description:
<p class="para">
       The data to pass or return. This parameter can be passed directly as PHP
       value, but in this case it will be named as <code class="literal">paramN</code> and
       the SOAP service may not understand it.
      </p>


function_name: SoapVar.__construct
name: encoding
type: null
description:
<p class="para">
       The encoding ID, one of the <code class="literal">XSD_...</code> constants.
      </p>


function_name: Yar_Server.__construct
name: obj
type: Object
description:
<p class="para">
       An Object, all public methods of its will be registered as RPC
       services.   
     </p>


function_name: Yar_Client.setOpt
name: name
type: int
description:
<p class="para">
      it can be:
        <strong><code><a href="yar.constants.html#constant.yar-opt-packager">YAR_OPT_PACKAGER</a></code></strong>,
        <strong><code>YAR_OPT_PERSISTENT</code></strong> (Need server support),
        <strong><code><a href="yar.constants.html#constant.yar-opt-timeout">YAR_OPT_TIMEOUT</a></code></strong>,
        <strong><code><a href="yar.constants.html#constant.yar-opt-connect-timeout">YAR_OPT_CONNECT_TIMEOUT</a></code></strong>,
        <strong><code><a href="yar.constants.html#constant.yar-opt-header">YAR_OPT_HEADER</a></code></strong> (as of 2.0.4),
        <strong><code>YAR_OPT_PROXY</code></strong> (as of 2.2.0)
     </p>


function_name: Yar_Concurrent_Client.call
name: callback
type: callable
description:
<p class="para">
      A function callback, which will be called while the response return.
     </p>


function_name: Yar_Concurrent_Client.loop
name: callback
type: callable
description:
<p class="para">
      If this callback is set, then Yar will call this callback after all
      calls are sent and before any response return, with a $callinfo NULL.
     </p>
     <p class="para">
      Then, if user didn&#039;t specify callback when registering concurrent call,
      this callback will be used to handle response, otherwise, the callback
      specified while registering will be used.
     </p>


function_name: Yar_Concurrent_Client.loop
name: error_callback
type: callable
description:
<p class="para">
      If this callback is set, then Yar will call this callback while error
      occurred.
     </p>


function_name: com.__construct
name: module_name
type: string
description:
<p class="simpara">
      Can be a ProgID, Class ID or Moniker that names the component to load.
     </p>
     <p class="simpara">
      A ProgID is typically the application or DLL name, followed by a period,
      followed by the object name. e.g: <code class="literal">Word.Application</code>.
     </p>
     <p class="simpara">
      A Class ID is the UUID that uniquely identifies a given class.
     </p>
     <p class="simpara">
      A Moniker is a special form of naming, similar in concept to a URL
      scheme, that identifies a resource and specifies how it should be
      loaded.  As an example, you could load up Word and get an object
      representing a word document by specifying the full path to the word
      document as the module name, or you can use <code class="literal">LDAP:</code> as
      a moniker to use the ADSI interface to LDAP.
     </p>


function_name: com.__construct
name: server_name
type: null
description:
<p class="simpara">
      The name of the DCOM server on which the component should be loaded and
      run.  If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, the object is run using the default for the
      application.  The default is typically to run it on the local machine,
      although the administrator might have configured the application to
      launch on a different machine.
     </p>
     <p class="simpara">
      If a non-<strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> value is specified for server, PHP will refuse to load
      the object unless the <a href="com.configuration.html#ini.com.allow-dcom" class="link">com.allow_dcom</a> <var class="filename">php.ini</var> option
      is set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>.
     </p>
     <p class="para">
      If <code class="parameter">server_name</code> is an array, it should contain the
      following elements (case sensitive!).  Note that they are all optional
      (although you need to specify both Username and Password together); if
      you omit the Server setting, the default server will be used (as
      mentioned above), and the instantiation of the object will not be
      affected by the <a href="com.configuration.html#ini.com.allow-dcom" class="link">com.allow_dcom</a>
      <var class="filename">php.ini</var> directive.
      <table class="doctable table">
       <caption><strong>DCOM server name</strong></caption>
       
        <thead>
         <tr>
          <th>key</th>
          <th>type</th>
          <th>description</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td>Server</td>
          <td>string</td>
          <td>The name of the server.</td>
         </tr>

         <tr>
          <td>Username</td>
          <td>string</td>
          <td>The username to connect as.</td>
         </tr>

         <tr>
          <td>Password</td>
          <td>string</td>
          <td>The password for <code class="literal">Username</code>.</td>
         </tr>

         <tr>
          <td>Domain</td>
          <td>string</td>
          <td>The domain of <code class="literal">server</code>.</td>
         </tr>

         <tr>
          <td>Flags</td>
          <td>integer</td>
          <td>One or more of the following constants, logically OR&#039;d together:
           <strong><code><a href="com.constants.html#constant.clsctx-inproc-server">CLSCTX_INPROC_SERVER</a></code></strong>,
           <strong><code><a href="com.constants.html#constant.clsctx-inproc-handler">CLSCTX_INPROC_HANDLER</a></code></strong>,
           <strong><code><a href="com.constants.html#constant.clsctx-local-server">CLSCTX_LOCAL_SERVER</a></code></strong>,
           <strong><code><a href="com.constants.html#constant.clsctx-remote-server">CLSCTX_REMOTE_SERVER</a></code></strong>,
           <strong><code><a href="com.constants.html#constant.clsctx-server">CLSCTX_SERVER</a></code></strong> and
           <strong><code><a href="com.constants.html#constant.clsctx-all">CLSCTX_ALL</a></code></strong>.  The default value if not
           specified here is <strong><code><a href="com.constants.html#constant.clsctx-server">CLSCTX_SERVER</a></code></strong> if you also
           omit <code class="literal">Server</code>, or
           <strong><code><a href="com.constants.html#constant.clsctx-remote-server">CLSCTX_REMOTE_SERVER</a></code></strong> if you do specify a
           server.  You should consult the Microsoft documentation for
           CoCreateInstance for more information on the meaning of these
           constants; you will typically never have to use them.
          </td>
         </tr>

        </tbody>
       
      </table>

     </p>


function_name: com.__construct
name: codepage
type: int
description:
<p class="simpara">
      Specifies the codepage that is used to convert strings to
      unicode-strings and vice versa.  The conversion is applied whenever a
      PHP string is passed as a parameter or returned from a method of this
      COM object.  The code page is sticky, which means that it will
      propagate to objects and variants returned from the object.
     </p>
     <p class="simpara">
      Possible values are
      <strong><code><a href="com.constants.html#constant.cp-acp">CP_ACP</a></code></strong> (use system default ANSI code page - the
      default if this parameter is omitted),
      <strong><code><a href="com.constants.html#constant.cp-maccp">CP_MACCP</a></code></strong>,
      <strong><code><a href="com.constants.html#constant.cp-oemcp">CP_OEMCP</a></code></strong>, <strong><code><a href="com.constants.html#constant.cp-symbol">CP_SYMBOL</a></code></strong>,
      <strong><code><a href="com.constants.html#constant.cp-thread-acp">CP_THREAD_ACP</a></code></strong> (use codepage/locale set for the
      current executing thread), <strong><code><a href="com.constants.html#constant.cp-utf7">CP_UTF7</a></code></strong>
      and <strong><code><a href="com.constants.html#constant.cp-utf8">CP_UTF8</a></code></strong>.  You may also use the number for a
      given codepage; consult the Microsoft documentation for more details on
      codepages and their numeric values.
     </p>


function_name: dotnet.__construct
name: codepage
type: int
description:
<p class="simpara">
      Codepage to use for unicode string transformations;
      see the <a href="class.com.html" class="xref">com</a> class for more details on code pages.
     </p>


function_name: variant.__construct
name: value
type: mixed
description:
<p class="simpara">
      Initial value. If omitted, or set to <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> an VT_EMPTY object is created.
     </p>


function_name: variant.__construct
name: type
type: int
description:
<p class="simpara">
      Specifies the content type of the variant object. Possible values are
      one of the <strong><code>VT_XXX</code></strong> <a href="com.constants.html" class="xref">Predefined Constants</a>.
     </p>
     <p class="simpara">
      PHP can detect parameters passed by reference
      automatically; they do not even need to be passed as variant objects.
     </p>
     <p class="simpara">
      Consult the <acronym class="acronym">MSDN</acronym> library for additional information
      on the VARIANT type.
     </p>


function_name: variant.__construct
name: codepage
type: int
description:
<p class="simpara">
      Specifies the codepage that is used to convert strings to
      unicode.  See the parameter of the same name in the
      <a href="class.com.html" class="xref">com</a> class for more information.
     </p>


function_name: COMPersistHelper.__construct
name: variant
type: null
description:
<p class="simpara">
      A <acronym class="acronym">COM</acronym> object which implements <span class="interfacename">IDispatch</span>.
      To be able to successfully call any of <span class="classname">COMPersistHelper</span>&#039;s methods, the object
      has to implement <span class="interfacename">IPersistFile</span>, <span class="interfacename">IPersistStream</span>
      and/or <span class="interfacename">IPersistStreamInit</span>.
     </p>
     <p class="simpara">
      Passing <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> as <code class="parameter">variant</code> is only useful if the object is to be
      loaded from a stream by calling  <span class="methodname">COMPersistHelper::LoadFromStream</span>.
     </p>


function_name: COMPersistHelper.LoadFromFile
name: flags
type: int
description:
<p class="simpara">
      The access mode to be used when opening the file. Possible values are
      taken from the <a href="https://docs.microsoft.com/en-us/windows/win32/stg/stgm-constants" class="link external">&raquo;&nbsp;STGM enumeration</a>.
      The method can treat this value as a suggestion, adding more restrictive
      permissions if necessary. If <code class="parameter">flags</code> is <code class="literal">0</code>,
      the implementation is supposed to open the file using whatever default
      permissions are used when a user opens the file.
     </p>


function_name: COMPersistHelper.LoadFromStream
name: stream
type: resource
description:
<p class="simpara">
      The stream <a href="language.types.resource.html" class="link">resource</a> from which to load the object.
     </p>


function_name: COMPersistHelper.SaveToFile
name: remember
type: bool
description:
<p class="simpara">
      Indicates whether the <code class="parameter">filename</code> parameter is to be used as the current
      working file. If <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, <code class="parameter">filename</code> becomes the current file and the
      object is supposed to clear its dirty flag after the save. If <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>, this save operation is
      a &quot;Save A Copy As ...&quot; operation. In this case, the current file is unchanged and the object
      is not supposed to clear its dirty flag.
     </p>


function_name: COMPersistHelper.SaveToStream
name: stream
type: resource
description:
<p class="simpara">
      The stream <a href="language.types.resource.html" class="link">resource</a> to which to save the object.
     </p>


function_name: com_event_sink
name: sink_object
type: object
description:
<p class="para">
       <code class="parameter">sink_object</code> should be an instance of a class with
       methods named after those of the desired dispinterface; you may use
       <span class="function">com_print_typeinfo</span> to help generate a template class
       for this purpose.
      </p>


function_name: com_event_sink
name: sink_interface
type: null
description:
<p class="para">
       PHP will attempt to use the default dispinterface type specified by
       the typelibrary associated with <code class="parameter">variant</code>, but
       you may override this choice by setting
       <code class="parameter">sink_interface</code> to the name of the dispinterface
       that you want to use.
      </p>


function_name: com_get_active_object
name: prog_id
type: string
description:
<p class="para">
       <code class="parameter">prog_id</code> must be either the ProgID or CLSID for
       the object that you want to access (for example
       <code class="literal">Word.Application</code>).
      </p>


function_name: com_get_active_object
name: codepage
type: null
description:
<p class="para">
       Acts in precisely the same way that it does for the <a href="class.com.html" class="xref">com</a> class.
      </p>


function_name: com_load_typelib
name: typelib
type: string
description:
<p class="para">
          The type library name, e.g. <code class="literal">Microsoft OLE DB ActiveX Data
          Objects 1.0 Library</code>.
         </p>


function_name: com_load_typelib
name: case_insensitive
type: bool
description:
<p class="para">
       The <code class="parameter">case_insensitive</code> behaves inversely to
       the parameter <code class="literal">$case_insensitive</code> in the <span class="function">define</span>
       function.
      </p>


function_name: com_message_pump
name: timeout_milliseconds
type: int
description:
<p class="para">
       The timeout, in milliseconds.
      </p>
      <p class="para">
       If you do not specify a value for <code class="parameter">timeout_milliseconds</code>,
       then 0 will be assumed.  A 0 value means that no waiting will be
       performed; if there are messages pending they will be dispatched as
       before; if there are no messages pending, the function will return
       <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> immediately without sleeping.
      </p>


function_name: com_print_typeinfo
name: variant
type: string
description:
<p class="para">
       <code class="parameter">variant</code> should be either an instance of a COM
       object, or be the name of a typelibrary (which will be resolved according
       to the rules set out in <span class="function">com_load_typelib</span>).
      </p>


function_name: com_print_typeinfo
name: dispatch_interface
type: null
description:
<p class="para">
       The name of an <code class="literal">IDispatch</code> descendant interface that you want to display.
      </p>


function_name: com_print_typeinfo
name: display_sink
type: bool
description:
<p class="para">
       If set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, the corresponding sink interface will be displayed
       instead.
      </p>


function_name: variant_cast
name: type
type: int
description:
<p class="para">
       <code class="parameter">type</code> should be one of the
       <strong><code>VT_XXX</code></strong> constants.
      </p>


function_name: variant_cmp
name: locale_id
type: int
description:
<p class="para">
       A valid Locale Identifier to use when comparing strings (this affects
       string collation).
      </p>


function_name: variant_cmp
name: flags
type: int
description:
<p class="para">
       <code class="parameter">flags</code> can be one or more of the following values
       OR&#039;d together, and affects string comparisons:
       <table class="doctable table">
        <caption><strong>Variant Comparision Flags</strong></caption>
        
         <thead>
          <tr>
           <th>value</th>
           <th>meaning</th>
          </tr>

         </thead>

         <tbody class="tbody">
          <tr>
           <td><strong><code><a href="com.constants.html#constant.norm-ignorecase">NORM_IGNORECASE</a></code></strong></td>
           <td>Compare case insensitively</td>
          </tr>

          <tr>
           <td><strong><code><a href="com.constants.html#constant.norm-ignorenonspace">NORM_IGNORENONSPACE</a></code></strong></td>
           <td>Ignore nonspacing characters</td>
          </tr>

          <tr>
           <td><strong><code><a href="com.constants.html#constant.norm-ignoresymbols">NORM_IGNORESYMBOLS</a></code></strong></td>
           <td>Ignore symbols</td>
          </tr>

          <tr>
           <td><strong><code><a href="com.constants.html#constant.norm-ignorewidth">NORM_IGNOREWIDTH</a></code></strong></td>
           <td>Ignore string width</td>
          </tr>

          <tr>
           <td><strong><code><a href="com.constants.html#constant.norm-ignorekanatype">NORM_IGNOREKANATYPE</a></code></strong></td>
           <td>Ignore Kana type</td>
          </tr>

          <tr>
           <td><strong><code><a href="com.constants.html#constant.norm-ignorekashida">NORM_IGNOREKASHIDA</a></code></strong></td>
           <td>Ignore Arabic kashida characters</td>
          </tr>

         </tbody>
        
       </table>

      </p>


function_name: win32_create_service
name: details
type: array
description:
<p class="para">
       An array of service details:
       <dl>
        
         <dt><code class="parameter">service</code></dt>
         <dd>
          <p class="para">
           The short name of the service.  This is the name that you
           will use to control the service using the <code class="literal">net</code>
           command.  The service must be unique (no two services can share the
           same name), and, ideally, should avoid having spaces in the name.
          </p>
         </dd>
        
        
         <dt><code class="parameter">display</code></dt>
         <dd>
          <p class="para">The display name of the service.  This is the name that you
          will see in the Services Applet.
          </p>
         </dd>
        
        
         <dt><code class="parameter">description</code></dt>
         <dd>
          <p class="para">The long description of the service.  This is the description
          that you will see in the Services Applet.
          </p>
         </dd>
        
        
         <dt><code class="parameter">user</code></dt>
         <dd>
          <p class="para">
           The name of the user account under which you want the service to
           run.  If omitted, the service will run as the LocalSystem account.
           If the username is specified, you must also provide a password.
          </p>
         </dd>
        
        
         <dt><code class="parameter">password</code></dt>
         <dd>
          <p class="para">
           The password that corresponds to the <code class="parameter">user</code>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">path</code></dt>
         <dd>
          <p class="para">
           The full path to the executable module that will be launched when
           the service is started.  If omitted, the path to the current PHP
           process will be used.
          </p>
         </dd>
        
        
         <dt><code class="parameter">params</code></dt>
         <dd>
          <p class="para">
           Command line parameters to pass to the service when it starts.
           If you want to run a PHP script as the service, then the first
           parameter should be the full path to the PHP script that you intend
           to run. If the script name or path contains spaces, then wrap the
           full path to the PHP script with <code class="literal">&quot;</code>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">load_order</code></dt>
         <dd>
          <p class="para">
           Controls the load_order.  This is not yet fully supported.
          </p>
         </dd>
        
        
         <dt><code class="parameter">svc_type</code></dt>
         <dd>
          <p class="para">
           Sets the service type.  If omitted, the default value is
           <strong><code><a href="win32service.constants.html#constant.win32-service-win32-own-process">WIN32_SERVICE_WIN32_OWN_PROCESS</a></code></strong>.
           Don&#039;t change this unless you know what you&#039;re doing.
          </p>
         </dd>
        
        
         <dt><code class="parameter">start_type</code></dt>
         <dd>
          <p class="para">
           Specifies how the service should be started.  The default is
           <strong><code><a href="win32service.constants.html#constant.win32-service-auto-start">WIN32_SERVICE_AUTO_START</a></code></strong> which means the
           service will be launched when the machine starts up.
          </p>
         </dd>
        
        
         <dt><code class="parameter">error_control</code></dt>
         <dd>
          <p class="para">
           Informs the SCM what it should do when it detects a problem with
           the service.  The default is
           <strong><code>WIN32_SERVER_ERROR_IGNORE</code></strong>.  Changing this
           value is not yet fully supported.
          </p>
         </dd>
        
        
         <dt><code class="parameter">delayed_start</code></dt>
         <dd>
          <p class="para">
           If <code class="parameter">delayed_start</code> is set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, then this
           will inform the SCM that this service should be started after other
           auto-start services are started plus a short delay.
          </p>
          <p class="para">
           Any service can be marked as a delayed auto-start service; however,
           this setting has no effect unless the service&#039;s
           <code class="parameter">start_type</code> is
           <strong><code><a href="win32service.constants.html#constant.win32-service-auto-start">WIN32_SERVICE_AUTO_START</a></code></strong>.
          </p>
          <p class="para">
           This setting is only applicable on Windows Vista and Windows Server
           2008 or greater.
          </p>
         </dd>
        
        
         <dt><code class="parameter">base_priority</code></dt>
         <dd>
          <p class="para">
           To reduce the impact on processor utilisation, it may be necessary
           to set a base priority lower than normal.
          </p>
          <p class="para">
           The <code class="parameter">base_priority</code> can be set to one of the
           constants define in
           <a href="win32service.constants.html#win32service.constants.basepriorities" class="link">Win32 Base Priority Classes</a>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">dependencies</code></dt>
         <dd>
          <p class="para">
           To define the dependencies for your service, it may be necessary to set 
           this parameter to the list of the services names in an array.
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_delay</code></dt>
         <dd>
          <p class="para">
           This parameter defines the delay between the fail and the execution 
           of recovery action. The value is in milliseconds.
          </p>
          <p class="para">
           The default value is 60000.
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_action_1</code></dt>
         <dd>
          <p class="para">
           The action will be executed on first failure. The default value is 
           <strong><code><a href="win32service.constants.html#constant.win32-sc-action-none">WIN32_SC_ACTION_NONE</a></code></strong>.
          </p>
          <p class="para">
           The <code class="parameter">recovery_action_1</code> can be set to one of the
           constants defined in
           <a href="win32service.constants.html#win32service.constants.recovery-action" class="link">Win32 Recovery action</a>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_action_2</code></dt>
         <dd>
          <p class="para">
           The action will be executed on second failure. The default value is 
           <strong><code><a href="win32service.constants.html#constant.win32-sc-action-none">WIN32_SC_ACTION_NONE</a></code></strong>.
          </p>
          <p class="para">
           The <code class="parameter">recovery_action_2</code> can be set to one of the
           constants defined in
           <a href="win32service.constants.html#win32service.constants.recovery-action" class="link">Win32 Recovery action</a>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_action_3</code></dt>
         <dd>
          <p class="para">
           The action will be executed on next failures. The default value is 
           <strong><code><a href="win32service.constants.html#constant.win32-sc-action-none">WIN32_SC_ACTION_NONE</a></code></strong>.
          </p>
          <p class="para">
           The <code class="parameter">recovery_action_3</code> can be set to one of the
           constants defined in
           <a href="win32service.constants.html#win32service.constants.recovery-action" class="link">Win32 Recovery action</a>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_reset_period</code></dt>
         <dd>
          <p class="para">
           The failure count will be reset after the delay defined in the parameter. The delay is expirement in seconds.
          </p>
          <p class="para">
           The default value is <code class="literal">86400</code>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_enabled</code></dt>
         <dd>
          <p class="para">
           Set this parameter at <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> to enable the recovery settings, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> 
           to disable. 
          </p>
          <p class="para">
           The default value is <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_reboot_msg</code></dt>
         <dd>
          <p class="para">
           Set this parameter to define the message saved into the Windows Event 
           Log before the reboot. Used only if one action is set to 
           <strong><code><a href="win32service.constants.html#constant.win32-sc-action-reboot">WIN32_SC_ACTION_REBOOT</a></code></strong>.
          </p>
         </dd>
        
        
         <dt><code class="parameter">recovery_command</code></dt>
         <dd>
          <p class="para">
           Set this parameter to define the command executed when one action is defined on  
           <strong><code><a href="win32service.constants.html#constant.win32-sc-action-run-command">WIN32_SC_ACTION_RUN_COMMAND</a></code></strong>.
          </p>
         </dd>
        
       </dl>
      </p>


function_name: win32_create_service
name: machine
type: string
description:
<p class="para">
       The optional machine name on which you want to create a service.
       If omitted, it will use the local machine.
      </p>


function_name: win32_delete_service
name: machine
type: string
description:
<p class="para">
       The optional machine name.  If omitted, the local machine will be used.
      </p>


function_name: win32_set_service_exit_mode
name: gracefulMode
type: bool
initializer: true
description:
<p class="para">
      <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> for exit graceful. <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> for exit with error.
     </p>


function_name: win32_set_service_status
name: status
type: int
description:
<p class="para">
       The service status code, one of
       <strong><code><a href="win32service.constants.html#constant.win32-service-running">WIN32_SERVICE_RUNNING</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-stopped">WIN32_SERVICE_STOPPED</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-stop-pending">WIN32_SERVICE_STOP_PENDING</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-start-pending">WIN32_SERVICE_START_PENDING</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-continue-pending">WIN32_SERVICE_CONTINUE_PENDING</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-pause-pending">WIN32_SERVICE_PAUSE_PENDING</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-paused">WIN32_SERVICE_PAUSED</a></code></strong>.
      </p>


function_name: win32_set_service_status
name: checkpoint
type: int
description:
<p class="para">
       The checkpoint value the service increments periodically to report its
       progress during a lengthy start, stop, pause, or continue operation.
       For example, the service should increment this value as it completes
       each step of its initialization when it is starting up.
      </p>
      <p class="para">
       The <code class="parameter">checkpoint</code> is only valid when the
       <code class="parameter">status</code> is one of
       <strong><code><a href="win32service.constants.html#constant.win32-service-stop-pending">WIN32_SERVICE_STOP_PENDING</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-start-pending">WIN32_SERVICE_START_PENDING</a></code></strong>,
       <strong><code><a href="win32service.constants.html#constant.win32-service-continue-pending">WIN32_SERVICE_CONTINUE_PENDING</a></code></strong> or
       <strong><code><a href="win32service.constants.html#constant.win32-service-pause-pending">WIN32_SERVICE_PAUSE_PENDING</a></code></strong>.
      </p>


function_name: win32_start_service_ctrl_dispatcher
name: name
type: string
description:
<p class="para">
       The short-name of the service, as registered by
       <span class="function">win32_create_service</span>.
      </p>


function_name: win32_start_service_ctrl_dispatcher
name: gracefulMode
type: bool
initializer: true
description:
<p class="para">
       <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> for exit graceful. <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> for exit with error. See 
       <span class="function">win32_set_service_exit_mode</span> for more details.
      </p>


function_name: DOMCdataSection.__construct
name: data
type: string
description:
<p class="para">
      The value of the CDATA node. If not supplied, an empty CDATA node is created.
     </p>


function_name: DOMCharacterData.after
name: nodes
type: string
description:
<p class="para">
       Nodes to be added after the node.
       Strings are automatically converted to text nodes.
      </p>


function_name: DOMCharacterData.before
name: nodes
type: string
description:
<p class="para">
       Nodes to be added before the node.
       Strings are automatically converted to text nodes.
      </p>


function_name: DOMCharacterData.deleteData
name: count
type: int
description:
<p class="para">
       The number of characters to delete. If the sum of
       <code class="parameter">offset</code> and <code class="parameter">count</code> exceeds
       the length, then all characters to the end of the data are deleted.
      </p>


function_name: DOMCharacterData.replaceData
name: count
type: int
description:
<p class="para">
       The number of characters to replace. If the sum of
       <code class="parameter">offset</code> and <code class="parameter">count</code> exceeds
       the length, then all characters to the end of the data are replaced.
      </p>


function_name: DOMCharacterData.replaceWith
name: nodes
type: string
description:
<p class="para">
       The replacement nodes.
       Strings are automatically converted to text nodes.
      </p>


function_name: DOMDocument.append
name: nodes
type: string
description:
<p class="para">
       The nodes to append.
       Strings are automatically converted to text nodes.
      </p>


function_name: DOMDocument.__construct
name: version
type: string
initializer: "1.0"
description:
<p class="para">
       The version number of the document as part of the XML declaration.
      </p>


function_name: DOMDocument.createAttributeNS
name: qualifiedName
type: string
description:
<p class="para">
       The tag name and prefix of the attribute, as <code class="literal">prefix:tagname</code>.
      </p>


function_name: DOMDocument.createElement
name: value
type: string
initializer: ""
description:
<p class="para">
       The value of the element. By default, an empty element will be created.
       The value can also be set later with <a href="class.domnode.html#domnode.props.nodevalue" class="link">DOMElement::$nodeValue</a>.
      </p>
      <p class="para">
       The value is used verbatim except that the &lt; and &gt; entity
       references will escaped. Note that &amp; has to be manually escaped;
       otherwise it is regarded as starting an entity reference. Also &quot; won&#039;t be
       escaped.
      </p>


function_name: DOMDocument.createElementNS
name: qualifiedName
type: string
description:
<p class="para">
       The qualified name of the element, as <code class="literal">prefix:tagname</code>.
      </p>


function_name: DOMDocument.createElementNS
name: value
type: string
initializer: ""
description:
<p class="para">
       The value of the element. By default, an empty element will be created.
       You can also set the value later with <a href="class.domnode.html#domnode.props.nodevalue" class="link">DOMElement::$nodeValue</a>.
      </p>


function_name: DOMDocument.createEntityReference
name: name
type: string
description:
<p class="para">
       The content of the entity reference, e.g. the entity reference minus
       the leading <code class="literal">&amp;</code> and the trailing
       <code class="literal">;</code> characters.
      </p>


function_name: DOMDocument.getElementsByTagName
name: qualifiedName
type: string
description:
<p class="para">
       The local name (without namespace) of the tag to match on. The special value <code class="literal">*</code>
       matches all tags. 
      </p>


function_name: DOMDocument.getElementsByTagNameNS
name: namespace
type: null
description:
<p class="para">
       The namespace URI of the elements to match on.
       The special value <code class="literal">&quot;*&quot;</code> matches all namespaces.
       Passing <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> matches the empty namespace.
      </p>


function_name: DOMDocument.getElementsByTagNameNS
name: localName
type: string
description:
<p class="para">
       The local name of the elements to match on.
       The special value <code class="literal">&quot;*&quot;</code> matches all local names.
      </p>


function_name: DOMDocument.importNode
name: deep
type: bool
description:
<p class="para">
       If set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, this method will recursively import the subtree under
       the <code class="parameter">node</code>.
      </p>
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
        To copy the nodes attributes <code class="parameter">deep</code> needs to be set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>
       </p>
      </p></blockquote>


function_name: DOMDocument.load
name: options
type: int
description:
<p class="para">
       <a href="language.operators.bitwise.html" class="link">Bitwise <code class="literal">OR</code></a>
       of the <a href="libxml.constants.html" class="link">libxml option constants</a>.
      </p>


function_name: DOMDocument.loadHTML
name: options
type: int
description:
<p class="para">
  <a href="language.operators.bitwise.html" class="link">Bitwise <code class="literal">OR</code></a>
  of the <a href="libxml.constants.html" class="link">libxml option constants</a>.
</p>


function_name: DOMDocument.prepend
name: nodes
type: string
description:
<p class="para">
       The nodes to prepend.
       Strings are automatically converted to text nodes.
      </p>


function_name: DOMDocument.registerNodeClass
name: baseClass
type: string
description:
<p class="para">
       The DOM class that you want to extend. You can find a list of these 
       classes in the <a href="book.dom.html" class="link">chapter introduction</a>.
      </p>


function_name: DOMDocument.registerNodeClass
name: extendedClass
type: null
description:
<p class="para">
       Your extended class name. If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> is provided, any previously 
       registered class extending <code class="parameter">baseClass</code> will
       be removed.
      </p>


function_name: DOMDocument.replaceChildren
name: nodes
type: string
description:
<p class="para">
       The nodes replacing the children.
       Strings are automatically converted to text nodes.
      </p>


function_name: DOMDocument.save
name: options
type: int
description:
<p class="para">
       Additional Options. Currently only <a href="libxml.constants.html" class="link">LIBXML_NOEMPTYTAG</a> is supported.
      </p>


function_name: DOMDocument.saveXML
name: node
type: null
description:
<p class="para">
       Use this parameter to output only a specific node without XML declaration
       rather than the entire document.
      </p>


function_name: DOMDocument.saveXML
name: options
type: int
description:
<p class="para">
       Additional Options.
       The <a href="libxml.constants.html" class="link">LIBXML_NOEMPTYTAG</a>
       and <a href="libxml.constants.html" class="link">LIBXML_NOXMLDECL</a> options are supported.
       Prior to PHP 8.3.0, only the <a href="libxml.constants.html" class="link">LIBXML_NOEMPTYTAG</a>
       option is supported.
      </p>


function_name: DOMDocument.schemaValidate
name: flags
type: int
description:
<p class="para">
       A bitmask of Libxml schema validation flags. Currently the only supported value is <a href="libxml.constants.html" class="link">LIBXML_SCHEMA_CREATE</a>. Available since Libxml 2.6.14.
      </p>


function_name: DOMElement.__construct
name: qualifiedName
type: string
description:
<p class="para">
       The tag name of the element. When also passing in namespaceURI, the element name 
       may take a prefix to be associated with the URI.
      </p>


function_name: DOMElement.__construct
name: namespace
type: string
initializer: ""
description:
<p class="para">
       A namespace URI to create the element within a specific namespace.
      </p>


function_name: DOMElement.getElementsByTagName
name: qualifiedName
type: string
description:
<p class="para">
       The tag name. Use <code class="literal">*</code> to return all elements within 
       the element tree.
      </p>


function_name: DOMElement.insertAdjacentElement
name: where
type: string
description:
<p class="para">
       <ul class="simplelist">
        <li><code class="literal">beforebegin</code> - Insert before the target element.</li>
        <li><code class="literal">afterbegin</code> - Insert as the first child of the target element.</li>
        <li><code class="literal">beforeend</code> - Insert as the last child of the target element.</li>
        <li><code class="literal">afterend</code> - Insert after the target element.</li>
       </ul>
      </p>


function_name: DOMElement.setAttributeNS
name: qualifiedName
type: string
description:
<p class="para">
       The qualified name of the attribute, as <code class="literal">prefix:tagname</code>.
      </p>


function_name: DOMElement.setIdAttribute
name: isId
type: bool
description:
<p class="para">
       Set it to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> if you want <code class="parameter">qualifiedName</code> to be of type
       ID, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> otherwise.
      </p>


function_name: DOMElement.setIdAttributeNode
name: isId
type: bool
description:
<p class="para">
       Set it to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> if you want <code class="parameter">name</code> to be of type
       ID, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> otherwise.
      </p>


function_name: DOMElement.setIdAttributeNS
name: qualifiedName
type: string
description:
<p class="para">
       The local name of the attribute, as <code class="literal">prefix:tagname</code>.
      </p>


function_name: DOMElement.toggleAttribute
name: force
type: null
description:
<p class="para">
       <ul class="simplelist">
        <li>if <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, the function will toggle the attribute.</li>
        <li>if <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, the function adds the attribute.</li>
        <li>if <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>, the function removes the attribute.</li>
       </ul>
      </p>


function_name: DOMImplementation.createDocument
name: doctype
type: null
description:
<p class="para">
       The type of document to create or <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>.
      </p>


function_name: DOMImplementation.hasFeature
name: version
type: string
description:
<p class="para">
       The version number of the <code class="parameter">feature</code> to test. In 
       level 2, this can be either <code class="literal">2.0</code> or
       <code class="literal">1.0</code>.
      </p>


function_name: DOMNamedNodeMap.getNamedItem
name: qualifiedName
type: string
description:
<p class="para">
       The <code class="literal">nodeName</code> of the node to retrieve.
      </p>


function_name: DOMNode.C14N
name: exclusive
type: bool
description:
<p class="para">
      Enable exclusive parsing of only the nodes matched by the provided
      xpath or namespace prefixes.
     </p>


function_name: DOMNode.C14N
name: xpath
type: null
description:
<p class="para">
      An array of <code class="literal">xpath</code>s to filter the nodes by.
     </p>


function_name: DOMNode.cloneNode
name: deep
type: bool
description:
<p class="para">
       Indicates whether to copy all descendant nodes. This parameter is 
       defaulted to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>.
      </p>


function_name: DOMNode.insertBefore
name: child
type: null
description:
<p class="para">
       The reference node. If not supplied, <code class="parameter">node</code> is
       appended to the children.
      </p>


function_name: DOMNode.isSupported
name: feature
type: string
description:
<p class="para">
       The feature to test. See the example of 
        <span class="methodname">DOMImplementation::hasFeature</span> for a
       list of features.
      </p>


function_name: DOMNode.isSupported
name: version
type: string
description:
<p class="para">
       The version number of the <code class="parameter">feature</code> to test.
      </p>


function_name: DOMNode.lookupNamespaceURI
name: prefix
type: null
description:
<p class="para">
       The prefix to look for. If this parameter is <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, the method will return the default namespace URI, if any.
      </p>


function_name: DOMNode.replaceChild
name: node
type: DOMNode
description:
<p class="para">
       The new node. It must be a member of the target document, i.e.
       created by one of the DOMDocument-&gt;createXXX() methods or imported in
       the document by <a href="domdocument.importnode.html" class="xref">DOMDocument::importNode</a>.
      </p>


function_name: DOMText.__construct
name: data
type: string
initializer: ""
description:
<p class="para">
       The value of the text node. If not supplied an empty text node is created.
      </p>


function_name: DOMXPath.__construct
name: document
type: DOMDocument
description:
<p class="para">
       The <span class="classname">DOMDocument</span> associated with the 
       <span class="classname">DOMXPath</span>.
      </p>


function_name: DOMXPath.__construct
name: registerNodeNS
type: bool
description:
<p class="para">
   Whether to automatically register the in-scope namespace prefixes of the context node to the <span class="classname">DOMXPath</span> object.
   This can be used to avoid needing to call  <span class="methodname">DOMXPath::registerNamespace</span> manually for each in-scope namespaces.
   When a namespace prefix conflict exists, only the nearest descendant namespace prefix is registered.
  </p>


function_name: DOMXPath.evaluate
name: contextNode
type: null
description:
<p class="para">
       The optional <code class="parameter">contextNode</code> can be specified for
       doing relative XPath queries. By default, the queries are relative to 
       the root element.
      </p>


function_name: DOMXPath.registerPhpFunctions
name: restrict
type: null
description:
<p class="para">
       Use this parameter to only allow certain functions to be called from XPath.
      </p>
      <p class="para">
       This parameter can be either a <span class="type">string</span> (a function name) or 
       an <span class="type">array</span> of function names.
      </p>


function_name: libxml_disable_entity_loader
name: disable
type: bool
description:
<p class="para">
       Disable (<strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>) or enable (<strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>) libxml extensions (such as
       <a href="book.dom.html" class="xref">DOM</a>, <a href="book.xmlwriter.html" class="xref">XMLWriter</a>
       and <a href="book.xmlreader.html" class="xref">XMLReader</a>) to load external entities.
      </p>


function_name: libxml_set_external_entity_loader
name: resolver_function
type: null
description:
<p class="para">
      A <span class="type">callable</span> with the following signature:
      <div class="methodsynopsis dc-description"><span class="type"><span class="type">resource</span><span class="type">string</span><span class="type">null</span></span> <span class="methodname"><span class="replaceable">resolver</span></span>(<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">null</span></span> <code class="parameter">$public_id</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$system_id</code></span>, <span class="methodparam"><span class="type">array</span> <code class="parameter">$context</code></span>)</div>

      <dl>
       
        <dt><code class="parameter">public_id</code></dt>
        <dd>
         <span class="simpara">
          The public ID.
         </span>
        </dd>
       
       
        <dt><code class="parameter">system_id</code></dt>
        <dd>
         <span class="simpara">
          The system ID.
         </span>
        </dd>
       
       
        <dt><code class="parameter">context</code></dt>
        <dd>
         <span class="simpara">
          An array with the four elements <code class="literal">&quot;directory&quot;</code>, <code class="literal">&quot;intSubName&quot;</code>,
          <code class="literal">&quot;extSubURI&quot;</code> and <code class="literal">&quot;extSubSystem&quot;</code>.
         </span>
        </dd>
       
      </dl>
      This callable should return a <a href="language.types.resource.html" class="link">resource</a>, a <span class="type">string</span> from which a resource can be
      opened. If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> is returned, the entity reference resolution will fail.
     </p>


function_name: libxml_set_streams_context
name: context
type: resource
description:
<p class="para">
        The stream context resource (created with
        <span class="function">stream_context_create</span>)
       </p>


function_name: libxml_use_internal_errors
name: use_errors
type: null
description:
<p class="para">
        Enable (<strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>) user error handling or disable (<strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>) user error handling. Disabling will also clear any existing libxml errors.
       </p>


function_name: SimpleXMLElement.asXML
name: filename
type: null
description:
<p class="para">
       If a <span class="type">string</span> value is provided, the function writes the data to the file rather than
       returning it.
      </p>


function_name: SimpleXMLElement.attributes
name: isPrefix
type: bool
description:
<p class="para">
       Default to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>
      </p>


function_name: SimpleXMLElement.children
name: isPrefix
type: bool
description:
<p class="para">
       If <code class="parameter">isPrefix</code> is <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>,
       <code class="parameter">namespaceOrPrefix</code> will be regarded as a prefix. If <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>,
       <code class="parameter">namespaceOrPrefix</code> will be regarded as a namespace
       <acronym class="acronym">URL</acronym>.
      </p>


function_name: SimpleXMLElement.__construct
name: data
type: string
description:
<p class="para">
       A well-formed XML string or the path or URL to an XML document if 
       <code class="parameter">dataIsURL</code> is <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>.
      </p>


function_name: SimpleXMLElement.__construct
name: options
type: int
description:
<p class="para">
       Optionally used to specify <a href="libxml.constants.html" class="link">additional
       Libxml parameters</a>, which affect reading of XML documents. Options which affect the
       output of XML documents (e.g. <strong><code><a href="libxml.constants.html#constant.libxml-noemptytag">LIBXML_NOEMPTYTAG</a></code></strong>) are silently ignored.
      </p>
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
        It may be necessary to pass <strong><code><a href="libxml.constants.html#constant.libxml-parsehuge">LIBXML_PARSEHUGE</a></code></strong>
        to be able to process deeply nested XML or very large text nodes.
       </p>
      </p></blockquote>


function_name: SimpleXMLElement.__construct
name: dataIsURL
type: bool
description:
<p class="para">
       By default, <code class="parameter">dataIsURL</code> is <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>. Use <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> to
       specify that <code class="parameter">data</code> is a path or URL to an XML 
       document instead of <span class="type">string</span> data.
      </p>


function_name: SimpleXMLElement.__construct
name: isPrefix
type: bool
description:
<p class="para">
       <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> if <code class="parameter">namespaceOrPrefix</code> is a prefix, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> if it&#039;s a URI;
       defaults to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>.
      </p>


function_name: SimpleXMLElement.getDocNamespaces
name: recursive
type: bool
description:
<p class="para">
       If specified, returns all namespaces declared in parent and child nodes. 
       Otherwise, returns only namespaces declared in root node.
      </p>


function_name: SimpleXMLElement.getDocNamespaces
name: fromRoot
type: bool
description:
<p class="para">
       Allows you to recursively check namespaces under a child node instead of
       from the root of the XML doc.
      </p>


function_name: SimpleXMLElement.getNamespaces
name: recursive
type: bool
description:
<p class="para">
       If specified, returns all namespaces used in parent and child nodes. 
       Otherwise, returns only namespaces used in root node.
      </p>


function_name: SimpleXMLElement.registerXPathNamespace
name: prefix
type: string
description:
<p class="para">
       The namespace prefix to use in the XPath query for the namespace given in 
       <code class="parameter">namespace</code>.
      </p>


function_name: SimpleXMLElement.registerXPathNamespace
name: namespace
type: string
description:
<p class="para">
       The namespace to use for the XPath query. This must match a namespace in
       use by the XML document or the XPath query using 
       <code class="parameter">prefix</code> will not return any results.
      </p>


function_name: simplexml_import_dom
name: class_name
type: null
initializer: SimpleXMLElement::class
description:
<p class="para">
       You may use this optional parameter so that
       <span class="function">simplexml_import_dom</span> will return an object of 
       the specified class. That class should extend the 
       <span class="type">SimpleXMLElement</span> class.
      </p>


function_name: simplexml_load_file
name: class_name
type: null
initializer: SimpleXMLElement::class
description:
<p class="para">
       You may use this optional parameter so that
       <span class="function">simplexml_load_file</span> will return an object of 
       the specified class. That class should extend the 
       <span class="type">SimpleXMLElement</span> class.
      </p>


function_name: simplexml_load_file
name: is_prefix
type: bool
description:
<p class="para">
       <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> if <code class="parameter">namespace_or_prefix</code> is a prefix, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> if it&#039;s a URI;
       defaults to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>.
      </p>


function_name: simplexml_load_string
name: class_name
type: null
initializer: SimpleXMLElement::class
description:
<p class="para">
       You may use this optional parameter so that
       <span class="function">simplexml_load_string</span> will return an object of 
       the specified class. That class should extend the 
       <span class="type">SimpleXMLElement</span> class.
      </p>


function_name: wddx_add_vars
name: packet_id
type: resource
description:
<p class="para">
       A WDDX packet, returned by <span class="function">wddx_packet_start</span>.
      </p>


function_name: wddx_add_vars
name: var_name
type: mixed
description:
<p class="para">
       Can be either a string naming a variable or an array containing
       strings naming the variables or another array, etc.
      </p>


function_name: XMLDiff\Base.__construct
name: nsname
type: string
description:
<p class="para">
      Custom namespace name for the diff document. The default namespace is http://www.locus.cz/diffmark and that&#039;s enough to avoid namespace conflicts. Use this parameter if you want to change it for some reason.
     </p>


function_name: xml_error_string
name: error_code
type: int
description:
<p class="para">
       An error code from <span class="function">xml_get_error_code</span>.
      </p>


function_name: xml_parse_into_struct
name: index
type: array
description:
<p class="para">
       An array containing pointers to the location of the appropriate values in the $values.
      </p>


function_name: xml_parse
name: data
type: string
description:
<p class="para">
       Chunk of data to parse.  A document may be parsed piece-wise by
       calling <span class="function">xml_parse</span> several times with new data,
       as long as the <code class="parameter">is_final</code> parameter is set and
       <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> when the last data is parsed.
      </p>


function_name: xml_parse
name: is_final
type: bool
description:
<p class="para">
       If set and <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>, <code class="parameter">data</code> is the last piece of
       data sent in this parse.
      </p>


function_name: xml_parser_create_ns
name: encoding
type: null
description:
<p class="para">
       The input encoding is automatically detected, so that the
       <code class="parameter">encoding</code> parameter specifies only the output
       encoding. The default output charset is UTF-8. The supported
       encodings are <code class="literal">ISO-8859-1</code>, <code class="literal">UTF-8</code> and
       <code class="literal">US-ASCII</code>.
      </p>


function_name: xml_parser_create_ns
name: separator
type: string
initializer: ":"
description:
<p class="para">
       With a namespace aware parser tag parameters passed to the various
       handler functions will consist of namespace and tag name separated by
       the string specified in <code class="parameter">separator</code>.
      </p>


function_name: xml_parser_create
name: encoding
type: null
description:
<p class="para">
       The input
       encoding is automatically detected, so that the
       <code class="parameter">encoding</code> parameter specifies only the output
       encoding. If empty string is passed, the parser attempts to identify
       which encoding the document is encoded in by looking at the heading 3 or
       4 bytes. The default output charset is UTF-8. The supported
       encodings are <code class="literal">ISO-8859-1</code>, <code class="literal">UTF-8</code> and
       <code class="literal">US-ASCII</code>.
      </p>


function_name: xml_parser_get_option
name: option
type: int
description:
<p class="simpara">
       Which option to fetch. <strong><code><a href="xml.constants.html#constant.xml-option-case-folding">XML_OPTION_CASE_FOLDING</a></code></strong>,
       <strong><code><a href="xml.constants.html#constant.xml-option-skip-tagstart">XML_OPTION_SKIP_TAGSTART</a></code></strong>, <strong><code><a href="xml.constants.html#constant.xml-option-skip-white">XML_OPTION_SKIP_WHITE</a></code></strong>
       and <strong><code><a href="xml.constants.html#constant.xml-option-target-encoding">XML_OPTION_TARGET_ENCODING</a></code></strong> are available.
       See <span class="function">xml_parser_set_option</span> for their description.
      </p>


function_name: xml_parser_set_option
name: option
type: int
description:
<p class="para">
       Which option to set.  See below.
      </p>
      <p class="para">
       The following options are available:
       <table class="doctable table">
        <caption><strong>XML parser options</strong></caption>
        
         <thead>
          <tr>
           <th>Option constant</th>
           <th>Data type</th>
           <th>Description</th>
          </tr>

         </thead>

         <tbody class="tbody">
          <tr>
           <td><strong><code><a href="xml.constants.html#constant.xml-option-case-folding">XML_OPTION_CASE_FOLDING</a></code></strong></td>
           <td>bool</td>
           <td>
            Controls whether <a href="xml.case-folding.html" class="link">case-folding</a> is enabled for this
            XML parser.  Enabled by default.
           </td>
          </tr>

          <tr>
           <td><strong><code><a href="xml.constants.html#constant.xml-option-skip-tagstart">XML_OPTION_SKIP_TAGSTART</a></code></strong></td>
           <td>integer</td> 
           <td>
            Specify how many characters should be skipped in the beginning of a
            tag name.
           </td>
          </tr>

          <tr>
           <td><strong><code><a href="xml.constants.html#constant.xml-option-skip-white">XML_OPTION_SKIP_WHITE</a></code></strong></td>
           <td>bool</td>
           <td>
            Whether to skip values consisting of whitespace characters.
           </td>
          </tr>

          <tr>
           <td><strong><code><a href="xml.constants.html#constant.xml-option-target-encoding">XML_OPTION_TARGET_ENCODING</a></code></strong></td>
           <td>string</td> 
           <td>
            Sets which <a href="xml.encoding.html" class="link">target encoding</a> to
            use in this XML parser.By default, it is set to the same as the
            source encoding used by <span class="function">xml_parser_create</span>.
            Supported target encodings are <code class="literal">ISO-8859-1</code>,
            <code class="literal">US-ASCII</code> and <code class="literal">UTF-8</code>.
           </td>
          </tr>

         </tbody>
        
       </table>

      </p>


function_name: xml_set_character_data_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">handler</span></span>(<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$data</code></span>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">data</code></dt>
         <dd>
          <span class="simpara">
           Character data as a string.
          </span>
         </dd>
        
       </dl>
      </p>
      <p class="para">
       Character data handler is called for every piece of a text in the XML
       document. It can be called multiple times inside each fragment (e.g.
       for non-ASCII strings).
      </p>


function_name: xml_set_default_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">handler</span></span>(<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$data</code></span>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt>
          <code class="parameter">data</code>
         </dt>
         <dd>
          <span class="simpara">
           <code class="parameter">data</code> contains the character data.
           This may be the XML declaration, document type declaration,
           entities or other data for which no other handler exists.
          </span>
         </dd>
        
       </dl>
      </p>


function_name: xml_set_element_handler
name: start_handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">start_element_handler</span></span>(<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$name</code></span>, <span class="methodparam"><span class="type">array</span> <code class="parameter">$attributes</code></span>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">name</code></dt>
         <dd>
          <span class="simpara">
           Contains the name of the element for which this handler is called.
           If <a href="xml.case-folding.html" class="link">case-folding</a> is in effect
           for this parser, the element name will be in uppercase letters.
          </span>
         </dd>
        
        
         <dt><code class="parameter">attributes</code></dt>
         <dd>
          <span class="simpara">
           An associative array with the element&#039;s attributes.
           The array is empty if the element has no attributes.
           The keys of this array are the attribute names,
           the values are the attribute values.
           Attribute names are
           <a href="xml.case-folding.html" class="link">case-folded</a>
           on the same criteria as element names.
           Attribute values are <em>not</em> case-folded.
          </span>
          <span class="simpara">
           The order in which <code class="parameter">attributes</code> is traversed
           is identical to the order in which the attributes were declared.
          </span>
         </dd>
        
       </dl>
      </p>


function_name: xml_set_element_handler
name: end_handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">end_element_handler</span></span>(<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$name</code></span>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">name</code></dt>
         <dd>
          <span class="simpara">
           Contains the name of the element for which this handler is called.
           If <a href="xml.case-folding.html" class="link">case-folding</a> is in effect
           for this parser, the element name will be in uppercase letters.
          </span>
         </dd>
        
       </dl>
      </p>


function_name: xml_set_end_namespace_decl_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"> <span class="methodname"><span class="replaceable">handler</span></span>(<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>, <span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$prefix</code></span>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">prefix</code></dt>
         <dd>
          <span class="simpara">
           The prefix is a string used to reference the namespace within an XML object.
           <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> if no prefix exists.
          </span>
         </dd>
        
       </dl>
      </p>


function_name: xml_set_external_entity_ref_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">bool</span> <span class="methodname"><span class="replaceable">handler</span></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">string</span> <code class="parameter">$open_entity_names</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$base</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">string</span> <code class="parameter">$system_id</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$public_id</code></span><br>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">open_entity_names</code></dt>
         <dd>
          <span class="simpara">
           A space-separated list of the names of the entities that are open for
           the parse of this entity (including the name of the referenced
           entity).
          </span>
         </dd>
        
        
         <dt><code class="parameter">base</code></dt>
         <dd>
          <span class="simpara">
           This is the base for resolving the system identifier
           (<code class="parameter">system_id</code>) of the external entity.
          </span>
         </dd>
        
        
         <dt><code class="parameter">system_id</code></dt>
         <dd>
          <span class="simpara">
           The system identifier as specified in the entity declaration.
          </span>
         </dd>
        
        
         <dt><code class="parameter">public_id</code></dt>
         <dd>
          <span class="simpara">
           The public identifier as specified in the entity declaration, or
           an empty string if none was specified; the whitespace in the
           public identifier will have been normalized as required by
           the XML spec.
          </span>
         </dd>
        
       </dl>
      </p>
      <p class="para">
       The handler should return <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> if the entity was handled,
       <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> otherwise.
       When returning <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> the XML parser will stop parsing and
       <span class="function">xml_get_error_code</span> will return
       <strong><code><a href="xml.constants.html#constant.xml-error-external-entity-handling">XML_ERROR_EXTERNAL_ENTITY_HANDLING</a></code></strong>.
      </p>


function_name: xml_set_notation_decl_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">handler</span></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">string</span> <code class="parameter">$notation_name</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$base</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">string</span> <code class="parameter">$system_id</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$public_id</code></span><br>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">notation_name</code></dt>
         <dd>
          <span class="simpara">
           This is the notation&#039;s name, as per
           the notation format described above.
          </span>
         </dd>
        
        
         <dt>
          <code class="parameter">base</code>
         </dt>
         <dd>
          <span class="simpara">
           This is the base for resolving the system identifier
           (<code class="literal">system_id</code>) of the notation declaration.
          </span>
         </dd>
        
        
         <dt><code class="parameter">system_id</code></dt>
         <dd>
          <span class="simpara">
           System identifier of the external notation declaration.
          </span>
         </dd>
        
        
         <dt>
          <code class="parameter">public_id</code>
         </dt>
         <dd>
          <span class="simpara">
           Public identifier of the external notation declaration.
          </span>
         </dd>
        
       </dl>
      </p>


function_name: xml_set_processing_instruction_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">handler</span></span>(<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$target</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$data</code></span>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">target</code></dt>
         <dd>
          <span class="simpara">
           The processing instruction target.
          </span>
         </dd>
        
        
         <dt><code class="parameter">data</code></dt>
         <dd>
          <span class="simpara">
           The processing instruction data.
          </span>
         </dd>
        
       </dl>
      </p>


function_name: xml_set_start_namespace_decl_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">handler</span></span>(<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>, <span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$prefix</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$uri</code></span>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">prefix</code></dt>
         <dd>
          <span class="simpara">
           The prefix is a string used to reference the namespace within an XML object.
           <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> if no prefix exists.
          </span>
         </dd>
        
        
         <dt><code class="parameter">uri</code></dt>
         <dd>
          <span class="simpara">
           Uniform Resource Identifier (URI) of namespace.
          </span>
         </dd>
        
       </dl>
      </p>


function_name: xml_set_unparsed_entity_decl_handler
name: handler
type: callable
description:
<p class="para">
 If <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or an empty string is passed, the handler is reset to its default state.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">callable</span>,
 the callable is set as the handler.
</p>
<p class="para">
 If <code class="parameter">handler</code> is a <span class="type">string</span>,
 it can be the name of a method of an object set with
 <span class="function">xml_set_object</span>.
</p>
      <p class="para">
       The signature of the handler must be:
       <div class="methodsynopsis dc-description"><span class="type">void</span> <span class="methodname"><span class="replaceable">handler</span></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">XMLParser</span> <code class="parameter">$parser</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">string</span> <code class="parameter">$entity_name</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$base</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">string</span> <code class="parameter">$system_id</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$public_id</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type">string</span><span class="type">false</span></span> <code class="parameter">$notation_name</code></span><br>)</div>

       <dl>
        
 <dt><code class="parameter">parser</code></dt>
 <dd>
  <span class="simpara">
   The XML parser calling the handler.
  </span>
 </dd>

        
         <dt><code class="parameter">entity_name</code></dt>
         <dd>
          <span class="simpara">
           The name of the entity that is about to be defined.
          </span>
         </dd>
        
        
         <dt><code class="parameter">base</code></dt>
         <dd>
          <span class="simpara">
           This is the base for resolving the system identifier
           (<code class="parameter">systemId</code>) of the external entity.
          </span>
         </dd>
        
        
         <dt><code class="parameter">system_id</code></dt>
         <dd>
          <span class="simpara">
           System identifier for the external entity.
          </span>
         </dd>
        
        
         <dt><code class="parameter">public_id</code></dt>
         <dd>
          <span class="simpara"> 
           Public identifier for the external entity.
          </span>
         </dd>
        
        
         <dt><code class="parameter">notation_name</code></dt>
         <dd>
          <span class="simpara"> 
           Name of the notation of this entity (see
           <span class="function">xml_set_notation_decl_handler</span>).
          </span>
         </dd>
        
       </dl>
      </p>


function_name: XMLReader.expand
name: baseNode
type: null
description:
<p class="para">
       A <span class="classname">DOMNode</span> defining the target <span class="classname">DOMDocument</span> for the created DOM object.
      </p>


function_name: XMLReader.getParserProperty
name: property
type: int
description:
<p class="para">
       One of the <a href="class.xmlreader.html#xmlreader.constants" class="link">parser option 
       constants</a>.
      </p>


function_name: XMLReader.open
name: encoding
type: null
description:
<p class="para">
       The document encoding or <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>.
      </p>


function_name: XMLReader.open
name: flags
type: int
description:
<p class="para">
       A bitmask of the <a href="libxml.constants.html" class="link">LIBXML_*</a> 
       constants.
      </p>


function_name: XMLReader.setParserProperty
name: value
type: bool
description:
<p class="para">
       If set to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> the option will be enabled otherwise will 
       be disabled.
      </p>


function_name: XMLWriter.endAttribute
name: writer
type: XMLWriter
description:
<p class="para">Only for procedural calls.
The <span class="classname">XMLWriter</span> instance that is being modified. This object is returned from a call to <span class="function">xmlwriter_open_uri</span> or <span class="function">xmlwriter_open_memory</span>.</p>


function_name: XMLWriter.flush
name: empty
type: bool
description:
<p class="para">
       Whether to empty the buffer or not. Default is <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>.
      </p>


function_name: XMLWriter.outputMemory
name: flush
type: bool
description:
<p class="para">
       Whether to flush the output buffer or not. Default is <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>.
      </p>


function_name: XMLWriter.startAttributeNs
name: namespace
type: null
description:
<p class="para">
       The namespace URI.
       If <code class="parameter">namespace</code> is <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, the namespace declaration will be
       omitted.
      </p>


function_name: XMLWriter.startDocument
name: version
type: null
initializer: "1.0"
description:
<p class="para">
       The version number of the document as part of the XML declaration. 
      </p>


function_name: XMLWriter.startDocument
name: standalone
type: null
description:
<p class="para">
       <code class="literal">yes</code> or <code class="literal">no</code>.
      </p>


function_name: XMLWriter.startElementNs
name: prefix
type: null
description:
<p class="para">
       The namespace prefix.
       If <code class="parameter">prefix</code> is <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, the namespace will be omitted.
      </p>


function_name: XMLWriter.text
name: content
type: string
description:
<p class="para">
       The contents of the text.
       The characters <code class="literal">&lt;</code>, <code class="literal">&gt;</code>,
       <code class="literal">&amp;</code> and <code class="literal">&quot;</code> are written as
       entity references (i.e. <code class="literal">&amp;lt;</code>, <code class="literal">&amp;gt;</code>,
       <code class="literal">&amp;amp;</code> and <code class="literal">&amp;quot;</code>, respectively).
       All other characters including <code class="literal">&#039;</code> are written literally.
       To write the special XML characters literally, or to write literal entity references,
       <span class="function">xmlwriter_write_raw</span> has to be used.
      </p>


function_name: XSLTProcessor.importStylesheet
name: stylesheet
type: object
description:
<p class="para">
       The imported style sheet as a <span class="classname">DOMDocument</span> or
       <span class="classname">SimpleXMLElement</span> object.
      </p>


function_name: XSLTProcessor.registerPHPFunctions
name: functions
type: null
description:
<p class="para">
       Use this parameter to only allow certain functions to be called from 
       XSLT.
      </p>
      <p class="para">
       This parameter can be either a string (a function name) or an array of
       functions.
      </p>


function_name: XSLTProcessor.setParameter
name: options
type: array
description:
<p class="para">
       An array of  <code class="literal">name =&gt; value</code> pairs.
      </p>


function_name: XSLTProcessor.setSecurityPrefs
name: preferences
type: int
description:
<p class="para">
       The new security preferences. The following constants can be ORed:
       <strong><code><a href="xsl.constants.html#constant.xsl-secpref-read-file">XSL_SECPREF_READ_FILE</a></code></strong>,
       <strong><code><a href="xsl.constants.html#constant.xsl-secpref-write-file">XSL_SECPREF_WRITE_FILE</a></code></strong>,
       <strong><code><a href="xsl.constants.html#constant.xsl-secpref-create-directory">XSL_SECPREF_CREATE_DIRECTORY</a></code></strong>,
       <strong><code><a href="xsl.constants.html#constant.xsl-secpref-read-network">XSL_SECPREF_READ_NETWORK</a></code></strong>,
       <strong><code><a href="xsl.constants.html#constant.xsl-secpref-write-network">XSL_SECPREF_WRITE_NETWORK</a></code></strong>. Alternatively,
       <strong><code><a href="xsl.constants.html#constant.xsl-secpref-none">XSL_SECPREF_NONE</a></code></strong> or
       <strong><code><a href="xsl.constants.html#constant.xsl-secpref-default">XSL_SECPREF_DEFAULT</a></code></strong> can be passed.
      </p>


function_name: XSLTProcessor.transformToDoc
name: document
type: object
description:
<p class="para">
       The <span class="classname">DOMDocument</span> or <span class="classname">SimpleXMLElement</span> or libxml-compatible
       object to be transformed.
      </p>


function_name: XSLTProcessor.transformToDoc
name: returnClass
type: null
description:
<p class="para">
       This optional parameter may be used so that
        <span class="methodname">XSLTProcessor::transformToDoc</span>
       will return an object of the specified class.
       That class should either extend or be the same class as <code class="parameter">document</code>&#039;s class.
      </p>


function_name: XSLTProcessor.transformToUri
name: document
type: object
description:
<p class="para">
       The <span class="classname">DOMDocument</span> or <span class="classname">SimpleXMLElement</span> object to
       be transformed.
      </p>


function_name: UI\Draw\Stroke.__construct
name: cap
type: int
initializer: UI\Draw\Line\Cap::Flat
description:
<p class="para">
      UI\Draw\Line\Cap::Flat, UI\Draw\Line\Cap::Round, or UI\Draw\Line\Cap::Square
     </p>


function_name: UI\Draw\Stroke.__construct
name: join
type: int
initializer: UI\Draw\Line\Join::Miter
description:
<p class="para">
      UI\Draw\Line\Join::Miter, UI\Draw\Line\Join::Round, or UI\Draw\Line\Join::Bevel
     </p>


function_name: UI\run
name: flags
type: int
description:
<p class="para">
      Set UI\Loop to return control, and UI\Wait to return control after waiting
     </p>


# notes

function_name: error_log
type: warning
description:
<p class="simpara">
    <span class="function">error_log</span> is not binary safe. <code class="parameter">message</code> will be truncated by null character.
   </p>


function_name: error_log
type: tip
description:
<p class="simpara">
    <code class="parameter">message</code> should not contain null character. Note that <code class="parameter">message</code> may be sent to file, mail, syslog, etc. Use appropriate conversion/escape function, <span class="function">base64_encode</span>, <span class="function">rawurlencode</span> or <span class="function">addslashes</span> before calling <span class="function">error_log</span>.
   </p>


function_name: error_reporting
type: tip
description:
<p class="simpara">
    Passing in the value <code class="literal">-1</code> will show every possible error,
    even when new levels and constants are added in future PHP versions. The
    behavior is equivalent to passing <strong><code><a href="errorfunc.constants.html#constant.e-all">E_ALL</a></code></strong> constant.
   </p>


function_name: trigger_error
type: warning
description:
<p class="para">
     HTML entities in <code class="parameter">message</code> are not
     escaped. Use <span class="function">htmlentities</span> on the message if
     the error is to be displayed in a browser.
   </p>


function_name: getenv
type: warning
description:
<p class="para">
    If PHP is running in a SAPI such as Fast CGI, this function will
    always return the value of an environment variable set by the SAPI,
    even if <span class="function">putenv</span> has been used to set a local
    environment variable of the same name. Use the <code class="parameter">local_only</code>
    parameter to return the value of locally-set environment variables.
   </p>


function_name: getmypid
type: warning
description:
<p class="para">
    Process IDs are not unique, thus they are a weak entropy
    source. We recommend against relying on pids in
    security-dependent contexts.
   </p>


function_name: getrusage
type: note
description:
<p class="para">
    On Windows <span class="function">getrusage</span> will only return the following 
    members:
   </p>
   <p class="para">
    <ul class="simplelist">
     <li><code class="literal">&quot;ru_stime.tv_sec&quot;</code></li>
     <li><code class="literal">&quot;ru_stime.tv_usec&quot;</code></li>
     <li><code class="literal">&quot;ru_utime.tv_sec&quot;</code></li>
     <li><code class="literal">&quot;ru_utime.tv_usec&quot;</code></li>
     <li>
      <code class="literal">&quot;ru_majflt&quot;</code> (only if <code class="parameter">mode</code> is 
      <strong><code>RUSAGE_SELF</code></strong>)
     </li>
     <li>
      <code class="literal">&quot;ru_maxrss&quot;</code> (only if <code class="parameter">mode</code> is 
      <strong><code>RUSAGE_SELF</code></strong>)
     </li>
    </ul>
   </p>
   <p class="para">
    If <span class="function">getrusage</span> is called with <code class="parameter">mode</code> 
    set to <code class="literal">1</code> (<strong><code>RUSAGE_CHILDREN</code></strong>), then 
    resource usage for threads are collected (meaning that internally the function 
    is called with <strong><code>RUSAGE_THREAD</code></strong>).
   </p>


function_name: getrusage
type: note
description:
<p class="para">
    on BeOS 2000, only the following members are returned:
   </p>
   <p class="para">
    <ul class="simplelist">
     <li><code class="literal">&quot;ru_stime.tv_sec&quot;</code></li>
     <li><code class="literal">&quot;ru_stime.tv_usec&quot;</code></li>
     <li><code class="literal">&quot;ru_utime.tv_sec&quot;</code></li>
     <li><code class="literal">&quot;ru_utime.tv_usec&quot;</code></li>
    </ul>
   </p>


function_name: ini_get_all
type: note
description:
<p class="para">
    <span class="function">ini_get_all</span> ignores &quot;array&quot; ini options such as
    pdo.dsn.*.
   </p>


function_name: ini_get
type: note
description:
<h1 class="title">When querying boolean values</h1>
   <p class="para">
    A boolean ini value of <code class="literal">off</code> will be returned as an
    empty string or &quot;0&quot; while a boolean ini value of <code class="literal">on</code> will
    be returned as &quot;1&quot;.
    The function can also return the literal string of INI value.
   </p>


function_name: ini_get
type: note
description:
<h1 class="title">When querying memory size values</h1>
   <p class="para">
    Many ini memory size values, such as
    <a href="ini.core.html#ini.upload-max-filesize" class="link">upload_max_filesize</a>, are
    stored in the <var class="filename">php.ini</var> file in shorthand notation.
    <span class="function">ini_get</span> will return the exact string stored in the
    <var class="filename">php.ini</var> file and <em>NOT</em> its <span class="type">int</span>
    equivalent.  Attempting normal arithmetic functions on these values
    will not have otherwise expected results.  The example above shows one
    way to convert shorthand notation into bytes, much like how the PHP
    source does it.
   </p>


function_name: ini_get
type: note
description:
<p class="para">
    <span class="function">ini_get</span> can&#039;t read &quot;array&quot; ini options such as
    pdo.dsn.*, and returns <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> in this case.
   </p>


function_name: php_sapi_name
type: note
description:
<h1 class="title">An alternative approach</h1>
   <p class="para">
    The PHP constant <strong><code><a href="reserved.constants.html#constant.php-sapi">PHP_SAPI</a></code></strong> has the same value
    as <span class="function">php_sapi_name</span>.
   </p>


function_name: php_sapi_name
type: tip
description:
<h1 class="title">A potential gotcha</h1>
   <p class="para">
    The defined <acronym class="acronym">SAPI</acronym> may not be obvious, because for
    example instead of <code class="literal">apache</code> it may be defined as 
    <code class="literal">apache2handler</code>.
   </p>


function_name: phpcredits
type: note
description:
<p class="para">
    <span class="function">phpcredits</span> outputs plain text instead of HTML when
    using the CLI mode.
   </p>


function_name: phpinfo
type: note
description:
<p class="para">
    In versions of PHP before 5.5, parts of the information displayed are
    disabled when the <a href="ini.core.html#ini.expose-php" class="link">expose_php</a>
    configuration setting is set to <code class="literal">off</code>. This includes the
    PHP and Zend logos, and the credits.
   </p>


function_name: phpinfo
type: note
description:
<p class="para">
    <span class="function">phpinfo</span> outputs plain text instead of HTML when
    using the CLI mode.
   </p>


function_name: phpversion
type: note
description:
<p class="para">
    This information is also available in the predefined constant
    <strong><code><a href="reserved.constants.html#constant.php-version">PHP_VERSION</a></code></strong>. More versioning information 
    is available using the <strong><code>PHP_VERSION_*</code></strong> 
    constants.
   </p>


function_name: phpversion
type: note
description:
<p class="para">
    Some extensions may define their own version number.
    However, most bundled extension will use the PHP version as their version number.
   </p>


function_name: set_time_limit
type: note
description:
<p class="para">
    The <span class="function">set_time_limit</span> function and the configuration 
    directive <a href="info.configuration.html#ini.max-execution-time" class="link">max_execution_time</a>
    only affect the execution time of the script itself.  Any time spent on
    activity that happens outside the execution of the script such as system
    calls using <span class="function">system</span>, stream operations, database
    queries, etc. is not included when determining the maximum time that the
    script has been running.
    This is not true on Windows where the measured time is real.
   </p>


function_name: version_compare
type: note
description:
<p class="para">
    The <strong><code><a href="reserved.constants.html#constant.php-version">PHP_VERSION</a></code></strong> constant holds current PHP version.
   </p>


function_name: version_compare
type: note
description:
<p class="para">
    Note that pre-release versions, such as 5.3.0-dev, are considered
    lower than their final release counterparts (like 5.3.0).
   </p>


function_name: version_compare
type: note
description:
<p class="para">
    Special version strings such as <code class="literal">alpha</code> and
    <code class="literal">beta</code> are case sensitive. Version strings from arbitrary
    sources that do not adhere to the PHP standard may need to be lowercased
    via <span class="function">strtolower</span> before calling
    <span class="function">version_compare</span>.
   </p>


function_name: zend_thread_id
type: note
description:
<p class="para">
    This function is only available if PHP has been built with ZTS (Zend
    Thread Safety) support and debug mode (<code class="literal">--enable-debug</code>).
   </p>


function_name: uopz_allow_exit
type: caution
description:
<p class="para">
    <a href="book.opcache.html" class="link">OPcache</a> optimizes away dead code after unconditional exit.
   </p>


function_name: readline_on_new_line
type: note
description:
<p class="para">
    This function is only available if supported by the underlying readline library.
    It is not supported on Windows.
   </p>


function_name: Phar.addFile
type: note
description:
<p class="simpara">
  <span class="function">Phar::addFile</span>, <span class="function">Phar::addFromString</span> and <span class="function">Phar::offsetSet</span>
  save a new phar archive each time they are called. If performance is a concern,
  <span class="function">Phar::buildFromDirectory</span> or <span class="function">Phar::buildFromIterator</span>
  should be used instead.
 </p>


function_name: Phar.extractTo
type: note
description:
<p class="para">Windows NTFS file systems
do not support some characters in filenames, namely <code class="literal">&lt;|&gt;*?&quot;:</code>. Filenames with a trailing dot
are not supported either. Contrary to some extraction tools, this method does not replace these characters with
an underscore, but instead fails to extract such files.</p>


function_name: PharData.addFile
type: note
description:
<p class="simpara">
  <span class="function">PharData::addFile</span>, <span class="function">PharData::addFromString</span> and <span class="function">PharData::offsetSet</span>
  save a new phar archive each time they are called. If performance is a concern,
  <span class="function">PharData::buildFromDirectory</span> or <span class="function">PharData::buildFromIterator</span>
  should be used instead.
 </p>


function_name: ZipArchive.addFile
type: note
description:
<p class="para">
    When a file is set to be added to the archive, PHP will lock the file. The
    lock is only released once the <span class="classname">ZipArchive</span> object
    has been closed, either via  <span class="methodname">ZipArchive::close</span> or
    the <span class="classname">ZipArchive</span> object being destroyed. This may
    prevent you from being able to delete the file being added until after the
    lock has been released.
   </p>


function_name: ZipArchive.setPassword
type: note
description:
<p class="para">
    As of PHP 7.2.0 and libzip 1.2.0 the password is used to decompress the archive,
    and is also the default password for  <span class="methodname">ZipArchive::setEncryptionName</span>
    and  <span class="methodname">ZipArchive::setEncryptionIndex</span>.
    Formerly, this function only set the password to be used to decompress the archive;
    it did not turn a non-password-protected <span class="classname">ZipArchive</span>
    into a password-protected <span class="classname">ZipArchive</span>.
   </p>


function_name: inflate_init
type: caution
description:
<p class="simpara">
    Unlike <span class="function">gzinflate</span>, incremental inflate contexts do not
    constrain the length of the decoded data, so provide no automatic protection
    against Zip bombs.
   </p>


function_name: ob_gzhandler
type: note
description:
<p class="para">
    <span class="function">ob_gzhandler</span> requires the <a href="ref.zlib.html" class="link">zlib</a> extension.
   </p>


function_name: ob_gzhandler
type: note
description:
<p class="para">
    You cannot use both <span class="function">ob_gzhandler</span> and <a href="zlib.configuration.html#ini.zlib.output-compression" class="link">zlib.output_compression</a>.
    Also note that using <a href="zlib.configuration.html#ini.zlib.output-compression" class="link">
    zlib.output_compression</a> is preferred over
    <span class="function">ob_gzhandler</span>.
   </p>


function_name: hash_equals
type: note
description:
<p class="para">
    Both arguments must be of the same length to be compared successfully.
    When arguments of differing length are supplied, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> is returned immediately and
    the length of the known string may be leaked in case of a timing attack.
   </p>


function_name: hash_hmac_algos
type: note
description:
<p class="para">
    Before PHP 7.2.0 the only means to get a list of supported hash algorithms
    has been to call <span class="function">hash_algos</span> which also returns hash
    algorithms that are not suitable for <span class="function">hash_hmac</span>.
   </p>


function_name: hash_pbkdf2
type: caution
description:
<p class="para">
    The PBKDF2 method can be used for hashing passwords for storage. However, it
    should be noted that <span class="function">password_hash</span> or
    <span class="function">crypt</span> with <strong><code><a href="string.constants.html#constant.crypt-blowfish">CRYPT_BLOWFISH</a></code></strong> are
    better suited for password storage.
   </p>


function_name: openssl_pkcs7_verify
type: note
description:
<p class="simpara">
    As specified in RFC 2045, lines may not be longer than 76 characters 
    in the <code class="parameter">input_filename</code> parameter.
   </p>


function_name: password_hash
type: caution
description:
<p class="para">
    It is strongly recommended that you do not generate your own salt for this
    function.  It will create a secure salt automatically for you if you do
    not specify one.
   </p>
   <p class="para">
    As noted above, providing the <code class="literal">salt</code> option in PHP 7.0
    will generate a deprecation warning. Support for providing a salt manually
    has been removed in PHP 8.0.
   </p>


function_name: password_hash
type: note
description:
<p class="para">
    It is recommended that you test this function on your servers, and adjust the cost parameter 
    so that execution of the function takes less than 350 milliseconds on interactive systems.
    The script in the above example will help you choose a good cost value for your hardware.
   </p>


function_name: password_hash
type: note
description:
<p class="simpara">
    Updates to supported algorithms by this function (or changes to the default one) must follow 
    the following rules:
   </p>
   <p class="para">
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
      Any new algorithm must be in core for at least 1 full release of PHP
      prior to becoming default. So if, for example, a new algorithm is added
      in 7.5.5, it would not be eligible for default until 7.7 (since 7.6
      would be the first full release). But if a different algorithm was added
      in 7.6.0, it would also be eligible for default at 7.7.0.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       The default should only change in a full release (7.3.0, 8.0.0, etc)
       and not in a revision release.  The only exception to this is in an
       emergency when a critical security flaw is found in the current
       default.
      </span>
     </li>
    </ul>
   </p>


function_name: sodium_crypto_pwhash_str_verify
type: note
description:
<p class="para">
    Hashes are calculated using the Argon2ID algorithm, providing resistance to both GPU and side-channel attacks.
   </p>


function_name: sodium_crypto_pwhash_str
type: note
description:
<p class="para">
    Hashes are calculated using the Argon2ID algorithm,
    providing resistance to both GPU and side-channel attacks.
    In contrast to the <span class="function">password_hash</span> function,
    there is no salt parameter (a salt is generated automatically),
    and the <code class="parameter">opslimit</code> and
    <code class="parameter">memlimit</code> parameters are not optional.
   </p>


function_name: odbc_close_all
type: note
description:
<p class="para">
    This function will fail if there are open transactions on a connection.
    This connection will remain open in this case.
   </p>


function_name: odbc_close
type: note
description:
<p class="para">
    This function will fail if there are open transactions on this
    connection. The connection will remain open in this case.
   </p>


function_name: odbc_fetch_array
type: note
description:
<p class="simpara">
    This function exists when compiled with DBMaker, IBM DB2 or UnixODBC support.
   </p>


function_name: odbc_free_result
type: note
description:
<p class="para">
    If auto-commit is disabled (see <span class="function">odbc_autocommit</span>) and
    you call <span class="function">odbc_free_result</span> before committing, all
    pending transactions are rolled back.
   </p>


function_name: odbc_longreadlen
type: note
description:
<p class="para">
    Handling of <code class="literal">LONGVARBINARY</code> columns is also affected by
    <span class="function">odbc_binmode</span>.
   </p>


function_name: odbc_num_rows
type: note
description:
<p class="para">
    Using <span class="function">odbc_num_rows</span> to determine the number of rows
    available after a SELECT will return -1 with many drivers.
   </p>


function_name: odbc_pconnect
type: note
description:
<p class="simpara">
    Persistent connections have no effect if PHP is used as a CGI
    program.
   </p>


function_name: PDOStatement.execute
type: note
description:
<p class="para">
    Some drivers require to <a href="pdostatement.closecursor.html" class="link">close
    cursor</a> before executing next statement.
   </p>


function_name: cubrid_unbuffered_query
type: note
description:
<p class="para">
    The benefits of <span class="function">cubrid_unbuffered_query</span> come
    at a cost: you cannot use <span class="function">cubrid_num_rows</span> and
    <span class="function">cubrid_data_seek</span> on a result set returned from
    <span class="function">cubrid_unbuffered_query</span>.
   </p>


function_name: cubrid_load_from_glo
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">cubrid_load_from_glo</span>
   </p>


function_name: cubrid_new_glo
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">cubrid_new_glo</span>
   </p>


function_name: cubrid_save_to_glo
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">cubrid_save_to_glo</span>
   </p>


function_name: cubrid_send_glo
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">cubrid_send_glo</span>
   </p>


function_name: dbase_replace_record
type: note
description:
<p class="para">
    Boolean fields result in an <span class="type">int</span> element value
    (<code class="literal">0</code> or <code class="literal">1</code>) when retrieved via
    <span class="function">dbase_get_record</span> or
    <span class="function">dbase_get_record_with_names</span>. If they are written back,
    this results in the value becoming <code class="literal">0</code>, so care has to be
    taken to properly adjust the values.
   </p>


function_name: MongoDB\Driver\Manager.executeCommand
type: note
description:
<p class="simpara">
    If a secondary <code class="parameter">readPreference</code> is used, it is the
    caller&#039;s responsibility to ensure that the
    <code class="parameter">command</code> can be executed on a secondary. No validation
    is done by the driver.
   </p>


function_name: MongoDB\Driver\Manager.executeCommand
type: note
description:
<p class="simpara">
    This method does not default to using the read preference from the
    <a href="mongodb-driver-manager.construct.html#mongodb-driver-manager.construct-uri" class="link">MongoDB Connection
    URI</a>. Applications in need of that behavior should consider using
    <span class="function">MongoDB\Driver\Manager::executeReadCommand</span>.
   </p>


function_name: MongoDB\Driver\Server.executeBulkWrite
type: note
description:
<p class="simpara">
    It is the caller&#039;s responsibility to ensure that the server is capable
    of executing the write operation. For example, executing a write operation
    on a secondary (excluding its &quot;local&quot; database) will fail.
   </p>


function_name: mysqli.autocommit
type: note
description:
<p class="para">
    This function does not work with non transactional table types (like
    MyISAM or ISAM).
   </p>


function_name: mysqli.change_user
type: note
description:
<p class="para">
    Using this command will always cause the current database connection to
    behave as if was a completely new database connection, regardless of if
    the operation was completed successfully. This reset includes performing
    a rollback on any active transactions, closing all temporary tables, and
    unlocking all locked tables.
   </p>


function_name: mysqli.close
type: note
description:
<p class="para">
    <span class="function">mysqli_close</span> will not close persistent connections. 
    For additional details, see the manual page on
    <a href="features.persistent-connections.html" class="link">persistent connections</a>.
   </p>


function_name: mysqli.__construct
type: note
description:
<p class="para">MySQLnd always assumes the server default charset. This charset is sent during connection
hand-shake/authentication, which mysqlnd will use.</p><p class="para">Libmysqlclient uses the default charset set in the
<var class="filename">my.cnf</var> or by an explicit call to <span class="function">mysqli_options</span> prior to
calling <span class="function">mysqli_real_connect</span>, but after <span class="function">mysqli_init</span>.</p>


function_name: mysqli.__construct
type: note
description:
<p class="para">
    Object-oriented style only: If the connection fails, an object is still returned. To check 
    whether the connection failed, use either the 
    <span class="function">mysqli_connect_error</span> function or the <a href="mysqli.connect-error.html" class="link">mysqli-&gt;connect_error</a> property as in 
    the preceding examples.
   </p>


function_name: mysqli.__construct
type: note
description:
<p class="para">
    If it is necessary to set options, such as the connection timeout,
    <span class="function">mysqli_real_connect</span> must be used instead.
   </p>


function_name: mysqli.__construct
type: note
description:
<p class="para">
    Calling the constructor with no parameters is the same as calling
    <span class="function">mysqli_init</span>.
   </p>


function_name: mysqli.__construct
type: note
description:
<p class="para">
    Error &quot;Can&#039;t create TCP/IP socket (10106)&quot; usually means that the <a href="ini.core.html#ini.variables-order" class="link">variables_order</a> configure directive
    doesn&#039;t contain character <code class="literal">E</code>. On Windows, if the
    environment is not copied the <code class="literal">SYSTEMROOT</code> environment
    variable won&#039;t be available and PHP will have problems loading Winsock.
   </p>


function_name: mysqli.debug
type: note
description:
<p class="para">
    To use the <span class="function">mysqli_debug</span> function you must compile
    the MySQL client library to support debugging.
   </p>


function_name: mysqli.set_charset
type: note
description:
<p class="para">
    To use this function on a Windows platform you need MySQL client library
    version 4.1.11 or above (for MySQL 5.0 you need 5.0.6 or above).
   </p>


function_name: mysqli.set_charset
type: note
description:
<p class="para">
    This is the preferred way to change the charset. Using
    <span class="function">mysqli_query</span> to set it (such as <code class="literal">SET NAMES utf8</code>)
    is not recommended. See the <a href="mysqlinfo.concepts.charset.html" class="link">MySQL character set concepts</a>
    section for more information.
   </p>


function_name: mysqli.store_result
type: note
description:
<p class="para">
    Although it is always good practice to free the memory used by the result
    of a query using the <span class="function">mysqli_free_result</span> function,
    when transferring large result sets using the
    <span class="function">mysqli_store_result</span> this becomes particularly
    important.
   </p>


function_name: mysqli_stmt.$sqlstate
type: note
description:
<p class="para">
    Note that not all MySQL errors are yet mapped to SQLSTATE&#039;s.
    The value <code class="literal">HY000</code> (general error) is used for unmapped errors.
   </p>


function_name: mysqli_result.data_seek
type: note
description:
<p class="para">
    This function can only be used with buffered results attained from the
    use of the <span class="function">mysqli_store_result</span>,
    <span class="function">mysqli_query</span> or <span class="function">mysqli_stmt_get_result</span> functions.
   </p>


function_name: mysqli_result.$num_rows
type: note
description:
<p class="para">
    In contrast to the <span class="function">mysqli_stmt_num_rows</span> function,
    this function doesn&#039;t have object-oriented method variant.
    In the object-oriented style, use the getter property.
   </p>


function_name: mysqli_execute
type: note
description:
<p class="para">
    <span class="function">mysqli_execute</span> is deprecated and will be removed.
   </p>


function_name: Collection.add
type: note
description:
<p class="para">
    A unique _id is generated by MySQL Server 8.0 or higher, as demonstrated 
    in the example. The _id field must be manually defined if using
    MySQL Server 5.7.
   </p>


function_name: mysql_affected_rows
type: note
description:
<h1 class="title">Transactions</h1>
   <p class="para">
    If you are using transactions, you need to call
    <span class="function">mysql_affected_rows</span> after your INSERT, UPDATE, or 
    DELETE query, not after the COMMIT.
   </p>


function_name: mysql_affected_rows
type: note
description:
<h1 class="title">SELECT Statements</h1>
   <p class="para">
    To retrieve the number of rows returned by a SELECT, it is possible to
    use <span class="function">mysql_num_rows</span>.
   </p>


function_name: mysql_affected_rows
type: note
description:
<h1 class="title">Cascaded Foreign Keys</h1>
   <p class="para">
     <span class="function">mysql_affected_rows</span> does not count rows affected
     implicitly through the use of ON DELETE CASCADE and/or ON UPDATE CASCADE 
     in foreign key constraints.
   </p>


function_name: mysql_close
type: note
description:
<p class="para">
    <span class="function">mysql_close</span> will not close persistent links
    created by <span class="function">mysql_pconnect</span>.
    For additional details, see the manual page on
    <a href="features.persistent-connections.html" class="link">persistent connections</a>.
   </p>


function_name: mysql_connect
type: note
description:
<p class="para">
    Whenever you specify &quot;localhost&quot; or
    &quot;localhost:port&quot; as server, the MySQL client library will
    override this and try to connect to a local socket (named pipe on
    Windows). If you want to use TCP/IP, use &quot;127.0.0.1&quot;
    instead of &quot;localhost&quot;. If the MySQL client library tries to
    connect to the wrong local socket, the correct path should be set as
    <a href="mysql.configuration.html#ini.mysql.default-host" class="link">mysql.default_host</a> in <var class="filename">php.ini</var> and the server field
    left blank.
   </p>


function_name: mysql_connect
type: note
description:
<p class="para">
    The link to the server will be closed as soon as the execution of
    the script ends, unless it&#039;s closed earlier by explicitly calling
    <span class="function">mysql_close</span>.
   </p>


function_name: mysql_create_db
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_createdb</span>
   </p>


function_name: mysql_create_db
type: note
description:
<p class="para">
    This function will not be available if the MySQL extension was built 
    against a MySQL 4.x client library.
   </p>


function_name: mysql_data_seek
type: note
description:
<p class="para">
    The function <span class="function">mysql_data_seek</span> can be used in
    conjunction only with <span class="function">mysql_query</span>, not with
    <span class="function">mysql_unbuffered_query</span>. 
   </p>


function_name: mysql_db_name
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_dbname</span>
   </p>


function_name: mysql_db_query
type: note
description:
<p class="para">
    Be aware that this function does <strong>NOT</strong>
    switch back to the database you were connected before. In other words,
    you can&#039;t use this function to <em>temporarily</em> run a
    sql query on another database, you would have to manually switch back.
    Users are strongly encouraged to use the
    <code class="literal">database.table</code> syntax in their sql queries or
    <span class="function">mysql_select_db</span> instead of this function.
   </p>


function_name: mysql_drop_db
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_dropdb</span>
   </p>


function_name: mysql_escape_string
type: note
description:
<p class="para">
    <span class="function">mysql_escape_string</span> does not escape
    <code class="literal">%</code> and <code class="literal">_</code>.
   </p>


function_name: mysql_fetch_array
type: note
description:
<h1 class="title">Performance</h1>
   <p class="para">
    An important thing to note is that using 
    <span class="function">mysql_fetch_array</span> is <em>not 
    significantly</em> slower than using
    <span class="function">mysql_fetch_row</span>, while it provides
    a significant added value.
   </p>


function_name: mysql_fetch_array
type: note
description:
<p class="simpara">This function sets NULL fields to
the PHP <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> value.</p>


function_name: mysql_fetch_assoc
type: note
description:
<h1 class="title">Performance</h1>
   <p class="para">
    An important thing to note is that using
    <span class="function">mysql_fetch_assoc</span> is <em>not
    significantly</em> slower than using
    <span class="function">mysql_fetch_row</span>, while it
    provides a significant added value.
   </p>


function_name: mysql_fetch_field
type: note
description:
<p class="para">
    If field or tablenames are aliased in the SQL query the aliased name will
    be returned. The original name can be retrieved for instance by using
     <span class="methodname">mysqli_result::fetch_field</span>.
   </p>


function_name: mysql_fetch_object
type: note
description:
<h1 class="title">Performance</h1>
   <p class="para">
    Speed-wise, the function is identical to
    <span class="function">mysql_fetch_array</span>, and almost as quick as
    <span class="function">mysql_fetch_row</span> (the difference is
    insignificant).
   </p>


function_name: mysql_fetch_object
type: note
description:
<p class="para">
    <span class="function">mysql_fetch_object</span> is similar to
    <span class="function">mysql_fetch_array</span>, 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).
   </p>


function_name: mysql_field_flags
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_fieldflags</span>
   </p>


function_name: mysql_field_len
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_fieldlen</span>
   </p>


function_name: mysql_field_name
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_fieldname</span>
   </p>


function_name: mysql_field_table
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_fieldtable</span>
   </p>


function_name: mysql_field_type
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_fieldtype</span>
   </p>


function_name: mysql_free_result
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_freeresult</span>
   </p>


function_name: mysql_info
type: note
description:
<p class="para">
    <span class="function">mysql_info</span> returns a non-<strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> value for the 
    INSERT ... VALUES statement only if multiple value lists are 
    specified in the statement.
   </p>


function_name: mysql_insert_id
type: caution
description:
<p class="para">
    <span class="function">mysql_insert_id</span> will convert the return type of the
    native MySQL C API function <code class="literal">mysql_insert_id()</code> to a type
    of <code class="literal">long</code> (named <span class="type">int</span> in PHP). If your
    AUTO_INCREMENT column has a column type of BIGINT (64 bits) the
    conversion may result in an incorrect value. Instead, use the internal
    MySQL SQL function LAST_INSERT_ID() in an SQL query. For more information
    about PHP&#039;s maximum integer values, please see the
    <a href="language.types.integer.html" class="link">integer</a> documentation.
   </p>


function_name: mysql_insert_id
type: note
description:
<p class="para">
    Because <span class="function">mysql_insert_id</span> acts on the last performed
    query, be sure to call <span class="function">mysql_insert_id</span> immediately 
    after the query that generates the value.
   </p>


function_name: mysql_insert_id
type: note
description:
<p class="para">
    The value of the MySQL SQL function
    <code class="literal">LAST_INSERT_ID()</code> always contains the most
    recently generated AUTO_INCREMENT value, and is not reset
    between queries.
  </p>


function_name: mysql_list_dbs
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_listdbs</span>
   </p>


function_name: mysql_list_fields
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_listfields</span>
   </p>


function_name: mysql_list_tables
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_listtables</span>
   </p>


function_name: mysql_num_fields
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_numfields</span>
   </p>


function_name: mysql_num_rows
type: note
description:
<p class="para">
    If you use <span class="function">mysql_unbuffered_query</span>, 
    <span class="function">mysql_num_rows</span> will not return the 
    correct value until all the rows in the result set have been 
    retrieved.
   </p>


function_name: mysql_num_rows
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_numrows</span>
   </p>


function_name: mysql_pconnect
type: note
description:
<p class="para">
    Note, that these kind of links only work if you are using
    a module version of PHP. See the
    <a href="features.persistent-connections.html" class="link">Persistent
    Database Connections</a> section for more information.
   </p>


function_name: mysql_pconnect
type: warning
description:
<p class="para">
    Using persistent connections can require a bit of tuning of your Apache
    and MySQL configurations to ensure that you do not exceed the number of
    connections allowed by MySQL.
   </p>


function_name: mysql_real_escape_string
type: note
description:
<p class="para">
    A MySQL connection is required before using 
    <span class="function">mysql_real_escape_string</span> otherwise an error of
    level <strong><code><a href="errorfunc.constants.html#constant.e-warning">E_WARNING</a></code></strong> is generated, and <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> is 
    returned. If <code class="parameter">link_identifier</code> isn&#039;t defined, the
    last MySQL connection is used.
   </p>


function_name: mysql_real_escape_string
type: note
description:
<p class="para">
    If this function is not used to escape data, the query is vulnerable to
    <a href="security.database.sql-injection.html" class="link">SQL Injection Attacks</a>.
   </p>


function_name: mysql_real_escape_string
type: note
description:
<p class="simpara">
    <span class="function">mysql_real_escape_string</span> does not escape
    <code class="literal">%</code> and <code class="literal">_</code>. These are wildcards in
    MySQL if combined with <code class="literal">LIKE</code>, <code class="literal">GRANT</code>,
    or <code class="literal">REVOKE</code>.
   </p>


function_name: mysql_result
type: note
description:
<p class="para">
    Calls to <span class="function">mysql_result</span> should not be mixed
    with calls to other functions that deal with the result set.
   </p>


function_name: mysql_select_db
type: note
description:
<p class="para">
    For backward compatibility, the following
deprecated alias may be used: 
    <span class="function">mysql_selectdb</span>
   </p>


function_name: mysql_set_charset
type: note
description:
<p class="para">
    This is the preferred way to change the charset. Using
    <span class="function">mysql_query</span> to set it (such as <code class="literal">SET NAMES utf8</code>)
    is not recommended. See the <a href="mysqlinfo.concepts.charset.html" class="link">MySQL character set concepts</a>
    section for more information.
   </p>


function_name: mysql_tablename
type: note
description:
<p class="para">
    The <span class="function">mysql_num_rows</span> function may be used to
    determine the number of tables in the result pointer.
   </p>


function_name: mysql_unbuffered_query
type: note
description:
<p class="para">
    The benefits of <span class="function">mysql_unbuffered_query</span> come
    at a cost: you cannot use <span class="function">mysql_num_rows</span> and
    <span class="function">mysql_data_seek</span> on a result set returned from
    <span class="function">mysql_unbuffered_query</span>, until all rows are fetched.
    You also have to fetch all result rows from an unbuffered SQL query
    before you can send a new SQL query to MySQL, using the same
    <code class="parameter">link_identifier</code>.
   </p>


function_name: oci_bind_by_name
type: warning
description:
<p class="para">
    Do not use <span class="function">addslashes</span>
    and <span class="function">oci_bind_by_name</span> simultaneously as no
    quoting is needed. Any magically applied quotes will be written
    into your database because <span class="function">oci_bind_by_name</span>
    inserts data verbatim and does not remove quotes or escape
    characters.
   </p>


function_name: oci_bind_by_name
type: note
description:
<p class="para">
    If you bind a string to a <code class="literal">CHAR</code> column in
    a <code class="literal">WHERE</code> clause, remember that Oracle uses
    blank-padded comparison semantics for <code class="literal">CHAR</code>
    columns.  Your PHP variable should be blank padded to the same
    width as the column for the <code class="literal">WHERE</code> clause to
    succeed.
   </p>


function_name: oci_bind_by_name
type: note
description:
<p class="para">
     The PHP <code class="parameter">var</code> argument is a reference.  Some
     forms of loops do not work as expected:
   </p>
   <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$myarray </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">)  {<br />    </span><span style="color: #0000BB">oci_bind_by_name</span><span style="color: #007700">(</span><span style="color: #0000BB">$stid</span><span style="color: #007700">, </span><span style="color: #0000BB">$key</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>
   <p class="para">
     This binds each key to the location of $value, so all bound
     variables end up pointing to the last loop iteration&#039;s
     value. Instead use the following:
   </p>
   <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$myarray </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">oci_bind_by_name</span><span style="color: #007700">(</span><span style="color: #0000BB">$stid</span><span style="color: #007700">, </span><span style="color: #0000BB">$key</span><span style="color: #007700">, </span><span style="color: #0000BB">$myarray</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>


function_name: oci_client_version
type: note
description:
<p class="para">
    Oracle libraries before 10<em>g</em>R2 do not have the underlying
    functionality to get the client library version number.  The
    string &quot;Unknown&quot; will be returned in this case.
   </p>


function_name: oci_close
type: note
description:
<p class="para">
    Variables that have a dependency on the connection identifier,
    such as statement identifiers returned
    by <span class="function">oci_parse</span>, must also be freed before the
    underlying database connection is closed.
   </p>


function_name: oci_close
type: note
description:
<p class="para">
    The <span class="function">oci_close</span> function does not close the
    underlying database connections created
    with <span class="function">oci_pconnect</span>.
   </p>


function_name: oci_commit
type: note
description:
<p class="para">
    Transactions are automatically rolled back when you close the
    connection, or when the script ends, whichever is soonest. You
    need to explicitly call <span class="function">oci_commit</span> to commit
    the transaction.
   </p>
   <p class="para">
    Any call to <span class="function">oci_execute</span> that uses
    <strong><code><a href="oci8.constants.html#constant.oci-commit-on-success">OCI_COMMIT_ON_SUCCESS</a></code></strong> mode explicitly or by
    default will commit any previous uncommitted transaction.
   </p>
   <p class="para">
    Any Oracle DDL statement such as <code class="literal">CREATE</code>
    or <code class="literal">DROP</code> will automatically commit any
    uncommitted transaction.
   </p>


function_name: oci_connect
type: note
description:
<p class="para">
    An incorrectly installed or configured OCI8 extension will often
    manifest itself as a connection problem or error.
    See <a href="oci8.setup.html" class="link">Installing/Configuring</a> for
    troubleshooting information.
   </p>


function_name: oci_execute
type: note
description:
<p class="para">
    Transactions are automatically rolled back when connections are
    closed, or when the script ends, whichever is soonest.  Explicitly
    call <span class="function">oci_commit</span> to commit a transaction.
   </p>
   <p class="para">
    Any call to <span class="function">oci_execute</span> that uses
    <strong><code><a href="oci8.constants.html#constant.oci-commit-on-success">OCI_COMMIT_ON_SUCCESS</a></code></strong> mode explicitly or by
    default will commit any previous uncommitted transaction.
   </p>
   <p class="para">
    Any Oracle DDL statement such as <code class="literal">CREATE</code>
    or <code class="literal">DROP</code> will automatically commit any
    uncommitted transaction.
   </p>


function_name: oci_execute
type: note
description:
<p class="para">
    Because the <span class="function">oci_execute</span> function generally
    sends the statement to the
    database, <span class="function">oci_execute</span> can identify some
    statement syntax errors that the lightweight,
    local <span class="function">oci_parse</span> function does not.
   </p>


function_name: oci_fetch_all
type: note
description:
<p class="para">
     Using <code class="parameter">offset</code> is very inefficient.  All the
     rows to be skipped are included in the result set that is
     returned from the database to PHP.  They are then discarded.  It
     is more efficient to use SQL to restrict the offset and range of
     rows in the query.  See <span class="function">oci_fetch_array</span> for
     an example.
   </p>


function_name: oci_fetch_all
type: note
description:
<p class="para">
    Queries that return a large number of rows can be more memory
    efficient if a single-row fetching function
    like <span class="function">oci_fetch_array</span> is used.
   </p>


function_name: oci_fetch_all
type: note
description:
<p class="para">For
queries returning a large number of rows, performance can be
significantly improved by
increasing <a href="oci8.configuration.html#ini.oci8.default-prefetch" class="link">oci8.default_prefetch</a>
or using <span class="function">oci_set_prefetch</span>.
</p>


function_name: oci_fetch_all
type: note
description:
<p class="para">
    Will not return rows from Oracle Database 12<em>c</em>
    Implicit Result Sets.  Use <span class="function">oci_fetch_array</span>
    instead.
   </p>


function_name: oci_fetch_array
type: note
description:
<p class="para">
    Associative array indices need to be in uppercase for standard
    Oracle columns that were created with case insensitive names.
   </p>


function_name: oci_fetch_array
type: note
description:
<p class="para">
    The function <span class="function">oci_fetch_array</span>
    is <em>insignificantly</em> slower than
    <span class="function">oci_fetch_assoc</span>
    or <span class="function">oci_fetch_row</span>, but is more flexible.
   </p>


function_name: oci_fetch_assoc
type: note
description:
<p class="para">
    See <span class="function">oci_fetch_array</span> for more examples of fetching rows.
   </p>


function_name: oci_fetch
type: note
description:
<p class="para">
    Will not return rows from Oracle Database Implicit Result Sets.
    Use <span class="function">oci_fetch_array</span> instead.
   </p>


function_name: oci_free_descriptor
type: note
description:
<p class="para">
    This function is commonly used as a method <a href="ocilob.free.html" class="link">OCILOB::free</a>.
   </p>


function_name: oci_lob_copy
type: note
description:
<p class="para">
    The OCILob class was called OCI-Lob prior to PHP 8 and PECL OCI8 3.0.0.
   </p>


function_name: oci_new_collection
type: note
description:
<p class="para">
    The <span class="classname">OCICollection</span> class was called <span class="classname">OCI-Collection</span> prior to PHP 8 and OCI8 3.0.0.
   </p>


function_name: oci_num_rows
type: note
description:
<p class="para">
    This function <em>does not</em> return number of rows selected!
    For SELECT statements this function will return the number of rows, that were
    fetched to the buffer with <span class="function">oci_fetch*</span> functions.
   </p>


function_name: oci_parse
type: note
description:
<p class="para">
    This function <em>does not</em> validate 
    <code class="parameter">sql</code>. The only way to find out if
    <code class="parameter">sql</code> is a valid SQL or PL/SQL statement
    is to execute it.
   </p>


function_name: oci_password_change
type: note
description:
<p class="para">
    Changing the password either with this function or directly in
    Oracle should be done carefully.  This is because PHP applications
    may continue to successfully reuse persistent connections by
    authenticating with the old password.  The best practice is to
    restart all web servers whenever the user password is changed.
   </p>


function_name: oci_password_change
type: note
description:
<p class="para">
    If upgrading the Oracle client libraries or the database from a release prior to 11.2.0.3
    to version 11.2.0.3 or higher, <span class="function">oci_password_change</span> may give the
    error &quot;ORA-1017: invalid username/password&quot; unless both client and server versions are upgraded at
    the same time.
   </p>


function_name: oci_password_change
type: note
description:
<p class="para">
    The second <span class="function">oci_password_change</span> syntax is available
    since OCI8 version 1.1.
   </p>


function_name: oci_pconnect
type: note
description:
<p class="simpara">
    The lifetime and
    maximum number of persistent Oracle connections per PHP process can be tuned by setting
    the following configuration values: <a href="oci8.configuration.html#ini.oci8.persistent-timeout" class="link">oci8.persistent_timeout</a>,
    <a href="oci8.configuration.html#ini.oci8.ping-interval" class="link">oci8.ping_interval</a> and
    <a href="oci8.configuration.html#ini.oci8.max-persistent" class="link">oci8.max_persistent</a>.
   </p>


function_name: oci_set_action
type: note
description:
<h1 class="title">Oracle version requirement</h1>
<p class="para">This function is available when PHP is linked with Oracle Database
libraries from version 10<em>g</em> onwards.</p>


function_name: oci_set_action
type: tip
description:
<h1 class="title">Performance</h1><p class="para">With older versions of
OCI8 or the Oracle Database, the client information can be set using the Oracle
<code class="literal">DBMS_APPLICATION_INFO</code> package. This is less efficient than
using <span class="function">oci_set_client_info</span>.</p>


function_name: oci_set_action
type: caution
description:
<h1 class="title">Round-trip Gotcha</h1>
<p class="para">Some but not all OCI8 functions cause round-trips.  Round-trips to the
database may not occur with queries when result caching is enabled.
</p>


function_name: oci_set_edition
type: note
description:
<h1 class="title">Oracle version requirement</h1>
   <p class="para">
    This function is available from Oracle 11<em>g</em>R2 onwards.
   </p>


function_name: oci_set_edition
type: caution
description:
<h1 class="title">Persistent connections</h1>
   <p class="para">
    To avoid inconsistencies and unexpected errors, do not use ALTER
    SESSION SET EDITION to change the edition on persistent connections.
   </p>


function_name: oci_set_edition
type: caution
description:
<h1 class="title">DRCP Connection Pooling</h1>
   <p class="para">
    To avoid inconsistencies and unexpected errors when using editions
    and <a href="oci8.connection.html" class="link">DRCP</a> with Oracle
    11.2.0.1, keep a one-to-one correspondence between
    the <a href="oci8.configuration.html#ini.oci8.connection-class" class="link">oci8.connection_class</a>
    and the edition name used by applications.  Each pooled server of
    a given connection class should only be used with one edition.
    This restriction has been removed with Oracle 11.2.0.2.
   </p>


function_name: OCILob.eof
type: note
description:
<p class="para">
    This function will return an Oracle error if <a href="ocilob.setbuffering.html" class="xref">OCILob::setBuffering</a> is enabled on the LOB.
   </p>


function_name: pg_field_table
type: note
description:
<p class="para">
    Returning the oid is much faster than returning the table name because
    fetching the table name requires a query to the database system table.
   </p>


function_name: SQLite3.escapeString
type: warning
description:
<p class="simpara">
    <span class="function">addslashes</span> should <em>NOT</em> be used to
    quote your strings for SQLite queries; it will lead to strange results
    when retrieving your data.
   </p>


function_name: easter_date
type: note
description:
<p class="para">
    <span class="function">easter_date</span> relies on your system&#039;s C library time
    functions, rather than using PHP&#039;s internal date and time functions. As a
    consequence, <span class="function">easter_date</span> uses the
    <code class="literal">TZ</code> environment variable to determine the time zone it
    should operate in, rather than using PHP&#039;s
    <a href="datetime.configuration.html#ini.date.timezone" class="link">default time zone</a>, which may
    result in unexpected behaviour when using this function in conjunction
    with other date functions in PHP.
   </p>
   <p class="para">
    As a workaround, you can use the <span class="function">easter_days</span> with
    <span class="classname">DateTime</span> and <span class="classname">DateInterval</span> to
    calculate the start of Easter in your PHP time zone as follows:
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">get_easter_datetime</span><span style="color: #007700">(</span><span style="color: #0000BB">$year</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$base </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #0000BB">$year</span><span style="color: #DD0000">-03-21"</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">$days </span><span style="color: #007700">= </span><span style="color: #0000BB">easter_days</span><span style="color: #007700">(</span><span style="color: #0000BB">$year</span><span style="color: #007700">);<br /><br />    return </span><span style="color: #0000BB">$base</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">"P</span><span style="color: #007700">{</span><span style="color: #0000BB">$days</span><span style="color: #007700">}</span><span style="color: #DD0000">D"</span><span style="color: #007700">));<br />}<br /><br />foreach (</span><span style="color: #0000BB">range</span><span style="color: #007700">(</span><span style="color: #0000BB">2012</span><span style="color: #007700">, </span><span style="color: #0000BB">2015</span><span style="color: #007700">) as </span><span style="color: #0000BB">$year</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Easter in %d is on %s\n"</span><span style="color: #007700">,<br />           </span><span style="color: #0000BB">$year</span><span style="color: #007700">,<br />           </span><span style="color: #0000BB">get_easter_datetime</span><span style="color: #007700">(</span><span style="color: #0000BB">$year</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'F j'</span><span style="color: #007700">));<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <p class="para">The above example will output:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
Easter in 2012 is on April 8
Easter in 2013 is on March 31
Easter in 2014 is on April 20
Easter in 2015 is on April 5
</pre></div>
    </div>
   </div>


function_name: DateInterval.format
type: note
description:
<p class="para">
    The  <span class="methodname">DateInterval::format</span> method does not 
    recalculate carry over points in time strings nor in date segments. This 
    is expected because it is not possible to overflow values like <code class="literal">&quot;32 days&quot;</code>
    which could be interpreted as anything from <code class="literal">&quot;1 month and 4 days&quot;</code> 
    to <code class="literal">&quot;1 month and 1 day&quot;</code>.
   </p>


function_name: date
type: note
description:
<p class="para">
    To generate a timestamp from a string representation of the date, you
    may be able to use <span class="function">strtotime</span>. Additionally, some
    databases have functions to convert their date formats into timestamps
    (such as MySQL&#039;s <a href="http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html" class="link external">&raquo;&nbsp;UNIX_TIMESTAMP</a>
    function).
   </p>


function_name: date
type: tip
description:
<p class="para">
    Timestamp of the start of the request is available in
    <var class="varname">$_SERVER[&#039;REQUEST_TIME&#039;]</var>.
   </p>


function_name: strftime
type: note
description:
<p class="simpara">
    %G and %V, which are based on ISO 8601:1988 week numbers can
    give unexpected (albeit correct) results if the numbering system
    is not thoroughly understood.  See %V examples in this manual page.
   </p>


function_name: strptime
type: note
description:
<p class="para">
       Internally, this function calls the <code class="literal">strptime()</code>
       function provided by the system&#039;s C library. This function can exhibit
       noticeably different behaviour across different operating systems. The
       use of <span class="function">date_parse_from_format</span>, which does not
       suffer from these issues, is recommended.
      </p>


function_name: strptime
type: note
description:
<p class="para">
       <code class="literal">&quot;tm_sec&quot;</code> includes any leap seconds (currently upto 2
       a year). For more information on leap seconds, see the <a href="http://en.wikipedia.org/wiki/Leap_second" class="link external">&raquo;&nbsp;Wikipedia article
       on leap seconds</a>.
      </p>


function_name: strtotime
type: note
description:
<p class="para">
    &quot;Relative&quot; date in this case also means that if a particular component
    of the date/time stamp is not provided, it will be taken verbatim from
    the <code class="parameter">baseTimestamp</code>.  That is, <code class="code">strtotime(&#039;February&#039;)</code>,
    if run on the 31st of May 2022, will be interpreted as <code class="literal">31 February 2022</code>,
    which will overflow into a timestamp on <code class="literal">3 March</code>.
    (In a leap year, it would be <code class="literal">2 March</code>.)  Using
    <code class="code">strtotime(&#039;1 February&#039;)</code> or <code class="code">strtotime(&#039;first day of February&#039;)</code>
    would avoid that problem.
   </p>


function_name: strtotime
type: note
description:
<p class="para">
    If the number of the year is specified in a two digit format, the values
    between 00-69 are mapped to 2000-2069 and 70-99 to 1970-1999. See the notes
    below for possible differences on 32bit systems (possible dates might end on 
    2038-01-19 03:14:07).
   </p>


function_name: strtotime
type: note
description:
<p class="para">
    The valid range of a timestamp is typically from Fri, 13 Dec
    1901 20:45:54 UTC to Tue, 19 Jan 2038 03:14:07 UTC. (These are
    the dates that correspond to the minimum and maximum values for
    a 32-bit signed integer.)
   </p>
   <p class="para">
    For 64-bit versions of PHP, the valid range of a timestamp is effectively
    infinite, as 64 bits can represent approximately 293 billion years in either
    direction.
   </p>


function_name: strtotime
type: note
description:
<p class="para">
    Using this function for mathematical operations is not advisable.
    It is better to use  <span class="methodname">DateTime::add</span> and
     <span class="methodname">DateTime::sub</span>.
   </p>


function_name: chdir
type: caution
description:
<p class="para">
    If the PHP interpreter has been built with ZTS (Zend Thread Safety) enabled,
    any changes to the current directory made through <span class="function">chdir</span>
    will be invisible to the operating system. All built-in PHP functions will
    still respect the change in current directory; but external library
    functions called using <a href="book.ffi.html" class="link">FFI</a> will not. You
    can tell whether your copy of PHP was built with ZTS enabled using
    <strong class="command">php -i</strong> or the built-in constant
    <strong><code><a href="reserved.constants.html#constant.php-zts">PHP_ZTS</a></code></strong>.
   </p>


function_name: chroot
type: note
description:
<p class="simpara">This function is not
available in PHP interpreters built with ZTS (Zend Thread Safety) enabled. To check whether your copy of PHP was built with ZTS enabled, use <strong class="command">php -i</strong> or test the built-in constant <strong><code><a href="reserved.constants.html#constant.php-zts">PHP_ZTS</a></code></strong>.</p>


function_name: dir
type: note
description:
<p class="para">
    The order in which directory entries are returned by the read method is
    system-dependent.
   </p>


function_name: getcwd
type: caution
description:
<p class="para">
    If the PHP interpreter has been built with ZTS (Zend Thread Safety) enabled,
    the current working directory returned by <span class="function">getcwd</span>
    may be different from that returned by operating system interfaces.
    External libraries (invoked through <a href="book.ffi.html" class="link">FFI</a>)
    which depend on the current working directory will be affected.
   </p>


function_name: scandir
type: tip
description:
<p class="simpara">A URL can be used as a
filename with this function if the <a href="filesystem.configuration.html#ini.allow-url-fopen" class="link">fopen wrappers</a> have been enabled.
See <span class="function">fopen</span> for more details on how to specify the
filename. See the <a href="wrappers.html" class="xref">Supported Protocols and Wrappers</a> for links to information
about what abilities the various wrappers have, notes on their usage,
and information on any predefined variables they may
provide.</p>


function_name: finfo_open
type: note
description:
<p class="para">
    Generally, using the bundled magic database (by leaving
    <code class="parameter">magic_database</code> and the <code class="literal">MAGIC</code>
    environment variables unset) is the best course of action unless you
    specifically need a custom magic database.
   </p>


function_name: chgrp
type: note
description:
<p class="simpara">This function will not work on
<a href="features.remote-files.html" class="link">remote files</a> as the file to
be examined must be accessible via the server&#039;s filesystem.</p>


function_name: chgrp
type: note
description:
<p class="simpara">
    On Windows, this function fails silently when applied on a regular file.
   </p>


function_name: chmod
type: note
description:
<p class="para">
    The current user is the user under which PHP runs. It is probably not the
    same user you use for normal shell or FTP access. The mode can be changed
    only by user who owns the file on most systems.
   </p>


function_name: feof
type: warning
description:
<p class="para">
    If a connection opened by <span class="function">fsockopen</span> wasn&#039;t closed
    by the server, <span class="function">feof</span> will hang. To workaround this, see 
    below example:
    <div class="example" id="example-6">
     <p><strong>Example # Handling timeouts with <span class="function">feof</span></strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">safe_feof</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, &amp;</span><span style="color: #0000BB">$start </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$start </span><span style="color: #007700">= </span><span style="color: #0000BB">microtime</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /><br /> return </span><span style="color: #0000BB">feof</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #FF8000">/* Assuming $fp is previously opened by fsockopen() */<br /><br /></span><span style="color: #0000BB">$start </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$timeout </span><span style="color: #007700">= </span><span style="color: #0000BB">ini_get</span><span style="color: #007700">(</span><span style="color: #DD0000">'default_socket_timeout'</span><span style="color: #007700">);<br /><br />while(!</span><span style="color: #0000BB">safe_feof</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$start</span><span style="color: #007700">) &amp;&amp; (</span><span style="color: #0000BB">microtime</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">) - </span><span style="color: #0000BB">$start</span><span style="color: #007700">) &lt; </span><span style="color: #0000BB">$timeout</span><span style="color: #007700">)<br />{<br /> </span><span style="color: #FF8000">/* Handle */<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: feof
type: warning
description:
<p class="para">
    If the passed file pointer is not valid you may get an infinite loop, because
    <span class="function">feof</span> fails to return <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>.
    <div class="example" id="example-8">
     <p><strong>Example # <span class="function">feof</span> example with an invalid file pointer</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// if file can not be read or doesn't exist fopen function returns FALSE<br /></span><span style="color: #0000BB">$file </span><span style="color: #007700">= @</span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">"no_such_file"</span><span style="color: #007700">, </span><span style="color: #DD0000">"r"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// FALSE from fopen will issue warning and result in infinite loop here<br /></span><span style="color: #007700">while (!</span><span style="color: #0000BB">feof</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">)) {<br />}<br /><br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: fgets
type: note
description:
<p class="simpara">If PHP is not properly recognizing
the line endings when reading files either on or created by a Macintosh
computer, enabling the
<a href="filesystem.configuration.html#ini.auto-detect-line-endings" class="link">auto_detect_line_endings</a>
run-time configuration option may help resolve the problem.</p>


function_name: fgets
type: note
description:
<p class="para">
    People used to the &#039;C&#039; semantics of <span class="function">fgets</span>
    should note the difference in how <code class="literal">EOF</code> is returned.
   </p>


function_name: file_exists
type: note
description:
<p class="simpara">The results of this
function are cached. See <span class="function">clearstatcache</span> for
more details.</p>


function_name: file_exists
type: tip
description:
<p class="simpara">As of PHP 5.0.0, this function
can also be used with <em>some</em> URL wrappers.  Refer to
<a href="wrappers.html" class="xref">Supported Protocols and Wrappers</a> to determine which wrappers support
<span class="function">stat</span> family of functionality.</p>


function_name: file_get_contents
type: warning
description:
<p class="para">When using SSL, Microsoft IIS
will violate the protocol by closing the connection without sending a
<code class="literal">close_notify</code> indicator. PHP will report this as &quot;SSL: Fatal
Protocol Error&quot; when you reach the end of the data. To work around this, the
value of <a href="errorfunc.configuration.html#ini.error-reporting" class="link">error_reporting</a> should be
lowered to a level that does not include warnings.
PHP can detect buggy IIS server software when you open
the stream using the <code class="literal">https://</code> wrapper and will suppress the
warning. When using <span class="function">fsockopen</span> to create an
<code class="literal">ssl://</code> socket, the developer is responsible for detecting
and suppressing this warning.</p>


function_name: fileatime
type: note
description:
<p class="para">
    The atime of a file is supposed to change whenever the data blocks of a
    file are being read. This can be costly performance-wise when an
    application regularly accesses a very large number of files or
    directories.
   </p>
   <p class="para">
    Some Unix filesystems can be mounted with atime updates disabled to
    increase the performance of such applications; USENET news spools are a
    common example. On such filesystems this function will be useless.
   </p>


function_name: filectime
type: note
description:
<p class="para">
    Note: In most Unix filesystems, a file is considered changed when its
    inode data is changed; that is, when the permissions, owner, group, or
    other metadata from the inode is updated. See also
    <span class="function">filemtime</span> (which is what you want to use when you
    want to create &quot;Last Modified&quot; footers on web pages) and
    <span class="function">fileatime</span>.
   </p>


function_name: filectime
type: note
description:
<p class="para">
    Note also that in some Unix texts the ctime of a file is referred to as
    being the creation time of the file. This is wrong. There is no creation
    time for Unix files in most Unix filesystems.
   </p>


function_name: flock
type: note
description:
<p class="para">
    <span class="function">flock</span> uses mandatory locking instead of advisory
    locking on Windows. Mandatory locking is also supported on Linux and
    System V based operating systems via the usual mechanism supported by the
    fcntl() system call: that is, if the file in question has the setgid
    permission bit set and the group execution bit cleared. On Linux, the file
    system will also need to be mounted with the mand option for this to work.
   </p>


function_name: flock
type: note
description:
<p class="para">
    Because <span class="function">flock</span> requires a file pointer, you may have
    to use a special lock file to protect access to a file that you intend
    to truncate by opening it in write mode (with a &quot;w&quot; or &quot;w+&quot; argument to
    <span class="function">fopen</span>).
   </p>


function_name: flock
type: note
description:
<p class="para">
    May only be used on file pointers returned by <span class="function">fopen</span>
    for local files, or file pointers pointing to userspace streams that
    implement the <span class="function">streamWrapper::stream_lock</span> method.
   </p>


function_name: flock
type: warning
description:
<p class="para">
    Assigning another value to <code class="parameter">stream</code> argument in
    subsequent code will release the lock.
   </p>


function_name: flock
type: warning
description:
<p class="para">
    On some operating systems <span class="function">flock</span> is implemented at
    the process level. When using a multithreaded server API you
    may not be able to rely on <span class="function">flock</span> to protect files
    against other PHP scripts running in parallel threads of the same server
    instance!
   </p>
   <p class="para">
    <span class="function">flock</span> is not supported on antiquated filesystems like
    <code class="literal">FAT</code> and its derivates and will therefore always
    return <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> under these environments.
   </p>


function_name: flock
type: note
description:
<p class="para">
    On Windows, if the locking process opens the file a second time, it cannot
    access the file through this second handle until it unlocks the file.
   </p>


function_name: fnmatch
type: warning
description:
<p class="para">
    For now, this function is not available on non-POSIX compliant systems
    except Windows.
   </p>


function_name: fopen
type: note
description:
<p class="para">
    If you are experiencing problems with reading and writing to files and
    you&#039;re using the server module version of PHP, remember to make sure that
    the files and directories you&#039;re using are accessible to the server
    process.
   </p>


function_name: fopen
type: note
description:
<p class="para">
    This function may also succeed when <code class="parameter">filename</code> is a
    directory. If you are unsure whether <code class="parameter">filename</code> is a
    file or a directory, you may need to use the <span class="function">is_dir</span>
    function before calling <span class="function">fopen</span>.
   </p>


function_name: fpassthru
type: note
description:
<p class="para">
    When using <span class="function">fpassthru</span> on a binary file on Windows
    systems, you should make sure to open the file in binary mode by
    appending a <code class="literal">b</code> to the mode used in the call to
    <span class="function">fopen</span>.
   </p>
   <p class="para">
    You are encouraged to use the <code class="literal">b</code> flag when dealing
    with binary files, even if your system does not require it, so that
    your scripts will be more portable.
   </p>


function_name: fread
type: note
description:
<p class="para">
    If you just want to get the contents of a file into a string, use
    <span class="function">file_get_contents</span> as it has much better performance
    than the code above.
   </p>


function_name: fread
type: note
description:
<p class="para">
    Note that <span class="function">fread</span> reads from the current position of 
    the file pointer. Use <span class="function">ftell</span> to find the current 
    position of the pointer and <span class="function">rewind</span> to rewind the 
    pointer position.
   </p>


function_name: fseek
type: note
description:
<p class="para">
    If you have opened the file in append (<code class="literal">a</code> or
    <code class="literal">a+</code>) mode, any data you write to the file will always be
    appended, regardless of the file position, and the result of calling
    <span class="function">fseek</span> will be undefined.
   </p>


function_name: fseek
type: note
description:
<p class="para">
    Not all streams support seeking. For those that do not support seeking,
    forward seeking from the current position is accomplished by reading
    and discarding data; other forms of seeking will fail.
   </p>


function_name: fwrite
type: note
description:
<p class="para">
    Writing to a network stream may end before the whole string is written.
    Return value of <span class="function">fwrite</span> may be checked:
    <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">fwrite_stream</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$string</span><span style="color: #007700">) {<br />    for (</span><span style="color: #0000BB">$written </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$written </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">); </span><span style="color: #0000BB">$written </span><span style="color: #007700">+= </span><span style="color: #0000BB">$fwrite</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$fwrite </span><span style="color: #007700">= </span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">, </span><span style="color: #0000BB">$written</span><span style="color: #007700">));<br />        if (</span><span style="color: #0000BB">$fwrite </span><span style="color: #007700">=== </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br />            return </span><span style="color: #0000BB">$written</span><span style="color: #007700">;<br />        }<br />    }<br />    return </span><span style="color: #0000BB">$written</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </p>


function_name: fwrite
type: note
description:
<p class="para">
    On systems which differentiate between binary and text files
    (i.e. Windows) the file must be opened with &#039;b&#039; included in
    <span class="function">fopen</span> mode parameter.
   </p>


function_name: fwrite
type: note
description:
<p class="para">
    If <code class="parameter">stream</code> was <span class="function">fopen</span>ed in
    append mode, <span class="function">fwrite</span>s are atomic (unless the size of
    <code class="parameter">data</code> exceeds the filesystem&#039;s block size, on some
    platforms, and as long as the file is on a local filesystem). That is,
    there is no need to <span class="function">flock</span> a resource before calling
    <span class="function">fwrite</span>; all of the data will be written without
    interruption.
   </p>


function_name: fwrite
type: note
description:
<p class="para">
    If writing twice to the file pointer, then the data will be appended to
    the end of the file content:
    <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'data.txt'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'1'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'23'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// the content of 'data.txt' is now 123 and not 23!<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </p>


function_name: glob
type: note
description:
<p class="simpara">
    This function isn&#039;t available on some systems (e.g. old Sun OS).
   </p>


function_name: is_executable
type: note
description:
<p class="simpara">
    On Windows, a file is considered executable, if it is a properly executable
    file as reported by the Win API <code class="literal">GetBinaryType()</code>; for BC
    reasons, files with a <var class="filename">.bat</var> or <var class="filename">.cmd</var>
    extension are also considered executable. Prior to PHP 7.4.0, any non-empty
    file with a <var class="filename">.exe</var> or <var class="filename">.com</var> extension
    was considered executable. Note that <var class="envar">PATHEXT</var> is irrelevant
    for <span class="function">is_executable</span>.
   </p>


function_name: link
type: note
description:
<p class="simpara">
    For Windows only: This function requires PHP to run in an elevated
    mode or with the UAC disabled.
   </p>


function_name: move_uploaded_file
type: note
description:
<p class="para">
    <span class="function">move_uploaded_file</span> is
    <a href="ini.core.html#ini.open-basedir" class="link">open_basedir</a>
    aware. However, restrictions are placed only on the
    <code class="parameter">to</code> path as to allow the moving
    of uploaded files in which <code class="parameter">from</code> may conflict
    with such restrictions. <span class="function">move_uploaded_file</span> ensures
    the safety of this operation by allowing only those files uploaded
    through PHP to be moved.
   </p>


function_name: parse_ini_file
type: note
description:
<p class="para">
    This function has nothing to do with the
    <var class="filename">php.ini</var> file. It is already processed by
    the time you run your script. This function can be used to
    read in your own application&#039;s configuration files.
   </p>


function_name: parse_ini_file
type: note
description:
<p class="para">
    If a value in the ini file contains any non-alphanumeric
    characters it needs to be enclosed in double-quotes (&quot;).
   </p>


function_name: parse_ini_file
type: note
description:
<p class="simpara">
    There are reserved words which must not be used as keys for
    ini files.  These include: <code class="literal">null</code>, <code class="literal">yes</code>,
    <code class="literal">no</code>, <code class="literal">true</code>, <code class="literal">false</code>,
    <code class="literal">on</code>, <code class="literal">off</code>, <code class="literal">none</code>.
    Values <code class="literal">null</code>, <code class="literal">off</code>, <code class="literal">no</code> and
    <code class="literal">false</code> result in <code class="literal">&quot;&quot;</code>, and values
    <code class="literal">on</code>, <code class="literal">yes</code> and <code class="literal">true</code> result
    in <code class="literal">&quot;1&quot;</code>, unless <strong><code><a href="filesystem.constants.html#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong> mode is used.
    Characters <code class="literal">?{}|&amp;~!()^&quot;</code> must not be used anywhere in
    the key and have a special meaning in the value.
   </p>


function_name: parse_ini_file
type: note
description:
<p class="para">
    Entries without an equal sign are ignored. For example, &quot;foo&quot;
    is ignored whereas &quot;bar =&quot; is parsed and added with an empty
    value. For example, MySQL has a &quot;no-auto-rehash&quot; setting 
    in <var class="filename">my.cnf</var> that does not take a value, so
    it is ignored.
   </p>


function_name: parse_ini_file
type: note
description:
<p class="para">
    ini files are generally treated as plain text by web servers and thus served to browsers if requested.
    That means for security you must either keep your ini files outside of your docroot or reconfigure your
    web server to not serve them.  Failure to do either of those may introduce a security risk.
   </p>


function_name: parse_ini_string
type: note
description:
<p class="simpara">
    There are reserved words which must not be used as keys for
    ini files.  These include: <code class="literal">null</code>, <code class="literal">yes</code>, 
    <code class="literal">no</code>, <code class="literal">true</code>, <code class="literal">false</code>,
    <code class="literal">on</code>, <code class="literal">off</code>, <code class="literal">none</code>.
    Values <code class="literal">null</code>, <code class="literal">off</code>, <code class="literal">no</code> and 
    <code class="literal">false</code> result in <code class="literal">&quot;&quot;</code>, and values
    <code class="literal">on</code>, <code class="literal">yes</code> and <code class="literal">true</code> result
    in <code class="literal">&quot;1&quot;</code>, unless <strong><code><a href="filesystem.constants.html#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong> mode is used.
    Characters <code class="literal">?{}|&amp;~![()^&quot;</code> must not be used anywhere in
    the key and have a special meaning in the value.
   </p>


function_name: pclose
type: note
description:
<h1 class="title">Unix Only:</h1>
   <p class="para">
    <span class="function">pclose</span> is internally implemented using the 
    <code class="literal">waitpid(3)</code> system call. To obtain the real exit 
    status code the <span class="function">pcntl_wexitstatus</span> function 
    should be used.
   </p>


function_name: popen
type: note
description:
<p class="para">
    If you&#039;re looking for bi-directional support (two-way), use
    <span class="function">proc_open</span>.
   </p>


function_name: readfile
type: note
description:
<p class="para">
    <span class="function">readfile</span> will not present any memory issues, 
    even when sending large files, on its own. If you encounter an 
    out of memory error ensure that output buffering is off with 
    <span class="function">ob_get_level</span>.
   </p>


function_name: tempnam
type: note
description:
<p class="simpara">
    If PHP cannot create a file in the specified <code class="parameter">directory</code>
    parameter, it falls back on the system default. On NTFS this also happens
    if the specified <code class="parameter">directory</code> contains more than 65534 files.
   </p>


function_name: umask
type: note
description:
<p class="para">
    Avoid using this function in multithreaded webservers. It is better to
    change the file permissions with <span class="function">chmod</span> after
    creating the file. Using <span class="function">umask</span> can lead to
    unexpected behavior of concurrently running scripts and the webserver
    itself because they all use the same umask.
   </p>


function_name: xdiff_file_bdiff
type: note
description:
<p class="para">
    Both files will be loaded into memory so ensure that your memory_limit is
    set high enough.
   </p>


function_name: xdiff_file_bpatch
type: note
description:
<p class="para">
    Both files (<code class="parameter">file</code> and <code class="parameter">patch</code>)
    will be loaded into memory so ensure that your memory_limit is set high
    enough.
   </p>


function_name: xdiff_file_diff
type: note
description:
<p class="para">
    This function doesn&#039;t work well with binary files. To make diff of binary
    files use <span class="function">xdiff_file_bdiff</span>/<span class="function">xdiff_file_rabdiff</span> function.
   </p>


function_name: xdiff_string_diff
type: note
description:
<p class="para">
    This function doesn&#039;t work well with binary strings. To make diff of binary
    strings use <span class="function">xdiff_string_bdiff</span>/<span class="function">xdiff_string_rabdiff</span>.
   </p>


function_name: enchant_broker_get_dict_path
type: note
description:
<p class="para">
    This function is only available if the extension has been compiled with Enchant v1.
   </p>


function_name: bind_textdomain_codeset
type: note
description:
<p class="para">
    The <span class="function">bind_textdomain_codeset</span> information is maintained per process,
    not per thread.
   </p>


function_name: bindtextdomain
type: note
description:
<p class="para">
    The <span class="function">bindtextdomain</span> information is maintained per process,
    not per thread.
   </p>


function_name: gettext
type: note
description:
<p class="para">
    You may use the underscore character &#039;_&#039; as an alias to this function.
   </p>


function_name: gettext
type: note
description:
<p class="para">
    Setting a language isn&#039;t enough for some systems and the 
    <span class="function">putenv</span> should be used to define the 
    current locale.
   </p>


function_name: textdomain
type: note
description:
<p class="para">
    The <span class="function">textdomain</span> information is maintained per process,
    not per thread.
   </p>


function_name: iconv
type: note
description:
<p class="para">
    The character encodings and options available depend on the installed implementation
    of iconv. If the argument to <code class="parameter">from_encoding</code>
    or <code class="parameter">to_encoding</code> is not supported on the current system, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>
    will be returned.
   </p>


function_name: NumberFormatter.formatCurrency
type: note
description:
<p class="para">
    Formats achievable by this method of formatting cannot fully use the possibilities of underlying ICU library,
    such as to format currency with narrow currency symbol.
   </p>
   <p class="para">
    To fully utilize them use <span class="function">msgfmt_format_message</span>.
   </p>


function_name: IntlChar.isxdigit
type: note
description:
<p class="para">
    In order to narrow the definition of hexadecimal digits to only ASCII characters use:
   </p>
   <div class="example-contents">
    <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$isASCIIHexadecimal </span><span style="color: #007700">= </span><span style="color: #0000BB">IntlChar</span><span style="color: #007700">::</span><span style="color: #0000BB">ord</span><span style="color: #007700">(</span><span style="color: #0000BB">$codepoint</span><span style="color: #007700">) &lt;= </span><span style="color: #0000BB">0x7F </span><span style="color: #007700">&amp;&amp; </span><span style="color: #0000BB">IntlChar</span><span style="color: #007700">::</span><span style="color: #0000BB">isxdigit</span><span style="color: #007700">(</span><span style="color: #0000BB">$codepoint</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>


function_name: mb_encode_mimeheader
type: note
description:
<p class="para">
    This function isn&#039;t designed to break lines at higher-level
    contextual break points (word boundaries, etc.).
    This behaviour may clutter up the original string with unexpected spaces.
   </p>


function_name: mb_ereg_match
type: note
description:
<p class="para">The internal encoding or the
character encoding specified by <span class="function">mb_regex_encoding</span>
will be used as the character encoding for this function.</p>


function_name: mb_ereg_replace
type: warning
description:
<p class="para">Never use the <code class="literal">e</code> modifier when working on untrusted input. No automatic escaping will happen (as known from <span class="function">preg_replace</span>). Not taking care of this will most likely create remote code execution vulnerabilities in your application.</p>


function_name: mb_output_handler
type: note
description:
<p class="para">
    If you want to output binary data, such as an image,
    a Content-Type: header must be set using <span class="function">header</span> 
    before any binary data is sent to the client (e.g. header(&quot;Content-Type: image/png&quot;)).
    If Content-Type: header is sent, output character encoding conversion will not be performed.
   </p>
   <p class="para">
    Note that if &#039;Content-Type: text/*&#039; is sent, the content body is regarded as text; conversion will take place.
   </p>


function_name: mb_split
type: note
description:
<p class="para">The
character encoding specified by <span class="function">mb_regex_encoding</span>
will be used as the character encoding for this function by default.</p>


function_name: pspell_add_to_personal
type: note
description:
<p class="para">
    This function will not work unless you have pspell .11.2 and aspell .32.5
    or later.
   </p>


function_name: exif_read_data
type: note
description:
<p class="para">
    If <a href="ref.mbstring.html" class="link">mbstring</a> is enabled, exif will attempt to process 
    the unicode and pick a charset as specified by 
    <a href="exif.configuration.html#ini.exif.decode-unicode-motorola" class="link">exif.decode_unicode_motorola</a> and 
    <a href="exif.configuration.html#ini.exif.decode-unicode-intel" class="link">exif.decode_unicode_intel</a>. The exif 
    extension will not attempt to figure out the encoding on its own, and it is up to the user 
    to properly specify the encoding for which to use for decoding by setting one of these two 
    ini directives prior to calling <span class="function">exif_read_data</span>. 
   </p>


function_name: exif_read_data
type: note
description:
<p class="para">
    If the <code class="parameter">file</code> is used to pass a stream to this function, then the stream 
    must be seekable. Note that the file pointer position is not changed after this function returns.
   </p>


function_name: imagecolortransparent
type: note
description:
<p class="para">
    Transparency is copied only with <span class="function">imagecopymerge</span> and
    true color images, not with <span class="function">imagecopy</span> or pallete images.
   </p>


function_name: imagecolortransparent
type: note
description:
<p class="para">
    The transparent color is a property of the image, transparency is not a
    property of the color. Once you have set a color to be the transparent
    color, any regions of the image in that color that were drawn previously
    will be transparent.
   </p>


function_name: imagecopyresampled
type: note
description:
<p class="para">
    There is a problem due to palette image limitations (255+1 colors).
    Resampling or filtering an image commonly needs more colors than 255, a
    kind of approximation is used to calculate the new resampled pixel and its
    color.  With a palette image we try to allocate a new color, if that
    failed, we choose the closest (in theory) computed color.  This is
    not always the closest visual color. That may produce a weird result, like
    blank (or visually blank) images.  To skip this problem, please use a
    truecolor image as a destination image, such as one created by
    <span class="function">imagecreatetruecolor</span>.
   </p>


function_name: imagecreatefromgd2
type: warning
description:
<p class="simpara">The GD
and GD2 image formats are proprietary image formats of libgd. They have to be regarded
<em>obsolete</em>, and should only be used for development and testing
purposes.</p>


function_name: imageellipse
type: note
description:
<p class="para">
    <span class="function">imageellipse</span> ignores <span class="function">imagesetthickness</span>.
   </p>


function_name: imagefilledellipse
type: note
description:
<p class="para">
    <span class="function">imagefilledellipse</span> ignores <span class="function">imagesetthickness</span>.
   </p>


function_name: imagefilter
type: note
description:
<p class="simpara">
    The result of <strong><code><a href="image.constants.html#constant.img-filter-scatter">IMG_FILTER_SCATTER</a></code></strong> is always random.
   </p>


function_name: imageftbbox
type: note
description:
<p class="simpara">This function is only available if
PHP is compiled with freetype support (<strong class="option configure">--with-freetype-dir=DIR</strong>)
</p>


function_name: imagegd2
type: note
description:
<p class="para">
    The GD2 format is commonly used to allow fast loading of parts of images.
    Note that the GD2 format is only usable in GD2-compatible applications.
   </p>


function_name: imagegd
type: note
description:
<p class="para">
    The GD format is commonly used to allow fast loading of parts of images.
    Note that the GD format is only usable in GD-compatible applications.
   </p>


function_name: imagegif
type: note
description:
<p class="para">
    The following code snippet allows you to write more
    portable PHP applications by auto-detecting the
    type of GD support which is available. Replace
    the sequence <code class="literal">header (&quot;Content-Type: image/gif&quot;);
    imagegif ($im);</code> by the more flexible sequence:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Create a new image instance<br /></span><span style="color: #0000BB">$im </span><span style="color: #007700">= </span><span style="color: #0000BB">imagecreatetruecolor</span><span style="color: #007700">(</span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">100</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Do some image operations here<br /><br />// Handle output<br /></span><span style="color: #007700">if(</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'imagegif'</span><span style="color: #007700">))<br />{<br />    </span><span style="color: #FF8000">// For GIF<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-Type: image/gif'</span><span style="color: #007700">);<br /><br />    </span><span style="color: #0000BB">imagegif</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);<br />}<br />elseif(</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'imagejpeg'</span><span style="color: #007700">))<br />{<br />    </span><span style="color: #FF8000">// For JPEG<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-Type: image/jpeg'</span><span style="color: #007700">);<br /><br />    </span><span style="color: #0000BB">imagejpeg</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">100</span><span style="color: #007700">);<br />}<br />elseif(</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'imagepng'</span><span style="color: #007700">))<br />{<br />    </span><span style="color: #FF8000">// For PNG<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-Type: image/png'</span><span style="color: #007700">);<br /><br />    </span><span style="color: #0000BB">imagepng</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);<br />}<br />elseif(</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'imagewbmp'</span><span style="color: #007700">))<br />{<br />    </span><span style="color: #FF8000">// For WBMP<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-Type: image/vnd.wap.wbmp'</span><span style="color: #007700">);<br /><br />    </span><span style="color: #0000BB">imagewbmp</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);<br />}<br />else<br />{<br />    </span><span style="color: #0000BB">imagedestroy</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);<br /><br />    die(</span><span style="color: #DD0000">'No image support in this PHP server'</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #FF8000">// If image support was found for one of these<br />// formats, then free it from memory<br /></span><span style="color: #007700">if(</span><span style="color: #0000BB">$im</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">imagedestroy</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: imagegif
type: note
description:
<p class="para">
    You can use the function
    <span class="function">imagetypes</span> for checking
    the presence of the various supported image formats:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if(</span><span style="color: #0000BB">imagetypes</span><span style="color: #007700">() &amp; </span><span style="color: #0000BB">IMG_GIF</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-Type: image/gif'</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">imagegif</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);<br />}<br />elseif(</span><span style="color: #0000BB">imagetypes</span><span style="color: #007700">() &amp; </span><span style="color: #0000BB">IMG_JPG</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #FF8000">/* ... etc. */<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: imagejpeg
type: note
description:
<p class="para">
    If you want to output Progressive JPEGs, you need to set interlacing
    on with <span class="function">imageinterlace</span>.
   </p>


function_name: imagerotate
type: note
description:
<p class="para">This function is affected by the interpolation method set by <span class="function">imagesetinterpolation</span>.</p>


function_name: ImagickPixel.getColorAsString
type: note
description:
<h1 class="title">Alpha not returned</h1>
   <p class="para">
      This function does not return the alpha value of the color in the string.
   </p>


function_name: imap_delete
type: note
description:
<p class="para">
    IMAP mailboxes may not have their message flags saved between connections,
    so <span class="function">imap_expunge</span> should be called during the same
    connection in order to guarantee that messages marked for deletion will
    actually be purged.
   </p>


function_name: imap_mail_move
type: note
description:
<p class="para">
    <span class="function">imap_mail_move</span> will flag the original 
    mail with a delete flag, to successfully delete it a call to 
    the <span class="function">imap_expunge</span> function must be made.
   </p>


function_name: mail
type: note
description:
<p class="para">
    The SMTP implementation (Windows only) of <span class="function">mail</span> differs in many
    ways from the sendmail implementation. First, it doesn&#039;t use a local binary
    for composing messages but only operates on direct sockets which means a
    <code class="literal">MTA</code> is needed listening on a network socket (which
    can either on the localhost or a remote machine).
   </p>
   <p class="para">
    Second, the custom headers like
    <code class="literal">From:</code>,
    <code class="literal">Cc:</code>,
    <code class="literal">Bcc:</code> and
    <code class="literal">Date:</code> are
    <strong>not</strong> interpreted by the
    <code class="literal">MTA</code> in the first place, but are parsed by PHP.
   </p>
   <p class="para">
    As such, the <code class="parameter">to</code> parameter should not be an address
    in the form of &quot;Something &lt;someone@example.com&gt;&quot;. The
    mail command may not parse this properly while talking with 
    the MTA.
   </p>


function_name: mail
type: note
description:
<p class="para">
    It is worth noting that the <span class="function">mail</span> function is not
    suitable for larger volumes of email in a loop. This function opens
    and closes an SMTP socket for each email, which is not very efficient.
   </p>
   <p class="para">
    For the sending of large amounts of email, see the
    <a href="https://pear.php.net/package/Mail" class="link external">&raquo;&nbsp;PEAR::Mail</a>, and
    <a href="https://pear.php.net/package/Mail_Queue" class="link external">&raquo;&nbsp;PEAR::Mail_Queue</a> packages.
   </p>


function_name: mail
type: note
description:
<p class="para">
    The following RFCs may be useful:
    <a href="http://www.faqs.org/rfcs/rfc1896" class="link external">&raquo;&nbsp;RFC 1896</a>,
    <a href="http://www.faqs.org/rfcs/rfc2045" class="link external">&raquo;&nbsp;RFC 2045</a>,
    <a href="http://www.faqs.org/rfcs/rfc2046" class="link external">&raquo;&nbsp;RFC 2046</a>,
    <a href="http://www.faqs.org/rfcs/rfc2047" class="link external">&raquo;&nbsp;RFC 2047</a>,
    <a href="http://www.faqs.org/rfcs/rfc2048" class="link external">&raquo;&nbsp;RFC 2048</a>,
    <a href="http://www.faqs.org/rfcs/rfc2049" class="link external">&raquo;&nbsp;RFC 2049</a>, and
    <a href="http://www.faqs.org/rfcs/rfc2822" class="link external">&raquo;&nbsp;RFC 2822</a>.
   </p>


function_name: mailparse_msg_create
type: note
description:
<p class="para">
    It is recommended to call <span class="function">mailparse_msg_free</span> on the result
    of this function, when it is no longer needed, to avoid memory leaks.
   </p>


function_name: bcmul
type: note
description:
<p class="para">
    Before PHP 7.3.0 <span class="function">bcmul</span> may return a result with fewer digits after the
    decimal point than the <code class="parameter">scale</code> parameter would
    indicate. This only occurs when the result doesn&#039;t require all of the
    precision allowed by the <code class="parameter">scale</code>. For example:
    <div class="example" id="install.unix.openbsd.ports.example">
     <p><strong>Example # <span class="function">bcmul</span> scale example</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">bcmul</span><span style="color: #007700">(</span><span style="color: #DD0000">'5'</span><span style="color: #007700">, </span><span style="color: #DD0000">'2'</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">);     </span><span style="color: #FF8000">// prints "10", not "10.00"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: bcpow
type: note
description:
<p class="para">
    Before PHP 7.3.0 <span class="function">bcpow</span> may return a result with fewer digits after the
    decimal point than the <code class="parameter">scale</code> parameter would
    indicate. This only occurs when the result doesn&#039;t require all of the
    precision allowed by the <code class="parameter">scale</code>. For example:
    <div class="example" id="install.unix.debian.apt.example2">
     <p><strong>Example # <span class="function">bcpow</span> scale example</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">bcpow</span><span style="color: #007700">(</span><span style="color: #DD0000">'5'</span><span style="color: #007700">, </span><span style="color: #DD0000">'2'</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">);     </span><span style="color: #FF8000">// prints "25", not "25.00"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: bcpowmod
type: note
description:
<p class="para">
    Because this method uses the modulus operation, numbers which are not
    positive integers may give unexpected results.
   </p>


function_name: gmp_clrbit
type: note
description:
<p class="para">
    Unlike most of the other GMP functions, <span class="function">gmp_clrbit</span>
    must be called with a GMP object that already exists (using
    <span class="function">gmp_init</span> for example). One will not be
    automatically created.
   </p>


function_name: gmp_div_q
type: note
description:
<p class="para">
    This function can also be called as <span class="function">gmp_div</span>.
   </p>


function_name: gmp_init
type: note
description:
<p class="para">
    It is not necessary to call this function in order to use integers or
    strings in place of GMP numbers in GMP functions (such as with
    <span class="function">gmp_add</span>). Function arguments are automatically
    converted to GMP numbers, if such conversion is possible and needed, using
    the same rules as <span class="function">gmp_init</span>.
   </p>


function_name: gmp_intval
type: warning
description:
<p class="simpara">
    This function returns a useful result only if the number actually
    fits the PHP integer (i.e., signed long type). To simply print the GMP
    number, use <span class="function">gmp_strval</span>.
   </p>


function_name: gmp_nextprime
type: note
description:
<p class="para">
    This function uses a probabilistic algorithm to identify primes and
    chances to get a composite number are extremely small.
   </p>


function_name: gmp_setbit
type: note
description:
<p class="para">
    Unlike most of the other GMP functions, <span class="function">gmp_setbit</span>
    must be called with a GMP object that already exists (using
    <span class="function">gmp_init</span> for example). One will not be
    automatically created.
   </p>


function_name: bindec
type: note
description:
<p class="para">
    The function can convert numbers that are too large to fit into the platforms
    <span class="type">int</span> type, larger values are returned as <span class="type">float</span> in
    that case.
   </p>


function_name: pow
type: note
description:
<p class="para">
    This function will convert all input to a number, even non-scalar values,
    which could lead to <em>weird</em> results.
   </p>


function_name: ps_setcolor
type: caution
description:
<p class="para">
    The second parameter is currently not always evaluated. The color is
    sometimes set for filling and drawing just as if
    <code class="literal">fillstroke</code> were passed.
   </p>


function_name: posix_getcwd
type: note
description:
<p class="para">
    This function can fail on
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">Read or Search permission was denied</span>
     </li>
     <li class="listitem">
      <span class="simpara">Pathname no longer exists</span>
     </li>
    </ul> 
   </p>


function_name: posix_getpgid
type: note
description:
<p class="para">
    This is a not POSIX function, but is common on BSD and System V
    systems. If the system does not support this function, then it
    will not be included at compile time.  This may be checked with
    <span class="function">function_exists</span>.
   </p>


function_name: posix_times
type: warning
description:
<p class="para">
    This function isn&#039;t reliable to use, it may return negative values for
    high times.
   </p>


function_name: escapeshellcmd
type: warning
description:
<p class="para">
     <span class="function">escapeshellcmd</span> should be used on the whole
     command string, and it still allows the attacker to pass
     arbitrary number of arguments. For escaping a single argument 
     <span class="function">escapeshellarg</span> should be used instead.
    </p>


function_name: escapeshellcmd
type: warning
description:
<p class="para">
     Spaces will not be escaped by <span class="function">escapeshellcmd</span>
     which can be problematic on Windows with paths like:
     <code class="literal">C:\Program Files\ProgramName\program.exe</code>.
     This can be mitigated using the following code snippet:
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$cmd </span><span style="color: #007700">= </span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">'`(?&lt;!^) `'</span><span style="color: #007700">, </span><span style="color: #DD0000">'^ '</span><span style="color: #007700">, </span><span style="color: #0000BB">escapeshellcmd</span><span style="color: #007700">(</span><span style="color: #0000BB">$cmd</span><span style="color: #007700">));</span></span></code></div>
    </div>

    </p>


function_name: exec
type: warning
description:
<p class="para">When allowing user-supplied data to be
passed to this function, use
<span class="function">escapeshellarg</span> or <span class="function">escapeshellcmd</span>
to ensure that users cannot trick the system into executing arbitrary
commands.</p>


function_name: exec
type: note
description:
<p class="para">If a program is started with this function,
in order for it to continue running in the background, the output of the
program must be redirected to a file or another output stream. Failing to do so
will cause PHP to hang until the execution of the program ends.</p>


function_name: exec
type: note
description:
<p class="para">On Windows <span class="function">exec</span>
will first start cmd.exe to launch the command. If you want to start an external program without starting cmd.exe
use <span class="function">proc_open</span> with the <code class="parameter">bypass_shell</code> option set.</p>


function_name: proc_nice
type: note
description:
<h1 class="title">Availability</h1>
   <p class="para">
    <span class="function">proc_nice</span> will only exist if your system has &#039;nice&#039;
    capabilities. &#039;nice&#039; conforms to: SVr4, SVID EXT, AT&amp;T, X/OPEN, BSD
    4.3.
   </p>


function_name: proc_nice
type: note
description:
<h1 class="title">Windows only</h1>
   <p class="para">
    <span class="function">proc_nice</span> will change the current <em>process</em>
    priority, even if PHP was compiled using thread safety.
   </p>


function_name: proc_open
type: note
description:
<p class="para">
    Windows compatibility: Descriptors beyond 2 (stderr) are made available to
    the child process as inheritable handles, but since the Windows
    architecture does not associate file descriptor numbers with low-level
    handles, the child process does not (yet) have a means of accessing those
    handles. Stdin, stdout and stderr work as expected.
   </p>


function_name: proc_open
type: note
description:
<p class="para">
   If you only need a uni-directional (one-way) process pipe, use
   <span class="function">popen</span> instead, as it is much easier to use.
   </p>


function_name: sem_get
type: warning
description:
<p class="simpara">
    When using <span class="function">sem_get</span> to access a semaphore created
    outside PHP, note that the semaphore must have been created as a set of 3
    semaphores (for example, by specifying 3 as the <code class="literal">nsems</code>
    parameter when calling the C <code class="literal">semget()</code> function),
    otherwise PHP will be unable to access the semaphore.
   </p>


function_name: geoip_country_code_by_name
type: caution
description:
<p class="para">
    Please see
    <a href="http://www.maxmind.com/en/iso3166" class="link external">&raquo;&nbsp;http://www.maxmind.com/en/iso3166</a> for
    a complete list of possible return values, including special codes.
   </p>


function_name: fann_copy
type: note
description:
<p class="para">This function is only available if the fann extension has been build against libfann &gt;= 2.2.</p>


function_name: igbinary_serialize
type: note
description:
<p class="para">
    Note that many built-in PHP objects cannot be serialized. However, those with
    this ability either implement the <span class="interfacename">Serializable</span> interface or the
    magic <a href="language.oop5.magic.html#object.serialize" class="link">__serialize()</a>/<a href="language.oop5.magic.html#object.unserialize" class="link">__unserialize()</a>
    or <a href="language.oop5.magic.html#object.sleep" class="link">__sleep()</a>/<a href="language.oop5.magic.html#object.wakeup" class="link">__wakeup()</a> methods. If an
    internal class does not fulfill any of those requirements, it cannot reliably be
    serialized with any serializer.
   </p>
   <p class="para">
    There are some historical exceptions to the above rule, where some internal objects
    could be serialized without implementing the interface or exposing the methods.
   </p>


function_name: igbinary_unserialize
type: warning
description:
<p class="para">
    <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> is returned both in the case of an error and if unserializing
    the serialized <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> or <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> value. It is possible to catch this special case by
    comparing <code class="parameter">str</code> with
    <code class="code">igbinary_serialize(null)</code> or <code class="code">igbinary_serialize(false)</code>
    or by catching the issued <strong><code><a href="errorfunc.constants.html#constant.e-notice">E_NOTICE</a></code></strong>.
   </p>


function_name: json_decode
type: note
description:
<p class="para">
    In the event of a failure to decode, <span class="function">json_last_error</span>
    can be used to determine the exact nature of the error.
   </p>


function_name: json_encode
type: note
description:
<p class="para">
    In the event of a failure to encode, <span class="function">json_last_error</span>
    can be used to determine the exact nature of the error.
   </p>


function_name: json_encode
type: note
description:
<p class="para">
    When encoding an array, if the keys are not a continuous numeric
    sequence starting from 0, all keys are encoded as strings, and
    specified explicitly for each key-value pair.
   </p>


function_name: json_encode
type: note
description:
<p class="para">
    Like the reference JSON encoder, <span class="function">json_encode</span> will
    generate JSON that is a simple value (that is, neither an object nor an
    array) if given a <span class="type">string</span>, <span class="type">int</span>, <span class="type">float</span> or <span class="type">bool</span> as an input
    <code class="parameter">value</code>. While most decoders will accept these values
    as valid JSON, some may not, as the specification is ambiguous on this
    point.
   </p>
   <p class="para">
    To summarise, always test that your JSON decoder can handle the output you
    generate from <span class="function">json_encode</span>.
   </p>


function_name: simdjson_decode
type: note
description:
<p class="para">
    In the event of a failure to decode,
    a <span class="classname">SimdJsonException</span> is thrown
    and  <span class="methodname">SimdJsonException::getCode</span> and
     <span class="methodname">SimdJsonException::getMessage</span> can be used
    to determine the exact nature of the error.
   </p>


function_name: eval
type: note
description:
<p class="simpara">Because this is a
language construct and not a function, it cannot be called using
<a href="functions.variable-functions.html" class="link">variable functions</a>,
or <a href="functions.arguments.html#functions.named-arguments" class="link">named arguments</a>.</p>


function_name: eval
type: tip
description:
<p class="simpara">As with anything that outputs
its result directly to the browser, the <a href="book.outcontrol.html" class="link">output-control functions</a> can be used to capture
the output of this function, and save it in a
<span class="type">string</span> (for example).</p>


function_name: eval
type: note
description:
<p class="para">
    In case of a fatal error in the evaluated code, the whole script exits.
   </p>


function_name: exit
type: note
description:
<p class="para">
    This language construct is equivalent to <span class="function">die</span>.
   </p>


function_name: get_browser
type: note
description:
<p class="para">
    In order for this to work, your <a href="misc.configuration.html#ini.browscap" class="link">browscap</a> configuration setting in 
    <var class="filename">php.ini</var> must point to the correct location of the
    <var class="filename">browscap.ini</var> file on your system.
   </p>
   <p class="para">
    <var class="filename">browscap.ini</var> is not bundled with PHP, but you may
    find an up-to-date <a href="http://browscap.org/" class="link external">&raquo;&nbsp;php_browscap.ini</a> file here.
   </p>
   <p class="para">
    While <var class="filename">browscap.ini</var> contains information on
    many browsers, it relies on user updates to keep the database
    current. The format of the file is fairly self-explanatory.
   </p>


function_name: __halt_compiler
type: note
description:
<p class="para">
    <span class="function">__halt_compiler</span> can only be used from the outermost
    scope.
   </p>


function_name: highlight_file
type: caution
description:
<p class="para">
    Care should be taken when using the <span class="function">highlight_file</span>
    function to make sure that you do not inadvertently reveal sensitive
    information such as passwords or any other type of information that might
    create a potential security risk.
   </p>


function_name: highlight_file
type: note
description:
<p class="para">When the <code class="parameter">return</code> parameter
is used, this function uses internal output buffering so it cannot be used inside an
<span class="function">ob_start</span> callback function.</p>


function_name: pack
type: caution
description:
<p class="para">Note that PHP internally stores <span class="type">int</span> values as
    signed values of a machine-dependent size (C type <code class="literal">long</code>).   
    Integer literals and operations that yield numbers outside the bounds of the  
    <span class="type">int</span> type will be stored as <span class="type">float</span>.
    When packing these floats as integers, they are first cast into the integer   
    type. This may or may not result in the desired byte pattern.
   </p>
   <p class="para">The most relevant case is when packing unsigned numbers that would
    be representable with the <span class="type">int</span> type if it were unsigned.
    In systems where the <span class="type">int</span> type has a 32-bit size, the cast
    usually results in the same byte pattern as if the <span class="type">int</span> were
    unsigned (although this relies on implementation-defined unsigned to signed
    conversions, as per the C standard). In systems where the
    <span class="type">int</span> type has 64-bit size, the <span class="type">float</span> most
    likely does not have a mantissa large enough to hold the value without
    loss of precision. If those systems also have a native 64-bit C
    <code class="literal">int</code> type (most UNIX-like systems don&#039;t), the only way to  
    use the <code class="literal">I</code> pack format in the upper range is to create
    <span class="type">int</span> negative values with the same byte representation
    as the desired unsigned value.
   </p>


function_name: uniqid
type: note
description:
<p class="para">
    Under Cygwin, the <code class="parameter">more_entropy</code> must be set 
    to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> for this function to work.
   </p>


function_name: unpack
type: caution
description:
<p class="para">
    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.
   </p>


function_name: unpack
type: caution
description:
<p class="para">
    If you do not name an element, numeric indices starting from <code class="literal">1</code> are used.
    Be aware that if you have more than one unnamed element, some data is
    overwritten because the numbering restarts from <code class="literal">1</code> for each element.
   </p>
   <p class="para">
    <div class="example" id="install.unix.debian.config.example2">
     <p><strong>Example # <span class="function">unpack</span> example with unnamed keys</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$binarydata </span><span style="color: #007700">= </span><span style="color: #DD0000">"\x32\x42\x00\xa0"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= </span><span style="color: #0000BB">unpack</span><span style="color: #007700">(</span><span style="color: #DD0000">"c2/n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$binarydata</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>The above example will output:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [1]=&gt;
  int(160)
  [2]=&gt;
  int(66)
}
</pre></div>
     </div>
     <div class="example-contents"><p>
      Note that the
      first value from the <code class="literal">c</code> specifier is 
      overwritten by the first value from the <code class="literal">n</code>
      specifier.
     </p></div>
    </div>
   </p>


function_name: mt_rand
type: warning
description:
<p class="para">
    <code class="parameter">min</code> <code class="parameter">max</code> range must
    be within the range <span class="function">mt_getrandmax</span>. i.e. (<code class="parameter">max</code> -
    <code class="parameter">min</code>) &lt;= <span class="function">mt_getrandmax</span>
    Otherwise, <span class="function">mt_rand</span> may return poorer random numbers
    than it should.
   </p>


function_name: rand
type: warning
description:
<p class="para">
    <code class="parameter">min</code> <code class="parameter">max</code> range must
    be within the range <span class="function">getrandmax</span>. i.e. (<code class="parameter">max</code> -
    <code class="parameter">min</code>) &lt;= <span class="function">getrandmax</span>
    Otherwise, <span class="function">rand</span> may return poor-quality random numbers.
   </p>


function_name: Random\Randomizer.getFloat
type: note
description:
<p class="para">
    This method implements the γ-section algorithm as published in
    <a href="https://dl.acm.org/doi/10.1145/3503512" class="link external">&raquo;&nbsp;
     Drawing Random Floating-Point Numbers from an Interval.
     Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022
    </a>
    to obtain the desired behavioral properties.
   </p>


function_name: SplFixedArray.count
type: note
description:
<p class="para">
    This method is functionally equivalent to  <span class="methodname">SplFixedArray::getSize</span>.
   </p>


function_name: SplFixedArray.count
type: note
description:
<p class="para">
    The count of elements is always equal to the set size because all values are initially 
    initialized with <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>.
   </p>


function_name: SplFixedArray.getSize
type: note
description:
<p class="para">
    This method is functionally equivalent to  <span class="methodname">SplFixedArray::count</span>
   </p>


function_name: AppendIterator.__construct
type: caution
description:
<p class="para">
    When using <span class="function">iterator_to_array</span> to copy the values of the AppendIterator 
    into an array, you have to set the optional <code class="parameter">use_key</code> argument to 
    <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>. When <code class="parameter">use_key</code> is not <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> any keys reoccurring in inner 
    iterators will get overwritten in the returned array. There is no way to preserve the original keys.
   </p>


function_name: ArrayIterator.append
type: note
description:
<p class="para">
    This method cannot be called when the <span class="classname">ArrayIterator</span>
    refers to an <span class="type">object</span>.
   </p>


function_name: DirectoryIterator.getExtension
type: note
description:
<p class="para">
    Another way of getting the extension is to use the
    <span class="function">pathinfo</span> function.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$extension </span><span style="color: #007700">= </span><span style="color: #0000BB">pathinfo</span><span style="color: #007700">(</span><span style="color: #0000BB">$fileinfo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getFilename</span><span style="color: #007700">(), </span><span style="color: #0000BB">PATHINFO_EXTENSION</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>


function_name: class_implements
type: note
description:
<p class="simpara">
    To check that an object implements an interface, <a href="language.operators.type.html" class="link"><code class="literal">instanceof</code></a>
    or the <span class="function">is_a</span> function should be used instead.
   </p>


function_name: class_parents
type: note
description:
<p class="simpara">
    To check that an object extends a class, <a href="language.operators.type.html" class="link"><code class="literal">instanceof</code></a>
    or the <span class="function">is_a</span> function should be used instead.
   </p>


function_name: spl_object_hash
type: note
description:
<p class="para">
    Object hashes should be compared for identity with <code class="code">===</code> and
    <code class="code">!==</code>, because the returned hash could be a
    <a href="language.types.numeric-strings.html" class="link">numeric string</a>.
    For example: <code class="literal">0000000000000e600000000000000000</code>.
   </p>


function_name: SplFileInfo.getExtension
type: note
description:
<p class="para">
    Another way of getting the extension is to use the 
    <span class="function">pathinfo</span> function.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$extension </span><span style="color: #007700">= </span><span style="color: #0000BB">pathinfo</span><span style="color: #007700">(</span><span style="color: #0000BB">$info</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getFilename</span><span style="color: #007700">(), </span><span style="color: #0000BB">PATHINFO_EXTENSION</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>


function_name: SplFileObject.fread
type: note
description:
<p class="para">
    Note that  <span class="methodname">SplFileObject::fread</span> reads from the current
    position of the file pointer. Use  <span class="methodname">SplFileObject::ftell</span>
    to find the current position of the pointer and  <span class="methodname">SplFileObject::rewind</span>
    (or  <span class="methodname">SplFileObject::fseek</span>) to rewind the pointer position.
   </p>


function_name: streamWrapper.mkdir
type: note
description:
<p class="para">The
<var class="varname">streamWrapper::$context</var>
property is updated if a valid context is passed to the caller function.</p>


function_name: streamWrapper.stream_eof
type: warning
description:
<p class="para">
      When reading the whole file (for example, with 
      <span class="function">file_get_contents</span>), PHP will call     
       <span class="methodname">streamWrapper::stream_read</span> followed by
       <span class="methodname">streamWrapper::stream_eof</span> in a loop but as long
      as  <span class="methodname">streamWrapper::stream_read</span> returns a
      non-empty string, the return value of
       <span class="methodname">streamWrapper::stream_eof</span> is ignored.
    </p>


function_name: streamWrapper.stream_flush
type: note
description:
<p class="para">
    If not implemented, <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> is assumed as the return value.
   </p>


function_name: streamWrapper.stream_read
type: note
description:
<p class="para">
     <span class="methodname">streamWrapper::stream_eof</span> is called directly after
    calling  <span class="methodname">streamWrapper::stream_read</span> to check if
    <acronym class="acronym">EOF</acronym> has been reached. If not implemented,
    <acronym class="acronym">EOF</acronym> is assumed.
   </p>


function_name: streamWrapper.stream_read
type: warning
description:
<p class="para">
      When reading the whole file (for example, with
      <span class="function">file_get_contents</span>), PHP will call
       <span class="methodname">streamWrapper::stream_read</span> followed by        
       <span class="methodname">streamWrapper::stream_eof</span> in a loop but as long    
      as  <span class="methodname">streamWrapper::stream_read</span> returns a
      non-empty string, the return value of
       <span class="methodname">streamWrapper::stream_eof</span> is ignored.
    </p>


function_name: streamWrapper.stream_seek
type: note
description:
<p class="para">
    Upon success, 
     <span class="methodname">streamWrapper::stream_tell</span> is called directly after
    calling  <span class="methodname">streamWrapper::stream_seek</span>. If
     <span class="methodname">streamWrapper::stream_tell</span> fails, the return
    value to the caller function will be set to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>
   </p>


function_name: streamWrapper.stream_seek
type: note
description:
<p class="para">
    Not all seeks operations on the stream will result in this function being
    called. PHP streams have read buffering enabled by default (see also
    <span class="function">stream_set_read_buffer</span>) and seeking may be done by
    merely moving the buffer pointer.
   </p>


function_name: stream_filter_append
type: note
description:
<h1 class="title">When using custom (user) filters</h1>
   <p class="simpara">
    <span class="function">stream_filter_register</span> must be called first
    in order to register the desired user filter to <code class="parameter">filtername</code>.
   </p>


function_name: stream_filter_append
type: note
description:
<p class="simpara">
    Stream data is read from resources (both local and remote) in chunks,
    with any unconsumed data kept in internal buffers.  When a new
    filter is appended to a stream, data in the internal buffers is processed through
    the new filter at that time.  This differs from the behavior of
    <span class="function">stream_filter_prepend</span>.
   </p>


function_name: stream_filter_append
type: note
description:
<p class="simpara">
    When a filter is added for read and write, two instances of the filter
    are created. <span class="function">stream_filter_append</span> must be called twice 
    with <strong><code><a href="stream.constants.html#constant.stream-filter-read">STREAM_FILTER_READ</a></code></strong> and 
    <strong><code><a href="stream.constants.html#constant.stream-filter-write">STREAM_FILTER_WRITE</a></code></strong> to get both filter resources.
   </p>


function_name: stream_filter_prepend
type: note
description:
<p class="simpara">
    Stream data is read from resources (both local and remote) in chunks,
    with any unconsumed data kept in internal buffers.  When a new
    filter is prepended to a stream, data in the internal buffers,
    which has already been processed through other filters will
    <em>not</em> be reprocessed through the new filter
    at that time.  This differs from the behavior of
    <span class="function">stream_filter_append</span>.
   </p>


function_name: stream_filter_prepend
type: note
description:
<p class="simpara">
    When a filter is added for read and write, two instances of the filter
    are created. <span class="function">stream_filter_prepend</span> must be called twice 
    with <strong><code><a href="stream.constants.html#constant.stream-filter-read">STREAM_FILTER_READ</a></code></strong> and 
    <strong><code><a href="stream.constants.html#constant.stream-filter-write">STREAM_FILTER_WRITE</a></code></strong> to get both filter resources.
   </p>


function_name: stream_get_contents
type: note
description:
<p class="para">
    When specifying a <code class="parameter">length</code> value other than <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, this function will
    immediately allocate an internal buffer of that size even if the
    actual contents are significantly shorter.
   </p>


function_name: stream_get_meta_data
type: note
description:
<p class="para">This function does NOT work on sockets created by the <a href="ref.sockets.html" class="link">Socket extension</a>.
   </p>


function_name: stream_select
type: note
description:
<p class="para">
    Due to a limitation in the current Zend Engine it is not possible to pass a
    constant modifier like <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong> directly as a parameter to a function
    which expects this parameter to be passed by reference. Instead use a
    temporary variable or an expression with the leftmost member being a
    temporary variable:
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$e </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">stream_select</span><span style="color: #007700">(</span><span style="color: #0000BB">$r</span><span style="color: #007700">, </span><span style="color: #0000BB">$w</span><span style="color: #007700">, </span><span style="color: #0000BB">$e</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   </p>


function_name: stream_select
type: note
description:
<p class="para">
   Be sure to use the <code class="literal">===</code> operator when checking for an
   error. Since the <span class="function">stream_select</span> may return 0 the
   comparison with <code class="literal">==</code> would evaluate to <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong>:
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$e </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">;<br />if (</span><span style="color: #0000BB">false </span><span style="color: #007700">=== </span><span style="color: #0000BB">stream_select</span><span style="color: #007700">(</span><span style="color: #0000BB">$r</span><span style="color: #007700">, </span><span style="color: #0000BB">$w</span><span style="color: #007700">, </span><span style="color: #0000BB">$e</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">)) {<br />    echo </span><span style="color: #DD0000">"stream_select() failed\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   </p>


function_name: stream_select
type: note
description:
<p class="para">
    If you read/write to a stream returned in the arrays be aware that
    they do not necessarily read/write the full amount of data you have
    requested. Be prepared to even only be able to read/write a single
    byte.
   </p>


function_name: stream_select
type: note
description:
<p class="para">
    Some streams (like <code class="literal">zlib</code>) cannot be selected by this
    function.
   </p>


function_name: stream_select
type: note
description:
<h1 class="title">Windows compatibility</h1>
   <p class="para">
    Use of <span class="function">stream_select</span> on
    file descriptors returned by <span class="function">proc_open</span> will fail
    and return <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> under Windows.
   </p>
   <p class="para">
    <strong><code><a href="reserved.constants.html#constant.stdin">STDIN</a></code></strong> from a console changes status as soon as <em>any</em>
    input events are available, but reading from the stream may still block.
   </p>


function_name: stream_set_blocking
type: note
description:
<p class="para">On Windows, this has no affect on local files. Non-blocking IO for local files is not supported on Windows.
   </p>


function_name: stream_set_timeout
type: note
description:
<p class="para">
    This function doesn&#039;t work with advanced operations like
    <span class="function">stream_socket_recvfrom</span>, use
    <span class="function">stream_select</span> with timeout parameter instead.
   </p>


function_name: stream_socket_accept
type: warning
description:
<p class="para">
    This function should not be used with UDP server sockets. Instead, use
    <span class="function">stream_socket_recvfrom</span> and
    <span class="function">stream_socket_sendto</span>.
   </p>


function_name: stream_socket_client
type: warning
description:
<p class="simpara">
     UDP sockets will sometimes appear to have opened without an error,
     even if the remote host is unreachable.  The error will only
     become apparent when you read or write data to/from the socket.
     The reason for this is because UDP is a &quot;connectionless&quot; protocol,
     which means that the operating system does not try to establish
     a link for the socket until it actually needs to send or receive data.
   </p>


function_name: stream_socket_client
type: note
description:
<p class="simpara">When specifying a numerical IPv6 address
(e.g. <code class="literal">fe80::1</code>), you must enclose the IP in square
brackets—for example, <code class="literal">tcp://[fe80::1]:80</code>.</p>


function_name: stream_socket_client
type: note
description:
<p class="para">
    Depending on the environment, the Unix domain or the optional
    connect timeout may not be available.  A list of available
    transports can be retrieved using <span class="function">stream_get_transports</span>.
    See <a href="transports.html" class="xref">List of Supported Socket Transports</a> for a list of built in transports.
   </p>


function_name: stream_socket_recvfrom
type: note
description:
<p class="para">
    If a message received is longer than the <code class="parameter">length</code>
    parameter, excess bytes may be discarded depending on the type of socket
    the message is received from (such as UDP).
   </p>


function_name: stream_socket_recvfrom
type: note
description:
<p class="para">
    Calls to <span class="function">stream_socket_recvfrom</span> on socket-based
    streams, after calls to buffer-based stream functions (like
    <span class="function">fread</span> or <span class="function">stream_get_line</span>) read
    data directly from the socket and bypass the stream buffer.
    </p>


function_name: tidy_access_count
type: note
description:
<p class="para">
    Due to the design of the TidyLib, you must call
    <span class="function">tidy_diagnose</span> before
    <span class="function">tidy_access_count</span> or it will return always
    <code class="literal">0</code>. You must also need to enable the
    <code class="literal">accessibility-check</code> option.
   </p>


function_name: get_meta_tags
type: note
description:
<p class="para">
    Only meta tags with name attributes will be parsed. Quotes are not required.
   </p>


function_name: parse_url
type: caution
description:
<p class="para">
    This function may not give correct results for relative or invalid URLs,
    and the results may not even match common behavior of HTTP clients.
    If URLs from untrusted input need to be parsed, extra validation is
    required, e.g. by using <span class="function">filter_var</span> with the
    <strong><code><a href="filter.constants.html#constant.filter-validate-url">FILTER_VALIDATE_URL</a></code></strong> filter.
   </p>


function_name: parse_url
type: note
description:
<p class="para">
    This function is intended specifically for the purpose of parsing URLs
    and not URIs. However, to comply with PHP&#039;s backwards compatibility
    requirements it makes an exception for the file:// scheme where triple
    slashes (file:///...) are allowed. For any other scheme this is invalid.
   </p>


function_name: rawurldecode
type: note
description:
<p class="para">
    <span class="function">rawurldecode</span> does not decode plus symbols (&#039;+&#039;)
    into spaces. <span class="function">urldecode</span> does.
   </p>


function_name: urldecode
type: warning
description:
<p class="para">
    The superglobals <var class="varname">$_GET</var> and <var class="varname">$_REQUEST</var>
    are already decoded.  Using <span class="function">urldecode</span> on an element
    in <var class="varname">$_GET</var> or <var class="varname">$_REQUEST</var> could have
    unexpected and dangerous results.
   </p>


function_name: urlencode
type: note
description:
<p class="para">
    Be careful about variables that may match HTML entities. Things like
    &amp;amp, &amp;copy and &amp;pound are parsed by the browser and the
    actual entity is used instead of the desired variable name.  This is an
    obvious hassle that the W3C has been telling people about for years.
    The reference is here: <a href="http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2" class="link external">&raquo;&nbsp;http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2</a>.
   </p>
   <p class="para">
    PHP supports changing the argument separator to the W3C-suggested
    semi-colon through the arg_separator .ini directive.  Unfortunately most
    user agents do not send form data in this semi-colon separated format.
    A more portable way around this is to use &amp;amp; instead of &amp; as
    the separator.  You don&#039;t need to change PHP&#039;s arg_separator for this.
    Leave it as &amp;, but simply encode your URLs using
    <span class="function">htmlentities</span> or 
    <span class="function">htmlspecialchars</span>.
   </p>


function_name: yaml_parse_file
type: warning
description:
<p class="para">
    Processing untrusted user input with <span class="function">yaml_parse_file</span>
    is dangerous if the use of <span class="function">unserialize</span> is enabled for
    nodes using the <code class="literal">!php/object</code> tag. This behavior can be
    disabled by using the <code class="literal">yaml.decode_php</code> ini setting.
   </p>


function_name: yaml_parse_url
type: warning
description:
<p class="para">
    Processing untrusted user input with <span class="function">yaml_parse_url</span>
    is dangerous if the use of <span class="function">unserialize</span> is enabled for
    nodes using the <code class="literal">!php/object</code> tag. This behavior can be
    disabled by using the <code class="literal">yaml.decode_php</code> ini setting.
   </p>


function_name: yaml_parse
type: warning
description:
<p class="para">
    Processing untrusted user input with <span class="function">yaml_parse</span>
    is dangerous if the use of <span class="function">unserialize</span> is enabled for
    nodes using the <code class="literal">!php/object</code> tag. This behavior can be
    disabled by using the <code class="literal">yaml.decode_php</code> ini setting.
   </p>


function_name: curl_getinfo
type: note
description:
<p class="para">
    Information gathered by this function is kept if the handle is re-used. This means
    that unless a statistic is overridden internally by this function, the previous info
    is returned.
   </p>


function_name: curl_reset
type: note
description:
<p class="para">
    <span class="function">curl_reset</span> also resets the URL given as the <span class="function">curl_init</span> parameter.
   </p>


function_name: curl_setopt_array
type: note
description:
<p class="para">
    As with <span class="function">curl_setopt</span>, passing an array to 
    <strong><code><a href="curl.constants.html#constant.curlopt-post">CURLOPT_POST</a></code></strong> will encode the data as 
    <em>multipart/form-data</em>, while passing a 
    URL-encoded string will encode the data as 
    <em>application/x-www-form-urlencoded</em>.
   </p>


function_name: curl_setopt
type: note
description:
<p class="para">
    Passing an array to <strong><code><a href="curl.constants.html#constant.curlopt-postfields">CURLOPT_POSTFIELDS</a></code></strong> will 
    encode the data as <em>multipart/form-data</em>,
    while passing a URL-encoded string will encode the data as
    <em>application/x-www-form-urlencoded</em>.
   </p>


function_name: curl_unescape
type: note
description:
<p class="para">
    <span class="function">curl_unescape</span> does not decode plus symbols (+) into spaces. <span class="function">urldecode</span> does.
   </p>


function_name: ldap_compare
type: warning
description:
<p class="para">
    <span class="function">ldap_compare</span> can NOT be used to compare BINARY values!
   </p>


function_name: ldap_get_option
type: note
description:
<p class="para">
    This function is only available when using OpenLDAP 2.x.x OR Netscape
    Directory SDK x.x.
   </p>


function_name: ldap_rename
type: note
description:
<p class="para">
    This function currently only works with LDAPv3. You may have to use
    <span class="function">ldap_set_option</span> prior to binding to use LDAPv3. This
    function is only available when using OpenLDAP 2.x.x OR Netscape
    Directory SDK x.x.
   </p>


function_name: ldap_sasl_bind
type: note
description:
<h1 class="title">Requirement</h1>
   <p class="simpara">
    <span class="function">ldap_sasl_bind</span> requires <acronym class="acronym">SASL</acronym>
    support (<var class="filename">sasl.h</var>). Be sure
    <code class="literal">--with-ldap-sasl</code> is used when configuring PHP
    otherwise this function will be undefined.
   </p>


function_name: Memcache.addServer
type: warning
description:
<p class="para">
    When the <code class="parameter">port</code> is unspecified, this method defaults to the
    value set of the PHP ini directive
    <a href="memcache.ini.html#ini.memcache.default-port" class="link">memcache.default_port</a>
    If this value was changed elsewhere in your application it might lead to
    unexpected results: for this reason it is wise to always specify the port
    explicitly in this method call.
   </p>


function_name: mqseries_back
type: note
description:
<p class="para">
    <span class="function">mqseries_back</span>
    will not function when using MQSeries Client to connect to a Queueu Manager.
   </p>


function_name: mqseries_begin
type: note
description:
<p class="para">
    <span class="function">mqseries_begin</span>
    will not function when using MQSeries Client to connect to a Queueu Manager.
   </p>


function_name: checkdnsrr
type: note
description:
<p class="para">
    For compatibility with Windows before this was implemented, then try the
    <a href="https://pear.php.net/" class="link external">&raquo;&nbsp;PEAR</a> class
    <a href="https://pear.php.net/package/Net_DNS" class="link external">&raquo;&nbsp;Net_DNS</a>.
   </p>


function_name: fsockopen
type: note
description:
<p class="para">
    Depending on the environment, the Unix domain or the optional
    connect timeout may not be available.
   </p>


function_name: fsockopen
type: warning
description:
<p class="para">
    UDP sockets will sometimes appear to have opened without an error,
    even if the remote host is unreachable.  The error will only
    become apparent when you read or write data to/from the socket.
    The reason for this is because UDP is a &quot;connectionless&quot; protocol,
    which means that the operating system does not try to establish
    a link for the socket until it actually needs to send or receive data.
   </p>


function_name: getmxrr
type: note
description:
<p class="para">
    This function should not be used for the purposes of address
    verification.  Only the mailexchangers found in DNS are returned,
    however, according to <a href="http://www.faqs.org/rfcs/rfc2821" class="link external">&raquo;&nbsp;RFC 2821</a>
    when no mail exchangers are listed, <code class="parameter">hostname</code>
    itself should be used as the only mail exchanger with a priority of
    <code class="literal">0</code>.
   </p>


function_name: header_register_callback
type: note
description:
<p class="para">
    Headers will only be accessible and output when a SAPI that supports them
    is in use.
   </p>


function_name: header_remove
type: caution
description:
<p class="para">
    This function will remove <em>all</em> headers set by PHP,
    including cookies, session and the <code class="literal">X-Powered-By</code> headers.
   </p>


function_name: header
type: note
description:
<p class="para">
    You can use output buffering to get around this problem,
    with the overhead of all of your output to the browser being buffered
    in the server until you send it. You can do this by calling
    <span class="function">ob_start</span> and <span class="function">ob_end_flush</span>
    in your script, or setting the <code class="literal">output_buffering</code>
    configuration directive on in your <var class="filename">php.ini</var> or
    server configuration files.
   </p>


function_name: header
type: note
description:
<p class="para">
    The HTTP status header line will always be the first sent
    to the client, regardless of the actual <span class="function">header</span>
    call being the first or not. The status may be overridden
    by calling <span class="function">header</span> with a new status line
    at any time unless the HTTP headers have already been sent.
   </p>


function_name: header
type: note
description:
<p class="para">
    Most contemporary clients accept relative <acronym class="acronym">URI</acronym>s as argument to
    <a href="http://tools.ietf.org/html/rfc7231#section-7.1.2" class="link external">&raquo;&nbsp;Location:</a>,
    but some older clients require an absolute URI
    including the scheme, hostname and absolute path. You can usually use
    <var class="varname">$_SERVER[&#039;HTTP_HOST&#039;]</var>,
    <var class="varname">$_SERVER[&#039;PHP_SELF&#039;]</var>
    and <span class="function">dirname</span> to make an absolute URI from a
    relative one yourself:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Redirect to a different page in the current directory that was requested */<br /></span><span style="color: #0000BB">$host  </span><span style="color: #007700">= </span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_HOST'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$uri   </span><span style="color: #007700">= </span><span style="color: #0000BB">rtrim</span><span style="color: #007700">(</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_SELF'</span><span style="color: #007700">]), </span><span style="color: #DD0000">'/\\'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$extra </span><span style="color: #007700">= </span><span style="color: #DD0000">'mypage.php'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Location: http://</span><span style="color: #0000BB">$host$uri</span><span style="color: #DD0000">/</span><span style="color: #0000BB">$extra</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br />exit;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: header
type: note
description:
<p class="para">
    Session ID is not passed with Location header even if <a href="session.configuration.html#ini.session.use-trans-sid" class="link">session.use_trans_sid</a> is
    enabled. It must by passed manually using <strong><code><a href="session.constants.html#constant.sid">SID</a></code></strong>
    constant.
   </p>


function_name: ip2long
type: note
description:
<p class="para">
    Because PHP&#039;s <span class="type">int</span> type is signed, and many IP addresses
    will result in negative integers on 32-bit architectures, you need to use
    the &quot;%u&quot; formatter of <span class="function">sprintf</span> or
    <span class="function">printf</span> to get the string representation of the
    unsigned IP address.
   </p>


function_name: ip2long
type: note
description:
<p class="para">
    <span class="function">ip2long</span> will return <code class="literal">-1</code> for the IP
    <code class="literal">255.255.255.255</code> on 32-bit systems due to the integer value overflowing.
   </p>


function_name: long2ip
type: note
description:
<p class="para">
    On 32-bit architectures, casting integer representations of IP addresses
    from <span class="type">string</span> to <span class="type">int</span> will not give
    correct results for numbers which exceed <strong><code><a href="reserved.constants.html#constant.php-int-max">PHP_INT_MAX</a></code></strong>.
   </p>


function_name: setcookie
type: note
description:
<p class="para">
    You can use output buffering to send output prior to the
    call of this function, with the overhead of all of your output to the
    browser being buffered in the server until you send it. You can do this
    by calling <span class="function">ob_start</span> and
    <span class="function">ob_end_flush</span> in your script, or setting the
    <code class="literal">output_buffering</code> configuration directive on in your
    <var class="filename">php.ini</var> or server configuration files.
   </p>


function_name: syslog
type: note
description:
<p class="para">
    Use of <strong><code><a href="network.constants.html#constant.log-local0">LOG_LOCAL0</a></code></strong> through
    <code class="literal">LOG_LOCAL7</code> for the <code class="parameter">facility</code>
    parameter of <span class="function">openlog</span> is not available
    in Windows.
   </p>


function_name: socket_bind
type: note
description:
<p class="para">
    This function must be used on the socket before
    <span class="function">socket_connect</span>.
   </p>


function_name: socket_bind
type: note
description:
<p class="para">
    Windows 9x/ME compatibility note:
    <span class="function">socket_last_error</span> may return an invalid error code
    if trying to bind the socket to a wrong address that does not belong to
    your machine.
   </p>


function_name: socket_create_listen
type: note
description:
<p class="para">
    If you want to create a socket which only listens on a certain
    interface you need to use <span class="function">socket_create</span>,
    <span class="function">socket_bind</span> and <span class="function">socket_listen</span>.
   </p>


function_name: socket_getpeername
type: note
description:
<p class="para">
    <span class="function">socket_getpeername</span> should not be used with
    <strong><code><a href="sockets.constants.html#constant.af-unix">AF_UNIX</a></code></strong> sockets created with <span class="function">socket_accept</span>.
    Only sockets created with <span class="function">socket_connect</span> or a primary
    server socket following a call to <span class="function">socket_bind</span> will return
    meaningful values.
   </p>


function_name: socket_getpeername
type: note
description:
<p class="para">
    For having <span class="function">socket_getpeername</span> to return a meaningful value,
    the socket it is applied upon must of course be one for which the concept of 
    &quot;peer&quot; makes sense.
   </p>


function_name: socket_last_error
type: note
description:
<p class="para">
    <span class="function">socket_last_error</span> does not clear the error code, use
    <span class="function">socket_clear_error</span> for this purpose.
   </p>


function_name: socket_select
type: note
description:
<p class="para">
    Be aware that some socket implementations need to be handled very
    carefully. A few basic rules:
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       You should always try to use <span class="function">socket_select</span>
       without timeout. Your program should have nothing to do if there is
       no data available. Code that depends on timeouts is not usually
       portable and difficult to debug.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       No socket must be added to any set if you do not intend to
       check its result after the <span class="function">socket_select</span> call,
       and respond appropriately. After <span class="function">socket_select</span>
       returns, all sockets in all arrays must be checked. Any
       socket that is available for writing must be written to, and
       any socket available for reading must be read from.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       If you read/write to a socket returns in the arrays be aware that
       they do not necessarily read/write the full amount of data you have
       requested. Be prepared to even only be able to read/write a single
       byte.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       It&#039;s common to most socket implementations that the only exception
       caught with the <code class="parameter">except</code> array is out-of-bound
       data received on a socket.
      </span>
     </li>
    </ul>
   </p>


function_name: socket_write
type: note
description:
<p class="para">
    <span class="function">socket_write</span> does not necessarily write all bytes
    from the given buffer. It&#039;s valid that, depending on the network
    buffers etc., only a certain amount of data, even one byte, is written
    though your buffer is greater. You have to watch out so you don&#039;t
    unintentionally forget to transmit the rest of your data.
   </p>


function_name: ssh2_auth_hostbased_file
type: note
description:
<p class="para">
    <span class="function">ssh2_auth_hostbased_file</span> requires libssh2 &gt;= 0.7 and
    PHP/SSH2 &gt;= 0.7
   </p>


function_name: ssh2_auth_pubkey_file
type: note
description:
<p class="para">
    The underlying libssh library doesn&#039;t support partial auths very cleanly
    That is, if you need to supply both a public key and a password it will
    appear as if this function has failed. In this particular case a failure
    from this call may just mean that auth hasn&#039;t been completed yet. You
    would need to ignore this failure and continue on and call
    <span class="function">ssh2_auth_password</span> in order to complete
    authentication.
   </p>


function_name: ssh2_publickey_init
type: note
description:
<p class="simpara">The public key subsystem
is used for managing public keys on a server to which the client is
<em>already</em> authenticated.  To authenticate to a remote system
using public key authentication, use the
<span class="function">ssh2_auth_pubkey_file</span> function instead.</p>


function_name: Stomp.abort
type: tip
description:
<p class="simpara">Stomp is inherently asynchronous. Synchronous communication can be implemented adding a receipt header. This will cause methods to not return anything until the server has acknowledged receipt of the message or until read timeout was reached.</p>


function_name: Stomp.ack
type: note
description:
<p class="para">A transaction header may be specified, indicating that the message acknowledgment should be part of the named transaction.</p>


function_name: svn_add
type: warning
description:
<p class="simpara">This function is
<em>EXPERIMENTAL</em>. The behaviour of this function, its name, and
surrounding documentation may change without notice in a future release of PHP.
This function should be used at your own risk.
</p>


function_name: SolrClient.optimize
type: warning
description:
<p class="para">
    PECL Solr &gt;= 2.0 only supports Solr Server &gt;= 4.0 
   </p>
   <p class="para">
    Prior to PECL Solr 2.0 this method used to accept these arguments &quot;int $maxSegments, bool $waitFlush, bool $waitSearcher&quot;.
   </p>


function_name: apache_request_headers
type: note
description:
<p class="para">
    You can also get at the value of the common <acronym class="acronym">CGI</acronym> variables by
    reading them from the environment, which works whether or not
    you are using PHP as an <span class="productname">Apache</span> module. Use
    <span class="function">phpinfo</span> to see a list of all of the available
    <a href="language.variables.predefined.html" class="link">environment variables</a>.
   </p>


function_name: apache_setenv
type: note
description:
<p class="para">
    <span class="function">apache_setenv</span> can be paired up with
    <span class="function">apache_getenv</span> across separate pages or for setting
    variables to pass to Server Side Includes (.shtml) that have been
    included in PHP scripts.
   </p>


function_name: virtual
type: warning
description:
<p class="para">
    The query string can be passed to the included file but
    <var class="varname">$_GET</var> is copied from the parent script and only
    <var class="varname">$_SERVER[&#039;QUERY_STRING&#039;]</var> is filled with the passed
    query string. The query string may only be passed when using Apache 2.
    The requested file will not be listed in the Apache access log.
   </p>


function_name: virtual
type: note
description:
<p class="para">
    Environment variables set in the requested file are not visible to the
    calling script.
   </p>


function_name: virtual
type: note
description:
<p class="para">
    This function may be used on PHP files. However, it is typically better
    to use <span class="function">include</span> or <span class="function">require</span> for
    PHP files.
   </p>


function_name: session_encode
type: warning
description:
<p class="para">
    Must call <span class="function">session_start</span> before using <span class="function">session_encode</span>.
   </p>


function_name: session_set_save_handler
type: warning
description:
<p class="para">
    The <code class="parameter">write</code> and
    <code class="parameter">close</code> handlers are called after object
    destruction and therefore cannot use objects or throw exceptions.
    Exceptions are not able to be caught since will not be caught nor will
    any exception trace be displayed and the execution will just cease unexpectedly.
    The object destructors can however use sessions.
   </p>
   <p class="para">
    It is possible to call <span class="function">session_write_close</span> from the
    destructor to solve this chicken and egg problem but the most reliable way is
    to register the shutdown function as described above.
   </p>


function_name: session_set_save_handler
type: warning
description:
<p class="para">
    Current working directory is changed with some SAPIs if session is
    closed in the script termination. It is possible to close the session
    earlier with <span class="function">session_write_close</span>.
   </p>


function_name: session_start
type: note
description:
<p class="para">
    To use cookie-based sessions, <span class="function">session_start</span>
    must be called before outputting anything to the browser.
   </p>


function_name: session_start
type: note
description:
<p class="para">
    Use of <a href="zlib.configuration.html#ini.zlib.output-compression" class="link">zlib.output_compression</a>
    is recommended instead of <span class="function">ob_gzhandler</span>
   </p>


function_name: session_start
type: note
description:
<p class="para">
    This function sends out several HTTP headers depending on the
    configuration. See <span class="function">session_cache_limiter</span> to
    customize these headers.
   </p>


function_name: session_unset
type: note
description:
<p class="para">
    If <var class="varname">$_SESSION</var> is used, use <span class="function">unset</span> to
    unregister a session variable, i.e.
    <code class="code">unset($_SESSION[&#039;varname&#039;]);</code>.
   </p>


function_name: session_unset
type: caution
description:
<p class="para">
    Do NOT unset the whole <var class="varname">$_SESSION</var> with
    <code class="code">unset($_SESSION)</code> as this will disable the registering
    of session variables through the <var class="varname">$_SESSION</var> superglobal.
   </p>


function_name: session_unset
type: note
description:
<p class="para">
    The use of <span class="function">session_unset</span> is identical to <code class="code">$_SESSION = []</code>.
   </p>


function_name: session_unset
type: caution
description:
<p class="para">
    This function works only if a session is active. It will not clear the
    <var class="varname">$_SESSION</var> array if the session has not been started yet
    or has already been destroyed. Use <code class="code">$_SESSION = []</code> to unset all
    session variables even if the session is not active.
   </p>


function_name: preg_match
type: tip
description:
<p class="para">
    Do not use <span class="function">preg_match</span> if you only want to check if
    one string is contained in another string. Use
    <span class="function">strpos</span> instead as it will be faster.
   </p>


function_name: preg_replace
type: note
description:
<p class="para">
    When using arrays with <code class="parameter">pattern</code> and
    <code class="parameter">replacement</code>, the keys are processed in the order
    they appear in the array. This is <em>not necessarily</em> the
    same as the numerical index order. If you use indexes to identify which
    <code class="parameter">pattern</code> should be replaced by which
    <code class="parameter">replacement</code>, you should perform a
    <span class="function">ksort</span> on each array prior to calling
    <span class="function">preg_replace</span>.
   </p>


function_name: preg_replace
type: note
description:
<p class="para">
    When both <code class="parameter">pattern</code> and <code class="parameter">replacement</code> are
    arrays, matching rules will operate sequentially.  That is, the second <code class="parameter">pattern</code>/<code class="parameter">replacement</code>
    pair will operate on the string that results from the first <code class="parameter">pattern</code>/<code class="parameter">replacement</code>
    pair, not the original string. If you want to simulate replacements operating in parallel,
    such as swapping two values, replace one pattern by an intermediary placeholder, then in a
    later pair replace that intermediary placeholder with the desired replacement.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$p </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'/a/'</span><span style="color: #007700">, </span><span style="color: #DD0000">'/b/'</span><span style="color: #007700">, </span><span style="color: #DD0000">'/c/'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$r </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'b'</span><span style="color: #007700">, </span><span style="color: #DD0000">'c'</span><span style="color: #007700">, </span><span style="color: #DD0000">'d'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$p</span><span style="color: #007700">, </span><span style="color: #0000BB">$r</span><span style="color: #007700">, </span><span style="color: #DD0000">'a'</span><span style="color: #007700">));<br /></span><span style="color: #FF8000">// prints d<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>


function_name: preg_split
type: tip
description:
<p class="para">
    If you don&#039;t need the power of regular expressions, you can choose
    faster (albeit simpler) alternatives like <span class="function">explode</span>
    or <span class="function">str_split</span>.
   </p>


function_name: preg_split
type: tip
description:
<p class="para">
    If matching fails, an array with a single element containing the input string will be returned.
   </p>


function_name: chop
type: note
description:
<p class="para">
    <span class="function">chop</span> is different than the Perl
    <code class="literal">chop()</code> function, which removes the last
    character in the string.
   </p>


function_name: crypt
type: note
description:
<p class="simpara">
    There is no decrypt function, since <span class="function">crypt</span> uses a
    one-way algorithm.
   </p>


function_name: echo
type: note
description:
<h1 class="title">Using with parentheses</h1>
   <p class="para">
    Surrounding a single argument to <code class="literal">echo</code> with parentheses will not
    raise a syntax error, and produces syntax which looks like a normal
    function call. However, this can be misleading, because the parentheses are actually
    part of the expression being output, not part of the <code class="literal">echo</code>
    syntax itself.
   </p>
   <p class="para">
    <div class="example" id="example-26">
     
     <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// outputs "hello"<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// also outputs "hello", because ("hello") is a valid expression<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">) * </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// outputs "9"; the parentheses cause 1+2 to be evaluated first, then 3*3<br />// the echo statement sees the whole expression as one argument<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #DD0000">" world"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// outputs "hello world"<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">), (</span><span style="color: #DD0000">" world"</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// outputs "hello world"; the parentheses are part of each expression<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #DD0000">" world"</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Throws a Parse Error because ("hello", " world") is not a valid expression<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>


function_name: echo
type: tip
description:
<p class="para">
    Passing multiple arguments to <code class="literal">echo</code> can avoid
    complications arising from the precedence of the concatenation operator in
    PHP. For instance, the concatenation operator has higher precedence than
    the ternary operator, and prior to PHP 8.0.0 had the same precedence as addition
    and subtraction:
   </p>
   <div class="example-contents">
    <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Below, the expression 'Hello ' . isset($name) is evaluated first,<br />// and is always true, so the argument to echo is always $name<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Hello ' </span><span style="color: #007700">. isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">'John Doe' </span><span style="color: #007700">. </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// The intended behaviour requires additional parentheses<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Hello ' </span><span style="color: #007700">. (isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">'John Doe'</span><span style="color: #007700">) . </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// In PHP prior to 8.0.0, the below outputs "2", rather than "Sum: 3"<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Sum: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Again, adding parentheses ensures the intended order of evaluation<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Sum: ' </span><span style="color: #007700">. (</span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">);</span></span></code></div>
   </div>

   <p class="para">
    If multiple arguments are passed in, then parentheses will not be
    required to enforce precedence, because each expression is separate:
   </p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello "</span><span style="color: #007700">, isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">"John Doe"</span><span style="color: #007700">, </span><span style="color: #DD0000">"!"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Sum: "</span><span style="color: #007700">, </span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">;</span></span></code></div>
   </div>


function_name: html_entity_decode
type: note
description:
<p class="para">
    You might wonder why trim(html_entity_decode(&#039;&amp;nbsp;&#039;)); doesn&#039;t
    reduce the string to an empty string, that&#039;s because the &#039;&amp;nbsp;&#039;
    entity is not ASCII code 32 (which is stripped by
    <span class="function">trim</span>) but ASCII code 160 (0xa0) in the default ISO
    8859-1 encoding.
   </p>


function_name: htmlspecialchars
type: note
description:
<p class="para">
    Note that this function does not translate anything beyond what
    is listed above. For full entity translation, see
    <span class="function">htmlentities</span>.
   </p>


function_name: htmlspecialchars
type: note
description:
<p class="para">
    In case of an ambiguous <code class="parameter">flags</code> value, the following rules apply:
   </p>
   <p class="para">
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       When neither of <strong><code><a href="string.constants.html#constant.ent-compat">ENT_COMPAT</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-quotes">ENT_QUOTES</a></code></strong>,
       <strong><code><a href="string.constants.html#constant.ent-noquotes">ENT_NOQUOTES</a></code></strong> is present, the default is <strong><code><a href="string.constants.html#constant.ent-noquotes">ENT_NOQUOTES</a></code></strong>.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       When more than one of <strong><code><a href="string.constants.html#constant.ent-compat">ENT_COMPAT</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-quotes">ENT_QUOTES</a></code></strong>,
       <strong><code><a href="string.constants.html#constant.ent-noquotes">ENT_NOQUOTES</a></code></strong> is present, <strong><code><a href="string.constants.html#constant.ent-quotes">ENT_QUOTES</a></code></strong> takes the
       highest precedence, followed by <strong><code><a href="string.constants.html#constant.ent-compat">ENT_COMPAT</a></code></strong>.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       When neither of <strong><code><a href="string.constants.html#constant.ent-html401">ENT_HTML401</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-html5">ENT_HTML5</a></code></strong>,
       <strong><code><a href="string.constants.html#constant.ent-xhtml">ENT_XHTML</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-xml1">ENT_XML1</a></code></strong> is present, the default is
       <strong><code><a href="string.constants.html#constant.ent-html401">ENT_HTML401</a></code></strong>.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       When more than one of <strong><code><a href="string.constants.html#constant.ent-html401">ENT_HTML401</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-html5">ENT_HTML5</a></code></strong>,
       <strong><code><a href="string.constants.html#constant.ent-xhtml">ENT_XHTML</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-xml1">ENT_XML1</a></code></strong> is present,
       <strong><code><a href="string.constants.html#constant.ent-html5">ENT_HTML5</a></code></strong> takes the highest precedence,
       followed by <strong><code><a href="string.constants.html#constant.ent-xhtml">ENT_XHTML</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-xml1">ENT_XML1</a></code></strong> and <strong><code><a href="string.constants.html#constant.ent-html401">ENT_HTML401</a></code></strong>.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       When more than one of <strong><code><a href="string.constants.html#constant.ent-disallowed">ENT_DISALLOWED</a></code></strong>, <strong><code><a href="string.constants.html#constant.ent-ignore">ENT_IGNORE</a></code></strong>,
       <strong><code><a href="string.constants.html#constant.ent-substitute">ENT_SUBSTITUTE</a></code></strong> are present, <strong><code><a href="string.constants.html#constant.ent-ignore">ENT_IGNORE</a></code></strong> takes the
       highest precedence, followed by <strong><code><a href="string.constants.html#constant.ent-substitute">ENT_SUBSTITUTE</a></code></strong>.
      </span>
     </li>
    </ul>
   </p>


function_name: money_format
type: note
description:
<p class="para">
    The function <span class="function">money_format</span> is only defined if
    the system has strfmon capabilities.  For example, Windows does
    not, so <span class="function">money_format</span> is undefined in Windows.
   </p>


function_name: money_format
type: note
description:
<p class="para">
    The <strong><code><a href="string.constants.html#constant.lc-monetary">LC_MONETARY</a></code></strong> category of the locale settings,
    affects the behavior of this function. Use <span class="function">setlocale</span>
    to set to the appropriate default locale before using this function.
   </p>


function_name: parse_str
type: note
description:
<p class="para">
    All variables created (or values returned into array if second parameter is set)
    are already <span class="function">urldecode</span>d.
   </p>


function_name: parse_str
type: note
description:
<p class="para">
    To get the current <code class="literal">QUERY_STRING</code>, you may use the variable
    <var class="varname">$_SERVER[&#039;QUERY_STRING&#039;]</var>.
    Also, you may want to read the section on
    <a href="language.variables.external.html" class="link">variables from external
    sources</a>.
   </p>


function_name: print
type: note
description:
<h1 class="title">Using with parentheses</h1>
   <p class="para">
    Surrounding the argument to <code class="literal">print</code> with parentheses will not
    raise a syntax error, and produces syntax which looks like a normal
    function call. However, this can be misleading, because the parentheses are actually
    part of the expression being output, not part of the <code class="literal">print</code>
    syntax itself.
   </p>
   <p class="para">
    <div class="example" id="example-29">
     
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// outputs "hello"<br /><br /></span><span style="color: #007700">print(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// also outputs "hello", because ("hello") is a valid expression<br /><br /></span><span style="color: #007700">print(</span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">) * </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// outputs "9"; the parentheses cause 1+2 to be evaluated first, then 3*3<br />// the print statement sees the whole expression as one argument<br /><br /></span><span style="color: #007700">if ( print(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">) &amp;&amp; </span><span style="color: #0000BB">false </span><span style="color: #007700">) {<br />    print </span><span style="color: #DD0000">" - inside if"</span><span style="color: #007700">;<br />}<br />else {<br />    print </span><span style="color: #DD0000">" - inside else"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #FF8000">// outputs " - inside if"<br />// the expression ("hello") &amp;&amp; false is first evaluated, giving false<br />// this is coerced to the empty string "" and printed<br />// the print construct then returns 1, so code in the if block is run<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="para">
    When using <code class="literal">print</code> in a larger expression, placing both the
    keyword and its argument in parentheses may be necessary to give the intended
    result:
   </p>

   <p class="para">
    <div class="example" id="example-30">
     
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if ( (print </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">) &amp;&amp; </span><span style="color: #0000BB">false </span><span style="color: #007700">) {<br />    print </span><span style="color: #DD0000">" - inside if"</span><span style="color: #007700">;<br />}<br />else {<br />    print </span><span style="color: #DD0000">" - inside else"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #FF8000">// outputs "hello - inside else"<br />// unlike the previous example, the expression (print "hello") is evaluated first<br />// after outputting "hello", print returns 1<br />// since 1 &amp;&amp; false is false, code in the else block is run<br /><br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"hello " </span><span style="color: #007700">&amp;&amp; print </span><span style="color: #DD0000">"world"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// outputs "world1"; print "world" is evaluated first,<br />// then the expression "hello " &amp;&amp; 1 is passed to the left-hand print<br /><br /></span><span style="color: #007700">(print </span><span style="color: #DD0000">"hello "</span><span style="color: #007700">) &amp;&amp; (print </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// outputs "hello world"; the parentheses force the print expressions<br />// to be evaluated before the &amp;&amp;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>


function_name: setlocale
type: tip
description:
<p class="para">
    Windows users will find useful information about
    <code class="parameter">locales</code> strings at Microsoft&#039;s
    <acronym class="acronym">MSDN</acronym> website. Supported language strings can be found
    in the
    <a href="http://msdn.microsoft.com/en-us/library/39cwe7zf.aspx" class="link external">&raquo;&nbsp;language strings documentation</a>
    and supported country/region strings in the
    <a href="http://msdn.microsoft.com/en-us/library/cdax410z.aspx" class="link external">&raquo;&nbsp;country/region strings documentation</a>.
   </p>


function_name: str_ireplace
type: caution
description:
<h1 class="title">Replacement order gotcha</h1>
   <p class="para">
    Because <span class="function">str_ireplace</span> replaces left to right, it might
    replace a previously inserted value when doing multiple replacements.
    Example #2 in the <span class="function">str_replace</span> documentation
    demonstrates how this may affect you in practice.
   </p>


function_name: str_replace
type: caution
description:
<h1 class="title">Replacement order gotcha</h1>
   <p class="para">
    Because <span class="function">str_replace</span> replaces left to right, it might
    replace a previously inserted value when doing multiple replacements.
    See also the examples in this document.
   </p>


function_name: str_replace
type: note
description:
<p class="para">
    This function is case-sensitive. Use <span class="function">str_ireplace</span>
    for case-insensitive replace.
   </p>


function_name: str_split
type: note
description:
<p class="para">
    <span class="function">str_split</span> will split into bytes, rather than characters when dealing with a multi-byte encoded string.
    Use <span class="function">mb_str_split</span> to split the string into code points. 
   </p>


function_name: strip_tags
type: warning
description:
<p class="para">
    This function should not be used to try to prevent XSS attacks.
    Use more appropriate functions like <span class="function">htmlspecialchars</span>
    or other means depending on the context of the output.
   </p>


function_name: strip_tags
type: warning
description:
<p class="para">
    Because <span class="function">strip_tags</span> does not actually validate the
    HTML, partial or broken tags can result in the removal of more
    text/data than expected.
   </p>


function_name: strip_tags
type: warning
description:
<p class="para">
    This function does not modify any attributes on the tags that you allow
    using <code class="parameter">allowed_tags</code>, including the
    <code class="literal">style</code> and <code class="literal">onmouseover</code> attributes
    that a mischievous user may abuse when posting text that will be shown
    to other users.
   </p>


function_name: strip_tags
type: note
description:
<p class="para">
    Tag names within the input HTML that are greater than 1023 bytes in length
    will be treated as though they are invalid, regardless of the
    <code class="parameter">allowed_tags</code> parameter.
   </p>


function_name: strlen
type: note
description:
<p class="para">
    <span class="function">strlen</span> returns the number of bytes rather than the number 
    of characters in a string.
   </p>


function_name: strtok
type: warning
description:
<p class="simpara">This function may
return Boolean <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>, but may also return a non-Boolean value which
evaluates to <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong>. Please read the section on <a href="language.types.boolean.html" class="link">Booleans</a> for more
information. Use <a href="language.operators.comparison.html" class="link">the ===
operator</a> for testing the return value of this
function.</p>


function_name: trim
type: note
description:
<h1 class="title">Possible gotcha: removing middle characters</h1>
   <p class="para">
    Because <span class="function">trim</span> trims characters from the beginning and end of
    a <span class="type">string</span>, it may be confusing when characters are (or are not) removed from
    the middle. <code class="literal">trim(&#039;abc&#039;, &#039;bad&#039;)</code> removes both &#039;a&#039; and &#039;b&#039; because it
    trims &#039;a&#039; thus moving &#039;b&#039; to the beginning to also be trimmed. So, this is why it &quot;works&quot;
    whereas <code class="literal">trim(&#039;abc&#039;, &#039;b&#039;)</code> seemingly does not.
   </p>


function_name: utf8_decode
type: note
description:
<h1 class="title">Deprecation and alternatives</h1>
   <p class="para">
    This function is <em>deprecated</em> as of PHP 8.2.0,
    and will be removed in a future version. Existing uses should be checked
    and replaced with appropriate alternatives.
   </p>
   <p class="para">
    Similar functionality can be achieved with <span class="function">mb_convert_encoding</span>,
    which supports ISO-8859-1 and many other character encodings.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$utf8_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\xC3\xAB"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 'ë' (e with diaeresis) in UTF-8<br /></span><span style="color: #0000BB">$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\xCE\xBB"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 'λ' (Greek lower-case lambda) in UTF-8<br /></span><span style="color: #0000BB">$iso8859_7_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-7'</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_7_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\xE2\x82\xAC"</span><span style="color: #007700">; </span><span style="color: #FF8000">// '€' (Euro sign) in UTF-8 (not present in ISO-8859-1)<br /></span><span style="color: #0000BB">$windows_1252_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'Windows-1252'</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$windows_1252_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="para">The above example will output:</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
eb
eb
80
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    Other options which may be available depending on the extensions installed are
     <span class="methodname">UConverter::transcode</span> and <span class="function">iconv</span>.
   </p>
   <p class="para">
    The following all give the same result:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$utf8_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\x5A\x6F\xC3\xAB"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 'Zoë' in UTF-8<br /></span><span style="color: #0000BB">$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #0000BB">utf8_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #0000BB">iconv</span><span style="color: #007700">(</span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">, </span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #0000BB">UConverter</span><span style="color: #007700">::</span><span style="color: #0000BB">transcode</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF8'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="para">The above example will output:</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
5a6feb
5a6feb
5a6feb
5a6feb
</pre></div>
     </div>
    </div>
    Specifying <code class="literal">&#039;?&#039;</code> as the <code class="literal">&#039;to_subst&#039;</code> option
    to  <span class="methodname">UConverter::transcode</span> gives the same result as
    <span class="function">utf8_decode</span> for strings which are invalid or which can not
    be represented in ISO 8859-1.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$utf8_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\xE2\x82\xAC"</span><span style="color: #007700">; </span><span style="color: #FF8000">// € (Euro Sign) does not exist in ISO 8859-1<br /></span><span style="color: #0000BB">$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #0000BB">UConverter</span><span style="color: #007700">::</span><span style="color: #0000BB">transcode</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, [</span><span style="color: #DD0000">'to_subst' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'?'</span><span style="color: #007700">]<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="para">The above example will output:</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
sring(1) &quot;?&quot;
</pre></div>
     </div>
    </div>
   </p>


function_name: utf8_encode
type: note
description:
<h1 class="title">Deprecation and alternatives</h1>
   <p class="para">
    This function is <em>deprecated</em> as of PHP 8.2.0,
    and will be removed in a future version. Existing uses should be checked
    and replaced with appropriate alternatives.
   </p>
   <p class="para">
    Similar functionality can be achieved with <span class="function">mb_convert_encoding</span>,
    which supports ISO-8859-1 and many other character encodings.
    <div class="informalexample">
     <div class="example-contents">
 <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\xEB"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 'ë' (e with diaeresis) in ISO-8859-1<br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$iso8859_7_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\xEB"</span><span style="color: #007700">; </span><span style="color: #FF8000">// the same string in ISO-8859-7 represents 'λ' (Greek lower-case lambda)<br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_7_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-7'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$windows_1252_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\x80"</span><span style="color: #007700">; </span><span style="color: #FF8000">// '€' (Euro sign) in Windows-1252, but not in ISO-8859-1<br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$windows_1252_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Windows-1252'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="para">The above example will output:</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
c3ab
cebb
e282ac
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    Other options which may be available depending on the extensions installed are
     <span class="methodname">UConverter::transcode</span> and <span class="function">iconv</span>.
   </p>
   <p class="para">
    The following all give the same result:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$iso8859_1_string </span><span style="color: #007700">= </span><span style="color: #DD0000">"\x5A\x6F\xEB"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 'Zoë' in ISO-8859-1<br /><br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #0000BB">utf8_encode</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_convert_encoding</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #0000BB">UConverter</span><span style="color: #007700">::</span><span style="color: #0000BB">transcode</span><span style="color: #007700">(</span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF8'</span><span style="color: #007700">, </span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$utf8_string </span><span style="color: #007700">= </span><span style="color: #0000BB">iconv</span><span style="color: #007700">(</span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #0000BB">$iso8859_1_string</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$utf8_string</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="para">The above example will output:</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
5a6fc3ab
5a6fc3ab
5a6fc3ab
5a6fc3ab
</pre></div>
     </div>
    </div>
   </p>


function_name: array_change_key_case
type: note
description:
<p class="para">
    If an array has indices that will be the same once run through this
    function (e.g. &quot;<code class="literal">keY</code>&quot; and &quot;<code class="literal">kEY</code>&quot;), 
    the value that is later in the array will override other indices.
   </p>


function_name: array_diff_assoc
type: note
description:
<p class="simpara">
    This function only checks one dimension of an n-dimensional
    array. It is possible to check deeper dimensions by using, for example,
    <code class="literal">array_diff_assoc($array1[0], $array2[0]);</code>.
   </p>


function_name: array_diff_assoc
type: note
description:
<p class="simpara">
    Ensure arguments are passed in the correct order when comparing similar
    arrays with more keys. The new array should be the first in the list.
   </p>


function_name: array_diff_key
type: note
description:
<p class="para">
    This function only checks one dimension of a n-dimensional
    array. Of course you can check deeper dimensions by using
    <code class="literal">array_diff_key($array1[0], $array2[0]);</code>.
   </p>


function_name: array_diff_uassoc
type: note
description:
<p class="para">
    This function only checks one dimension of an n-dimensional
    array. It is possible to check deeper dimensions by using, for example,
    <code class="literal">array_diff_uassoc($array1[0], $array2[0], &quot;key_compare_func&quot;);</code>.
   </p>


function_name: array_diff_ukey
type: note
description:
<p class="para">
    This function only checks one dimension of a n-dimensional
    array. Of course you can check deeper dimensions by using
    <code class="literal">array_diff_ukey($array1[0], $array2[0], &#039;callback_func&#039;);</code>.
   </p>


function_name: array_diff
type: note
description:
<p class="para">
    This function only checks one dimension of a n-dimensional
    array. Of course you can check deeper dimensions by using
    <code class="literal">array_diff($array1[0], $array2[0]);</code>.
   </p>


function_name: array_filter
type: caution
description:
<p class="para">
    If the array is changed from the callback function (e.g. element
    added, deleted or unset) the behavior of this function is undefined.
   </p>


function_name: array_intersect
type: note
description:
<p class="simpara">
    Two elements are considered equal if and only if
    <code class="literal">(string) $elem1 === (string) $elem2</code>. In words:
    when the string representation is the same.
    
   </p>


function_name: array_is_list
type: note
description:
<p class="para">
    This function returns <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> on empty arrays.
   </p>


function_name: array_key_exists
type: note
description:
<p class="para">
     For backward compatibility reasons, <span class="function">array_key_exists</span>
     will also return <strong><code><a href="reserved.constants.html#constant.true">true</a></code></strong> if <code class="parameter">key</code> is a property
     defined within an <span class="type">object</span> given as
     <code class="parameter">array</code>. This behaviour is deprecated as of PHP 7.4.0,
     and removed as of PHP 8.0.0.
    </p>
    <p class="para">
     To check whether a property exists in an object,
     <span class="function">property_exists</span> should be used.
    </p>


function_name: array_key_first
type: tip
description:
<p class="simpara">
     There are several ways to provide this functionality for versions prior to PHP 7.3.0.
     It is possible to use <span class="function">array_keys</span>, but that may be rather
     inefficient. It is also possible to use <span class="function">reset</span> and <span class="function">key</span>,
     but that may change the internal array pointer. An efficient solution, which does
     not change the internal array pointer, written as polyfill:
    </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if (!</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'array_key_first'</span><span style="color: #007700">)) {<br />    function </span><span style="color: #0000BB">array_key_first</span><span style="color: #007700">(array </span><span style="color: #0000BB">$arr</span><span style="color: #007700">) {<br />        foreach(</span><span style="color: #0000BB">$arr </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$unused</span><span style="color: #007700">) {<br />            return </span><span style="color: #0000BB">$key</span><span style="color: #007700">;<br />        }<br />        return </span><span style="color: #0000BB">NULL</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>


function_name: array_udiff_uassoc
type: note
description:
<p class="simpara">
    Please note that this function only checks one dimension of a n-dimensional
    array. Of course you can check deeper dimensions by using, for example,
    <code class="literal">array_udiff_uassoc($array1[0], $array2[0], &quot;data_compare_func&quot;,
    &quot;key_compare_func&quot;);</code>.
   </p>


function_name: array_udiff
type: note
description:
<p class="simpara">
    Please note that this function only checks one dimension of a n-dimensional
    array. Of course you can check deeper dimensions by using
    <code class="literal">array_udiff($array1[0], $array2[0], &quot;data_compare_func&quot;);</code>.
   </p>


function_name: array_unique
type: note
description:
<p class="simpara">
    Note that <span class="function">array_unique</span> is not intended to
    work on multi dimensional arrays.
   </p>


function_name: array
type: note
description:
<p class="para">
     <span class="function">array</span> is a language construct used to
     represent literal arrays, and not a regular function.
    </p>


function_name: compact
type: note
description:
<h1 class="title">Gotcha</h1>
   <p class="para">
    Because <a href="language.variables.variable.html" class="link">variable
    variables</a> may not be used with PHP&#039;s
    <a href="language.variables.superglobals.html" class="link">Superglobal
    arrays</a> within functions, the Superglobal arrays may not be passed
    into <span class="function">compact</span>.
   </p>


function_name: current
type: note
description:
<p class="simpara">
    The results of calling <span class="function">current</span> on an empty array
    and on an array, whose internal pointer points beyond the end of the elements,
    are indistinguishable from a <span class="type">bool</span> <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> element. 
    To properly traverse an array which may contain <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> elements, see the 
    <a href="control-structures.foreach.html" class="link">foreach</a> control structure.
   </p>
   <p class="simpara">
    To still use <span class="function">current</span> and properly check if the value 
    is really an element of the array, the <span class="function">key</span> 
    of the <span class="function">current</span> element should be checked to be strictly 
    different from <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>.
   </p>


function_name: extract
type: warning
description:
<p class="para">
    Do not use <span class="function">extract</span> on untrusted data, like
    user input
    (i.e. <var class="varname">$_GET</var>, <var class="varname">$_FILES</var>, etc.).
    If you do, make sure you use one of the non-overwriting
    <code class="parameter">flags</code> values such as
    <strong><code><a href="array.constants.html#constant.extr-skip">EXTR_SKIP</a></code></strong> and be aware that you should extract
    in the same order that&#039;s defined in
    <a href="ini.core.html#ini.variables-order" class="link">variables_order</a> within the
    <a href="ini.html" class="link"><var class="filename">php.ini</var></a>.
   </p>


function_name: next
type: note
description:
<p class="simpara">
    The end of an array is indistinguishable from a <span class="type">bool</span> <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> element. 
    To properly traverse an array which may contain <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> elements, see the
    <a href="control-structures.foreach.html" class="link"><code class="literal">foreach</code></a> function.
   </p>
   <p class="simpara">
    To still use <span class="function">next</span> and properly check if the end of the array 
    has been reached, verify that the <span class="function">key</span> is <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>.
   </p>


function_name: prev
type: note
description:
<p class="simpara">
    The beginning of an array is indistinguishable from a
    <span class="type">bool</span> <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> element. To make the distinction, check that 
    the <span class="function">key</span> of the <span class="function">prev</span> element is not
    <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>.
   </p>


function_name: reset
type: note
description:
<p class="simpara">
    The return value for an empty array is indistinguishable from 
    the return value in case of an array which has a <span class="type">bool</span> <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> 
    first element. To properly check the value of the first element of an array
    which may contain <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> elements, first check the <span class="function">count</span>
    of the array, or check that <span class="function">key</span> is not
    <strong><code><a href="reserved.constants.html#constant.null">null</a></code></strong>, after calling <span class="function">reset</span>.
   </p>


function_name: shuffle
type: note
description:
<p class="simpara">This function
assigns new keys to the elements in <code class="parameter">array</code>.
It will remove any existing keys that may have been assigned, rather
than just reordering the keys.</p>


function_name: sort
type: note
description:
<p class="simpara">
    Like most PHP sorting functions, <span class="function">sort</span> uses an
    implementation of <a href="http://en.wikipedia.org/wiki/Quicksort" class="link external">&raquo;&nbsp;Quicksort</a>.
    The pivot is chosen in the middle of the partition resulting in an optimal
    time for already sorted arrays. This is however an implementation detail you
    shouldn&#039;t rely on.
   </p>


function_name: sort
type: warning
description:
<p class="simpara">
    Be careful when sorting arrays with mixed types values because
    <span class="function">sort</span> can produce unexpected results,
    if <code class="parameter">flags</code> is <strong><code><a href="array.constants.html#constant.sort-regular">SORT_REGULAR</a></code></strong>.
   </p>


function_name: class_alias
type: note
description:
<p class="para">
    Class names are case-insensitive in PHP, and this is reflected in this
    function. Aliases created by <span class="function">class_alias</span> are declared
    in lowercase. This means that for a class
    <code class="literal">MyClass</code>, the <code class="code">class_alias(&#039;MyClass&#039;, &#039;MyClassAlias&#039;)</code>
    call will declare a new class alias named <code class="literal">myclassalias</code>.
   </p>


function_name: is_subclass_of
type: note
description:
<p class="para">Using this function will use any registered
<a href="language.oop5.autoload.html" class="link">autoloaders</a> if the class is not already known.</p>


function_name: property_exists
type: note
description:
<p class="para">
    The <span class="function">property_exists</span> function cannot detect properties
    that are magically accessible using the <a href="language.oop5.overloading.html#language.oop5.overloading.members" class="link"><code class="literal">__get</code></a>
    magic method.
   </p>


function_name: filter_input_array
type: note
description:
<p class="para">
    There is no <code class="literal">REQUEST_TIME</code> key in
    <strong><code><a href="filter.constants.html#constant.input-server">INPUT_SERVER</a></code></strong> array because it is inserted into the
    <var class="varname">$_SERVER</var> later.
   </p>


function_name: call_user_func_array
type: note
description:
<p class="para">Callbacks registered
with functions such as <span class="function">call_user_func</span> and <span class="function">call_user_func_array</span> will not be
called if there is an uncaught exception thrown in a previous callback.</p>


function_name: func_get_arg
type: note
description:
<p class="para">As of PHP 8.0.0, the func_*() family of
functions is intended to be mostly transparent with regard to named arguments,
by treating the arguments as if they were all passed positionally,
and missing arguments are replaced with their defaults.
This function ignores the collection of unknown named variadic arguments.
Unknown named arguments which are collected can only be accessed through the variadic parameter.</p>


function_name: func_get_arg
type: note
description:
<p class="para">If the arguments are passed by reference,
any changes to the arguments will be reflected in the values returned by this function. As of PHP 7
the current values will also be returned if the arguments are passed by value.</p>


function_name: func_get_arg
type: note
description:
<p class="simpara">
    This function returns a copy of the passed arguments only, and does not
    account for default (non-passed) arguments.
   </p>


function_name: function_exists
type: note
description:
<p class="para">
    A function name may exist even if the function itself is unusable due to
    configuration or compiling options (with the <a href="ref.image.html" class="link">image</a> functions being an example).
   </p>


function_name: register_shutdown_function
type: note
description:
<p class="para">
    The working directory of the script can change inside the shutdown function
    under some web servers, e.g. Apache.
   </p>


function_name: register_shutdown_function
type: note
description:
<p class="para">
    Shutdown functions will not be executed if the process is killed with a SIGTERM
    or SIGKILL signal. While you cannot intercept a SIGKILL, you can use <span class="function">pcntl_signal</span>
    to install a handler for a SIGTERM which uses <span class="function">exit</span> to
    end cleanly.
   </p>


function_name: register_shutdown_function
type: note
description:
<p class="para">
    Shutdown functions run separately from the time tracked by
    <a href="info.configuration.html#ini.max-execution-time" class="link">max_execution_time</a>. That means
    even if a process is terminated for running too long, shutdown functions will still be
    called.  Additionally, if the <code class="literal">max_execution_time</code> runs out while
    a shutdown function is running it will not be terminated.
   </p>


function_name: ReflectionFunction.invoke
type: note
description:
<p class="para">
     <span class="methodname">ReflectionFunction::invoke</span> cannot be used when reference parameters are expected.
     <span class="methodname">ReflectionFunction::invokeArgs</span> has to be used instead (passing references in the argument list).
   </p>


function_name: ReflectionFunction.invokeArgs
type: note
description:
<p class="para">
    If the function has arguments that need
to be references, then they must be references in the passed argument list.
   </p>


function_name: ReflectionMethod.invoke
type: note
description:
<p class="para">
     <span class="methodname">ReflectionMethod::invoke</span> cannot be used when reference parameters are expected.
     <span class="methodname">ReflectionMethod::invokeArgs</span> has to be used instead (passing references in the argument list).
   </p>


function_name: empty
type: note
description:
<p class="para">
    When using <span class="function">empty</span> on inaccessible object properties,
    the <a href="language.oop5.overloading.html#object.isset" class="link">__isset()</a>
    overloading method will be called, if declared.
   </p>


function_name: intval
type: note
description:
<p class="para">
    The <code class="parameter">base</code> parameter has no effect unless the
    <code class="parameter">value</code> parameter is a string.
   </p>


function_name: is_resource
type: note
description:
<p class="para">
    <span class="function">is_resource</span> is not a strict type-checking method: it will return <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> if <code class="parameter">value</code> is a resource variable that has been closed.
   </p>


function_name: isset
type: warning
description:
<p class="para">
    <span class="function">isset</span> only works with variables as passing anything
    else will result in a parse error.  For checking if 
    <a href="language.constants.html" class="link">constants</a> are set use the 
    <span class="function">defined</span> function.
   </p>


function_name: isset
type: note
description:
<p class="para">
    When using <span class="function">isset</span> on inaccessible object properties,
    the <a href="language.oop5.overloading.html#object.isset" class="link">__isset()</a>
    overloading method will be called, if declared.
   </p>


function_name: print_r
type: note
description:
<p class="para">When the <code class="parameter">return</code> parameter
is used, this function uses internal output buffering prior to PHP 7.1.0, so it cannot be used inside an
<span class="function">ob_start</span> callback function.</p>


function_name: serialize
type: note
description:
<p class="para">
    Note that many built-in PHP objects cannot be serialized. However, those with 
    this ability either implement the <span class="interfacename">Serializable</span> interface or the 
    magic <a href="language.oop5.magic.html#object.serialize" class="link">__serialize()</a>/<a href="language.oop5.magic.html#object.unserialize" class="link">__unserialize()</a>
    or <a href="language.oop5.magic.html#object.sleep" class="link">__sleep()</a>/<a href="language.oop5.magic.html#object.wakeup" class="link">__wakeup()</a> methods. If an
    internal class does not fulfill any of those requirements, it cannot reliably be 
    serialized.
   </p>
   <p class="para">
    There are some historical exceptions to the above rule, where some internal objects 
    could be serialized without implementing the interface or exposing the methods.
   </p>


function_name: serialize
type: warning
description:
<p class="para">
    When <span class="function">serialize</span> serializes objects, the leading backslash is not included in the class name of namespaced classes for maximum compatibility.
   </p>


function_name: settype
type: note
description:
<p class="para">
    Maximum value for &quot;int&quot; is <strong><code><a href="reserved.constants.html#constant.php-int-max">PHP_INT_MAX</a></code></strong>.
   </p>


function_name: unserialize
type: warning
description:
<p class="para">
    <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> is returned both in the case of an error and if unserializing
    the serialized <strong><code><a href="reserved.constants.html#constant.false">false</a></code></strong> value. It is possible to catch this special case by
    comparing <code class="parameter">data</code> with
    <code class="literal">serialize(false)</code> or by catching the issued
    <strong><code><a href="errorfunc.constants.html#constant.e-notice">E_NOTICE</a></code></strong>.
   </p>


function_name: unset
type: note
description:
<p class="para">
    It is possible to unset object properties visible in the current context.
   </p>
   <p class="para">
     If declared,
     <a href="language.oop5.overloading.html#object.get" class="link">__get()</a>
     is called when accessing an unset property, and
     <a href="language.oop5.overloading.html#object.set" class="link">__set()</a>
     is called when setting an unset property.
   </p>


function_name: unset
type: note
description:
<p class="para">
    It is not possible to unset <code class="literal">$this</code> inside an object
    method.
   </p>


function_name: unset
type: note
description:
<p class="para">
    When using <span class="function">unset</span> on inaccessible object properties,
    the <a href="language.oop5.overloading.html#object.unset" class="link">__unset()</a>
    overloading method will be called, if declared.
   </p>


function_name: var_export
type: note
description:
<p class="para">
    Variables of type <span class="type">resource</span> couldn&#039;t be exported by this
    function.
   </p>


function_name: var_export
type: note
description:
<p class="para">
    <span class="function">var_export</span> does not handle circular references as
    it would be close to impossible to generate parsable PHP code for that.
    If you want to do something with the full representation of an array
    or object, use <span class="function">serialize</span>.
   </p>


function_name: var_export
type: warning
description:
<p class="para">
    Prior to PHP 8.2.0, when <span class="function">var_export</span> exports objects,
    the leading backslash is not included in the class name of namespaced classes for maximum compatibility.
   </p>


function_name: var_export
type: note
description:
<p class="para">
    To be able to evaluate the PHP generated by <span class="function">var_export</span>,
    all processed objects must implement the magic <a href="language.oop5.magic.html#object.set-state" class="link">__set_state</a> method. The only exception is
    <span class="classname">stdClass</span>, which is exported using an array cast to
    an object.
   </p>


function_name: OAuthProvider.generateToken
type: note
description:
<p class="para">
    When not enough random data is available to the system, this function will
    fill the remaining random bytes using the internal PHP <span class="function">rand</span>
    implementation.
   </p>


function_name: com_event_sink
type: caution
description:
<p class="para">
    Prior to PHP 8.0.0, calling <span class="function">exit</span> from any of the event
    handlers is not supported, and may cause PHP to hang. This can be worked around
    by throwing an exception from the event handler, catching the exception in
    the main code, and calling <span class="function">exit</span> from there.
   </p>


function_name: com_get_active_object
type: warning
description:
<p class="para">
    Using <span class="function">com_get_active_object</span> in a web server context
    is not always a smart idea.  Most COM/OLE applications are not designed
    to handle more than one client concurrently, even (or especially!)
    Microsoft Office.  You should read <a href="http://support.microsoft.com/kb/257757" class="link external">&raquo;&nbsp;Considerations for Server-Side
    Automation of Office</a> for more information on the general issues
    involved.
   </p>


function_name: variant_fix
type: warning
description:
<p class="simpara">
    This documentation is based on the MSDN documentation; it appears
    that this function is either the same as
    <span class="function">variant_int</span>, or that there is an error in the MSDN
    documentation.
   </p>


function_name: DOMDocument.createElement
type: note
description:
<p class="para">
    The <code class="parameter">value</code> will <em>not</em> be escaped.
    Use  <span class="methodname">DOMDocument::createTextNode</span> to create a
    text node with <em>escaping support</em>.
   </p>


function_name: xml_get_current_byte_index
type: warning
description:
<p class="para">
    This function returns byte index according to UTF-8 encoded text
    disregarding if input is in another encoding.
   </p>


function_name: XMLReader.readInnerXml
type: caution
description:
<p class="para">This function is only available when PHP is compiled against libxml 20620 or later.</p>


function_name: XMLWriter.openUri
type: note
description:
<p class="para">
    On Windows, files opened with this function are locked until the writer is
    released.
   </p>


