2016-03-30 3 views
0

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

Сегодня я наткнулся на это очень странное поведение: При использовании 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 ?!?! 


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

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

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

+0

Каждое возвращаемое значение ('$ retval'), которое не равно 0, должно рассматриваться как ошибка. –

+0

@ Чарлотте Дюнуас, да, я знаю. и я знаю, что у меня ошибка, но я не знаю, какая у меня ошибка - вот в чем проблема. –

ответ

1

Я думаю, что вопрос является косая черта в аргументах:

$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); 

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

+0

спасибо за ваше предложение! поэтому я должен поместить переменные в двойные одинарные кавычки? Мне интересно, почему вы помещаете переменные внутри строки 'exec' в кавычки, как, например,' '$ input''; –

+0

Здесь нет двойного кавычки, $ input и $ target - литеральные строки. Строки с двойным кавычком принимают переменные и возвращают их к значению, и теперь он имеет '' 'вокруг него. Я уточню вопрос. – Xorifelse

+0

ОК, спасибо - я устал, вот почему я получил это неправильно. Мне придется подождать до завтра, чтобы попробовать в моем офисе. Я скажу вам, изменит ли он что-нибудь. спасибо до сих пор! –

Смежные вопросы