Forum Stats

  • 3,827,149 Users
  • 2,260,746 Discussions
  • 7,897,182 Comments

Discussions

PHP ORACLE Connection Problem

996585
996585 Member Posts: 4
edited Apr 8, 2013 12:14PM in PHP
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
--

Answers

  • Christopher Jones-Oracle
    Christopher Jones-Oracle Member Posts: 1,648 Employee
    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.
    Christopher Jones-Oracle
  • 996585
    996585 Member Posts: 4
    =======================================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) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
    }
    echo "</table>\n";
    ?>
    </body>
    </html>
    ==================================================================================
    ======================================*OS*========================================
    [[email protected] 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
    [[email protected] 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..
  • 996585
    996585 Member Posts: 4
    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.

    -----
  • Christopher Jones-Oracle
    Christopher Jones-Oracle Member Posts: 1,648 Employee
    edited Mar 14, 2013 2:05PM
    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.
  • 996585
    996585 Member Posts: 4
    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.
    ---
  • Christopher Jones-Oracle
    Christopher Jones-Oracle Member Posts: 1,648 Employee
    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.
This discussion has been closed.