Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает system () 
:(
    Опции темы
SergeyMitrofanov
Дата 1.9.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 30.1.2006

Репутация: нет
Всего: нет




      Очень прошу мне помочь в решнии важного вопроса - не могу научиться запускать из PHP-кода функцию system ().

      Есть исполняемый файл -  ABC.exe, получен из кода, написанного на С, в результате работы ABC.exe появляется текстовый файл, который пишется в ту же директорию, в которой находится ABC.exe, больше эта DOS-программа ничего не делает, ничего в потоки не выдает.

      В коде PHP вот такая строка

         system ("ABC.exe");
      
      не работает. :-(

      Работаю под последним Денвером for Windows XP.


PM MAIL WWW   Вверх
gta4kv
Дата 1.9.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Помойму путь надо указывать полностью, посмотрите там примеры внизу : http://ru.php.net/system
PM MAIL   Вверх
SergeyMitrofanov
Дата 1.9.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Цитата(gta4kv @ 1.9.2007,  12:15)
, Помойму путь надо указывать полностью, посмотрите там примеры внизу : ]http://ru.php.net/system[/URL]

  


   К сожалению, полный путь не помогает

   Код на 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!

Это сообщение отредактировал(а) SergeyMitrofanov - 2.9.2007, 15:55
PM MAIL WWW   Вверх
BuShaRt
Дата 2.9.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



SergeyMitrofanov, 
Файл точно лежит в той же директорие что и скрипт и он точно может выполнять запрос, просто при обращение к нему, а не при манипуляциях с ним?
PM MAIL   Вверх
SergeyMitrofanov
Дата 2.9.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Цитата(BuShaRt @ 2.9.2007,  12:14)
SergeyMitrofanov, 
Файл точно лежит в той же директорие что и скрипт и он точно может выполнять запрос, просто при обращение к нему, а не при манипуляциях с ним?


  -- да, файл с кодом на PHP и файл abc.exe лежат в одной и той же директории
     /home/test.ru/www

     Если просто зайти в эту директорию и запустить вручную файл abc.exe, то он сработает
     и создаст файл  abc.txt

     Denwer поставлен с нуля со всеми стандартными установками *.ini
     Windows XP лицензионная тоже установлена с нуля.

     Работает большой по объему код на PHP безукоризненно, кроме вызова system ().
     Это единствеенное, что  не работает.

     
PM MAIL WWW   Вверх
sTa1kEr
Дата 2.9.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



SergeyMitrofanov, попробуйте ради эксперимента выполнить следующий код
Код

$descriptors = array(
   0 => array('pipe', 'r'),
   1 => array('pipe', 'w'),
   2 => array('pipe', 'w'));

$res = proc_open("abc.exe", $descriptors, $pipes);
if (is_resource($res))
{
   echo stream_get_contents($pipes[2]);
   fclose($pipes[0]);
   fclose($pipes[1]);
   fclose($pipes[2]);
   proc_close($res);
}

Это аналогично system("abc.exe"), но все что пришло в STDERR будет выведено на экран.
PM MAIL   Вверх
vdim
Дата 16.7.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



Цитата

все что пришло в STDERR будет выведено на экран

А можно ли брать все что пришло в STDERR не после того как программа отработала, а сразу же как случился вывод?
Т.е. моя программа на си выводит в стандарный поток много инфы, работает долго. Необходимо отображать все что вывела сразу же юзеру на страничку. Можно ли такое?
PM MAIL   Вверх
Mal Hack
Дата 16.7.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



SergeyMitrofanov, проблема в том, что вы используйте system, и если бы вы обратили внимание на ссылку, которую вам привел gta4kv, 
Цитата

system() is just like the C version of the function in that it executes the given command and outputs the result. 
 The system() call also tries to automatically flush the web server's output buffer after each line of output if PHP is running as a server module. 
 If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.

Исполняемый файл - не одно и тоже, что команда.
Потом, вы же ничегов exe файлы в STDOUT не посылаете, следовательно после выполнения system (при определенных условиях - сработает) вы ничего не сможете лицезреть.
Вам надо воспользоваться exec, при этом указать полный путь, не забыв при этом, что в винде слеши используются - обратные, которые еще надо проэкранировать.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.