<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.errorfunc.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'uk',
  ),
  'this' => 
  array (
    0 => 'function.set-error-handler.php',
    1 => 'set_error_handler',
    2 => 'Sets a user-defined error handler function',
  ),
  'up' => 
  array (
    0 => 'ref.errorfunc.php',
    1 => 'Функції Обробки Помилок',
  ),
  'prev' => 
  array (
    0 => 'function.restore-exception-handler.php',
    1 => 'restore_exception_handler',
  ),
  'next' => 
  array (
    0 => 'function.set-exception-handler.php',
    1 => 'set_exception_handler',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    'path' => 'reference/errorfunc/functions/set-error-handler.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.set-error-handler" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">set_error_handler</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.0.1, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">set_error_handler</span> &mdash; <span class="dc-title">Sets a user-defined error handler function</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.set-error-handler-description">
  <h3 class="title">Опис</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>set_error_handler</strong></span>(<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span> <code class="parameter">$callback</code></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$error_levels</code><span class="initializer"> = <strong><code><a href="errorfunc.constants.php#constant.e-all">E_ALL</a></code></strong></span></span>): <span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span></div>

  <p class="para rdfs-comment">
   Sets a user function (<code class="parameter">callback</code>) to handle
   errors in a script.
  </p>
  <p class="para">
   This function can be used to define custom error handlers during runtime,
   for example in applications which need to do file/data cleanup when a critical
   error happens, or when triggering an error in response to certain conditions
   (using <span class="function"><a href="function.trigger-error.php" class="function">trigger_error()</a></span>).
  </p>
  <p class="para">
   It is important to remember that the standard PHP error handler is completely
   bypassed for the error types specified by <code class="parameter">error_levels</code> 
   unless the callback function returns <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   <span class="function"><a href="function.error-reporting.php" class="function">error_reporting()</a></span> settings will have no effect and the
   error handler will be called regardless - however, it&#039;s still possible to
   read the current value of
   <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a> and act
   appropriately.
  </p>
  <p class="para">
   Also note that it is the handler&#039;s responsibility to stop the
   script&#039;s execution if necessary by calling <span class="function"><a href="function.exit.php" class="function">exit()</a></span>. If the error-handler
   function returns, script execution will continue with the next statement
   after the one that caused an error.
  </p>
  <p class="para">
   The following error types cannot be handled with a user defined
   function: <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-parse">E_PARSE</a></code></strong>,
   <strong><code><a href="errorfunc.constants.php#constant.e-core-error">E_CORE_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-core-warning">E_CORE_WARNING</a></code></strong>,
   <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong>,
   <strong><code><a href="errorfunc.constants.php#constant.e-compile-warning">E_COMPILE_WARNING</a></code></strong> independent of where they were raised, and
   most of <strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong> raised in the file where
   <span class="function"><strong>set_error_handler()</strong></span> is called.
  </p>
  <p class="para">
   If errors occur before the script is executed (e.g. on file uploads) the 
   custom error handler cannot be called since it is not registered at that 
   time.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.set-error-handler-parameters">
  <h3 class="title">Параметри</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">callback</code></dt>
     <dd>
      <p class="para">
       If <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> is passed, the handler is reset to its default state.
       Otherwise, the handler is a callback with the following signature:
      </p>
      <p class="para">
       <div class="methodsynopsis dc-description">
        <span class="methodname"><span class="replaceable">handler</span></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$errno</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$errstr</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$errfile</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$errline</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$errcontext</code><span class="initializer"> = ?</span></span><br>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

       <dl>
        
         <dt><code class="parameter">errno</code></dt>
         <dd>
          <span class="simpara">
           The first parameter, <code class="parameter">errno</code>, will be passed the
           level of the error raised, as an integer.
          </span>
         </dd>
        
        
         <dt><code class="parameter">errstr</code></dt>
         <dd>
          <span class="simpara">
           The second parameter, <code class="parameter">errstr</code>, will be passed the
           error message, as a string.
          </span>
         </dd>
        
        
         <dt><code class="parameter">errfile</code></dt>
         <dd>
          <span class="simpara">
           If the callback accepts a third parameter, <code class="parameter">errfile</code>,
           it will be passed the filename that the error was raised in, as a string.
          </span>
         </dd>
        
        
         <dt><code class="parameter">errline</code></dt>
         <dd>
          <span class="simpara">
           If the callback accepts a fourth parameter, <code class="parameter">errline</code>,
           it will be passed the line number where the error was raised, as an integer.
          </span>
         </dd>
        
        
         <dt><code class="parameter">errcontext</code></dt>
         <dd>
          <span class="simpara">
           If the callback accepts a fifth parameter, <code class="parameter">errcontext</code>,
           it will be passed an array that points to the active symbol table at the
           point the error occurred. In other words, <code class="parameter">errcontext</code>
           will contain an array of every variable that existed in the scope the
           error was triggered in.
           User error handlers must not modify the error context.
          </span>
          <div class="warning"><strong class="warning">Увага</strong>
           <p class="simpara">
            This parameter has been <em>DEPRECATED</em> as of PHP 7.2.0,
            and <em>REMOVED</em> as of PHP 8.0.0. If the function defines
            this parameter without a default, an error of &quot;too few arguments&quot; will be
            raised when it is called.
           </p>
          </div>
         </dd>
        
       </dl>
      </p>
      <p class="para">
       If the function returns <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> then the normal error handler continues.
      </p>
     </dd>
    
    
     <dt><code class="parameter">error_levels</code></dt>
     <dd>
      <p class="para">
       Can be used to mask the triggering of the
       <code class="parameter">callback</code> function just like the <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a> ini setting 
       controls which errors are shown. Without this mask set the
       <code class="parameter">callback</code> will be called for every error
       regardless to the setting of the <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a> setting.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.set-error-handler-returnvalues">
  <h3 class="title">Значення, що повертаються</h3>
  <p class="para">
   Returns the previously defined error handler (if any) as a <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>.
   If the built-in error handler is used <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> is returned.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.set-error-handler-changelog">
  <h3 class="title">Журнал змін</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Версія</th>
       <th>Опис</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>8.0.0</td>
       <td>
        <code class="parameter">errcontext</code> was removed, and will no longer be passed to user callbacks.
       </td>
      </tr>

      <tr>
       <td>7.2.0</td>
       <td>
        <code class="parameter">errcontext</code> became deprecated. Usage of this parameter now emits an <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong> notice.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.set-error-handler-examples">
  <h3 class="title">Приклади</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Приклад #1 Error handling with <span class="function"><strong>set_error_handler()</strong></span> and <span class="function"><a href="function.trigger-error.php" class="function">trigger_error()</a></span></strong></p>
    <div class="example-contents"><p>
     The example below shows the handling of internal exceptions by
     triggering errors and handling them with a user defined function:
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// error handler function<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">myErrorHandler</span><span style="color: #007700">(</span><span style="color: #0000BB">$errno</span><span style="color: #007700">, </span><span style="color: #0000BB">$errstr</span><span style="color: #007700">, </span><span style="color: #0000BB">$errfile</span><span style="color: #007700">, </span><span style="color: #0000BB">$errline</span><span style="color: #007700">)<br />{<br />    if (!(</span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">() &amp; </span><span style="color: #0000BB">$errno</span><span style="color: #007700">)) {<br />        </span><span style="color: #FF8000">// This error code is not included in error_reporting, so let it fall<br />        // through to the standard PHP error handler<br />        </span><span style="color: #007700">return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />    }<br /><br />    </span><span style="color: #FF8000">// $errstr may need to be escaped:<br />    </span><span style="color: #0000BB">$errstr </span><span style="color: #007700">= </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$errstr</span><span style="color: #007700">);<br /><br />    switch (</span><span style="color: #0000BB">$errno</span><span style="color: #007700">) {<br />    case </span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">:<br />        echo </span><span style="color: #DD0000">"&lt;b&gt;My ERROR&lt;/b&gt; [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />        echo </span><span style="color: #DD0000">"  Fatal error on line </span><span style="color: #0000BB">$errline</span><span style="color: #DD0000"> in file </span><span style="color: #0000BB">$errfile</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br />        echo </span><span style="color: #DD0000">", PHP " </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_VERSION </span><span style="color: #007700">. </span><span style="color: #DD0000">" (" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_OS </span><span style="color: #007700">. </span><span style="color: #DD0000">")&lt;br /&gt;\n"</span><span style="color: #007700">;<br />        echo </span><span style="color: #DD0000">"Aborting...&lt;br /&gt;\n"</span><span style="color: #007700">;<br />        exit(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /><br />    case </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">:<br />        echo </span><span style="color: #DD0000">"&lt;b&gt;My WARNING&lt;/b&gt; [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />        break;<br /><br />    case </span><span style="color: #0000BB">E_USER_NOTICE</span><span style="color: #007700">:<br />        echo </span><span style="color: #DD0000">"&lt;b&gt;My NOTICE&lt;/b&gt; [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />        break;<br /><br />    default:<br />        echo </span><span style="color: #DD0000">"Unknown error type: [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />        break;<br />    }<br /><br />    </span><span style="color: #FF8000">/* Don't execute PHP internal error handler */<br />    </span><span style="color: #007700">return </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// function to test the error handling<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect</span><span style="color: #007700">, </span><span style="color: #0000BB">$scale</span><span style="color: #007700">)<br />{<br />    if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$scale</span><span style="color: #007700">) || </span><span style="color: #0000BB">$scale </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"log(x) for x &lt;= 0 is undefined, you used: scale = </span><span style="color: #0000BB">$scale</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">);<br />    }<br /><br />    if (!</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"Incorrect input vector, array of values expected"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">);<br />        return </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />    }<br /><br />    </span><span style="color: #0000BB">$temp </span><span style="color: #007700">= array();<br />    foreach(</span><span style="color: #0000BB">$vect </span><span style="color: #007700">as </span><span style="color: #0000BB">$pos </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />        if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">)) {<br />            </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"Value at position </span><span style="color: #0000BB">$pos</span><span style="color: #DD0000"> is not a number, using 0 (zero)"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_NOTICE</span><span style="color: #007700">);<br />            </span><span style="color: #0000BB">$value </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />        }<br />        </span><span style="color: #0000BB">$temp</span><span style="color: #007700">[</span><span style="color: #0000BB">$pos</span><span style="color: #007700">] = </span><span style="color: #0000BB">log</span><span style="color: #007700">(</span><span style="color: #0000BB">$scale</span><span style="color: #007700">) * </span><span style="color: #0000BB">$value</span><span style="color: #007700">;<br />    }<br /><br />    return </span><span style="color: #0000BB">$temp</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// set to the user defined error handler<br /></span><span style="color: #0000BB">$old_error_handler </span><span style="color: #007700">= </span><span style="color: #0000BB">set_error_handler</span><span style="color: #007700">(</span><span style="color: #DD0000">"myErrorHandler"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// trigger some errors, first define a mixed array with a non-numeric item<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"vector a\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= array(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">, </span><span style="color: #0000BB">5.5</span><span style="color: #007700">, </span><span style="color: #0000BB">43.3</span><span style="color: #007700">, </span><span style="color: #0000BB">21.11</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// now generate second array<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"----\nvector b - a notice (b = log(PI) * a)\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">/* Value at position $pos is not a number, using 0 (zero) */<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">M_PI</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// this is trouble, we pass a string instead of an array<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"----\nvector c - a warning\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">/* Incorrect input vector, array of values expected */<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #DD0000">"not array"</span><span style="color: #007700">, </span><span style="color: #0000BB">2.3</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">); </span><span style="color: #FF8000">// NULL<br /><br />// this is a critical error, log of zero or negative number is undefined<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"----\nvector d - fatal error\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">/* log(x) for x &lt;= 0 is undefined, you used: scale = $scale" */<br /></span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, -</span><span style="color: #0000BB">2.5</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">); </span><span style="color: #FF8000">// Never reached<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад виведе щось
схоже на:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">vector a
Array
(
    [0] =&gt; 2
    [1] =&gt; 3
    [2] =&gt; foo
    [3] =&gt; 5.5
    [4] =&gt; 43.3
    [5] =&gt; 21.11
)
----
vector b - a notice (b = log(PI) * a)
&lt;b&gt;My NOTICE&lt;/b&gt; [1024] Value at position 2 is not a number, using 0 (zero)&lt;br /&gt;
Array
(
    [0] =&gt; 2.2894597716988
    [1] =&gt; 3.4341896575482
    [2] =&gt; 0
    [3] =&gt; 6.2960143721717
    [4] =&gt; 49.566804057279
    [5] =&gt; 24.165247890281
)
----
vector c - a warning
&lt;b&gt;My WARNING&lt;/b&gt; [512] Incorrect input vector, array of values expected&lt;br /&gt;
NULL
----
vector d - fatal error
&lt;b&gt;My ERROR&lt;/b&gt; [256] log(x) for x &lt;= 0 is undefined, you used: scale = -2.5&lt;br /&gt;
  Fatal error on line 35 in file trigger_error.php, PHP 5.2.1 (FreeBSD)&lt;br /&gt;
Aborting...&lt;br /&gt;</pre>
</div>
    </div>
   </div>
  </p>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.set-error-handler-seealso">
  <h3 class="title">Прогляньте також</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="classname"><a href="class.errorexception.php" class="classname">ErrorException</a></span></li>
    <li><span class="function"><a href="function.error-reporting.php" class="function" rel="rdfs-seeAlso">error_reporting()</a> - Sets which PHP errors are reported</span></li>
    <li><span class="function"><a href="function.restore-error-handler.php" class="function" rel="rdfs-seeAlso">restore_error_handler()</a> - Restores the previous error handler function</span></li>
    <li><span class="function"><a href="function.get-error-handler.php" class="function" rel="rdfs-seeAlso">get_error_handler()</a> - Gets the user-defined error handler function</span></li>
    <li><span class="function"><a href="function.trigger-error.php" class="function" rel="rdfs-seeAlso">trigger_error()</a> - Generates a user-level error/warning/notice message</span></li>
    <li><a href="errorfunc.constants.php" class="link">error level constants</a></li>
   </ul>
  </p>
 </div>

</div><?php manual_footer($setup); ?>