2008-09-21 6 views
6

Comment puis-je détecter, en utilisant php, si la machine a été installée (oci8 and/or pdo_oci)?Comment puis-je détecter, en utilisant php, si la machine a Oracle (oci8 et/ou pdo_oci) installé?

Je travaille sur un projet PHP où certains développeurs, comme moi-même, l'ont installé, mais les développeurs n'ont pas besoin de l'avoir. Comment puis-je écrire une fonction rapide à utiliser dans le code pour que mes personnages puissent travailler sur le look du site sans qu'il ne se bloque sur eux?

Répondre

4

si l'extension oci n'est pas installé, vous obtiendrez une erreur fatale avec farside. La réponse de myopenid.com, vous pouvez utiliser function_exists ('oci_connect') ou extension_loaded ('oci8') (ou quelle que soit l'extension réellement appelée)

0

Je ne sais pas si je comprends bien votre question, mais un moyen simple serait de le faire:

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

Comme mentionné ci-dessus par Greg, par programmation, vous pouvez utiliser la méthode function_exists(). Ne pas oublier que vous pouvez également utiliser ce qui suit pour voir tous les détails de l'environnement avec votre installation de PHP en utilisant les éléments suivants:

<?php 
phpinfo(); 
?> 
+0

Oui ... mais cela imprime juste à l'écran les spécificités. Je veux savoir quelles sont les spécificités et ne pas imprimer les choses à l'écran. –

1

Les gens ici ont des morceaux de la solution, mais nous allons rouler tout en une seule solution.

Pour une seule instance d'une fonction Oracle, le test avec function_exists() est suffisant; mais si le code est saupoudré tout au long des appels OCI, ça va être une énorme douleur dans le cul pour envelopper tout le monde dans un test function_exists().

Par conséquent, je pense que la solution la plus simple serait de créer un fichier appelé nodatabase.php qui pourrait ressembler à ceci:

<?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... 

Ensuite, conditionnellement ce fichier si un global (par exemple, THEME_TESTING) est défini juste devant l'endroit où le code de la base de données est appelé. Un tel inclure pourrait ressembler à ceci:

// 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. 

Maintenant, quand vous la main sur le projet aux artistes, ils ont besoin tout simplement de faire qu'une modification et ils sont prêts à partir.

+0

Ce serait idéal si j'avais le contrôle de tout le code. Malheureusement, tout le code directement oracle-interface est maintenu et mis à jour par nos clients, et qui utilise à la fois oci8 et pdo_oci. Donc, je ne suis pas vraiment sûr si cette solution va fonctionner - pas que je ne vais pas essayer lundi. –

+0

La clé est que vous devez être en mesure de charger les fonctions de bout avant que les fonctions réelles sont réellement appelées. Si c'est le cas, vous devriez pouvoir faire fonctionner le concept: documenter les appels OCI/PDO utilisés, écrire une librairie de fonctions stub/classe squelette, et inclure conditionnellement la classe si nécessaire. –

Questions connexes