Eu tenho um código PHP que precisa ser executado em segundo plano (sem cronjobs ou opções semelhantes) que está completo, mas eu simplesmente não posso chamá-lo em segundo plano. Eu estou tentando o seguinte:
$files = $_GET["files"];
$id = $_GET["id"];
pclose(popen("start /B D:\server\php\php.exe D:\server\www\whatever\importat\import.php?files=".$files."&id=".$id." 2>nul >nul", "r"));
Mas "nunca corre. Se eu for correr import.php manualmente, funciona sem falhas.
PS: Eu não posso alterar o import.php.
Socorro?
Respostas:
0 para resposta № 1Eu tenho a solução:
O que estou fazendo é chamar o PHP dentro de um lote e lançá-lo usando o popen:
$phpBatch = "progress_import_".$idImport.".bat";
$myPhp = fopen($phpBatch, "w") or die("Error opening file!");
$batchContent .= "@echo OFF n";
$batchContent .= ""D:\path\to\php.exe" D:\path\to\progress_import.php ".$idImport." ".$_SESSION["numberFiles"]." ";
pclose(popen("start /B D:\path\to\".$phpBatch."", "r"));
E dentro do progress_import.php
estou a usar:
$id = $argv[1];
$numberFiles = $argv[2];
Para pegar os parâmetros.
Espero que ajude alguém.