[PHP] COM functie probleem

Pagina: 1
Acties:
  • 158 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Hoi,

Dinsdag heb ik een topic geopend, omdat ik met exec() een probleem had zie: [PHP] Exec() werkt niet

De conclusies van de topic is dat ik niet exec(), maar com() als funcite nodig heb.

Probleem is dat com() niet werkt, zoals het zou moeten.

Het volgende:
Ik heb het voorbeeld 1 uit de php manual gekopieerd en in een scriptje gezet.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// start Word op
$word = new COM("word.application") or die("Kon Word niet starten");
print "Word versie {$word->Version} geladen\n";

// Brengt het naar voren
$word->Visible = 1;

// Opent een leeg document
$word->Documents->Add();

// Doe wat raars
$word->Selection->TypeText("Dit is een test...");
$word->Documents[1]->SaveAs("Zinloze test.doc");

// Sluit Word
$word->Quit();

// Geeft het object vrij
$word->Release();
$word = null;
?> 

Als ik nu het script start, wordt er eindeloos gewacht op localhost en uiteindelijk komt er een foutmelding "Fatal error: Maximum execution time of 60 seconds exceeded in enz. enz."

Als ik taskmanager open, wordt direct na het runnen van het script wel Winword.exe gestart, maar gebeurd er verder niets. Winword.exe sluit niet zelf af , maar wordt ook niet zichtbaar als applicatie in de taakbalk.

In php.ini heb ik de volgende settings m.b.t. COM


[COM]
; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs
com.typelib_file =/
; allow Distributed-COM calls
com.allow_dcom = true
; autoregister constants of a components typlib on com_load()
com.autoregister_typelib = true
; register constants casesensitive
com.autoregister_casesensitive = false
; show warnings on duplicate constat registrations
com.autoregister_verbose = true

Dit zou moeten werken, toch ?

Nog even terug naar het oorspronkelijke topic dat ik starte. De functie exec() doet het ook nog steeds niet.

Kan dit alles liggen aan settings in mijn php.ini, settings in Apache of soms nog iets anders?

Ik hoop dat jullie me kunnen helpen.

Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Bedenk je wel dat je hiermee Word op een webserver gaat opstarten. Weet je wel *heel* zeker dat je dat wil? Dat wordt nml zo'n beetje altijd afgeraden omdat het verschrikkelijk resources inneemt als er meer dan een paar gebuikers zijn die dit uitvoeren. Daarnaast is Word gewoon niet bedoeld voor dit soort handlingen.

日本!🎌


Acties:
  • 0 Henk 'm!

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Nee, de bedoeling is dat er aan client-side een app wordt opgestart, in dit geval Word.
In het topic waar ik naar verwijs is deze discussie al gevoerd.

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Jij snapt het verschil nog niet tussen clientside en serverside. PHP is serverside, alles wat je daar uit voert blijft daar. Je kun dus nooit direct met php code een Word process opstarten aan de gebruikerskant.

Wat je nu doet is op de server Word starten en die staat daar maar te wachten totdat er iets gebeurd. Nja er gebeurd dus niets en PHP blijft maar wachten tot de timeout en dan krijg je een error te zien.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

PHP word serverside uitgevoerd, dus dat gaat niet werken op deze manier. Iets wat in het vorige topic idd ook al werd genoemd :) Je kan PHP niks clientside laten doen. Ook vanuit bijv. javascript is het normaal gesproken niet mogelijk om Word te starten en dan iets met Word te doen. Als je dat echt wilt doen is een webapplicatie niet de manier om dit te realiseren.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Wat je kunt doen is een vbscript in je html uitvoer zetten, en daarmee Word starten, als in
HTML:
1
2
3
4
5
6
<html><body><script language="VBScript">
dim wrd
set wrd = CreateObject("Word.Application")
wrd.visible=true
wrd.quit
</script></body></html>


Dat werkt alleen in Internet Explorer, en IE zal wat klagen over beveiligingsproblemen als je het lokaal opstart. Over internet zul je de gebruiker waarschijnlijk zover moeten krijgen dat jouw website bij trusted sites staat.

Als je Word iets wilt laten doen aan de hand van je php script, zul je je php script een vbs script moeten laten maken.

Acties:
  • 0 Henk 'm!

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Dit klinkt erg veel belovend.

Als ik thuis ben ga ik dit even proberen. Alvast bedankt _/-\o_

Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47

killercow

eth0

chicky schreef op vrijdag 25 augustus 2006 @ 16:38:
Dit klinkt erg veel belovend.

Als ik thuis ben ga ik dit even proberen. Alvast bedankt _/-\o_
WAAR ben je in gods naam mee bezig?

VBscript, is geen standaard, en nu sluit je dus een groot deel van de wereld buiten.
is het niet gewoon handiger ene bestandje ter download aan te bieden?

Eventueel zelfs een rtf bestand aanbieden?
Iedere gebruiker kan dan zelf beslissen in welk programma ze iets willen openen.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
chicky schreef op vrijdag 25 augustus 2006 @ 16:38:
Dit klinkt erg veel belovend.

