Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wykonaniem programu exe
Forum PHP.pl > Forum > PHP
flashdev
Witam,

Mam problem z wykonaniem programu exe z poziomu php.
Program bezpośrednio uruchomiony w windowsie lub konsoli command wykonuje się i zwraca kod błędu 0.
Natomiast uruchomiony z poziomu php (testowałem 3 różne funkcje), znajduje się cały czas na liście procesów w task menager.

Chodzi o program synchronizujący czas s serwerem ntp. Muszę napisać taki skrypt u siebie na komputerze lokalnym, ponieważ zegar chodzi jak chce.

Wszystkie pliki wrzucam tutaj:
http://www.sendspace.pl/file/K36Gy5ly/
Niestety w taki sposób, ponieważ nie wiem jak na tym forum dodać załacznik.


Edit:

Może powinienem był sprecyzować pytanie.
Dlaczego w moim kodzie program do synchronizacji czasu, uruchomiony poprzez php nie chce prawidłowow się wykonać i zamknąć, a co za tym idzie nie kończy się wykonywanie skryptu.

Ps. Gdyby ktoś bał się uruchomić tego pliku exe, to podaję skąd można ściągnąć ten program:
<a href="http://www.google.com/search?client=opera&...-8&oe=utf-8" target="_blank">http://www.google.com/search?client=opera&...-8&oe=utf-8</a>
marcio
Cytat
(testowałem 3 różne funkcje)

Mi przychodza do glowy 4 funkcje.

Czy przy tych 3 funkcjach aplikacja tak samo sie zachowywuje?
flashdev
testowałem:

Kod
exec("sntp\\adSNTP.exe");
//system("sntp\\adSNTP.exe");
//passthru("sntp\\adSNTP.exe");


Za każdym razem proces jest ciągle uruchomiony i nie chce się zamknąć, a skrypt nie kończy swego działania.

Może jest jakiś lepszy sposób na zdobycie aktualnego czasu?
marcio
Nie wiem czy to wiele zmieni ale uzyj jeszcze:
shell_exec();
popen();

Cytat
Może jest jakiś lepszy sposób na zdobycie aktualnego czasu?

Chodzi o aktualny czas systemowy?

Bo nie rozumiem.
bim2
Jeśli chcesz aby skrypt zakończył działanie, daj
sntp\\adSNTP.exe >> \dev\null\&
Chyba smile.gif
flashdev
Cytat(marcio @ 13.05.2009, 22:11:52 ) *
Nie wiem czy to wiele zmieni ale uzyj jeszcze:
shell_exec();
popen();


Nie wiem do końca jak użyć tego popen().
shell_exec() działa w tym przypadku tak samo jak exec() i jak te wszystkie wymienione funkcje.

Cytat(bim2 @ 13.05.2009, 22:45:06 ) *
Jeśli chcesz aby skrypt zakończył działanie, daj
sntp\\adSNTP.exe >> \dev\null\&
Chyba smile.gif


Co robi operator ">>" i co to jest "\dev\null\&".
Wpisanie tego w linii poleceń dosa wyrzuca tylko błędy.

Cytat(marcio @ 13.05.2009, 22:11:52 ) *
Chodzi o aktualny czas systemowy?

Bo nie rozumiem.


Nie napisałem na początku o co mi chodzi, a przecież nie każdy musi to odrazu wiedzieć.
Chce pobierać w swoim skrypcie aktualny czas przy pomocy funkcji date(), po to aby móc poukładać sobie w bazie danych pewne zdarzenia występujące w określonym czasie.
Jednak mój zegar systemowy nigdy nie działa zbyt dokładnie. W ciągu jednego dnia potrafi się przestawić nawet prawie 10 minut. A czasami lubi się przenieść do roku 2060. Dlatego właśnie chciałbym z poziomu php uruchamiać ten program raz na kilka-kilkanaście minut.
marcio
  1. <?php
  2. $f = popen ("/bin/bash","w");
  3. ?>

Przegladam manuala php i tam masz np przyklady otwierasz powloke do zapisu i wysylasz do niej polecenia za pomoca fwrite().

I wiele innych sam poogladaj http://it.php.net/popen.

P.S a masz napewno wlaczone funkcje ktore probowalems uzyc bo nie pamietam teraz ale jak sa wylaczone to nie zwraca error'u wiec wiesz moze to jest tym spowodowane.
flashdev
Cytat(marcio @ 14.05.2009, 14:26:35 ) *
  1. <?php
  2. $f = popen ("/bin/bash","w");
  3. ?>

Przegladam manuala php i tam masz np przyklady otwierasz powloke do zapisu i wysylasz do niej polecenia za pomoca fwrite().

I wiele innych sam poogladaj http://it.php.net/popen.


Słabo się w tym orientuje i po użytej przez Ciebie ścieżce mam wątpliwości czy to wogóle działa pod windowsem.

