정의되지 않은 함수 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 파일을 확인했습니다.
저는 이 문제와 싸우는데 꼬박 3일을 보냅니다.
윈도우 7에서 오라클 연결을 사용하고 있었는데 문제가 없었습니다.지난주에 저는 윈도우 8이 적용된 새 컴퓨터를 구했습니다.XAMPP 1.8.2를 설치합니다.이 서버의 모든 앱 PHP/MySQL은 정상적으로 작동합니다.문제는 내 pph 앱을 오라클 DB에 연결하려고 할 때 발생했습니다.
정의되지 않은 함수 oci_pconnect() 호출
그리고 변경사항으로 Apache를 시작/중지하면 "PHP Startup"에서 "PHP Warning: PHP Startup: in Unknown on line 0"과 함께 LOG로 이상한 "Warning"이 표시됩니다.
나는 모든 것을 했습니다(언코멘트되지 않은 php_occi8.dll 및 php_occi8_11g.dll, occi.dll을 /ext 디렉토리에 복사하고 /apache 근처에 있고 아무 것도 작동하지 않습니다.Instant Client의 모든 버전과 NOTHING을 다운로드합니다.
신이 내 도움에 들어왔습니다.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비트에서도 작동합니다.그냥 구글에서 오라클 인스턴트 클라이언트 윈도우 32비트를 다운로드하면 됩니다.을 11는는는는전eetn1e트f1을 extension=php_oci8_11.g.dll12명이랑은 안 통합니다.다음과 같은 위치로 패키지 압축을 풉니다.C:\Oracle\instantclient_11_2.
마지막으로 으로 을 합니다를 합니다.PATH location, 변수 에서 사용자 변수가 아닌 사용자 변수가닌템수가경는료서자n수경는mne가t
그런 다음 시스템을 다시 시작해야 합니다.PATH전면적으로 선전해야 할 변화
하지 않고 파일 OCLPHP의 파일로 수 없음).php_oci8_11g.dll번호
php.ini 파일에서 해당 확장자를 활성화해야 합니다.Oracle 설치 참조:
extension=oci8.so
꼭 확인해야 할 것들
- Oracle Database를 연결할 때마다 32 Bit 오라클 클라이언트 라이브러리를 사용해 보십시오. XAMP PHP는 32 Bit로 컴파일되므로(단 64 Bit window machine이 있지만)
여기서 다운로드에서 Oracle Client 다운로드
C:\instantclient_12_1에 붙여넣기
- 그런 다음 System Environment Variable에서 위로 경로 설정
- 그런 다음 C:\xampp\php\php.ini로 이동하고 uncomment extension=smooth_occi8_12c.smooth
- 그런 다음 XAMP를 재시작하면 문제없이 작동합니다.
WAMP Server 2.5(32비트)를 설치했는데 occi_connect 오류도 발생했습니다.오라클 11g 클라이언트(32비트)도 설치했습니다.제가 다른 게시물에서 읽은 일반적인 수정 사항은 당신의 C:\wamp\bin\php\php5.5.12 디렉토리에 있는 php.ini 파일을 변경하는 것이었지만, 이것은 저에게 전혀 효과가 없었습니다.제가 잘못 이해한 것 같은데, 대신 C:\wamp\bin\apache\apache2.4.9 디렉토리에 있는 php.ini 파일을 변경하면 원하는 결과를 얻을 수 있습니다. php.ini 을 php.ini로 제거한 입니다.extension=php_oci8_11g.dll그것을 가능하게 하기 위해서요.그런 다음 모든 서비스를 다시 시작했는데 이제 작동합니다!이 방법이 당신에게 효과가 있기를 바랍니다.
- PHP 5.6.32(cli)와 같이 PHP 버전을 확인합니다(빌트:2017년 10월 25일 16:02:15).
OCI8 확장을 사용하여 Oracle Database에 액세스합니다.따라서 1px://pecl.php.net/package/oci8/2.0.8/windows 에서 php_occi8.jp를 다운로드하십시오. (5.6 Thread Safe (TS) x86) php_occi8.jp는 php 버전과 동일한 버전이어야 합니다.그런 다음 압축을 풀면 1.php_occi8.dll 2.php_occi8_11g.dll (구술 버전에 따라) 이 두 파일이 당신의 파일에 붙여넣어진 것을 발견할 것입니다.
(xampp\ns\ext) 폴더.php.ini 파일을 열고 확장자 =hp_occi8.hp 확장자 =hp_occi8_11g.hp를 추가합니다.
다음 명령을 사용하여 Oracle 버전 및 서비스 이름 확인
- cmd 열기
- sqlplus / as sysdba
- v$version에서 *를 선택합니다. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 프로덕션에서 Oracle 버전이 11g이므로 https://www.oracle.com/technetwork/topics/winsoft-085727.html 에서 Instantclient_11_1(Instant Client 32비트) 다운로드를 사용할 수 있습니다.
show 매개 변수 service_name; service_name은 orcl입니다(이 서비스 이름을 기억해야 합니다).
instantclient_11_1을 다운로드한 후 압축을 풀고 로컬 디스크에 붙여 넣습니다.그리고 C:\instantclient_11_1 경로를 복사한 후 이 경로를 사용자 변수 및 시스템 변수로 설정합니다.참고로 내 코드는 경로 변수를 설정하지 않고 작동합니다.
cmd를 열고 SQL에 들어가 다음 명령에 따라 스키마를 만듭니다.
- sqlplus / as sysdba
- pass123으로 식별되는 사용자 dbname을 만듭니다.
grant connect, 리소스 to dbname;
테이블 user_info를 생성하고 테이블에 데이터를 삽입하고 커밋합니다.참고: 데이터가 삽입되지 않은 경우에는 데이터를 커밋해야 합니다.
- 그러면 이 스크립트는 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) : ' ').'</td>';
}
print '</tr>';
}
print '</table>';
1 - 첫 번째 단계는 phpinfo에서 PHP 세부 정보를 확인하여 xampp 또는 wampp 또는 lamp 설치에 적합한 인스턴트 클라이언트를 식별하는 것입니다.간단한 php 파일을 만들고 아래 코드를 추가하고 브라우저에서 미리보기를 합니다.
<?php
phpinfo();
?>
2 - https://www.oracle.com/database/technologies/instant-client/downloads.html 로 이동하여 아키텍처(32비트 또는 64비트)에 적합한 인스턴트 클라이언트(기본 패키지 및 sdk)를 다운로드합니다.
3 - 원하는 디렉토리에 인스턴트 클라이언트를 추출하고 환경 변수에 경로를 추가합니다.
4 - 하여 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 - PC를 다시 시작합니다.
6 - php info (1단계에서 생성한 페이지)를 확인합니다.자세한 내용은 아래와 같습니다.
저는 Wamp를 설치했고 모든 것이 틀에서 벗어나길 기대했습니다.그렇지 않습니다.x64 Windows 컴퓨터에 2개의 Oracle 클라이언트가 있습니다(즉시 전체).다른 사용자가 유사한 설정을 가지고 있는 경우에는 인스턴트 클라이언트가 (a) 경로 환경 변수에 있고 (b) 경로 변수에 있는 전체 클라이언트보다 앞에 있는지 확인하는 것이 좋습니다.여기에 Windows에 관한 아주 간단한 섹션이 있지만 이 섹션은 답을 제공합니다.
알겠습니다, 여러분.
첫째, 사용.
<?php
phpinfo();
?>
PHP 버전(예: 7.0.xxx )과 PHP 버전 아키텍처(x64 또는 x86), 그리고 스레드 세이프 또는 Not Thread 세이프(첫 번째 표에 "스레드 세이프"로 표시됨)를 결정합니다. "비활성화"는 분명히 "스레드 세이프가 아님"을 의미합니다.
꼭 필요한 소프트웨어는 다음 세 가지입니다.
- PHP의 동일한 주요 버전(7.0.xxx 의 경우 7.0)
- 접속중인 버전과 동일한 버전의 Oracle(11g, 12g 등)
- 동일한 Not Thread Safe / Thread Safe 버전의 PHP
- 동일한 구조를 위해 모든 것이 가능합니다.
다른 아키텍처, Not Thread Safe/Thread Safe 버전, 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 Driver, 인스턴트 클라이언트를 설치합니다.
선택한 항목:
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.
넷째: 시스템 PATH에 d:\oci\(또는 인스턴트 클라이언트 설치 위치가 무엇이든 간에) 추가합니다.
다섯 번째: PC를 재부팅합니다.
여섯째, 명령 프롬프트에 "here 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 드라이버를 사용하는 것입니다.
도움이 되길 바랍니다.
이거 먹어봐요.
php.ini 파일에서 이것을 언코멘트합니다.
extension_dir = "./"" semicolon 거"
저도 같은 문제가 있었는데, 이 페이지의 솔루션이 도움이 되었습니다. 호환되지 않는 ociddl 파일을 사용하는 것이 원인입니다.
도움이 되길 바랍니다.
- xampp를 다운로드한 후 xampp 7.2.9용 oracle 12c 확장 또는 11c 'http=oci8_11g'를 언코멘트합니다.
- 인스턴트 클라이언트 32비트 다운로드 및 경로 설정
- 인스턴트 클라이언트 32비트 SDK 패키지 다운로드 및 경로 설정
- 인스턴트 클라이언트 및 SDK dll 파일을 xamp\php\ext, xampp\php\ 및 xampp\appache\bin\으로 복사합니다.
- tread safe x86의 동일한 php 버전의 php-oci를 다운로드한 후 파일을 php\ext*.dll로 복사하면 xampp admin의 phpinfo 탭 위에 php 버전이 작성됩니다.
- OCI8은 ppadmin 페이지 또는 apache admin, phpadmin 탭에 나타납니다.phpOCI가 설치되었다는 뜻입니다.
Instant Client for Microsoft Windows(x64)에서 다운로드한 후 아래 파일의 압축을 "c:\oracle"로 압축을 풉니다.
인스턴트 클라이언트-basic-window.x64-12.1.0.2.0.
인스턴트 클라이언트-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 환경 변수에 연결하여 가장 왼쪽에 배치합니다.
그런 다음 서버를 다시 시작합니다.
언급URL : https://stackoverflow.com/questions/22478387/call-to-undefined-function-oci-connect
'programing' 카테고리의 다른 글
| 문자열 출력: C#의 형식 또는 콘캣? (0) | 2023.09.16 |
|---|---|
| nvm: N/A: 버전 "N/A -> N/A"가 아직 설치되지 않았습니다. (0) | 2023.09.16 |
| TS1086: 주변 컨텍스트에서 액세스자를 선언할 수 없음 (0) | 2023.09.16 |
| 아이폰에서 쓸 수 있는 경로를 얻으려면 어떻게 해야 합니까? (0) | 2023.09.16 |
| CSS에서 "보다 크다" 또는 ">" 문자는 어떻게 사용됩니까? (0) | 2023.09.16 |