Разобрался с работой этих функций, но возникла проблемка которая ставит под вопрос использование этих функций. Возможно ли отслеживать ход выполнения .exe файла, тоесть получать обратно в браузер шаг выполнения программы?
Есть такая прога ncftpput, мне по ней в фоновом режиме нужно загрузить файлы в указанном каталоге на ftp, после выполнения программы приходит результат выполнения. Но загружать файлы будут менеджеры и им нужно видеть что происходит. Так вот может эта прога незаточена на то что бы с нее получать что то, но ее можно переписать. Так вот вообще существует такая возможность чтобы с .exe получать строку выполнения в реальном времени. Может в самой проге прописать что то типа printf?! Короч использую ncftp так: Код (Text): $handle = passthru('start NcFTP/ncftpput.exe -F -u user_name -p passwd ip folder file', $result); где ip = ftp folder = папка на ftp file = загружаемый файл
Немного поковырявшись нашел хоть какойто вариант: Код (Text): exec("ping -r 5 127.0.0.1",$results); $count=count($results); for($i=0;$i<$count;$i++) { print "$results[$i]<br>"; } но опять же, данные полученные отображаются только в конце выполнения приложения, а хотелось бы получать их в реальном времени, но похоже что это невозможно
Код (Text): <?php popen('php-win.exe myprogramm.php'); /* */ while(true){ if(check_semaphor()){ /* читаем безопасно файл. */ }else{ break; } } function check_semaphor(){ $f = fopen('sempahror','r'); if(lock($f,LOCK_EX+LOCK_NB)){ return false; }else{ return true; } ?> Код (Text): <?php /* делаем какиета запросы, команды, все суем в переменную $RESULT; */ $f = fopen('result.txt','w'); flock($f,LOCK_EX){ fwrite($f,$result); } ?> Кратко описал, надеюсь мысля понятна, а так..... <?php Код (Text): class multiprocess { private $handle_semaphor = null; private $handle_output = null; private $file_semaphor = null; private $file_output = null; public function open_proccess($command,$cashfile,$semaphor){ if(!empty($cashfile)){ $this->file_output = $cashfile; }else{ die('function open_proccess, not set varible cashfile or cashfile = null'); } if(!empty($semaphor)){ $this->file_semaphor = $semaphor; }else{ die('function open_proccess, not set varible semaphor or semaphor = null'); } if(!file_exists($this->file_output)){ $f = fopen($this->file_output,'w'); fclose($f); } chdir(getcwd()); popen('start processor.dll '.$command,'r'); } public function read_process_data(){ $f = fopen($this->file_output,'r'); flock($f,LOCK_EX); $data = fread($f,filesize($this->file_output)); flock($f,LOCK_UN); fclose($f); return $data; } public function check_semaphor($semaphor){ if(file_exists($semaphor)){ $f = fopen($semaphor,'r'); if(flock($f,LOCK_EX+LOCK_NB)){ flock($f,LOCK_UN); fclose($f); unlink($semaphor); return true; }else{ return false; } }else{ return false; } } public function lock_semaphor($semaphor){ $this->handle_semaphor = fopen($semaphor,'w'); flock($this->handle_semaphor,LOCK_EX); } public function write_process_data($data,$cashfile){ if(!empty($cashfile)){ $this->file_output = $cashfile; }else{ die('function open_proccess, not set varible cashfile or cashfile = null'); } if(!is_resource($this->handle_output)){ $this->handle_output = fopen($this->file_output,'w'); flock($this->handle_output,LOCK_EX); } fwrite($this->handle_output,$data); } } ?> Надеюсь помог, а ваще SHMOP круче =)
вдохнул, выдохнул, но так что то не разобрался, в чем же предназначение переменной $semaphor в вышеприведенном классе...