![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| ilyalyu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
нужно запустить программу в background под windows и продолжить выполнение php-скрипта (то есть команда exec (shell_exec, etc) не должна дожидаться окончания выполнения программы). как вариант - запустить программу в background и выводить ее output в браузер. в настоящее время страница грузится 30 секунд, после чего выводится сообщение о превышении максимального времени выполнения скрипта.
пробовал разные варианты: exec("program.exe"); exec("program.exe >null"); exec("cmd.exe /c program.exe"); то же с shell_exec passthru("program.exe"); ничего не помогает Это сообщение отредактировал(а) ilyalyu - 10.4.2007, 14:15 |
|||
|
||||
| xolod |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 24.5.2005 Где: Когда: Что: Репутация: 1 Всего: 13 |
Попробуйте так:
У меня нет Microsoft Windows, тестировал через Apple BootCamp. Сработало. Но гарантия не 100%. Это сообщение отредактировал(а) xolod - 10.4.2007, 22:41 |
|||
|
||||
| ilyalyu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Спасибо! Ваш метод подействовал
Оказалось также, что функцию popen можно использовать для последующего перенаправления output-а в браузер:
Однако обнаружилась некоторая странность. Оказалось, что fread обрезает данные, выводимые программой. То есть программа выводит на экран, допустим, 500 символов, а в браузер из них попадает только 100 символов. При этом если через какое-то время (допустим 10 сек) программа выведет на экран еще данные, то они отобразятся в браузере. Может кто знает, чем объясняется такое странное поведение?? |
|||
|
||||
| xolod |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 24.5.2005 Где: Когда: Что: Репутация: 1 Всего: 13 |
Попробуйте заменить чтение данных (fread) этим методом:
|
|||
|
||||
| ilyalyu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
не, чего-то fgets не помогает. я уже и proc_open попробовал. короче происходит следующее:
программа выводит блок 1. проходит секунд 5. программа выводит блок 2. и т.д. В это время в браузере: Выводится начало блока 1. проходит секунд 5. Выводится блок 2. проходит секунд 30. Выводится конец блока 1. Иными словами, данные выводятся в браузер не в той последовательности, в которой они выводились бы на экран. Вероятно, причина в том, что объем данных слишком большой (несколько сотен байтов). Это сообщение отредактировал(а) ilyalyu - 15.4.2007, 16:27 |
|||
|
||||
| ilyalyu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Похоже проблема разрешилась. В вызываемой программе надо было просто добавить flush(output)!
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Для профи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |