none
Microsoft Driver for PHP - Modul nicht gefunden RRS feed

  • Frage

  • Hallo Experten,

    System:

    Installation in einer VM

    Windows 2008 Server R2 x64
    Webserver IIS 7
    PHP 5.4.14 installiert unter PHP5
    Microsoft Driver 3.0 for PHP for SQL Server - http://www.microsoft.com/en-us/download/details.aspx?id=20098
    SSMS 2008 Express R2

    II7 funktioniert. PHP Seiten lassen sich aufrufen. Anmeldung zur Datenbank mit SSMS funktiniert.

    Anmeldung zur Datenbank aus PHP schlägt fehl (SQL Server Treiber wurden unter PHP mit dem PHP Manager eingebunden, und werden als aktiviert angezeigt).

    Einziger Hinweis in der php-5.4.14_errors.log

    PHP Startup: Unable to load dynamic library 'C:\PHP5\ext\php_pdo_sqlsrv_54_nts.dll' - Das angegebene Modul wurde nicht gefunden.
     in Unknown on line 0
    PHP Startup: Unable to load dynamic library 'C:\PHP5\ext\php_sqlsrv_54_nts.dll' - Das angegebene Modul wurde nicht gefunden.
     in Unknown on line 0

    Habe vom vielen Suchen schon kleine Augen, und bin deshalb für jeden noch so kleinen Hinweis zur Lösung oder zu einer Checkliste, warum die DLL nicht gefunden werden, sehr dankbar. Bitte eine kurze Info, sollten weitere Informationen benötigt werden. Einen Auszug aus der php.ini im Anhang unter (1).

    Jörg

    (1)

    [MSSQL]
    ; Allow or prevent persistent links.
    mssql.allow_persistent = On

    ; Maximum number of persistent links.  -1 means no limit.
    mssql.max_persistent = -1

    ; Maximum number of links (persistent+non persistent).  -1 means no limit.
    mssql.max_links = -1

    ; Minimum error severity to display.
    mssql.min_error_severity = 10

    ; Minimum message severity to display.
    mssql.min_message_severity = 10

    ; Compatibility mode with old versions of PHP 3.0.
    mssql.compatability_mode = Off

    ; Connect timeout
    ;mssql.connect_timeout = 5

    ; Query timeout
    ;mssql.timeout = 60

    ; Valid range 0 - 2147483647.  Default = 4096.
    ;mssql.textlimit = 4096

    ; Valid range 0 - 2147483647.  Default = 4096.
    ;mssql.textsize = 4096

    ; Limits the number of records in each batch.  0 = all records in one batch.
    ;mssql.batchsize = 0

    ; Specify how datetime and datetim4 columns are returned
    ; On => Returns data converted to SQL server settings
    ; Off => Returns values as YYYY-MM-DD hh:mm:ss
    ;mssql.datetimeconvert = On

    ; Use NT authentication when connecting to the server
    mssql.secure_connection = Off

    ; Specify max number of processes. -1 = library default
    ; msdlib defaults to 25
    ; FreeTDS defaults to 4096
    ;mssql.max_procs = -1

    ; Specify client character set.
    ; If empty or not set the client charset from freetds.conf is used
    ; This is only used when compiled with FreeTDS
    ;mssql.charset = "ISO-8859-1"

    ...

    [PHP_PDO_SQLSRV_54_NTS]
    extension=php_pdo_sqlsrv_54_nts.dll
    [PHP_SQLSRV_54_NTS]
    extension=php_sqlsrv_54_nts.dll

    Samstag, 20. April 2013 11:51

Antworten

  • Hallo,

    die Treiber-Dateien müssen im extension_dir liegen, bei Dir müsste das "C:\PHP5\Ext" sein - ggf. den Eintrag in extension_dir anpassen.

    Die Treiber müssen als extension freigegeben sein:

    ;extension=php_zip.dll
    
    extension=php_sqlsrv_54_nts.dll
    extension=php_pdo_sqlsrv_54_nts.dll
    
    ;;;;;;;;;;;;;;;;;;;
    ; Module Settings ;
    ;;;;;;;;;;;;;;;;;;;
    

    Wenn die Einstellugnen wie in http://www.php.net/manual/de/install.windows.iis7.php gemacht sind,
    sollte es laufen - zumindest bei mir tut es das unter Windows 7 32-bit für eine frische PHP Installation.

    Gruß Elmar

    • Als Antwort markiert Joerg_x Sonntag, 21. April 2013 13:38
    Samstag, 20. April 2013 15:15
    Beantworter
  • Hallo Jörg,

    wenn die DLLs fehlen, so musst Du das Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)
    installieren - bei mir waren die schon drauf, da Entwicklermaschine ;)

    Ich habe mit einem PHP Skript getestet, das PDO verwendet und auf eine SQL Server 2008 R2 Instanz zugreift.

    Ausgenommen der oben angegebenen Änderungen habe ich nichts verändert,
    phpinfo() liefert bei mir die gleichen Angaben.

    Gruß Elmar

    • Bearbeitet Elmar BoyeEditor Sonntag, 21. April 2013 05:13
    • Als Antwort markiert Joerg_x Sonntag, 21. April 2013 13:38
    Sonntag, 21. April 2013 05:10
    Beantworter

