Bir windows makinede PHP;

4 Cevap php

Ben iyi arıyorsanız, ya da gerçekten ben daha sonra senaryoya öldürebilir arka planda php bir süreci başlatmak için herhangi bir yol var.

Right now, I'm using: shell_exec($Command); The problem with this is it waits for the program to close.

Ben kabuk komutu çalıştırdığınızda nohup gibi aynı etkiye sahip olacak bir şey istiyorum. Bu, daha sonra komut kapalı böylece bana, arka planda işlemini çalıştırmak için izin verecektir. Bu komut bir düzenli olarak çalışacak ve bu çalıştırıldığında programın açık olamaz çünkü ben onu kapatmak gerekir.

Ben arka planda komutu çalıştırmak için bir. Bat dosyası üretme düşündüm, ama o zaman bile, nasıl sonra süreci öldürmek mi?

Ben linux için gördüğüm kodu:

$PID = shell_exec("nohup $Command > /dev/null & echo $!");
// Later on to kill it
exec("kill -KILL $PID");

EDIT: Ben süreci öldürmek gerekmez çıkıyor

4 Cevap

Bu function from the PHP Manual yardımcı olacak?

function runAsynchronously($path,$arguments) {
    $WshShell = new COM("WScript.Shell");
    $oShellLink = $WshShell->CreateShortcut("temp.lnk");
    $oShellLink->TargetPath = $path;
    $oShellLink->Arguments = $arguments;
    $oShellLink->WorkingDirectory = dirname($path);
    $oShellLink->WindowStyle = 1;
    $oShellLink->Save();
    $oExec = $WshShell->Run("temp.lnk", 7, false);
    unset($WshShell,$oShellLink,$oExec);
    unlink("temp.lnk");
}

shell_exec('start /B "C:\Path\to\program.exe");

/B parametresi burada anahtarıdır.

Ben yine sizin için uzun bir zaman önce bu cevabı buldum konuyu bulmaya çalıştım, ama artık onu bulmak için görünmüyor olabilir. Ama bu benim için çalışıyor.

Için php manuel exec:

Bir program bu fonksiyon ile başladı ise, arka planda çalışmaya devam etmek için sırayla, programın çıktısı bir dosya veya başka bir çıkış akımına yeniden yönlendirilmesi gerekir. Aksi takdirde PHP programı biter yürütülmesine kadar askıda kalmasına neden olacaktır.

yani boru dosyası ve php içine çıktı bunun için beklemek olmaz:

exec('myprog > output.txt');

Bellek, ben de duraklatma yürütülmesini engeller komutları exec aile (sen @ ile yapmak gibi) Önlerine bir kontrol karakteri olduğuna inanıyorum - ama, ne hatırlamıyorum.

Edit Bulundu! Unix üzerinde, programlar ve yürütülür prepended arka planda çalışacaktır. Maalesef, size çok yardımcı olmuyor.

PHP 5.2.8 ile Windows 2000 sunucu üzerinde aynı ulaşmak için çalıştı.

Çözümlerin hiçbiri benim için çalıştı. PHP yanıt bekliyor tuttu.

Çözüm bulundu:

$cmd = "E:\PHP_folder_path\php.exe E:\some_folder_path\backgroundProcess.php";
pclose(popen("start /B ". $cmd, "a"));  // mode = "a" since I had some logs to edit