|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-07-06 23:55 UTC] marko dot sirovnik at korona dot si
Description:
------------
Hi!
I'm using ADOMD COM object in order to connect to OLAP database. When the Web Server and the DB Server are on the same computer I can manage to connect to OLAP DB (COM approach). But when DB Server is on on PC and Web Server on another PC it is impossible for me (DCOM connection).
Short configuration:
OS: Windows 2003 Server
Web: IIS (comes with Win2003Srv)
DB: Microsoft SQL Server
OLAP: Microsoft Analysis Services
COM/DCOM object: ADOMD
-----------------------
PHP.INI
[com]
;com.typelib_file =
com.allow_dcom = true
com.autoregister_typelib = true
;com.autoregister_casesensitive = false
;com.autoregister_verbose = true
------------------------
I made ADOMD DCOM test with Visual Basic and it works fine.
Any help or idea how to remove this obstacle I appreciate.
Thanks to All!
Marko
Reproduce code:
---------------
<?php
$dsn = 'DATA SOURCE=blackbox;UID=sa;Initial Catalog=FoodMart 2000;Provider=MSOLAP;Encoding=windows-1250;Roles=skrbnik;';
//$cat = new COM('ADOMD.Catalog');
$cat = new COM('ADOMD.Catalog', array(
"Server" => "blackbox",
"Username" => "administrator",
"Password" => "default"));
if (is_null($cat)) {
echo '<B>Sorry, problem with COM object.</B><BR>';
echo '$cat = ' ;
var_dump ($cat);
return;
} else {
echo '<BR><B>Connection with OLAP has been established.</B>';
}
$cat->ActiveConnection = $dsn;
var_dump ($cat);
?>
Expected result:
----------------
DCOM connection should be different then "Null". Furthermore, a message "Connection with OLAP has been established." is expected to be seen in Web browser.
Actual result:
--------------
With PHP Version 4.3.6 the following warrning has arrised:
"Unable to obtain IDispatch interface for CLSID {228136B0-8BD3-11D0-B4EF-00A0C9138CA4}: Class not registered in c:\inetpub\wwwroot\aaa1.php on line 3
Sorry, problem with COM object."
PHP Version 4.4.0RC3-dev:
"PHP has encountered an Access Violation at 0184A8A8?$?? ?Ew?????? ?U?\??????????c?O2????Ty ?m?OqeRV#88?N???????<_N>?U"?????JDźp???r'???)JK]v^?M7???Z??6?C??P?\??v???8d?? <?/?"
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 08:00:01 2025 UTC |
Thank you for your quick resonse. In my previous description I forgot to mention that Excel works also over DCOM already in version 4.3.6. So... I have upgraded PHP to ver.:5.0.4 (Mar 31 2005). The previous observations and problem remains at it was. Here is the actual result: ------------ Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `ADOMD.Catalog': Access is denied. ' in c:\Inetpub\wwwroot\aaa1.php:8 Stack trace: #0 c:\Inetpub\wwwroot\aaa1.php(8): com->com('ADOMD.Catalog', Array) #1 {main} thrown in c:\Inetpub\wwwroot\aaa1.php on line 8 ------------- Any idea what could be a problem? Thanks for the answer. MarkoAfter some testing and checking securities on both servers I have found out that ADOMD is not meant to be a DCOM object. Namely, in the connection string is written all necessary connection information (server, user, pass, OLAP Cube, etc.). In my case this is stored in variable ?$dsn?. Therefore, I have tried to connect to ADOMD COM object locally. In my reproduce code written above I have replaced the following line: $cat = new COM('ADOMD.Catalog', array( "Server" => "blackbox", "Username" => "administrator", "Password" => "default")); with line $cat = new COM('ADOMD.Catalog'); The connection with OLAP is established but the problem comes in the following line: $cat->ActiveConnection = $dsn; Result in Browser: Connection with OLAP has been established. Fatal error: Uncaught exception 'com_exception' with message 'Source: Microsoft? OLE DB Provider for Analysis Services Description: Property name was not recognized, 'Encoding'' So, communication is OK, only the parameters stored in ?$dsn? are ?wrong? or they supposed to be wrong. And why this doubt? I have checked the same syntax also with VisualScript code stored in VBS file and works fine with all parameters. Here is the testing example: Dim cat Set cat = CreateObject("ADOMD.Catalog") cat.ActiveConnection = "DATA SOURCE=blackbox;UID=sa;Initial Catalog=FoodMart 2000;Provider=MSOLAP;Encoding=windows-1250;Roles=skrbnik;" MsgBox cat.Name My impression is that ADOMD COM object works fine with windows technology (VisualBasic, ASP, etc.) but has problem when is called from PHP. I still suspect that could be a PHP internal problem when using ADOMD COM object. What is your opinion? Could you check this PHP and VBS code by yourself? Thanks, MarkoPHP doesn't touch the content of your strings (except to convert to UTF-16); it passes them on to the COM server, and its the COM server that's reporting an error. It seems unlikely that PHP is the cause. Can you try running your .vbs file from the same environment as PHP? eg: Create a PHP page that calls system("cscript.exe test.vbs") and then request that PHP page from your browser. (you will probably need to replace the MsgBox line with Echo)1. I put Read & Execute permissions on "cmd.exe" and "cscript.exe". 2. OLAP.VBS ---------------- Dim cat Set cat = CreateObject("ADOMD.Catalog") cat.ActiveConnection = "DATA SOURCE=blackbox;UID=sa;Initial Catalog=FoodMart 2000;Provider=MSOLAP;Encoding=windows-1250;Roles=skrbnik;" 3. COM_VBS.php ------------------- <?php $r = system('cscript.exe c:\OLAP.vbs', $a); echo "Result = " . $a; ?> 4.Result in Browser --------------------- Result = 1 No idea, does it work or does it not. There is no difference in result in Browser concerning of changes the DATA SOURCE parameter in Connection string. Either Local or Remote OLAP server, the result is the same. Did I miss something?