Je voudrais juste ajouter un exemple très simple pour tester cette fonctionnalité sous Windows :
Créez les deux fichiers suivants et enregistrez-les dans un répertoire web :
foreground.php :
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);
echo "<pre>loading page</pre>";
function run_background_process()
{
file_put_contents("testprocesses.php","foreground start time = " . time() . "\n");
echo "<pre> foreground start time = " . time() . "</pre>";
// output from the command must be redirected to a file or another output stream
// http://ca.php.net/manual/en/function.exec.php
exec("php background.php > testoutput.php 2>&1 & echo $!", $output);
echo "<pre> foreground end time = " . time() . "</pre>";
file_put_contents("testprocesses.php","foreground end time = " . time() . "\n", FILE_APPEND);
return $output;
}
echo "<pre>calling run_background_process</pre>";
$output = run_background_process();
echo "<pre>output = "; print_r($output); echo "</pre>";
echo "<pre>end of page</pre>";
?>
background.php :
<?
file_put_contents("testprocesses.php","background start time = " . time() . "\n", FILE_APPEND);
sleep(10);
file_put_contents("testprocesses.php","background end time = " . time() . "\n", FILE_APPEND);
?>
Donnez à l'IUSR la permission d'écrire dans le répertoire dans lequel vous avez créé les fichiers ci-dessus.
Donner à IUSR la permission de LIRE et EXECUTER C:\Windows\System32\cmd.exe
Appelez foreground.php à partir d'un navigateur web
Ce qui suit devrait être rendu au navigateur avec les timestamps actuels et le numéro de la ressource locale dans le tableau de sortie :
loading page
calling run_background_process
foreground start time = 1266003600
foreground end time = 1266003600
output = Array
(
[0] => 15010
)
end of page
Vous devriez voir testoutput.php dans le même répertoire que celui où les fichiers ci-dessus ont été enregistrés, et il devrait être vide.
Vous devriez voir testprocesses.php dans le même répertoire que celui où les fichiers ci-dessus ont été sauvegardés, et il devrait contenir le texte suivant avec les timestamps actuels :
foreground start time = 1266003600
foreground end time = 1266003600
background start time = 1266003600
background end time = 1266003610
3 votes
Ce site stackoverflow.com/questions/5367261/ explique comment procéder sous Windows