За последние 24 часа нас посетили 16859 программистов и 1641 робот. Сейчас ищут 945 программистов ...

Не работает exec()

Тема в разделе "PHP для новичков", создана пользователем sound, 9 мар 2014.

  1. sound

    sound Guest

    Нужно запусить файл .exe через пхп
    пхп сайт используется только локально, так что безопасность тут не важна

    Php 5.4.8 стоит на Windows 7 и Apache
    Safe mode как понимаю в этой версии пхп уже нет, отклучать не чего

    Пробовал запускать по разному

    Код (Text):
    1. exec("start c:\x.exe")
    2. exec("start c:\\x.exe")
    3. exec("c:\x.exe")
    4. exec("c:\\x.exe")
    В результате получаю страницу браузера в бесконечной загрузке приложение не запускается

    Код (Text):
    1. echo exec("whoami");
    выводит

    nt authority\?????

    ????? это какие то нечитаемые символы

    Что не так и куда копать ?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    под виндой не юзал
     
  3. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    попробуй так
    Код (PHP):
    1. pclose(popen('start /B c:\\x.exe', 'r'));
     
  4. sound

    sound Guest

    YSandro
    Ничего не произошло страница просто загрузилась и все.

    Какие еще варианты ?
     
  5. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    А что должно произойти? PHP запускает программу от того же пользователя, от которого работает, а страница выводится, не дожидаясь завершения работы этой программы. Вариант - лучше некуда.
    Что за программа то? Она выводит какие-нибудь логи? Сколько по времени работает?
     
  6. sound

    sound Guest

    YSandro
    Не происходит запуск программы вообще.
    прога просто exe файл который запускает свое окно браузера и висит в трее
    Тестил на обычном txt файле то же самое, я просто хочу увидеть запуск.
     
  7. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    скорей всего PHP работает от юзера system. В таком варианте не работают программы с windows интерфейсом. Вернее, они могут работать, но интерфейса видно не будет. В диспетчере задач можно увидеть прогу при включенном отображении всех пользователей. Если она работает долго, то появится в списке.

    Я для подобных вещей писал демон на Java, который запускал вручную.
     
  8. sound

    sound Guest

    php как я понимаю работает из под апачи, который висит даже не в процессах, а в службах

    То есть получается просто запустить приложение из exec нельзя ?
    как то странно, об этом должны были писать в справке
     
  9. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Можешь создать задание в командной строке. Например, для запуска текстового редактора
    Код (Text):
    1. schtasks /create /tn "mytask" /tr notepad.exe /sc monthly /mo 3 /ru пользователь /rp пароль_пользователя /it
    пользователь и пароль - с которыми заходишь в Windows.
    Потом в любое время из скрипта PHP вызывать это задание:
    Код (PHP):
    1. pclose(popen('schtasks /run /tn mytask', 'r'));
    2. //или
    3. exec('schtasks /run /tn mytask');
    4. //или
    5. system('schtasks /run /tn mytask'); 
    Когда надоест вызывать задание, удали его из командной строки:
    Код (Text):
    1. schtasks /delete /tn mytask
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Возможно, такой способ
    Код (Text):
    1. "explorer c:\x.exe"
    даст ожидаемый результат
     
  11. sound

    sound Guest

    [vs]
    Ничего не произошло
    пробовал
    Код (Text):
    1. exec("explorer c:\\x.exe");
    2. exec("explorer c:\x.exe");  
    YSandro
    Не смог разобратся, пароля у пользователя Windows нет как и где создавать задание тоже не понял
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Путь реально c:\x.exe?
    Если в пути к файлу есть пробелы, то путь надо брать в кавычки...
     
  13. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Чтобы программировать, нужно быть продвинутым пользователем. Уж разберись, что такое командная строка, интерфейс командной строки или консоль, как с этим работать, что такое программа schtasks. Вредно не будет.


    Задания также можно создавать в программе Управление компьютером: на рабочем столе ПКМ по значку Компьютер -> Управление -> Планировщик заданий. В Библиотеке планировщика заданий есть список текущих задач. А чтобы создать задание, нужно выбрать Планировщик заданий, в меню выбрать Действие -> Создать простую задачу...