почему exec () не работает с пустыми строками сообщений?

Я использую XAMPP на Windows Server (больше не в офисе, завтра добавлю точную версию).

Сегодня я наткнулся на это очень странное поведение:
Когда используешь exec() для выполнения программ некоторые команды работают, другие не дают никаких объяснений.

//working
exec("dir", $output, $retval);

//$retval = 0;
//$output = array with response-lines

Похоже, что работает и с моим wkhtmltopdf.exe:

//working as well
exec("C:\some_path\wkhtmltopdf.exe --help", $output, $retval);

//$retval = 0;
//$output = array with lines from the help-file

но как только он становится немного сложнее, он терпит неудачу:

//not working
exec("C:\some_path\wkhtmltopdf.exe C:\other_path\test.html C:\target_path\test.pdf", $output, $retval);

//$retval = 1;
//$output = array with 11 empty strings ?!?!

Когда я копирую ту же самую строку на сервер-компьютер с помощью rdp и использую ее внутри оболочки Windows (cmd), это работает.

Я понятия не имею, что происходит — имхо очень странно, что я получаю массив с 11 пустыми строками.

спасибо за любую помощь или советы!

0

Решение

Я думаю, что проблема в слесах:

$input  = 'C:\other_path\test.html';
$target = 'C:\target_path\test.pdf';

exec("C:\some_path\wkhtmltopdf.exe '$input' '$target'", $output, $retval);

Вам не нужно кодировать это так, но попробуйте инкапсулировать пути с помощью ',

Приведенный выше код приводит к этому:

exec("C:\some_path\wkhtmltopdf.exe 'C:\other_path\test.html' 'C:\target_path\test.pdf'", $output, $retval);

Вы также можете попытаться избежать косой черты:

exec("C:\some_path\wkhtmltopdf.exe C:\\other_path\\test.html C:\\target_path\\test.pdf", $output, $retval);

Но это грязный код.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru