Bir toplu iş dosyasını çalıştırmak için PHP exec komutunu kullanarak sorunu

4 Cevap php

PHP bir RTF dosyası almak ve OpenOffice makro kullanarak bir PDF dönüştürmek olacak bir toplu iş dosyasını aramak için almak için çalışılıyor. Ben komut satırında toplu iş dosyası test ettik ve iyi çalışıyor, ama herhangi bir şans arama sahip ve PHP aynı toplu iş dosyası kullanarak değilim.

My machine OS is XP professional SP 3. I'm running IIS 6 and PHP version 5.2.9. I've granted execute permissions to the internet user on c:\windows\system32\cmd.exe. I specified the full path to the batch file being executed and the full path to the RTF file to be converted.

PHP $ arg dönüştürülecek RTF olduğu bu gibi görünüyor:

$arg = "C:\\web_root\\whatever\\tempOutput.rtf";
$command = "c:\\windows\\system32\\cmd.exe /c c:\\web_root\\whatever\\convert.bat $arg";

Sonra bir try-catch içimde exec komutunu çağırır:

exec("$command 2>&1 && exit", $ret, $err);

Ben yakalamadan sonra sonuçları echo:

echo "ret: ";
print_r ($ret);
print "<br>";
echo "err is ";
echo $err;
print "<br>";
echo "DONE!";

Ve bu ne görüyorum:

ret: Array ( ) 
err is 0
DONE!

RTF dosyası dönüştürülen almaz ve ben hataları göremiyorum. Herhangi bir sonraki deneyebilirsiniz ne fikir? Teşekkürler!

4 Cevap

Ben bu izinleri hakkında bahis için gidiyorum.

Tipik bir kurulum, PHP apache olarak çalışır - bu yüzden emin apache toplu iş dosyasını çalıştırmak için haklara sahip olmak isteyeceksiniz.

Ayrıca, this relevant SO question kontrol ve this google search.

Çıkış dizisi boş gibi görünüyor. Toplu komut çıktısı olması gerekiyordu?

Ayrıca, escapeshellcmd ve escapeshellarg kullanılmalıdır

Eğer web sunucusu olarak IIS kullanıyor musunuz? Eğer öyleyse, PHP exec fonksiyonu varsayılan olarak çalışmaz ve çalışmasını engellemek güvenlik önlemlerini atlatmak değil gerekir.

Olay görüntüleyici kontrol edin ve sizin soruna ilişkin bazı hatalar bulmalısınız. IIS PHP exec: için google üzerinden bir sorgu çalıştırın. Bu sorun hakkında size bilgi büyük bir seçim vermelidir.

Temelde, PHP exec işlevi, yeni bir cmd.exe örneğini çatal çalışır. Bu sistemde bir güvenlik delik açabilir, çünkü IIS bu yasaklamaktadır.

Ben ile geldi iyi çözüm php script düz bir dosyaya yürütmek veya bir veritabanı girişi yapmak istiyorum komutu yazmak ya sahip olmaktır. Daha sonra çalıştırmak için komutları için düz bir dosya veya veritabanını kontrol edecek her 10 dakika kadar çalıştırmak için windows zamanlayıcı tarafından başlatılan ayrı bir komut dosyası yazmak gerekir. Yeni komut dosyası daha sonra komutları çalıştırmak ve ardından sonuçları ya da web uygulaması daha sonraki bir zamanda ulaşmak mümkün olacak bir yürütme onay ya koyacaktır.

Bu kesin bir kludge bulunuyor.

PHP güvenli modda çalışıyor? Eğer öyleyse, kabuk komutları escapeshellcmd ile kaçtı. Belki de bu sorun?

Eğer PHP komut dosyası çalıştıran sunucunun kontrol var mı?