Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Обращение к внешним программа из php.  (Прочитано 1089 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Помогите решить след проблему.
Есть exe файл ampl,  работает в консольном режиме. Ampl-это алгебраический язык программирования, мне нужен для оптимизации экономических задач.
Нужно посылать опред команды, и соответс получать ответ
Вот сам код:
$handle = popen(' c:\Soft\amplcml\ampl.exe', 'w');
fwrite($handle, "Solve");
echo "<br>". fread($handle,10240);

Результаты пока нулевые (

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Обращение к внешним программа из php.
« Ответ #1 : 04 Январь 2010, 23:26:04 »
Насколько я помню, по POSIX popen, в пайп можно либо только писать, либо только из него читать, но никак не одновременно.

Пользователь решил продолжить мысль 04 Январь 2010, 23:27:59:
Вот, иногда всётаки на офсайт с доками бывает полезно заглянуть.
« Последнее редактирование: 04 Январь 2010, 23:27:59 от Mam(O)n »

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: Обращение к внешним программа из php.
« Ответ #2 : 05 Январь 2010, 11:46:20 »
apml.exe использует другие exe файлы (решатели), при вызове из php решатели не работают. Ошибка Cannot invoke minos: no such program.

Как подгрузить эти  exe файлы?

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Обращение к внешним программа из php.
« Ответ #3 : 07 Январь 2010, 10:40:08 »
а если попробовать установить php-cli и обращаться к нужным командам через обратные апострофы
если получится, то скрипт на баше напишите и все

пример:
<?php
`<тут обращение к внешней команде>`
?>


у меня так работало, правда уже не помню для чего

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: Обращение к внешним программа из php.
« Ответ #4 : 07 Январь 2010, 11:58:45 »
а если попробовать установить php-cli и обращаться к нужным командам через обратные апострофы
если получится, то скрипт на баше напишите и все

пример:
<?php
`<тут обращение к внешней команде>`
?>


у меня так работало, правда уже не помню для чего


Я сделал вот так:
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin это канал, из которого потомок будет читать
   1 => array("pipe", "w"),  // stdout это канал, в который потомок будет записывать
   2 => array("file", "c:Softamplcmlerror-output.txt", "a"), // stderr это файл для записи
);
$process = proc_open("ampl", $descriptorspec, $pipes);
if (is_resource($process)) {
    // $pipes выглядит теперь примерно так:
    // 0 => записываемый дескриптор, соединённый с дочерним stdin
    // 1 => читаемый дескриптор, соединённый с дочерним stdout
    // Любой вывод ошибки будет присоединён к /tmp/error-output.txt

 fwrite($pipes[0], "data c:Softamplcmlmodelset.dat
");
fwrite($pipes[0], "set NU");
fclose($pipesa[0]);
echo "<br>";
    while(!feof($pipesa[1])) {
        echo "<b>" . fgets($pipesa[1], 1024) . "<b><br>";
    }
//fclose($pipesa[0]);
    fclose($pipesa[1]);

    // Важно, чтобы вы закрыли любые каналы до вызова
    // proc_close, чтобы исключить тупиковую блокировку
    $return_value = proc_close($process);

    echo "<br>command returned $return_value
";
}






Пользователь решил продолжить мысль 07 Январь 2010, 13:41:26:
Так же ampl.exe использует при работе другие исполняемые файлы (решатели).
Которые он не мог найти и запустить. После того как я их скопировал в system32 все заработало.

Объясните данную ситуацию. От чего это зависит, может настроить php?
« Последнее редактирование: 07 Январь 2010, 13:41:26 от nadir »

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Обращение к внешним программа из php.
« Ответ #5 : 08 Январь 2010, 21:47:59 »
Объясните данную ситуацию. От чего это зависит, может настроить php?
Зависит от текущей директории в окружении. Текущая директория, няп, == DefaultRoot в конфиге апача.

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: Обращение к внешним программа из php.
« Ответ #6 : 08 Январь 2010, 22:28:03 »
Зависит от текущей директории в окружении. Текущая директория, няп, == DefaultRoot в конфиге апача.
Что-то я не могу найти

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Обращение к внешним программа из php.
« Ответ #7 : 08 Январь 2010, 22:33:23 »
Сорри, опечатался, DocumentRoot конечноже.

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: Обращение к внешним программа из php.
« Ответ #8 : 08 Январь 2010, 22:37:49 »
C:/ampl -В этой директории у меня находятся испол файлы, т.е мне надо изменить на
DocumentRoot "C:/ampl"
?

Пользователь решил продолжить мысль 08 Январь 2010, 22:44:29:
Не подходит(
« Последнее редактирование: 08 Январь 2010, 22:44:29 от nadir »

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Обращение к внешним программа из php.
« Ответ #9 : 08 Январь 2010, 22:46:22 »
http://httpd.apache.org/docs/2.0/mod/core.html#documentroot

DocumentRoot указывает на отправную точку иерархии документов сайта, так что думай, как тебе это надо сделать. Я бы просто прописал локацию с бинарниками в переменную окружения PATH.

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: Обращение к внешним программа из php.
« Ответ #10 : 08 Январь 2010, 22:56:30 »
http://httpd.apache.org/docs/2.0/mod/core.html#documentroot

DocumentRoot указывает на отправную точку иерархии документов сайта, так что думай, как тебе это надо сделать. Я бы просто прописал локацию с бинарниками в переменную окружения PATH.
Я так поминаю это переменная окружения windows?

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Обращение к внешним программа из php.
« Ответ #11 : 08 Январь 2010, 22:58:39 »
Да. PATH есть и в офтопике и в *nix. Только способы перечисления разные. http://en.wikipedia.org/wiki/PATH_%28variable%29

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: Обращение к внешним программа из php.
« Ответ #12 : 08 Январь 2010, 23:02:38 »
Все получилось. Спасибо за оперативные ответы.

 

Страница сгенерирована за 0.057 секунд. Запросов: 25.