Выполнение команд cmd в Windows из PHP Issue - PullRequest
1 голос
/ 23 июня 2010

Можно ли выполнять команды cmd в ОС Windows с функцией PHP exec ()?

Я пробовал это:

<?php

try {

    echo exec(
    'O:\test\pdftk.exe O:\test\outputs\OPP\out.pdf O:\test\outputs\OPP\out2.pdf cat output O:\test\123.pdf'
    );

} catch (Exception $e) {
    echo $e->getMessage();
}

По сути, я пытаюсь объединить два файла PDF с программой pdftk. Если я просто пишу ту же самую команду вручную в cmd, она работает и создается файл O: \ test \ 123.pdf Но когда я выполняю вышеуказанный PHP-файл, ничего не происходит (пустая страница, файл не создается).

Ответы [ 4 ]

2 голосов
/ 23 июня 2010

Может ли ваш пользователь PHP получить доступ к cmd.exe?Инструменты Microsoft Sysinternals могут оказаться очень полезными;особенно монитор процесса.

1 голос
/ 23 июня 2010

Попробуйте экранировать разделитель каталогов:

exec("O:\\test\\pdftk.exe O:\\test\\outputs\\OPP\\out.pdf O:\\test\\outputs\\OPP\\out2.pdf cat output O:\\test\\123.pdf");

Или, что еще лучше, использовать одинарные кавычки:

exec('O:\test\pdftk.exe O:\test\outputs\OPP\out.pdf O:\test\outputs\OPP\out2.pdf cat output O:\test\123.pdf');
0 голосов
/ 01 ноября 2016

Вот проект, который позволяет PHP динамически получать и взаимодействовать с реальным терминалом cmd.Получите это здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

//if you prefer Powershell, replace 'cmd' with 'powershell'
$shellObj    = \MTS\Factories::getDevices()->getLocalHost()->getShell('cmd');

$strCmd1   = 'O:\\test\\pdftk.exe O:\\test\\outputs\\OPP\\out.pdf O:\\test\\outputs\\OPP\\out2.pdf cat output O:\\test\\123.pdf';
$return1   = $shellObj->exeCmd($strCmd1);

В результате вы получите команду возврата ИЛИ ошибку из cmd, как если бы вы сиделина консоли.Кроме того, вы можете выполнить любую команду, которая вам нравится, в отношении $ shellObj, среда поддерживается в течение всего срока действия сценария PHP.Поэтому вместо объединения команд в файле сценария просто выполните их одну за другой, используя метод exeCmd (), таким образом, вы также можете обрабатывать возврат и любые исключения.

0 голосов
/ 20 июля 2010

попробуйте выполнить с использованием привилегий администратора для командной строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...