W każdym razie nie chodzi mi o poznanie wszystkich metod otwierania pliku, które i tak pewnie tutaj zawiodą.
Chcę sie dowiedzieć dlaczego program, który uruchamiam podwójnym kliknięciem lub wpisując jego nazwę w konsoli dos`a. Wykonuje się poprawnie i kończy swoje działanie, a po uruchomieniu przy pomocy php, nie wykonuje tego co trzeba i nie kończy swojego działaniatylko dalej "wisi" w uruchomionych procesach.
Program uruchamia sie bez żadnych parametrów i nie wymaga interakcji z użytkownikiem.

I jeszcze jedno pytanie.
Zadałeś sobie trud ściągnięcia mojego pliku i próby uruchomienia go w taki sposób, czy próbujesz mi pomóc na ślepo?


Cytat(marcio @ 14.05.2009, 14:26:35 ) *
P.S a masz napewno wlaczone funkcje ktore probowalems uzyc bo nie pamietam teraz ale jak sa wylaczone to nie zwraca error'u wiec wiesz moze to jest tym spowodowane.


Są włączone. Testowałem je plikami .bat i innymi poleceniami.
marcio
Cytat
Zadałeś sobie trud ściągnięcia mojego pliku i próby uruchomienia go w taki sposób, czy próbujesz mi pomóc na ślepo?

No troche na slepo nie chce sciagac tongue.gif

A jeszcze jedno pytanie probujesz otworzyc plik z prawami Root'a??

Oczywiscie przyklad podalem dla Unix'ow ale mysle ze konsole w Win tez dasz rade otworzyc.
flashdev
Dodam jeszcze, że po uruchomieniu programu w konsoli są wykonywane takie operacje:

Kod
Twój PC                  : 157.158.161.210 [6c4d8499d24b4c1]
Serwer czasu             : vega.cbk.poznan.pl [150.254.183.15]
Numer portu              : 123
Head1.Byte1.             : Dec(28), Hex(0000001c) [pierwszy bajt datagramu]
.Wskaźnik sekundy (LI)   : 0 [brak ostrzeżeń]
.Numer wersji (VN)       : 3 [oznaczenie wer. protokołu]
.Tryb pracy              : 4 [serwer]
Stratum                  : 1 [pierwszorzędne źródło (np. zegar radiowy)]
Interwał odpytujący      : 0 [2**0 = 1 s, maks. odst. pomiędzy komunikatami]
Prec. zegara serwera     : -15 [2**-15 = 0,000030517578... s = 32768,0 Hz]
Opóźnienie podróży       : 0,000 s [względem pierwszorzędnego źródła]
Współczynnik dyspersji   : 0,001 s [względem pierwszorzędnego źródła]
ID źródła czasu          : PPS
Ostatni czas źródła      : 2009-05-14 17:16:32,521
Czas wysłania PC         : 2009-05-14 17:16:40,547 [T1]
Czas odbioru serwera     : 2009-05-14 17:16:40,328 [T2]
Czas odesłania serwera   : 2009-05-14 17:16:40,328 [T3]
Czas odbioru PC          : 2009-05-14 17:16:40,564 [T4]
Opóźnienie podróży       : 0,017 s [(T4 - T1) - (T3 - T2)]
Poprawka zegara PC       : -0,227 s [((T2 - T1) + (T3 - T4)) / 2]
Twoja strefa czasowa     : Środkowoeuropejski czas stand. [GMT+02:00]
Poprawiony czas lokalny  : 2009-05-14 17:16:40 [czwartek]
Poprawiony czas GMT      : 2009-05-14 15:16:40 [czwartek]
Synchronizacja zegara PC : OK [kod rezultatu: 0]


Z kolei po uruchomieniu poprzez php program zatrzymuje się po wyliczeniu współczynnika dyspresji (cokolwiek to jest). A zatem php zwraca coś takiego:

Kod
Array ( [0] => adSNTP - Klient SNTP wer. 1.3.2, Win NT 5.1 (2600, Dodatek Service Pack 2) [1] => Copyright (c) 2005, 2006 A. Osiciäska-Dudka, A. Dudka (2009-05-13) [2] => [3] => Tw˘j PC : 157.158.161.210 [6c4d8499d24b4c1] [4] => Serwer czasu : vega.cbk.poznan.pl [150.254.183.15] [5] => Numer portu : 123 [6] => Head1.Byte1. : Dec(28), Hex(0000001c) [pierwszy bajt datagramu] [7] => .WskaŤnik sekundy (LI) : 0 [brak ostrzežeä] [8] => .Numer wersji (VN) : 3 [oznaczenie wer. protokoˆu] [9] => .Tryb pracy : 4 [serwer] [10] => Stratum : 1 [pierwszorzŠdne Ťr˘dˆo (np. zegar radiowy)] [11] => Interwaˆ odpytujĽcy : 0 [2**0 = 1 s, maks. odst. pomiŠdzy komunikatami] [12] => Prec. zegara serwera : -17 [2**-17 = 0,000007629395... s = 131072,0 Hz] [13] => Op˘Ťnienie podr˘žy : 0,000 s [wzglŠdem pierwszorzŠdnego Ťr˘dˆa] [14] => Wsp˘ˆczynnik dyspersji : 0,006 s [wzglŠdem pierwszorzŠdnego Ťr˘dˆa] )


Nie mam pojęcia co się w tym programie dzieje, że uruchomiony z php zatrzymuje się w tym miejscu. Nie zanm na tyle języka Delphi.

Widzę, że raczej nie ma pomysłów na ten problem więc prościej będzie jak poszukam kodu php, który pobiera aktualny czas z serwera ntp.

Dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.