Alle Antworten

  • Hallo,

    die Treiber-Dateien müssen im extension_dir liegen, bei Dir müsste das "C:\PHP5\Ext" sein - ggf. den Eintrag in extension_dir anpassen.

    Die Treiber müssen als extension freigegeben sein:

    ;extension=php_zip.dll
    
    extension=php_sqlsrv_54_nts.dll
    extension=php_pdo_sqlsrv_54_nts.dll
    
    ;;;;;;;;;;;;;;;;;;;
    ; Module Settings ;
    ;;;;;;;;;;;;;;;;;;;
    

    Wenn die Einstellugnen wie in http://www.php.net/manual/de/install.windows.iis7.php gemacht sind,
    sollte es laufen - zumindest bei mir tut es das unter Windows 7 32-bit für eine frische PHP Installation.

    Gruß Elmar

    • Als Antwort markiert Joerg_x Sonntag, 21. April 2013 13:38
    Samstag, 20. April 2013 15:15
    Beantworter
  • Guten Abend, Elmar,

    vielen Dank für den Hinweis.

    Die Installation habe ich bereits nach der Seite durchgeführt; allerdings bin ich nun dem Hinweis nachgegangen, das PHP-Script aus der Konsole zu starten.

    Dabei habe ich die Fehlermedlungen erhalten, dass die DLL-Dateien:

    msvcp100.dll
    msvcr100.dll

    fehlen. Merkwürdig; alles eine frische Installtion.

    Jetzt sehen die Errorlogs anders aus. Die PHP.info zeigt nun:

    Das scheint mir in Ordnung, und die DLL werden nun offensichtlich gefunden. Könntest Du das einmal gegenprüfen bzw. mir anzeigen, welche Abschnitte bei Dir

    anzeigen, dass die Module ordnungsgemäß eingebunden worden sind.

    Danke schon mal.

    Jörg

    Samstag, 20. April 2013 19:40
  • Hallo Jörg,

    wenn die DLLs fehlen, so musst Du das Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)
    installieren - bei mir waren die schon drauf, da Entwicklermaschine ;)

    Ich habe mit einem PHP Skript getestet, das PDO verwendet und auf eine SQL Server 2008 R2 Instanz zugreift.

    Ausgenommen der oben angegebenen Änderungen habe ich nichts verändert,
    phpinfo() liefert bei mir die gleichen Angaben.

    Gruß Elmar

    • Bearbeitet Elmar BoyeEditor Sonntag, 21. April 2013 05:13
    • Als Antwort markiert Joerg_x Sonntag, 21. April 2013 13:38
    Sonntag, 21. April 2013 05:10
    Beantworter
  • Hallo Elmar,

    hier wird es auch erwähnt:

    http://www.iishacks.com/2011/02/14/how-to-install-php-5-3-fastcgi-on-windows-2008-iis-7/

    Zitat:
    "For the VC9 versions you will need the Microsoft 2008 C++ Runtime (VC
    x86, VC x64, even though you are installing 32-bit PHP, install the
    correct version of VC++ for the version of Windows that you have)."

    Schon ziemlich versteckt, dieser Hinweis.

    Schönen Tag.

    Sonntag, 21. April 2013 13:41
  • Hallo Jörg,

    der Grund ist nicht PHP - das verwendet die älteren VC9-Runtime Bibliotheken aus VS 2008,
    sondern der SQL Server PHP Treiber, der mit VS 2010 (SP1) übersetzt wurde.

    Und so benötigt man beide Laufzeitbibliotheken.

    Gruß Elmar

    Sonntag, 21. April 2013 16:21
    Beantworter