Я борюсь с получением файла php для работы в фоновом режиме с помощью exec() PHP. В качестве первого теста я попытался:Exec для запуска php в качестве фонового процесса
exec("ls -l > logfile.txt 2> errfile.txt &");
Это прекрасно работает. Файл logfile.txt заполняется списком каталогов.
В соответствии с инструкциями в документации по php, поскольку exec запускает процесс, выполняющийся в фоновом режиме, стандартная (и стандартная ошибка) перенаправляется в файл.
Теперь я стараюсь
exec("/usr/bin/php -f /path/to/my.php > logfile.txt 2> errorfile.txt &");
Оказывается ничего не происходит.
Вот тестовые файлы, которые я пытаюсь:
alpha.php
<?php
$version="a";
// Go do something we do not need to wait for.
exec("/usr/bin/php -f /path/to/beta.php > logfile.txt 2> errorfile.txt &");
?>
<html>
<head><title>Test</title></head>
<body>
<p>This is Alpha version <?php echo $version; ?></p>
</body>
</html>
beta.php
<?php
if (!($fp = fopen('/home/johnst12/public_html/workshops/admin/betadata.txt', 'w'))) { exit;}
fprintf($fp, "Proof that Beta executed.");
fclose($fp);
?>
Если я бегу beta.php напрямую, он отлично работает. Сообщение Betadata.txt получает сообщение.
Если я запустил alpha.php для запуска beta.php, файл betadata.txt не будет создан. logfile.txt и errorfile.txt остаются пустыми (ожидается).
Я уверен, что путь к php и путь к моему файлу php верны.
Гуглинг для уточнения не был плодотворным. Несколько общих тем кажутся (а) нехваткой ресурсов? (б) отсутствие разрешения на целевой файл php? Из ресурсов кажется маловероятным. Разрешение на скрипт глобально читается 644 (rw-r - r--). Я попытался добавить execute (755) на всякий случай, если это поможет. Это не имело значения.
PHP версия 5.3.21 Система Linux/Apache. safe_mode Выкл.
Что мне не хватает? Благодарю.
У пользователя есть разрешение на запись в папку с этим пользователем. Попробуйте запустить whoami и на сервере su - «theuser» и коснитесь файла – Lefsler