2008-09-21 6 views
6

Jak wykryć, używając php, czy na komputerze zainstalowano oracle (oci8 and/or pdo_oci)?Jak wykryć, używając php, czy maszyna ma zainstalowany Oracle (oci8 i/lub pdo_oci)?

Pracuję nad projektem PHP, w którym niektórzy programiści, tacy jak ja, zainstalowali go, ale nie ma potrzeby, aby osoby te miały go na swoim komputerze. Jak mogę napisać szybką funkcję do użycia w kodzie, aby moje motywy mogły pracować nad wyglądem strony bez powodowania awarii?

Odpowiedz

4

jeśli rozszerzenie oci nie jest zainstalowany, wtedy dostaniesz błąd krytyczny z Dalekich Ziemiach. Odpowiedź myopenid.com, można użyć function_exists ("oci_connect") lub extension_loaded ("oci8") (lub cokolwiek innego rozszerzenie nazywa się)

0

nie wiem, czy ja w pełni rozumiem pytanie, ale prosty sposób byłoby to zrobić:

<?php 
    $connection = oci_connect('username', 'password', 'table'); 
    if (!$connection) { 
    // no OCI connection. 
    } 
?> 
0

Jak wspomniano powyżej przez Grega, programowo można użyć metody function_exists(). Nie zapomnij można również użyć następujących czynności, aby zobaczyć wszystkie specyfiki środowiska z instalacji PHP przy użyciu następujących:

<?php 
phpinfo(); 
?> 
+0

Tak ... ale to po prostu wypisuje na ekranie szczegóły. Chcę dowiedzieć się, jakie są szczegóły, a nie drukować rzeczy na ekranie. –

1

Ludzie tutaj mają kawałki rozwiązania, ale niech toczyć to wszystko w jedno rozwiązanie.

Dla pojedynczego wystąpienia funkcji Oracle, testowanie z function_exists() jest wystarczająco dobre; ale jeśli kod zostanie posypany do wywołania OCI, będzie to ogromny ból w dupie, który zawinie każdego w teście function_exists().

Dlatego myślę, że najprostszym rozwiązaniem byłoby, aby utworzyć plik o nazwie nodatabase.php że może wyglądać tak:

<?php 
// nodatabase.php 
// explicitly override database functions with empty stubs. Only include this file 
// when you want to run the code without an actual database backend. Any database- 
// related functions used in the codebase must be included below. 
function oci_connect($user, $password, $db = '', $charset='UTF-8', $session_mode=null) 
{ 
} 

function oci_execute($statement, $mode=0) 
{ 
} 
// and so on... 

Następnie warunkowo zawierać ten plik, jeśli globalna (powiedzmy, THEME_TESTING) jest zdefiniowany tuż przed miejscem wywołania kodu bazy danych. Taki to może wyglądać następująco:

// define("THEME_TESTING", true) // uncomment this line to disable database usage 
if(defined(THEME_TESTING)) 
    include('nodatabase.php'); // override oracle API with stub functions for the artists. 

Teraz, kiedy ręka nad projektem do artystów, po prostu trzeba zrobić, że jedna modyfikacja i są dobre do pracy.

+0

Byłoby idealnie, gdybym kontrolował cały kod. Niestety, cały kod interfejsu bezpośrednio oracle jest utrzymywany i aktualizowany przez naszych klientów i używa zarówno oci8 jak i pdo_oci. Więc nie jestem pewien, czy to rozwiązanie zadziała - nie, że nie wypróbuję w poniedziałek. –

+0

Kluczem jest to, że musisz wczytać funkcje pośredniczące zanim faktycznie zostaną wywołane faktyczne funkcje. Jeśli tak, powinieneś być w stanie wykonać pracę koncepcyjną: udokumentować, które połączenia OCI/PDO są używane, napisać bibliotekę funkcji stub/klasę szkieletu i warunkowo dołączyć klasę w razie potrzeby. –

Powiązane problemy