Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
raxz
HV Guru
liitunud: 27.07.2003
|
|
Kommentaarid: 46 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
45 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
07.07.2017 16:25:55
|
|
|
Kiire häkk on selle CCU_DDTK.exe väljundist number kätte saada. Ilusam lahendus on ennast sellest protokollist läbi närida ja ise klient kirjutada. Aga kuna paistab et tegemist on suhteliselt spetsiifilise asjaga, siis vaevalt see kellelgi siin käpas on.
Esimene lahendus ehk proge väljundi kinnipüüdmine võiks teoorias näiteks php proc_open funktsiooniga suhteliselt lihtne olla.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
raxz
HV Guru
liitunud: 27.07.2003
|
11.07.2017 11:40:05
|
|
|
napoleon kirjutas: |
Kiire häkk on selle CCU_DDTK.exe väljundist number kätte saada. Ilusam lahendus on ennast sellest protokollist läbi närida ja ise klient kirjutada. Aga kuna paistab et tegemist on suhteliselt spetsiifilise asjaga, siis vaevalt see kellelgi siin käpas on.
Esimene lahendus ehk proge väljundi kinnipüüdmine võiks teoorias näiteks php proc_open funktsiooniga suhteliselt lihtne olla. |
Saan ma õigesti aru, et proc_open kasutamiseks pean PHPd jooksutama samas masinas kus see .exe jookseb?
edit: Sain midagi käima, aga PHP skript peaks kuidagi ühe faili veel kätte saama, aga see jääb kätte saamata. CCU_DDTK.exe kaustas on ka FNID.DEF fail, mida PHP skript ei leia. CCU_DDTK leiab. Ehk on kellelgi soovitusi, kuidas see fail ka tööle saada?
CCU_DDTK.exe
Dos Toolkit version 4.61.4241
Loading definition file: FNID.DEF ... 319 Functions present.
Using COM2: for serial communication
Baudrate = 19200, Protocol = Full
Function ==> |
PHP väljund:
Dos Toolkit version 4.61.4241
Loading definition file: FNID.DEF ...Can't open defintion file: FNID.DEF |
PHP kood:
<?php
set_time_limit(1800);
ob_implicit_flush(true);
$exe_command = 'C:\\DDTK\\CCU_DDTK.exe';
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout OK
2 => array("pipe", "w") // stderr
);
$process = proc_open($exe_command, $descriptorspec, $pipes);
if (is_resource($process)) {
while( ! feof($pipes[1])) {
$return_message = fgets($pipes[1], 1024);
if (strlen($return_message) == 0) break;
echo $return_message.'<br />';
ob_flush();
flush();
}
}
?> |
|
|
Kommentaarid: 46 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
45 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
11.07.2017 12:37:02
|
|
|
Proovi nii
$process = proc_open($exe_command, $descriptorspec, $pipes, 'C:\\DDTK');
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
raxz
HV Guru
liitunud: 27.07.2003
|
11.07.2017 13:38:57
|
|
|
napoleon kirjutas: |
Proovi nii
$process = proc_open($exe_command, $descriptorspec, $pipes, 'C:\\DDTK'); |
Seda proovisin, jääb lehte laadima kuni timeout tuleb.
Ma saan ka käsitsi anda selle FNID.DEF fail programmile kaasa, aga selle peale ütleb Windows kohe, et CCU_DDTK.exe stopped working. Kui on vale fail või tee selleni, siis ütleb, et ei leia, aga kui annan talle õige faili, siis crashib.
EDIT: Panin nii exe kui ka .DEF faili htdocs kausta. Kui programm leiab selle FNID.DEF faili üles, siis jääb lehte laadima ja midagi ei toimu. Kui ei leia, siis annab veateate, et ei leia seda faili. Samas CCU_DDTK.exe protsessi tuleb Task Manageri järjest juurde...
|
|
Kommentaarid: 46 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
45 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
11.07.2017 13:45:52
|
|
|
Võibolla asi selles ongi, et proc_close on sul skripti lõpus puudu ja rippu jääb selleks, et eelmine protsess hoiab faili lukus. Tapa task manageris need protsessid maha ja proovi uuesti.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
raxz
HV Guru
liitunud: 27.07.2003
|
11.07.2017 14:07:59
|
|
|
napoleon kirjutas: |
Võibolla asi selles ongi, et proc_close on sul skripti lõpus puudu ja rippu jääb selleks, et eelmine protsess hoiab faili lukus. Tapa task manageris need protsessid maha ja proovi uuesti. |
Nii on jah. Aga nüüd oleks vaja see tekst kätte saada, mida seal minule nähtamatus protsessis tehakse. Skript jääb vist ootama, aga kuna tegevust ei lõpetata vaid see on pidev, siis ei ole ka tulemust?
|
|
Kommentaarid: 46 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
45 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
11.07.2017 15:09:45
|
|
|
Seal samas while tsükli sees see $return_message ongi see tekst.
Tõenäoliselt pead enne muidugi mikrofonide jälgimise sisse lülitama, see oleks siis enne while tsüklit umbes nii:
fputs($pipes[0],"vajalik käsk \r\n");
Võimaik, et see tsükkel on ka hetkel vale. while( ! feof($pipes[1]) viskab vist lusika nurka kui protsess parajasti mingit väljundit ei anna. Lõpuks peaks sul seal pigem while(true) olema, AGA see tekitab lõputu tsükli, seega peab tekitama ka mingi mooduse selle trükli katkestamiseks.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
raxz
HV Guru
liitunud: 27.07.2003
|
11.07.2017 16:06:36
|
|
|
Kuhu reale ma selle fputs panema peaksin?
proc_open avab programmi ja fputs annab siis parameetrid pärast programmi käivitamist? A la nagu serveriga ühendumine ja mikrofonide kuulamise avamine?
Edit:Kui ma avan “DDTK.exe -help” siis tuleb kogu nimekiri asjadest, mida teha saan. Kui annan aga IP aadressi kaasa, siis jääb ühendama ja programm avatuks. Vastust mulle ei anta. Seejärel tuleks veel mm_c_start_mon_mm käsk programmi sisestada ja reaalajas vastust kuulata.
|
|
Kommentaarid: 46 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
45 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
11.07.2017 17:31:06
|
|
|
see fputs ongi sama mis käsu andmine ehk siis:
php:
|
<?php $exe_command = 'C:\\DDTK\\CCU_DDTK.exe'; 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout OK 2 => array("pipe", "w") // stderr ); $process = proc_open($exe_command, $descriptorspec, $pipes); fput($pipes[0],"mm_c_start_mon_mm\r\n"); while(...
|
PS. tulevikus on seda skripti nutikam CLI modes jooksutada, aga praegu võid ju veebiserveri kaudu ka katsetada kui see mugavam tundub.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
raxz
HV Guru
liitunud: 27.07.2003
|
12.07.2017 13:34:37
|
|
|
Pmst on nii, et kui ma programmi käsurealt käivitan ja tahan väljundit näiteks faili kirjutada, siis avab küll protsessi, aga midagi liikuma ei hakka. "CCU_DDTK.exe -i192.168.0.100>out.txt" viskab tühja rea ja ootab. Ctrl+C lõpetab ära. Kui ma selle ">out.txt" ära jätan, siis programm töötab. PHPga on vist sama probleem. Kui ma midagi kaasa panen, siis ta ei hakka tööle. Kas sellest saab kuidagi ümber?
|
|
Kommentaarid: 46 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
45 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
12.07.2017 15:03:32
|
|
|
Üldiselt see väljund faili nagu toimiks. Võibolla selle proge kiiks. Võid proovida nii, et tee fail test.bat ja sinna sisse pane
CCU_DDTK.exe -i192.168.0.100
ja siis käivita test.bat > out.txt
kas php windowsis pipe-ga töötab, ei saa hetkel proovida, teoorias võiks töötada. Aga php-ga võid asjast alati nii mööda saada, et kirjutad juba php-ga huvipakkuva info faili. Kui veebiserveri kaudu php-d jooksutada, siis peab muidugi enne kontrollima, kas sellel kasutajal mille alt veebiserver jookseb on ikka õigus vastavasse kausta kirjutada.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
|