2016-03-30 57 views
0

Bir Windows Server'da XAMPP kullanıyorum (artık ofiste değil, yarın kesin sürümü de ekleyeceğim). Bugün bu çok garip davranışa rastladım: Programları çalıştırmak için exec()'u kullanırken bazı komutlar işe yaramaz, diğerleri bunun için herhangi bir sebep göstermeden başarısız olur.Neden exec() boş mesaj dizeleriyle başarısız oluyor?

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

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


ama en kısa zamanda bu biraz daha karmaşık hale geldikçe, başarısız:

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

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


Benim wkhtmltopdf.exe ile de iş gibi görünüyor

//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 ?!?! 


Tam olarak aynı dizeyi sunucu makinesine kopyaladığımda wi th rdp, ve windows-shell (cmd) içinde kullanın, işe yarıyor.

Neler olup bittiği hakkında hiçbir fikrim yok - 11 tane boş dizeyle bir dizi geri almam çok tuhaf.

Yardımlarınız ve önerileriniz için teşekkür ederiz!

+0

0'a eşit olmayan her dönüş değeri ('$ retval ') hata olarak değerlendirilmelidir. –

+0

@CharlotteDunois evet biliyorum. ve biliyorum ki bir hatam var - ama hangi hatayı aldığımı bilmiyorum - sorun bu. Öneriniz için –

cevap

1

Sorunun argümanları içinde kesikler olduğunu düşünüyorum:

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

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

Böyle bu kodu var, ama ' yolları enkapsüle çalışmayın. Buna

Yukarıdaki kod sonuçları:

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

Ayrıca eğik çizgi kaçan deneyebilirsiniz:

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

Ama bu dağınık kod.

+0

teşekkürler! bu yüzden değişkenleri iki tek tırnak içine koymalıyım? 'Exec' dizgesindeki değişkenleri neden tırnak içine koyduk, örneğin' $ input 'gibi; –

+0

Burada yapılan çift alıntı yok, $ giriş ve $ hedef değişmez dizelerdir. Çift tırnaklı dizgiler değişkenleri kabul eder ve onu bir değere dönüştürür ve şimdi etrafında bir '' 'vardır. Soruyu güncelleyeceğim. – Xorifelse

+0

tamam, teşekkürler - yorgunum, bu yüzden yanlış anladım. Ofisinde çalışabilmek için yarına kadar beklemem gerekecek. Bir şey değiştirirse size söylerim. şimdiye kadar teşekkürler! –