У меня есть скрипт a.php, и я хочу вызвать (долго работающий) скрипт b.php из a.php на моем компьютере с Windows.
Это пример файла a.php:
<?php
$command = 'start /B php b.php > NUL';
pclose(popen($command, 'r'));
?>
и это пример файла b.php
<?php
sleep(30);
?>
но это не работает, a.php ждет, пока b.php закончится.
Что я могу сделать, чтобы запустить b.php в фоновом режиме?
ОБНОВИТЬ
Возможно, проблема не в том, как я называю b.php, а в том, как называется a.php. Вот более полный пример того, что я делаю:
Пользователь вызывает webservice index.php? Cmd = download&source = s1 (я проверяю это с почтальоном)
index.php:
<?php
include_once 'a.php';
if($_GET['cmd'] == "download") {
$source = $_GET['source'];
$flag = startDownload($source);
if($flag) {
echo("Download was initialized");
} else {
echo("Download not started");
}
}
?>
a.php:
<?php
function startDownload($source) {
if($source == "s1") {
$command = 'start /B php b.php > NUL';
pclose(popen($command, 'r'));
} else {
$command = 'start /B php c.php > NUL';
pclose(popen($command, 'r'));
}
return true;
}
?>
b.php:
<?php
$ch = curl_init();
$source = "http://example.com/bigfile.zip";
curl_setopt($ch, CURLOPT_URL, $source);
$data = curl_exec($ch);
curl_close($ch);
$file = fopen("/", "w+");
fputs($file, $data);
fclose($file);
?>
Задача ещё не решена.
Других решений пока нет …