Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z funkcją exec()
Forum PHP.pl > Forum > Przedszkole
blackest
Witam,
robię na własne potrzeby skrypcik, który po uruchomieniu programu pokaże jak długo ten się wykonywał.
Mam mniej więcej skryp php, ale coś nie chce mi uruchamiac programu, oto skrypt:
  1. <?php
  2.  
  3. function getmicrotime(){
  4. list($usec, $sec) = explode(" ",microtime());
  5. return ((float)$usec + (float)$sec);
  6. }
  7.  
  8. $WshShell = new COM("WScript.Shell");
  9.  
  10. $start = getmicrotime();
  11.  
  12. $oExec = $WshShell->Run("cmd /C C:Documents and SettingsMasterAdminPulpitpvmloutputpvmldebugpvml.exe", 0, true);
  13.  
  14. $koniec = getmicrotime();
  15.  
  16. echo "Skrypt wykonany w ".round(($koniec - $start),2)." sekund";
  17.  
  18. ?>

Problem jest z funkcją exec(), gdyż nie uruchamia mi ona programu, a zawsze pokazuje że skrypt się wykonywał jakieś 0,07 sekundy (a jakby uruchomił program to ten czas byłby znacznie dłuższy).
Czy robię coś nie tak ?
Z góry dzieki za podpowiedzi
Pozdrawiam
Cezar708
an początek wyeskejpuj backslashe, bo nie wiem jak to by było interpretowane:

  1. <?php
  2. $oExec = $WshShell->Run("cmd /C C:Documents and SettingsMasterAdminPulpitpvmloutputpvmldebugpvml.exe", 0, true);
  3. ?>


zamiast:

  1. <?php
  2. $oExec = $WshShell->Run("cmd /C C:Documents and SettingsMasterAdminPulpitpvmloutputpvmldebugpvml.exe", 0, true);
  3. ?>

nie mam możliwości sprawdzić reszty co jest nie tak

Pozdrawiam
blackest
Muszę z przykrością stwierdzić iż to dalej nie działa.
Czas wykonywania się nieco wydłuzył (do 0,13 s), ale dalej skrypt nie uruchamia programu pvml.exe
Cezar708
szczerze mówiąc nie mam włączonego windowsa aby to sprawdzić, ale powiedz na jakiej podstawie stwierdzasz, że to nie działa? Może któryś parametr odpowiada za wyświetlanie wyników dry.gif questionmark.gif
blackest
programik pvml.exe ma za zadanie generować plik xml, sam w sobie ma wpisane gdzie szukać plików wejściowych, oraz gdzie zapisać plik wyjściowy. Jeśli wyśćiowy xml istnieje to zostanie nadpisany, jak go nie ma to zostanie utworzony.
Ponadto mam softa, który monitoruje czy coś z tym wyjśiowym się stało, jak zostanie nadpisany, to ten programik (XMLSpy) sam prosi o ponownie załadowanie pliku, a po wykonaoi skryptu jest cisza.

Na chwilę obecną skrypt wygląda tak:
  1. <?php
  2. function getmicrotime(){
  3.     list($usec, $sec) = explode(&#092;" \",microtime());
  4.     return ((float)$usec + (float)$sec);
  5. }
  6.  
  7. $start = getmicrotime();
  8.  
  9. $cmd = &#092;"C:Documents and SettingsMasterAdminPulpitpvmloutputPVMLDebugpvml.exe\";
  10. echo $cmd.&#092;"
  11. &#092;";
  12.  
  13.  
  14. exec(&#092;"cmd \".$cmd,$output);
  15.  
  16. print_r($output);
  17. $koniec = getmicrotime();
  18.  
  19. echo &#092;"Skrypt wykonany w \".round(($koniec - $start),2).\" sekund\";
  20.  
  21. ?>


a po wykonaniu mam coś takiego:
Kod
<BR>Array ( [0] => Microsoft Windows XP [Wersja 5.1.2600] [1] => (C) Copyright 1985-2001 Microsoft Corp. [2] => [3] => C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\generator> )<BR>

ścieżka ta jest katalogiem z którego uruchamiam mój skrypt (a generator to generator plików csv na potrzebny testowania szybkości działania pvml.exe)

Jeszcze jedna rzecz, zajrzałem do logów apacha i to co znalazłem:
Kod
Nazwa 'C:\Documents' nie jest rozpoznawana jako polecenie wewn©trzne lub zewn©trzne,
program wykonywalny lub plik wsadowy.


jakoś mi się udało to uruchomić, ale myk jest taki że po powykonaniu zewnętrzej aplikacji (pvml.exe), dolna część skryptu nie prostu się nie uruchamia, nie działa zmienna $koniec, jak i nie wyswietla się napis że skrypt wykonano w ileś tam
ktoś wie dlaczego się tak dzieje questionmark.gif?

  1. <?php
  2.  
  3. function getmicrotime(){
  4. list($usec, $sec) = explode(" ",microtime());
  5. return ((float)$usec + (float)$sec);
  6. }
  7.  
  8. $start = getmicrotime();
  9. echo date("s:u");
  10.  
  11. exec("pvmlpvml.exe", $output);
  12.  
  13. print_r($output);
  14. $koniec = getmicrotime();
  15. echo date("s:u");
  16.  
  17. echo "Skrypt wykonany w ".round(($koniec - $start),2)." sekund";
  18.  
  19. ?>
l0ud
Takie zjawisko występuje wtedy, gdy program sam się nie zakańcza. Skrypt na to oczekuje i wstrzymuje swoje wykonywanie...
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.