This discussion is archived
6 Replies Latest reply: Apr 8, 2013 9:14 AM by cj RSS

PHP ORACLE Connection Problem

996585 Newbie
Currently Being Moderated
Hi,

PHP, OCI8 installed on the same machine (where oracle database 10.2.0.1.0 has been installed).

i am able to run test.php (oracle database connection with php and getting data) by user oracle and root on command line.

but with a different user say (xsdu) not able to run by command prompt although exporting all environment variable like ORACLE_HOME and LD_LIBRARY_PATH etc..

this i am testing to run the code by browser which is not working.

Please help..
Thanks
--
  • 1. Re: PHP ORACLE Connection Problem
    cj Employee ACE
    Currently Being Moderated
    Your script, the OS, and the edition of Oracle would be useful information to share.

    Check "Commonly Seen Connection and Environment Errors" on page 107 of http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html
    There are various things that could be the cause e.g. perhaps the section "Check Apache Has Oracle File Access" is relevant.
  • 2. Re: PHP ORACLE Connection Problem
    996585 Newbie
    Currently Being Moderated
    =======================================Script=========================================
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    </head>

    <body>
    <?php
    echo "Oracle Connect program";
    //define('DB_SERVER', '128.233.1.24/comdb');
    define('DB_SERVER', '10.141.40.42:1521/DF4BD');
    define('DB_USERNAME', 'ekocon');
    define('DB_PASSWORD', 'eko_abc');
    define('DB_DATABASE', 'BF4DB1');
    $conn= oci_connect(DB_USERNAME, DB_PASSWORD, DB_SERVER)
    or die(oci_error());


    if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }


    $query = "select test1, test2 from test";
    //$query = "select * from eka_markers";
    $stid = oci_parse($conn, $query);
    oci_execute($stid);


    echo "<table border='1'>\n";
    while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
    echo "<tr>\n";
    foreach ($row as $item) {
    echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
    }
    echo "</tr>\n";
    }
    echo "</table>\n";
    ?>
    </body>
    </html>
    ==================================================================================
    ======================================*OS*========================================
    [root@b4pcc1 html]# uname -a
    Linux b4pcc1.redhat.com 2.6.18-194.el5xen #1 SMP Tue Mar 16 22:01:26 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
    [root@b4pcc1 html]#
    Red Hat Enterprise Linux Server release 5.5
    ======================================ORACLE EDITION=================================

    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

    ===================================================================================
    I think you have pointed the right problem - "Check Apache Has Oracle File Access". But how to fix it..

    i have given permission to tnsnames.ora as
    -rwxrwxr-x 1 oracle oinstall 550 Mar 5 11:38 tnsnames.ora

    ...
    Please help..
  • 3. Re: PHP ORACLE Connection Problem
    996585 Newbie
    Currently Being Moderated
    The problem was solved. You have rightly pointed that this has some permission issue.

    The clue was on page 108 of the book you referred - "If you built PHP withan ORACLE_HOME, then check the Oracle home directory is
    readable by the Apache process owner"

    Then i thought who is process owner and this was apache user.

    then i dod su - apache and it was telling "The account is currently not available".

    It required a shell creation for apache user.
    chsh -s /bin/bash apache.

    Then by changing directory step by step to tnsnames.ora.

    i found that in ORACLE_HOME /product has permission as drwxrwx---.
    so i made it drwxrwxr-x and it works.

    Thank you so much.

    -----
  • 4. Re: PHP ORACLE Connection Problem
    cj Employee ACE
    Currently Being Moderated
    There was a changePerm.sh script in a later 10.2 patchset to help set permissions. Oracle 10g Express Edition and Oracle 11g didn't have the same restrictive settings, so generally just the home directory needed extra access granted in these other releases.

    If you're uncomfortable (for whatever reasons) with granting the extra access, you could use PHP with the free Oracle Instant Client libraries.
  • 5. Re: PHP ORACLE Connection Problem
    996585 Newbie
    Currently Being Moderated
    On this same machine i installed perl-DBI and Oracle-DBD.

    i can run a perl script (which connects to a ORACLE database) with command line and getting the output but when i run it through web it gives the following error.

    --------------------------
    [Mon Apr 08 11:10:49 2013] [error] [client 10.141.6.213] install_driver(Oracle) failed: Can't load '/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.10.1: cannot open shared object file: No such file or directory at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230.
    ---------------------------

    i can run php script through web which fetch data from a oracle database on this machine.

    ---
    Please help.
    ---
  • 6. Re: PHP ORACLE Connection Problem
    cj Employee ACE
    Currently Being Moderated
    You probably need to set the various Oracle environment variables so the webserver has access to them.
    There are some recent threads in this forum that might help you find how & where to set them for
    your setup.

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points