| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Не работает system () |
| Автор: SergeyMitrofanov 1.9.2007, 11:57 |
Очень прошу мне помочь в решнии важного вопроса - не могу научиться запускать из PHP-кода функцию system (). Есть исполняемый файл - ABC.exe, получен из кода, написанного на С, в результате работы ABC.exe появляется текстовый файл, который пишется в ту же директорию, в которой находится ABC.exe, больше эта DOS-программа ничего не делает, ничего в потоки не выдает. В коде PHP вот такая строка system ("ABC.exe"); не работает. :-( Работаю под последним Денвером for Windows XP. |
| Автор: gta4kv 1.9.2007, 12:15 |
| Помойму путь надо указывать полностью, посмотрите там примеры внизу : http://ru.php.net/system |
| Автор: SergeyMitrofanov 1.9.2007, 13:37 | ||
К сожалению, полный путь не помогает Код на PHP - файл first.php - у меня такой: <?php $dir = opendir ("/home/test.ru/www"); chdir ("/home/test.ru/www"); system ("abc.exe"); //exec (escapeshellcmd ("dos_htm d_long2.cpp")); ?> Код abc.exe: - Compilier: ВС++ 3.1 for DOS # include <stdio.h> # include <conio.h> int main () { FILE * F; F = fopen ("abc.txt", "wb"); fprintf (F, "12345"); fclose (F); return 0; } Работаю на Denwer - Apache 1.3.33 Win32 и PHP 5.1.6 В чем моя ошибка? Что делаю не так? Файл abc.exe находится в C:\WebServers\home\test.ru\www Help! |
| Автор: BuShaRt 2.9.2007, 12:14 |
| SergeyMitrofanov, Файл точно лежит в той же директорие что и скрипт и он точно может выполнять запрос, просто при обращение к нему, а не при манипуляциях с ним? |
| Автор: SergeyMitrofanov 2.9.2007, 15:24 | ||
-- да, файл с кодом на PHP и файл abc.exe лежат в одной и той же директории /home/test.ru/www Если просто зайти в эту директорию и запустить вручную файл abc.exe, то он сработает и создаст файл abc.txt Denwer поставлен с нуля со всеми стандартными установками *.ini Windows XP лицензионная тоже установлена с нуля. Работает большой по объему код на PHP безукоризненно, кроме вызова system (). Это единствеенное, что не работает. |
| Автор: sTa1kEr 2.9.2007, 17:01 | ||
SergeyMitrofanov, попробуйте ради эксперимента выполнить следующий код
Это аналогично system("abc.exe"), но все что пришло в STDERR будет выведено на экран. |
| Автор: vdim 16.7.2008, 20:24 | ||
А можно ли брать все что пришло в STDERR не после того как программа отработала, а сразу же как случился вывод? Т.е. моя программа на си выводит в стандарный поток много инфы, работает долго. Необходимо отображать все что вывела сразу же юзеру на страничку. Можно ли такое? |
| Автор: Mal Hack 16.7.2008, 20:49 | ||
SergeyMitrofanov, проблема в том, что вы используйте system, и если бы вы обратили внимание на ссылку, которую вам привел gta4kv,
Исполняемый файл - не одно и тоже, что команда. Потом, вы же ничегов exe файлы в STDOUT не посылаете, следовательно после выполнения system (при определенных условиях - сработает) вы ничего не сможете лицезреть. Вам надо воспользоваться exec, при этом указать полный путь, не забыв при этом, что в винде слеши используются - обратные, которые еще надо проэкранировать. |