PHP & Oracle - oci_connect() ORA-12705: Cannot access NLS data files

18,402

Ok. This is my personal nightmare. I seriously wake up in the middle of the night... or I don't, but I have spent days on this problem.

So, this is what worked for me:

  1. Do you have Oracle Instant Client? If not get it.
  2. Do you have the Oracle SDK? If not get it.
  3. Unzip instantclient.
  4. Unzip the SDK into a sub-directory
  5. Add ORACLE_HOME as an exported command line variable ($ORACLE_HOME in *nix, %ORACLE_HOME% in win). Have it point to the fully-qualified path to the above instantclient folder.
  6. Create ORACLE_BIN and have it point to the SDK.
  7. Add ORACLE_HOME to your PATH.
  8. Restart Apache...

So... that is what I generally do... And generally it works... Mostly...

I think that realistically all I can say is Good Luck and Godspeed.

Share:
18,402

Related videos on Youtube

Nick
Author by

Nick

Updated on June 01, 2022

Comments

  • Nick
    Nick almost 2 years

    We've been using Oracle on our server for years, but someone from IT removed it yesterday without clear warning and it's really thrown our systems!

    I've acted on the advice from cwallenpoole (thank you!) and have made good progress, and PHP is now at least including the oracle functions (ie oci_connect) but I am now experiencing another error message:

    "Warning: oci_connect() [function.oci-connect]: ORA-12705: Cannot access NLS data files or invalid environment"

    We have ensured the tnsnames.ora etc files are in the correct place, but still having no joy :(

    thank you

    • Pekka
      Pekka almost 13 years
      Have you restarted the web server? Are you 100% sure you're editing the right php.ini as mentioned when calling phpinfo()?
    • Pekka
      Pekka almost 13 years
      Does phpinfo() make any mention of OCI?
    • Pekka
      Pekka almost 13 years
      Hmm, then the extension isn't getting loaded. Which should mean that it's not reading the extension=php_oci8_dll line, otherwise it would crash on restart. But you say you've checked the paths, and it's the correct php.ini... Weird!
    • Pekka
      Pekka almost 13 years
      from my experience, it either manages to successfully read the extension file, or it crashes. There is no grey area there. What you could try to do is deliberately change the file name to something incorrect. If that goes through without complaint, it's not reading the INI file for whatever reason
    • dqhendricks
      dqhendricks almost 13 years
  • Nick
    Nick almost 13 years
    Huge thanks for this! It's now loading the PHP files but says: Warning: oci_connect() [function.oci-connect]: ORA-12705: Cannot access NLS data files or invalid environment
  • cwallenpoole
    cwallenpoole almost 13 years
    :::sigh::: Well, at that point, I just downloaded everything in at the Oracle Instant Client SDK site and put it all into one sub-directory. If that doesn't work, let me know and tomorrow I'll look into the TNSADMIN stuff.
  • Nick
    Nick almost 13 years
    Thank you, but which is the Instant Client SDK download? oracle.com/technetwork/database/features/instant-client/… In the end I used the JRE from here, but it's probably wrong: oracle.com/technetwork/java/javase/downloads/index.html Thanks again!
  • cwallenpoole
    cwallenpoole almost 13 years
    Instantclient is here: oracle.com/technetwork/database/features/instant-client/… You'll need to figure out which one on your own though -- it's hardware architecture specific.
  • Nick
    Nick almost 13 years
    Thank you! Lots of faffing around and ifnally got it working - lots of playing with the registry, the environmental variables paths, the tns_admin, oracle_home and all manner of other things, wooooo! thanks again :)