php exec () hatası

6 Cevap php

Ben şu küçük bir sorun yaşıyorum:

Ben bu satırı çalıştırdığınızda:

echo exec(createDir($somevariable));

Ben bu hatayı alıyorum:

Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32

Herhangi bir fikir.

Teşekkürler.

6 Cevap

exec Eğer komut satırını kullanarak sanki gibi sistem çağrıları yürütebilirsiniz ile. PHP işlevleri yürütme ile bir şey yapmak değil.

Eğer aşağıdaki yapabileceği bir dizin oluşturmak için:

exec( 'mkdir [NAME OF DIRECTORY]' );

Ben senin createDir() function şey dönmez tahmin ediyorum. Ayrıca $somevariable de mantıklı bir şey ayarlanmış olduğunu kontrol değerinde olabilir

Sen) exec (amacını yanlış anlıyorsun. Eğer yapmak istediğiniz tüm bir dizin oluşturmak sonra ise mkdir () kullanmalısınız.

Ben diğer mesajlar türetilen ve bu aslında yapmak istediğiniz ne comments düşünüyorum:

I createDir() kendi yazdığım bir PHP işlevi olduğunu düşünüyorum. Onu doldurur ve bu biraz zaman alabilir - Bu sadece bir dizin yapmak daha fazlasını yapar.

Nedense sonraki komutu önce çalıştırmak alır inanıyorum createDir() çalışma bitmiş, ve createDir() kullanarak çağırarak exec() Bunu önlemek düşündüm etti.

Bu çıkış yolu ise bir açıklamada söyle, ve ben bu cevabı sileceğiz.

Bu createDir() gerçekten döndürülür sonra çalışmaya devam yapar olası görünüyor oluyor (öyle ise, o zaman biz diyoruz ki 'uyumsuz'). Bu asenkron yapmak için kendi yolumdan gitmek için programcı gerektirecektir. Yani bu varsayımı kontrol edin.

Hatta bu yüzden, exec() PHP fonksiyonları çağırmak için değil. Bu kabuk komutları (komut istemine yazın çeşitşey) çağırmak içindir. Çoğumuz gözlemledim olarak çok dikkatli olmazsan, o kaçınılmalıdır - risk ne keyfi kabuk komutları çalıştırmak için kullanıcı izin varlık.

Eğer gerçekten tamamlamak için zaman uyumsuz bir fonksiyon için beklemek zorunda yaparsanız, bu yapılabilir yolları bir çift vardır.

Birinci yol uyumsuz fonksiyon bir mükellef şekilde yazılmış olmasını gerektirmektedir. Bazı API'ler, daha sonra diğer bazı şeyler yapmak, daha sonra sapından dönüş durumunu olsun, size bir 'tanıtıcı' verecek olan, bir zaman uyumsuz işi başlayalım. Gibi bir şey:

handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);

iş bitene kadar getResults bekleyecekti.

İkinci yol kadar iyi değildir ve API az yararlı olduğunda kullanılabilir. Ne yazık ki, o kadar, bazı iş bitti ipucu ve yoklama bulma meselesi.

while( checkJobIsDone() == false ) {
    sleep(some time interval);
}

I () dönüş değeri yok createDir tahmin ediyorum.

Try exec("mkdir $somevariable");