Я использую 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 пустыми строками.
спасибо за любую помощь или советы!
Я думаю, что проблема в слесах:
$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);
Но это грязный код.
Других решений пока нет …