![](/img/trans.png)
[英]Fatal error: Call to undefined function oci_connect() php error
[英]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)。
需要確保的事情
從此處下載 Oracle 客戶端
將其粘貼到 C:\\instantclient_12_1
您需要在 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
的分號以啟用它。 然后我重新啟動了所有服務,它現在可以工作了! 我希望這對你有用。
使用 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) 文件夾。
打開你的 php.ini 文件並添加這些 extension=php_oci8.dll extension=php_oci8_11g.dll
使用這些命令檢查您的 oracle 版本和服務名稱
顯示參數 service_name; service_name 是 orcl(你應該記住這個服務名稱)
下載后 Instantclient_11_1 解壓縮它,然后粘貼到您的本地磁盤中。 並復制路徑 C:\\instantclient_11_1 然后將此路徑設置為您的用戶變量和系統變量。 請注意,我的代碼在沒有設置路徑變量的情況下工作。
打開你的 cmd 並輸入 SQL,按照這些命令創建你的架構
授予連接,資源到 dbname;
創建表 user_info 並將數據插入表中並提交。 注意:您必須提交數據,否則不會插入數據。
<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) : ' ').'</td>'; } print '</tr>'; } print '</table>';
好吧,伙計們。
首先,使用
<?php
phpinfo();
?>
並確定您的 PHP 版本(位於最頂部,例如 7.0.xxx)以及您的 PHP 版本架構:x64 或 x86 以及線程安全或非線程安全(位於第一個表中的“線程安全”。) “禁用”顯然意味着“不是線程安全的”。
您需要的以下三個軟件絕對至關重要:
如果以下任何一項適用於不同的體系結構、非線程安全/線程安全版本、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 文件引起的。
希望能幫助到你。
從適用於 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();
?>
2 - 轉到https://www.oracle.com/database/technologies/instant-client/downloads.html並為您的架構(32 位或 64 位)下載正確的即時客戶端(基本包和 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 步中創建的頁面)。 您應該會看到以下詳細信息:
為Oracle數據庫設置NLS_LANG環境變量(By - Jaydev)按照以下過程為Oracle數據庫設置NLS_LANG環境變量。 為Oracle數據庫設置NLS LANG環境變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.