За последние 24 часа нас посетили 63111 программистов и 1737 роботов. Сейчас ищут 946 программистов ...

Запуск внешней программы посредством exec()

Тема в разделе "PHP для новичков", создана пользователем ivan_p, 12 сен 2008.

  1. ivan_p

    ivan_p Активный пользователь

    С нами с:
    12 сен 2008
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Красноярск
    Пожалуйста, подскажите решение проблемы.
    Для обработки графического файла мне необходимо запустить соответствующую программу в windows. С помощью exec() мне удалось запустить только команды типа cd, del и т.п. В чем дело?
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    в том, что если нажать ctrl+alt+del (или ctrl+shift+esc) и посмотреть работающие процессы, то можно убедиться, что вызываемая программа работает в фоновом режиме.
     
  3. ivan_p

    ivan_p Активный пользователь

    С нами с:
    12 сен 2008
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Красноярск
    Спасибо, Luge, убедился.
    Интересно, что при выполнении, например, следующего кода:
    PHP:
    1. exec( "c:\windows\system32\calc.exe" );
    загрузка веб-страницы подвисает и в диспетчере задач можно видеть процесс calc.exe.
    А как быть с пробелами в названиях директорий? Следующий код у меня не работает:
    PHP:
    1. exec( "C:\Program Files\Far\Far.exe" );
    2. exec( "'C:\Program Files\Far\Far.exe'" );
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    для командной строки оборачивать надо в двойные
    PHP:
    1. <?
    2. exec( '"C:\Program Files\Far\Far.exe"' );
     
  5. ivan_p

    ivan_p Активный пользователь

    С нами с:
    12 сен 2008
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Красноярск
    Luge, очень вам признателен. Теперь все работает.
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    смените аватару, разрешены только личные фото.
     
  7. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Работает у Вас, т.к. Вы сидите на сервере, т.с.. Думаю запустив скрипт другой машины вы будете (не скажу, что приятно, но) удивлены результатом
     
  8. Stepkin

    Stepkin Активный пользователь

    С нами с:
    19 сен 2008
    Сообщения:
    1
    Симпатии:
    0
    Доброго всем вечера..
    Я новичек не только в форуме, но и в области программировании в PHP//
    Думаю не стоит новую тему открывать, ибо проблема у меня почти такая же..

    Имеются 2 идентичных сервера.. ну идентичных, насколько это возможно..
    На одном я пишу код, гоняю его, это дома, потом ставлю его на другой..
    Серверы на Ubuntu 8.04.
    Так вот. На домашнем сервере нормально запускаются внешные программы с помощью функций exec() и system().
    А на другом - только системные команды.. т.б. если попробовать запустить какой нибудь исполняемый файл, то 0 внимания..

    На PHP отключен safe mode.
     
  9. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    Похоже такие программы работают не просто в фоновом режиме, а в каком-то демо-фоновом :( Пытаюсь запустить Оперу и чтобы она при этом посетила какой-нибудь адрес, так вот Опера запускается, а по адресу не идет (смотрю логи). Делаю так:
    PHP:
    1.  
    2. <?php
    3.  
    4. $opera='"C:\Program Files\Opera\Opera.exe"'." localhost/index.php";
    5.  
    6. @exec($opera,$output);
    7.  
    8. print_r ($output);
    9.  
    10. ?>
    11.  
    Из командной строки все ок:
    Код (Text):
    1. "C:\Program Files\Opera\Opera.exe" localhost/index.php
    Может что-то не так делаю? Подскажите плыз, как добиться, чтобы запущенный браузер, посетил нужный адрес?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А так?

    "C:\Program Files\Opera\Opera.exe" http://localhost/index.php


    Stepkin
    дело не в программировании. у пользователя под которым работает пхп видимо просто нет прав делать такие штуки
     
  11. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    И так тоже не получается: в процессах видно, что браузер запускается, а по адресу не идет и в логах его не видно :(
    Вообще, насколько я понял, что так http://localhost/index.php и так localhost/index.php - без разницы...
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    как вариант запустить батник :D
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а зачем кстати из-под пхп запускать оперу?
     
  14. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    О пля, свежачок подняли
     
  15. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    И с батником та же история: опера запускается, а по адресу не идет.
    Вот он такой у меня:
    script.bat
    Код (Text):
    1. @"C:\Program Files\Opera\Opera.exe" localhost/index.php
    Запускаю вот так:
    PHP:
    1.  
    2. <?php
    3. exec("D:\www\localhost\www\script.bat", $output);
    4. print_r ($output);
    5.  
    Честно юзал поиск, нашел даже эту тему, а вот толку от такого демо-запуска нет.
    Фигня какая-то. Замучился :( Помогите! :)
     
  16. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    p.s. С http:// в батнике - тоже не работает.