Tuesday, January 8, 2019

Installing XAMPP on Windows for PHP and Oracle Database

Today's guest post comes from Tianfang Yang who's been working with the Oracle Database extensions for PHP.

This post shows how to install XAMPP on Windows to run PHP applications that connect to a remote Oracle Database.

XAMPP is an open source package that contains Apache, PHP and many PHP 'extensions'. One of these extension is PHP OCI8 which connects to Oracle Database.

To install XAMPP:

  • Download "XAMPP for Windows" and follow the installer wizard. I installed into my D: drive.
  • Start the Apache server via the XAMPP control panel.

  • Visit http://localhost/dashboard/phpinfo.php via your browser to see the architecture and thread safety mode of the installed PHP. Please note this is the architecture of the installed PHP and not the architecture of your machine. It’s possible to run a x86 PHP on an x64 machine.

  • [Optional] Oracle OCI8 is pre-installed in XAMPP but if you need a newer version you can download an updated OCI8 PECL package from pecl.php.net. Pick an OCI8 release and select the DLL according to the architecture and thread safety mode. For example, if PHP is x86 and thread safety enabled, download "7.2 Thread Safe (TS) x86". Then replace "D:\xampp\php\ext\php_oci8_12c.dll" with the new "php_oci8_12c.dll" from the OCI8 PECL package.

  • Edit "D:\xampp\php\php.ini" and uncomment the line "extension=oci8_12c". Make sure "extension_dir" is set to the directory containing the PHP extension DLLs. For example,

extension=oci8_12c

extension_dir="D:\xampp\php\ext"


  • Download the Oracle Instant Client Basic package from OTN.

Select the correct architecture to align with PHP's. For Windows x86 download "instantclient-basic-nt-12.2.0.1.0.zip" from the Windows 32-bit page.

Click proper download link for your OS, please note, since your xampp installed 32bit php, so you have download 32bit release, otherwise, the oci8.dll will not working properly.. You will download a zip file, which need to unzip to a certain directory, which indicated by XAMPP phpinfo. Like below, you need unzip the instant client into path=c:\php-sdk\oracle\x86\instantclient_12_1



  • Extract the file in a directory such as "D:\Oracle". A subdirectory "D:\Oracle\instantclient_12_2" will be created.

Add this subdirectory to the PATH environment variable. You can update PATH in Control Panel -> System -> Advanced System Settings -> Advanced -> Environment Variables -> System Variables -> PATH. In my example I set it to "D:\Oracle\instantclient_12_2".


  • Restart the Apache server and check the phpinfo.php page again. It shows the OCI8 extension is loaded successfully.


If you also run PHP from a terminal window, make sure to close and reopen the terminal to get the updated PATH value.


  • To run your first OCI8 application, create a new file in the XAMPP document root "D:\xampp\htdocs\test.php". It should contain:
  • <?php
     
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
     
    $username = "hr";                  // Use your username
    $password = "welcome";             // and your password
    $database = "localhost/orclpdb";   // and the connect string to connect to your database
     
    $query = "select * from dual";
     
    $c = oci_connect($username, $password, $database);
    if (!$c) {
        $m = oci_error();
        trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
    }
     
    $s = oci_parse($c, $query);
    if (!$s) {
        $m = oci_error($c);
        trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
    }
    $r = oci_execute($s);
    if (!$r) {
        $m = oci_error($s);
        trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
    }
     
    echo "<table border='1'>\n";
    $ncols = oci_num_fields($s);
    echo "<tr>\n";
    for ($i = 1; $i <= $ncols; ++$i) {
        $colname = oci_field_name($s, $i);
        echo "  <th><b>".htmlspecialchars($colname,ENT_QUOTES|ENT_SUBSTITUTE)."</b></th>\n";
    }
    echo "</tr>\n";
     
    while (($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
        echo "<tr>\n";
        foreach ($row as $item) {
            echo "<td>";
            echo $item!==null?htmlspecialchars($item, ENT_QUOTES|ENT_SUBSTITUTE):"&nbsp;";
            echo "</td>\n";
        }
        echo "</tr>\n";
    }
    echo "</table>\n";
     
    ?>
    
You need to edit this file and set your database username, password and connect string. If you are using Oracle Database XE, then the connect string should be "localhost/XE".

The SQL query can also be changed. Currently it queries the special DUAL table, which every user has.
  • Load the test program in a browser using http://localhost/test.php. The output will be the single value "X" in the column called "DUMMY".


You can read more about PHP OCI8 in the PHP manual, and in the free Underground PHP and Oracle Manual from Oracle.

Enjoy your coding with OCI8!

Source: Installing XAMPP on Windows for PHP and Oracle Database

2 Comments: