簡體   English   中英

調用未定義函數 oci_connect()

[英]Call to undefined function oci_connect()

我收到了這個錯誤。

Fatal error: Call to undefined function oci_connect()
$conn = oci_connect('localhost', 'username', 'password') or die(could not connect:'.oci_error)
                

那是代碼。

這是我得到的錯誤。

Fatal error: Call to undefined function oci_connect() in C:\xampp\htdocs\org\org\php\myphp.php on line 51

我檢查了 ext 文件夾中的 PHP DLL 文件。

我只花了整整三天的時間與這個問題作斗爭。

我在 Windows 7 中使用我的 ORACLE 連接,沒有問題。 上周我剛買了一台裝有 Windows 8 的新電腦。安裝 XAMPP 1.8.2。 此服務器上的每個應用程序 PHP/MySQL 都運行良好。 當我嘗試將我的 php 應用程序連接到 Oracle DB 時出現了問題。

調用未定義的函數 oci_pconnect()

當我通過更改啟動/停止 Apache 時,“PHP 啟動”上出現一個奇怪的“警告”,它會以“PHP 警告:PHP 啟動:在第 0 行中未知”進入日志

我做了一切(未注釋的 php_oci8.dll 和 php_oci8_11g.dll,將 oci.dll 復制到 /ext 目錄,靠近 /Apache 並且沒有任何效果。下載 Instant Client 的每個版本,什么也沒有。

上帝幫助了我。 當我下載 ORACLE Instant Client 32 位時,一切正常。 phpinfo() 顯示 oci8 信息,我的應用程序運行良好。

因此,請不要介意您的 WINDOWS 版本是 x64。 該鏈接位於 XAMPP 和 ORACLE Instant Client 之間。

簡單的步驟

您需要在 php.ini 中啟用以下擴展名

;extension=php_oci8.dll
;extension=php_oci8_11.g.dll

通過刪除“;” 以便結果如下:

extension=php_oci8.dll
extension=php_oci8_11.g.dll

下載 Oracle Instant Client:- 最好是 32 位。 32 位也適用於 64 位。 你可以谷歌:下載 oracle 即時客戶端 windows 32 位。 使用客戶端的版本 11,因為extension=php_oci8_11.g.dll不適用於 12。將包解壓縮到一個位置,例如C:\\Oracle\\instantclient_11_2

最后用結束位置修改系統的PATH環境變量,在系統變量而不是用戶變量下

然后您需要重新啟動系統以使PATH更改完全傳播。

如果您只是在沒有重新啟動機器的情況下重新啟動 XAMPP/WAMP,PHP 的php_oci8_11g.dll擴展將不會加載(也找不到)客戶端的 DLL 文件(即 OCL.dll)。

需要確保的事情

  1. 每當您連接 Oracle 數據庫時,請嘗試使用 32 位 oracle 客戶端庫,因為 XAMP PHP 是用 32 位編譯的(盡管您有 64 位 Windows 機器)
  2. 從此處下載 Oracle 客戶端

  3. 將其粘貼到 C:\\instantclient_12_1

  4. 然后在系統環境變量中設置路徑到上面
  5. 然后轉到 C:\\xampp\\php\\php.ini 並取消注釋extension=php_oci8_12c.dll
  6. 然后重新啟動 XAMP,它應該可以正常工作而不會出現任何問題。

您需要在 php.ini 文件中啟用該擴展。 請參閱Oracle 安裝

extension=oci8.so

我安裝了 WAMPServer 2.5(32 位),也遇到了 oci_connect 錯誤。 我還安裝了 Oracle 11g 客戶端(32 位)。 我在其他帖子中讀到的常見修復是更改 C:\\wamp\\bin\\php\\php5.5.12 目錄中的 php.ini 文件,但這對我來說從來沒有用。 可能是我理解錯了,但是我發現如果你修改C:\\wamp\\bin\\apache\\apache2.4.9目錄下的php.ini文件,你會得到你想要的結果。 我在 apache php.ini 文件中唯一更改的是刪除extension=php_oci8_11g.dll的分號以啟用它。 然后我重新啟動了所有服務,它現在可以工作了! 我希望這對你有用。

  1. 檢查您的 php –version 就像 PHP 5.6.32 (cli)(構建時間:2017 年 10 月 25 日 16:02:15)。
  2. 使用 OCI8 擴展訪問 Oracle 數據庫。 所以從1 https://pecl.php.net/package/oci8/2.0.8/windows下載 php_oci8.dll 。 (5.6 Thread Safe (TS) x86 ) php_oci8.dll 必須和你的 php 版本相同。然后解壓,你會發現 1.php_oci8.dll 2.php_oci8_11g.dll (根據你的oralce 版本) 這兩個文件粘貼進入你的
    (xampp\\php\\ext) 文件夾。

  3. 打開你的 php.ini 文件並添加這些 extension=php_oci8.dll extension=php_oci8_11g.dll

  4. 使用這些命令檢查您的 oracle 版本和服務名稱

    1. 打開你的cmd
    2. sqlplus / 作為 sysdba
    3. 從 v$version 中選擇 *; Oracle 數據庫 11g 企業版 11.2.0.1.0 版 - 生產,我們的 oracle 版本是 11g,因此我們可以使用從https://www.oracle.com/technetwork/topics/winsoft-085727下載的 instantclient_11_1(即時客戶端 32 位) .html
  5. 顯示參數 service_name; service_name 是 orcl(你應該記住這個服務名稱)

  6. 下載后 Instantclient_11_1 解壓縮它,然后粘貼到您的本地磁盤中。 並復制路徑 C:\\instantclient_11_1 然后將此路徑設置為您的用戶變量和系統變量。 請注意,我的代碼在沒有設置路徑變量的情況下工作。

  7. 打開你的 cmd 並輸入 SQL,按照這些命令創建你的架構

    1. sqlplus / 作為 sysdba
    2. 創建由 pass123 標識的用戶 dbname;
    3. 授予連接,資源到 dbname;

    4. 創建表 user_info 並將數據插入表中並提交。 注意:您必須提交數據,否則不會插入數據。

    5. 然后這個腳本在你的 htdocs 中運行

 <html> <head><title>Oracle demo</title></head> <body> <?php // Create connection to Oracle $conn = oci_connect("dbname", "pass123", "//localhost/orcl"); // orcl is your service_name $query = 'select * from user_info'; $stid = oci_parse($conn, $query); $r = oci_execute($stid); // Fetch each row in an associative array print '<table border="1">'; while ($row = oci_fetch_array($stid, OCI_RETURN_NULLS+OCI_ASSOC)) { print '<tr>'; foreach ($row as $item) { print '<td>'.($item !== null ? htmlentities($item, ENT_QUOTES) : '&nbsp').'</td>'; } print '</tr>'; } print '</table>';

好吧,伙計們。

首先,使用

<?php 
phpinfo();
?> 

並確定您的 PHP 版本(位於最頂部,例如 7.0.xxx)以及您的 PHP 版本架構:x64 或 x86 以及線程安全或非線程安全(位於第一個表中的“線程安全”。) “禁用”顯然意味着“不是線程安全的”。

您需要的以下三個軟件絕對至關重要:

  1. 對於相同的 PHP 主要版本(7.0.xxx 為 7.0)
  2. 與您訪問的版本相同的 Oracle 版本(11g、12g 等)
  3. 相同的非線程安全/線程安全版本的 PHP
  4. 都是為了同一個架構。

如果以下任何一項適用於不同的體系結構、非線程安全/線程安全版本、PHP 主要版本號或數據庫版本,您將收到錯誤消息:

 1. PHP for Windows
 2. OCI8 PECL Drivers for PHP (https://pecl.php.net/package/oci8)
 3. Oracle Instant Client

請記住:如果您要連接到 11g Oracle 實例,則需要一個 11g 驅動程序。

其次,安裝正確的 PHP、OCI8 PECL 驅動程序和即時客戶端。

我選擇了:

d:\php\ for php
d:\oci\ for instant client
unzip the contents of the OCI8 PECL Driver into d:\php\ext\

、按照Oracle給出的說明修改d:\\php\\php.ini:

1. set the extension directory
2. set only one of the following:
  a. for 11g drivers, use extension=php_oci8_11g.dll
  b. for 12c drivers, use extension=php_oci8_12c.dll
  c. for other oracle DB drivers, use the correct oracle extension.

第四:將 d:\\oci\\(或任何您的即時客戶端安裝位置)添加到您的系統路徑。

第五:重啟你的電腦。

第六,在命令提示符下,鍵入“where oci*”並驗證您的 Instant Client 安裝路徑版本的 oci.dll 是否存在。

第七,轉到 d:\\php\\ 並鍵入“php -m”,您應該會在列表中看到 OCI8。

如果輸入“php -m”后在模塊列表中沒有看到OCI8,請打開d:\\php\\errorlog.txt

如果你看到類似的東西:

PHP Warning:  PHP Startup: Unable to load dynamic library 'ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.

那么即時客戶端或您下載的 PECL 驅動程序與您的 PHP 版本的架構不同。

如果你看到類似的東西:

PHP Warning:  PHP Startup: Unable to load dynamic library 'ext\php_oci8_12c.dll' - The specified procedure could not be found.

那么您為您的即時客戶端版本使用了錯誤的 OCI8 PECL 驅動程序。

希望這可以幫助。

我安裝了 Wamp 並希望一切都能開箱即用。 不是這樣。 我的 x64 Windows 機器上有 2 個 Oracle 客戶端(即時和完整)。 如果其他人有類似的設置,訣竅是確保即時客戶端 (a) 在您的 Path 環境變量中,並且 (b) 在 Path 變量中的完整客戶端之前。 有Windows上的真正簡短的章節在這里,但它給出了答案。

嘗試這個

在 php.ini 文件中取消注釋這個

extension_dir = "./" "去掉分號"

我遇到了同樣的問題, 此頁面上的解決方案對我有幫助,這是由使用不兼容的 oci ddl 文件引起的。

希望能幫助到你。

  • 下載 xampp 並取消注釋 oracle 12c 擴展或 11c 'extension=oci8_11g' for xampp 7.2.9
  • 下載即時客戶端 32 位並設置其路徑
  • 下載即時客戶端 32 位 SDK 包並設置其路徑
  • 將即時客戶端和 SDK dll 文件復制到 xamp\\php\\ext、xampp\\php\\ 和 xampp\\appache\\bin\\
  • 下載tread safe x86 相同php版本的php-oci,然后將其文件復制到php\\ext*.dll,php版本寫在xampp admin的phpinfo選項卡之上。
  • OCI8 將出現在 phpadmin 頁面或 apache admin 然后 phpadmin 選項卡上。 這意味着已經安裝了 phpOCI。

從適用於 Microsoft Windows (x64) 的 Instant Client 下載並將以下文件解壓縮到“c:\\oracle”:

Instantclient-basic-windows.x64-12.1.0.2.0.zip

Instantclient-sqlplus-windows.x64-12.1.0.2.0.zip

Instantclient-sdk-windows.x64-12.1.0.2.0.zip 這將創建以下文件夾“C:\\Oracle\\instantclient_12_1”。

最后,將“C:\\Oracle\\instantclient_12_1”文件夾添加到PATH環境變量中,放在最左邊的地方。

然后重啟你的服務器。

我知道我在這里回復為時已晚,但我嘗試了所有方法,但兩天沒有任何效果,然后我找到了這個視頻。 它解決了我的問題。 所以我把這個分享給大家。 快樂編碼:-)

在此處輸入鏈接描述

1 - 第一步是通過檢查 phpinfo 中的 PHP 詳細信息,為您的 xampp 或 wampp 或 lampp 安裝確定正確的即時客戶端。 創建一個簡單的 php 文件並添加以下代碼並在瀏覽器上預覽。

<?php 
phpinfo();
?> 

phpinfo() 詳細信息

2 - 轉到https://www.oracle.com/database/technologies/instant-client/downloads.html並為您的架構(32 位或 64 位)下載正確的即時客戶端(基本包和 sdk)

即時客戶端包 - 基本

即時客戶端包 - SDK

3 - 將 Instantclient 解壓縮到您的首選目錄並將路徑添加到您的環境變量中。

4 - 轉到 php.ini 並通過刪除;來啟用oci8擴展; 在行的開頭。 尋找這條線

;extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

重構為

extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

環境變量

5 - 重新啟動您的電腦

6 - 檢查您的 phpinfo(您在第 1 步中創建的頁面)。 您應該會看到以下詳細信息:

OCI8

在此輸入圖像描述

為Oracle數據庫設置NLS_LANG環境變量(By - Jaydev)按照以下過程為Oracle數據庫設置NLS_LANG環境變量。 為Oracle數據庫設置NLS LANG環境變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM