Jarosław R.

Jarosław R. Pragmatyczny
Idealista

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Witam,

API dotyczy platformy inwestycyjnej, dokumentacja do niego znajduje się tutaj: http://vtsoftware.fxserver.com/VTapi/doc/VTapi_Help.pdf

Posiadam bibliotekę API w formie pliku *.dll i kurcze nie mogę zmusić PHP/Apacha do pracy z nią za pośrednictwem COMa.
Dodam, że z poziomu CLI skrypt działa. Wywołuję funkcję Login() i otrzymuję spodziewany zwrot informacji w postaci ciągu XML.

Biblioteka na pewno działa, bo również są przykłady dla innych języków i działają.
Bibliotekę *.dll z API rejestrowałem poprzez uruchomienie CMD na prawach Administratora i wpisanie REGSVR32 nazwa-pliku.dll
Po wciśnięciu Enter wyskoczyło okno dialogowe informujące, że z sukcesem udało się przeprowadzić operację.
Sprawdzałem następnie w Rejestrze Windowsa i na pozycji HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jest-nazwa-klasy-którą-zarejestrowałem

Aby wyeliminować błąd konkretnej biblioteki stworzyłem obiekt COM z systemu windows:

<?php
error_reporting('E_ALL');
$wshShell = new COM("WScript.Shell");
$WshShell->Run("cmd /C notepad.exe", 3, false);
var_dump($wshShell);
?>


Niestety efekty takie same. W CLI: otworzyło się okno konsoli, a następnie Notatnik się uruchomił.
W przeglądarce: wyświetlony został tylko tekst NULL, nie uruchomił się Notatnik.

Wnioskuję z tego, że mam coś źle skonfigurowane w Apachu, ale co? Po uruchomieniu skryptu przez przeglądarkę trwa jego dłuuuga praca, a następnie pojawia się strona z błędem serwera 500.

Dodam, że próbowałem uruchamiać skrypt pod PHP działającym jako moduł Apacha, a teraz jako FastCGI i niestety efekty te same.

Ktoś coś poradzi?
Tomasz Zadora

Tomasz Zadora programuję

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

W tym momencie do głowy przychodzi mi tylko prymitywne rozwiązanie: uruchamianie skryptu CLI PHP, z poziomu PHP wywoływanego przez Apache przez komendę system, lub podobne:

http://pl1.php.net/system

Inna propozycja - spróbować z innym serwerem www, np. Nginx który bezproblemowo instaluje się na windowsie i łatwo konfiguruje do współpracy z PHP.

konto usunięte

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Jarosław R.:
Wnioskuję z tego, że mam coś źle skonfigurowane w Apachu, ale co? Po uruchomieniu skryptu przez przeglądarkę trwa jego dłuuuga praca, a następnie pojawia się strona z błędem serwera 500.

Dodam, że próbowałem uruchamiać skrypt pod PHP działającym jako moduł Apacha, a teraz jako FastCGI i niestety efekty te same.

Ktoś coś poradzi?

apacz działa jako jaki user? bo to ma o tyle znaczenie że każdy proces odpalany jest w kontekście tamtego usera standardowo SYSTEM, więc jakim cudem notepad odpalony dla usera SYSTEM ma pojawić się na twoim ekranie?

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Jak dostajesz ISE (500) to w logach masz dlaczego - tam zerknij.
Jarosław R.

Jarosław R. Pragmatyczny
Idealista

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Sebastian O.:
Jak dostajesz ISE (500) to w logach masz dlaczego - tam zerknij.
Są logi i wychodzi, że time out przy czekaniu na połączenie:

[Wed Aug 27 10:25:15.663453 2014] [ssl:warn] [pid 8808:tid 456] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Wed Aug 27 10:25:15.667450 2014] [mpm_winnt:notice] [pid 8808:tid 456] AH00455: Apache/2.4.9 (Win32) OpenSSL/1.0.1g mod_fcgid/2.3.9 configured -- resuming normal operations
[Wed Aug 27 10:25:15.667450 2014] [mpm_winnt:notice] [pid 8808:tid 456] AH00456: Apache Lounge VC11 Server built: Mar 16 2014 12:13:13
[Wed Aug 27 10:25:15.668451 2014] [core:notice] [pid 8808:tid 456] AH00094: Command line: 'c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -d C:/wamp/bin/apache/apache2.4.9'
[Wed Aug 27 10:25:15.670452 2014] [mpm_winnt:notice] [pid 8808:tid 456] AH00418: Parent: Created child process 15520
[Wed Aug 27 10:25:17.936737 2014] [ssl:warn] [pid 15520:tid 328] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Wed Aug 27 10:25:17.945747 2014] [mpm_winnt:notice] [pid 15520:tid 328] AH00354: Child: Starting 64 worker threads.
[Wed Aug 27 10:34:47.330323 2014] [fcgid:warn] [pid 15520:tid 1000] [client ::1:63294] mod_fcgid: read timeout from pipe
[Wed Aug 27 10:34:47.330323 2014] [core:error] [pid 15520:tid 1000] [client ::1:63294] End of script output before headers: index.php
[Wed Aug 27 10:34:54.212683 2014] [fcgid:warn] [pid 15520:tid 428] mod_fcgid: process 17964 graceful kill fail, sending SIGKILL

Uruchomienie Wampservera jako Administrator (Uruchom jako) nie rozwiązuje problemu.Ten post został edytowany przez Autora dnia 27.08.14 o godzinie 10:47

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Przemysław R.:
każdy proces odpalany jest w kontekście tamtego usera standardowo SYSTEM, więc jakim cudem notepad odpalony dla usera SYSTEM ma pojawić się na twoim ekranie?

U mnie proces chodzi na aktualnym userze więc może dlatego jest ok.

@Jarosłw

Zainstaluj xampp(tylko nie jako usługę a uruchamiany ręcznie), do php.ini na końcu dopisz

[COM_DOT_NET]
extension=php_com_dotnet.dll

i powinno działać.Ten post został edytowany przez Autora dnia 27.08.14 o godzinie 12:31
Jarosław R.

Jarosław R. Pragmatyczny
Idealista

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Sebastian O.:
Przemysław R.:
każdy proces odpalany jest w kontekście tamtego usera standardowo SYSTEM, więc jakim cudem notepad odpalony dla usera SYSTEM ma pojawić się na twoim ekranie?

U mnie proces chodzi na aktualnym userze więc może dlatego jest ok.

@Jarosłw

Zainstaluj xampp(tylko nie jako usługę a uruchamiany ręcznie), do php.ini na końcu dopisz

[COM_DOT_NET]
extension=php_com_dotnet.dll

i powinno działać.
Hmm...
Zdecydowałem nie wgłębiać się w to dlaczego nie chodzi przez Apacha, ale pewnie coś z prawami/użytkownikami.
Dane będę pobierał przez COM-PHP działający w CLI i ładował do bazy, a z bazy będę już czytał normalnie PHPem i w przeglądarce będzie działać.

Priorytet jest na razie by w ogóle osiągnąć cel w postaci dostania się do zleceń systemu i zrobienia z nimi pewnych rzeczy.

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Nie bardzo mam czas przeglądać doc tego api ale na początku jest napisane:
'VTAPI Samples are located in Samples subfolder. Currently provided: C#, VB.NET, Java, Delphi, VBA, Perl. '
więc może zamiast bawić się w COM-PHP działający w CLI to napisać prostą appkę w jednym z tych jezykow jeżeli to ma tylko ładować dane do bazy ?

Zależy jeszcze na czym chcesz to postawić ? Bo chyba nie na kompie z WAMP w domu ? :)
Być może na serwerze ruszy.
Tomasz Zadora

Tomasz Zadora programuję

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Można to też spróbować zrobić to w ten sposób, żeby między tą kontrolką COM a PHP postawić pośrednika napisanego np. w Javie, Wtedy PHP będzie się odwoływać do Javy a nie COM/dll, używając do tego np.: http://php-java-bridge.sourceforge.net/pjb/

konto usunięte

Temat: API w pliku DLL - użycie przez PHP za pośrednictwem COM

Jarosław R.:
Priorytet jest na razie by w ogóle osiągnąć cel w postaci dostania się do zleceń systemu i zrobienia z nimi pewnych rzeczy.

odpalaj skrypty PHP z CLI Windows-a
http://php.net//manual/pl/install.windows.commandline.php

włącz pokazywanie wszystkich błędów na ekran

będziesz wiedział co się dzieje a komunikaty nie będą ginąć w nicościTen post został edytowany przez Autora dnia 28.08.14 o godzinie 08:44

Następna dyskusja:

Api Facebooka/PHP - zliczan...




Wyślij zaproszenie do