За последние 24 часа нас посетили 18075 программистов и 1599 роботов. Сейчас ищут 893 программиста ...

passthru(), exec() и т.д. процесс выполнения

Тема в разделе "Прочие вопросы по PHP", создана пользователем Langdon, 27 фев 2009.

  1. Langdon

    Langdon Активный пользователь

    С нами с:
    27 фев 2009
    Сообщения:
    12
    Симпатии:
    0
    Разобрался с работой этих функций, но возникла проблемка которая ставит под вопрос использование этих функций. Возможно ли отслеживать ход выполнения .exe файла, тоесть получать обратно в браузер шаг выполнения программы?
     
  2. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
  3. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    А вообще опиши-ка задачу, которая обязывает тебя использовать exec и passthru.
     
  4. Langdon

    Langdon Активный пользователь

    С нами с:
    27 фев 2009
    Сообщения:
    12
    Симпатии:
    0
    Есть такая прога ncftpput, мне по ней в фоновом режиме нужно загрузить файлы в указанном каталоге на ftp, после выполнения программы приходит результат выполнения. Но загружать файлы будут менеджеры и им нужно видеть что происходит. Так вот может эта прога незаточена на то что бы с нее получать что то, но ее можно переписать. Так вот вообще существует такая возможность чтобы с .exe получать строку выполнения в реальном времени. Может в самой проге прописать что то типа printf?! Короч использую ncftp так:


    Код (Text):
    1. $handle = passthru('start NcFTP/ncftpput.exe -F -u user_name -p passwd ip folder file', $result);
    где ip = ftp
    folder = папка на ftp
    file = загружаемый файл
     
  5. Langdon

    Langdon Активный пользователь

    С нами с:
    27 фев 2009
    Сообщения:
    12
    Симпатии:
    0
    Немного поковырявшись нашел хоть какойто вариант:

    Код (Text):
    1.  
    2. exec("ping -r 5 127.0.0.1",$results);
    3. $count=count($results);
    4.  
    5. for($i=0;$i<$count;$i++)
    6. {
    7.   print "$results[$i]<br>";
    8. }
    но опять же, данные полученные отображаются только в конце выполнения приложения, а хотелось бы получать их в реальном времени, но похоже что это невозможно :(
     
  6. NullWarez

    NullWarez Активный пользователь

    С нами с:
    3 мар 2009
    Сообщения:
    4
    Симпатии:
    0
    Код (Text):
    1. <?php
    2.  
    3. popen('php-win.exe myprogramm.php');
    4.  
    5. /*
    6.  
    7. */
    8.  
    9. while(true){
    10. if(check_semaphor()){
    11. /*
    12. читаем безопасно файл.
    13. */
    14. }else{
    15. break;
    16. }
    17. }
    18.  
    19. function check_semaphor(){
    20. $f = fopen('sempahror','r');
    21. if(lock($f,LOCK_EX+LOCK_NB)){
    22. return false;
    23. }else{
    24. return true;
    25. }
    26.  
    27.  
    28. ?>

    Код (Text):
    1. <?php
    2.  
    3. /*
    4. делаем какиета запросы, команды, все суем в переменную $RESULT;
    5. */
    6.  
    7. $f = fopen('result.txt','w');
    8. flock($f,LOCK_EX){
    9. fwrite($f,$result);
    10. }
    11.  
    12. ?>
    Кратко описал, надеюсь мысля понятна, а так.....


    <?php

    Код (Text):
    1. class multiprocess {
    2.    
    3. private $handle_semaphor = null;
    4. private $handle_output = null;
    5. private $file_semaphor = null;
    6. private $file_output = null;
    7.  
    8.     public function open_proccess($command,$cashfile,$semaphor){
    9.         if(!empty($cashfile)){
    10.             $this->file_output = $cashfile;
    11.         }else{
    12.             die('function open_proccess, not set varible cashfile or cashfile = null');
    13.         }
    14.         if(!empty($semaphor)){
    15.             $this->file_semaphor = $semaphor;
    16.         }else{
    17.             die('function open_proccess, not set varible semaphor or semaphor = null');
    18.         }
    19.         if(!file_exists($this->file_output)){
    20.             $f = fopen($this->file_output,'w');
    21.             fclose($f);
    22.         }
    23.         chdir(getcwd());
    24.         popen('start processor.dll '.$command,'r');
    25.     }
    26.     public function read_process_data(){
    27.         $f = fopen($this->file_output,'r');
    28.         flock($f,LOCK_EX);
    29.         $data = fread($f,filesize($this->file_output));
    30.         flock($f,LOCK_UN);
    31.         fclose($f);
    32.         return $data;
    33.     }
    34.     public function check_semaphor($semaphor){
    35.         if(file_exists($semaphor)){
    36.             $f = fopen($semaphor,'r');
    37.             if(flock($f,LOCK_EX+LOCK_NB)){
    38.                 flock($f,LOCK_UN);
    39.                 fclose($f);
    40.                 unlink($semaphor);
    41.                 return true;
    42.             }else{
    43.                 return false;
    44.             }
    45.         }else{
    46.             return false;
    47.         }
    48.     }
    49.     public function lock_semaphor($semaphor){
    50.         $this->handle_semaphor = fopen($semaphor,'w');
    51.         flock($this->handle_semaphor,LOCK_EX);
    52.     }
    53.     public function write_process_data($data,$cashfile){
    54.         if(!empty($cashfile)){
    55.             $this->file_output = $cashfile;
    56.         }else{
    57.             die('function open_proccess, not set varible cashfile or cashfile = null');
    58.         }
    59.        
    60.         if(!is_resource($this->handle_output)){
    61.             $this->handle_output = fopen($this->file_output,'w');
    62.             flock($this->handle_output,LOCK_EX);
    63.         }
    64.         fwrite($this->handle_output,$data);
    65.     }
    66. }
    67.  
    68. ?>

    :D :D :D

    Надеюсь помог, а ваще SHMOP круче =)
     
  7. zloiia

    zloiia Активный пользователь

    С нами с:
    11 сен 2009
    Сообщения:
    2
    Симпатии:
    0
    вдохнул, выдохнул, но так что то не разобрался, в чем же предназначение переменной $semaphor в вышеприведенном классе...