Als ik thuis ben ga ik dit even proberen. Alvast bedankt _/-\o_
Indien alleen word geopend moet worden, stuur dan een leeg rtf bestand.
Als er in word een tekst moet komen te staan maak dit op je webserver aan als rtf-bestand en stuur het dan naar de client.

Indien word geinstalleerd is dan is dit toch meestal de standaard rtf-client. Dus dit zit wel goed. En ipv een closed source binary formaat(.doc) aan te maken is rtf gewoon een openbare standaard die ook door openoffice etc gelezen kan worden.

Acties:
  • 0 Henk 'm!

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Ik begrijp alle commotie.

Zoals al genoemd in het topic waar ik bovenaan al naar verwees.

De bedoeling is dat er een web based database app wordt gemaakt (wat op een intranet draaid) om relatie beheer e.d. mee uit te voeren. Ook moet het mogelijk zijn om een document te maken wat aan bijv een relatie is gekoppeld.
Het document wordt op de server opgeslagen. In de database wordt een verwijzing opgenomen waar het document zich bevind, aan welke relatie het is gekoppeld en hoe het heet enz. enz.
Het document is bijv. een standaard faxbericht, met daar automatisch het faxnummer en naam van een relatie in. Het faxbericht wordt door de gebruiker verder ingevuld of aangepast.

Om dit te doen is het (volgens mij) nodig om aan de client-side Word (of iets dergelijks) op te starten zodat het standaard faxbericht kan worden aangepast.
Of dit nou word of openoffice of van mijn part notepad is, is denk ik niet van belang.

Nadat het faxbericht door de gebruiker naar believe is aangepast (de tekst is erin getyped), kan het document bijv. worden geprint en worden opgeslagen (onder de naam en pad wat in de database is vastgelegd).

Het totaal maken van een document in een vast formulier is denk ik te beperkt, omdat het dan bijv niet mogelijk is om afbeeldingen, tabel e.d. in het document te plakken.

Als iemand denkt, dat voor het aanpassen van het document het niet nodig is om Word aan de client-side op te starten hoor ik dat graag.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ok, intranet. Dan zou ik heel simpel op de server een rtf-document aanmaken met de basisgegevens erin. RTF document opslaan op server, dan via de webbrowser een rechtstreekse file:// link ( of webdav constructie ) naar de gebruiker sturen.
Op dat moment opent de gebruiker gewoon rechtstreeks het document op de server, als hij kiest voor opslaan wordt het gewoon op de server opgeslagen.

En dan gewoon rtf omdat dit door word voor 97% van de opmaak gezien wordt als een standaard word-document en rtf is gewoon heel makkelijk aan te maken. Als je echt een worddocument wilt hebben kan je ook op jouw manier een officiele .doc aanmaken, maar dan mag je wel een flinke server hebben als die tijdens pieken even 25x word tegelijk moet opengooien en sluiten. RTF is alleen maar tekst wegschrijven, gebruiker merkt geen verschil server merkt groot verschil :)

Maar eigenlijk is het enige wat jij moet doen om jouw effect te krijgen zorgen dat een bestand ( .doc of .rtf ) ipv over internet gewoon lokaal over het netwerk geopend wordt ( door ipv http:// file:// of webdav te gebruiken )

Dan zou je er moeten zijn.

Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47

killercow

eth0

Waarom gebruik je niet gewoon een Rich text editor?

Aka een tekst veld in je html, welke door middel van alom bekende wysiwyg tools omgezet wordt in een Word achtige tekst verwerker.

Kun je prima plaatjes, tabellen en andere dingen in slaan.
Je houdt nu vreselijk krampachtig vast aan de client-side office tools, maar die heb je absoluut niet nodig.

Zeker als je op de server daarna weer allerlei dingen met de invoer wilt gaan doen is een Traditioneel bestand een ramp. Docjes verwerken is lastig, en niet 100% fool proof te doen.

Kortom:

textarea in je formulier.
Opmaak tools erover heen (zie writely.com voor voorbeeldje)
En opslaan in de db als html. (of los op disk, en dan een reference ernaar opslaan)

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • Mysteryman
  • Registratie: Februari 2001
  • Laatst online: 21-09 11:44

Mysteryman

kan jij wat ik kan...

Wat je ook zou kunnen doen is een PDF maken van het geheel... Je kan dan namelijk gewoon al je data uit de database halen en deze wegschrijven naar een PDF bestand

PHP bevat zelf al deze functies en deze kan je allemaal HIER terug vinden...

Everybody happy??? I soon change that here we go...


Acties:
  • 0 Henk 'm!

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Hoi,

Zoals Gomez12 en killercow voorstelde om met *.rtf files te werken, heb ik dit van het weekend geprobeerd en dit is de oplossing.
Een standaard document in RTF formaat met invoer velden (bijv. %%NAAM%%). De data uit de db halen en in het RTF files zetten. Het bestand opslaan onder de naam die ik wil, naam en locatie in de db opslaan en klaar.

Harstikke bedankt allemaal. :) :)
Pagina: 1