(From?) PHP 5.4.5 for Windows:
If you are seeing this in your error log:
Fatal error: Class 'COM' not found
You require this in php.ini:
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
Previously it was compiled as built-in on the Windows build. I assume this has happened because the com extension can now be built as a shared component.
COM y .Net (Windows)
- Introducción
- Instalación/Configuración
- Constantes predefinidas
- Errores y manejo de errores
- Ejemplos
- COM — The COM class
- DOTNET — La clase DOTNET
- VARIANT — VARIANT class
- Funciones de COM
- com_addref — Aumenta el contador de referencia de componentes [obsoleto]
- com_create_guid — Generar un identificador único globalmente (GUID)
- com_event_sink — Conectar eventos de un objeto COM a un objeto PHP
- com_get_active_object — Devuelve un gestor a una instancia de un objeto COM ya en ejecución
- com_get — Obtiene el valor de una propiedad de un Componente COM Component [obsoleto]
- com_invoke — Llama a un método de un componente COM [obsoleto]
- com_isenum — Indica si un objeto COM tiene una interfaz IEnumVariant para iteraciones [obsoleto]
- com_load_typelib — Carga una biblioteca de tipos
- com_load — Crea una nueva referencia a un componente COM [obsoleto]
- com_message_pump — Procesar mensajes COM, durmiendo hata timeoutms milisegundos
- com_print_typeinfo — Imprime una definición de clase de PHP para una interfaz despachable
- com_propget — Alias de com_get
- com_propput — Alias de com_set
- com_propset — Alias de com_set
- com_release — Disminuye el contador de referencia de componentes [obsoleto]
- com_set — Asigna un valor a una propiedad de un componente COM
- variant_abs — Devuelve el valor absoluto de una variante
- variant_add — "Suma" dos variantes y devuelve el resultado
- variant_and — Realiza una operación AND a nivel de bits entre dos variantes
- variant_cast — Convertir una variante en un nuevo objeto variante de otro tipo
- variant_cat — Concatena dos valores de variantes y devuelve el resultado
- variant_cmp — Compara dos variantes
- variant_date_from_timestamp — Devuelve una representación de variante de fecha de una fecha Unix
- variant_date_to_timestamp — Convierte un valor de una variante de fecha/hora en una fecha Unix
- variant_div — Devuelve el resultado de dividir dos variantes
- variant_eqv — Realiza una equivalencia a nivel de bits en dos variantes
- variant_fix — Devuelve la parte entera de una variante
- variant_get_type — Devuelve el tipo de un objeto variante
- variant_idiv — Convierte variantes a enteros y después devuelve el resultado dividiéndolos
- variant_imp — Realiza una implicación a nivel de bits de dos variantes
- variant_int — Devuelve la parte entera de una variante
- variant_mod — Divide dos variantes y devuelve sólo el resto
- variant_mul — Multiplica los valores de dos variantes
- variant_neg — Realiza una negación lógica de una variante
- variant_not — Realiza una negación NOT a nivel de bits en una variante
- variant_or — Realiza una disyunción lógica de dos variantes
- variant_pow — Devuelve el resultado de realizar la exponenciación con dos variantes
- variant_round — Redondea una variante al número de lugares decimales especificado
- variant_set_type — Convierte una variante en otro tipo "in situ"
- variant_set — Asigna un nuevo valor para un objeto variante
- variant_sub — Resta el valor de la variante derecha del valor de la varienta izquierda
- variant_xor — Realiza una exclución lógica de dos variantes
robert dot johnson at icap dot com ¶
9 months ago
Dave Bachtel ¶
3 years ago
Hello everybody!
Here is some helpful advice for people attempting to use COM with Microsoft MapPoint 2006 or 2009 with PHP.
If you are using apache, it MUST be running under the same credentials as a desktop user that has already installed/run mappoint or modifiy the service and select the "Allow Service to Interact with Desktop" option. Otherwise, it won't work due to the EULA popup having to be accepted. Mappoint 2004 works just fine, this only applies to 2006 and 2009.
For troubleshooting, the error that appears in the System event viewer is:
The server {31851F82-AFE6-11D2-A3C9-00C04F72F340} did not register with DCOM within the required timeout.
The error generated by PHP, if you happen to get lucky and let the COM() function timeout by cranking up set_time_limit() timeout is:
<?php
set_time_limit(1000) ;
$mapoint = new COM("MapPoint.Application") or die("Unable to instantiate Mappoint COM object");
?>
Generates:
Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `MapPoint.Application': Server execution failed ' in [somefile.php]:9 Stack trace: #0 [somefile.php](9): com->com('MapPoint.Applic...') #1 {main} thrown in [somefile.php] on line 9
Also, if you have multiple versions of MapPoint installed, you will need to run:
c:\path\to\mappoint\MapPoint.exe /registerserver
(using the correct folder path) to select the right version of the com object to use. Gooood luck!
Anonymous ¶
3 years ago
Add hyperlink at a Word Document's bookmark
<?php
// Create COM instance to word
function clsMSWord($Visible = false)
{
$this->handle = new COM("word.application") or die("Unable to instanciate Word");
$this->handle->Visible = $Visible;
}
function WriteHyperlink($Bookmark,$Path,$Text)
{
$objBookmark = $this->handle->ActiveDocument->Bookmarks($Bookmark);
$range = $objBookmark->Range;
$objHyperlink = $this->handle->ActiveDocument->Hyperlinks;
$objHyperlink->add($range,$Path,"","",$Text);
}
?>
acsandeep at gmail dot com ¶
4 years ago
If you are trying to get the properties of a Word document opened via COM object, you may need to define some constants in your script like so.
<?php
define('wdPropertyTitle', 1);
define('wdPropertySubject', 2);
define('wdPropertyAuthor', 3);
define('wdPropertyKeywords', 4);
define('wdPropertyComments', 5);
define('wdPropertyTemplate', 6);
define('wdPropertyLastAuthor', 7);
$word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath("Sample.doc"));
$Author = $word->ActiveDocument->BuiltInDocumentProperties(wdPropertyAuthor);
echo $Author;
?>
long2hu3 ATT yahoo DOTT com ¶
4 years ago
When you work with MS Excel, Word, ... and other applications, never forget that COM doesn’t know their predefined constants, thus if you want to do sth. that would look like this in VB:
With myRange.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
you should either use numbers or define constants above, like this:
<?php
define('xlEdgeBottom', 9);
define('xlContinuous', 1);
define('xlThin', 2);
define('xlAutomatic', -4105);
$ex = new COM("Excel.Application", NULL, CP_UTF8) or Die ("Did not instantiate Excel");
$wb = $ex->Application->Workbooks->Add();
$ws = $wb->Worksheets(1);
$xra = $ws->Range("A1:A6");
$bs = $xra->Borders(xlEdgeBottom);
$bs->LineStyle = xlContinuous;
$bs->Weight = xlThin;
$bs->ColorIndex = xlAutomatic;
?>
It is pointless to try to use text strings, i.e.
<?php
$bs = $xra->Borders('xlEdgeBottom');
$bs->Weight = 'xlThin';
?>
this will cause an error: Unable to set property Weight of class Border ...
ilayansmano at gmail dot com ¶
4 years ago
Extracting text from Word Documents via PHP and COM
<?php
$word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath("Sample.doc"));
// Extract content.
$content = (string) $word->ActiveDocument->Content;
echo $content;
$word->ActiveDocument->Close(false);
$word->Quit();
$word = null;
unset($word);
?>
