[PHP] Versie opvragen van extension

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sc0tTy
  • Registratie: December 2003
  • Laatst online: 20:30
Hey mensen,

Ik heb voor mijn project een MS SQL wrapper class gebouwd. Ik ben alleen tegen een probleem aangelopen, servers waar IIS op draait en een nieuwere versie van php 5.3.0> draaien gebruiken de FreeTDS lib en de rest gebruiken de lib van php zelf ( meestal v7.0 ).

Dit is opzich geen probleem behalve dat het connecten naar een database anders is.
Bij de FreeTDS lib moet ik de instance name weg laten als deze het zelfde is als de server naam, bij de php mssql lib moet je deze er juist bij zetten. Nu wil ik ipv van de connectie te openen en een paar sec te w8en op en time out en dan de andere manier te proberen, de versie van de lib checken om dan gewoon de host string aan te passen en in een keer goed te connecten wat een hoop tijd scheelt.

Nu zou je zeggen nou das toch easy, nou nee aangezien php geen functie heeft om de library/extension details weer te geven behalve phpinfo(). En laat deze nou juist alleen naar het scherm outputten, oftewel kan hier geen info uit halen en al kon je dit wel moet je alsnog al die data gaan parsen wat toch wel wat tijd kan gaan kosten.

Weet iemand of er een klein scriptje is die dit toch kan opvragen ?
Mijn google searches leveren namelijk geen antwoord :(

Sc0tTy

Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider


Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 19:55
Volgens mij kan je daar phpversion() voor gebruiken:

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Phpinfo() output inderdaad naar het scherm, maar dat kun je afvangen met output buffering.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • Sc0tTy
  • Registratie: December 2003
  • Laatst online: 20:30
Evilbee schreef op donderdag 10 juni 2010 @ 16:42:
Volgens mij kan je daar phpversion() voor gebruiken:
jup deze had ik al gevonden , maar... :

PHP:
1
2
3
4
5
        if ( !extension_loaded('mssql') ) {
            throw new Exception( 'MS SQL Extension library has not been configured or loaded.' );
        }
        var_dump( phpversion( 'mssql' ) );
        print_r( get_loaded_extensions() );


levert :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
bool(false)
Array
(
    [0] => Core
    [1] => bcmath
    [2] => calendar
    [3] => com_dotnet
    [4] => ctype
    [5] => date
    [6] => ereg
    [7] => filter
    [8] => ftp
    [9] => hash
    [10] => iconv
    [11] => json
    [12] => mysqlnd
    [13] => odbc
    [14] => openssl
    [15] => pcre
    [16] => Reflection
    [17] => session
    [18] => SPL
    [19] => standard
    [20] => tokenizer
    [21] => zlib
    [22] => libxml
    [23] => dom
    [24] => bz2
    [25] => SimpleXML
    [26] => wddx
    [27] => xml
    [28] => xmlreader
    [29] => xmlwriter
    [30] => xsl
    [31] => apache2handler
    [32] => Phar
    [33] => curl
    [34] => mbstring
    [35] => exif
    [36] => gd
    [37] => gettext
    [38] => imap
    [39] => ldap
    [40] => mcrypt
    [41] => mssql
    [42] => mysql
    [43] => mysqli
    [44] => PDO
    [45] => pdo_mysql
    [46] => PDO_ODBC
    [47] => pdo_sqlite
    [48] => soap
    [49] => sockets
    [50] => SQLite
    [51] => sqlite3
    [52] => xmlrpc
    [53] => zip
    [54] => mime_magic
    [55] => ming
    [56] => pdf
    [57] => mhash
)

Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Dus even voor de duidelijkheid hij zegt dat
phpversion( 'mssql' ) false (oftewel 0) is?

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Aganim
  • Registratie: Oktober 2006
  • Laatst online: 21:04

Aganim

I have a cunning plan..

edit: negeer me maar.. Ben niet meer wakker. Blech.

[ Voor 82% gewijzigd door Aganim op 10-06-2010 16:58 ]


Acties:
  • 0 Henk 'm!

  • Sc0tTy
  • Registratie: December 2003
  • Laatst online: 20:30
roy-t schreef op donderdag 10 juni 2010 @ 16:57:
Dus even voor de duidelijkheid hij zegt dat
phpversion( 'mssql' ) false (oftewel 0) is?
jup, dit is op beide dozen

code:
1
2
3
4
        var_dump( phpversion( 'mssql' ) );
        echo ini_get('extension_dir');
        var_dump( is_file(ini_get('extension_dir') . '\php_dblib.dll') );
        echo "\nVersion:\n" . PHP_VERSION . "\n" . PHP_RELEASE_VERSION . "\n" . PHP_MAJOR_VERSION . "\n" . PHP_MINOR_VERSION . "\n" . PHP_VERSION_ID;


mn dev omgeving is een xamp apache omgeving dus met php_mysql en geeft deze output:
code:
1
2
3
4
5
6
7
8
9
bool(false)
C:\xampp\php\extbool(false)

Version:
5.3.0
0
5
3
50300


de productie server is een win2k3 iis6 doos:
code:
1
2
3
4
5
6
7
8
9
bool(false)
C:\PHP\extbool(true)

Version:
5.3.2
2
5
3
50302


omdat ik echt geen zin heb om de output van phpinfo() te gaan parsen

denk ik dat ik de check doe of mssql is geladen zo ja , check de extension dir of de dblib.dll aanwezig is.

wat dus uitkomt op dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    /**
     * Creates a new instance of the Database class
     * @param String $host Hostname
     * @param String $user Username
     * @param String $pass Password
     * @param String $database Database
     * @param Boolean $checkLibVersion If set to true it will check if either FreeTDS or internal mssql lib is used.
     */
    public function  __construct( $host, $user, $pass, $database, $checkLibVersion = false ) {
        $this->queryResultObjectName = 'MSQueryResult';

        // Checks the MS SQL lib
        if ( !extension_loaded('mssql') ) {
            throw new Exception( 'MS SQL Extension library has not been configured or loaded.' );
        }
        
        // Check what host to use
        if ( !stristr( $host, '\\' ) && $checkLibVersion ) {
            if ( stristr(PHP_OS, 'WIN') && !is_file( ini_get('extension_dir') . '\php_dblib.dll') ) {
                $host .= "\\$host";
            } elseif ( !stristr(PHP_OS, 'WIN') && !is_file( ini_get('extension_dir') . '/php_dblib.so') ) {
                $host .= "/$host";
            }
        }

        parent::__construct( $host, $user, $pass, $database );
    }


zal niet helemaal fool proof zijn, maar tis beter dan niets

[ Voor 47% gewijzigd door Sc0tTy op 10-06-2010 17:13 ]

Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider

Pagina: 1