如何使用nohup从PHPCGI执行PHPCLI
我正在尝试从php cgi执行php cli脚本如何使用nohup从PHPCGI执行PHPCLI,php,Php,我正在尝试从php cgi执行php cli脚本 我从cgi获得的以下信息不起作用。 但是,当我直接从shell执行它时,它确实起作用。 有没有办法做到这一点 <?php if (PHP_SAPI === 'cli') { require '../boot.php'; Logger::mailit(); exit; } class Logger { private static $instance = NULL; private funct
我从cgi获得的以下信息不起作用。
但是,当我直接从shell执行它时,它确实起作用。
有没有办法做到这一点
<?php
if (PHP_SAPI === 'cli')
{
require '../boot.php';
Logger::mailit();
exit;
}
class Logger {
private static $instance = NULL;
private function __construct(){}
public function __destruct()
{
if (PHP_SAPI != 'cli')
{
exec('nohup php '. __FILE__ .' &');
}
}
public static function mailit(){
// Database stuff ...
mail( $row->email, $row->subject, $row->message, $row->headers);
}
}
?>
您必须将类的调用(Logger::mailit()
)放在类的定义(class Logger
)之后。您可以删除CLI检查if(PHP_SAPI=='CLI')
,或者包括文件和调用require'../boot.PHP';Logger::mailit()代码>你自己。或者,您可以查看(或…)以将脚本作为自己的进程执行。如果您需要沙箱,这可能是必要的
您是否尝试过类似于exec('your/script.php&')
?()
使用,您可以为脚本设置环境(包括时髦的文件描述符)。使用,您可以获得使用proc_open()启动的进程的PID。使用,您可以向进程发送信号
如果我没有弄错的话,您的父进程(在您的例子中是php cgi)会一直运行,直到子进程(在您的例子中是php cli)完成—即使您设置了非阻塞执行。让它实际工作,这只是一个小错误
更改为:
require '../boot.php';
为此:
require __dir__.'/../boot.php';