为什么 pcntl_fork() 没有在 Laravel 控制器中定义?
Why pcntl_fork() not defined in Laravel Controller?
我有控制器:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(){}
public function index()
{
pcntl_fork();
}
}
然后我通过 HTTP 请求调用 index()
,我得到:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to undefined function App\Http\Controllers\pcntl_fork()
那我试试这个:
class CodeSheet extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'code_sheet';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
pcntl_fork();
echo "1\n";
}
}
然后我调用这个命令:
vagrant@homestead:~$ php artisan code_sheet
1
1
所以我的问题是,为什么我可以在命令中调用 pcntl_fork()
,但不能在 HTTP 请求中调用?
PCNTL 扩展在 Web 环境中被禁用(它甚至可能只针对 CLI SAPI 进行编译),这与 Laravel.
无关
原因很简单 - Web 服务器本身(或 PHP-FPM)控制进程管理,因此使用此扩展会与其产生冲突。
它在 Windows 下也不可用,因为它是 UNIX-specific 的东西。
我有控制器:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(){}
public function index()
{
pcntl_fork();
}
}
然后我通过 HTTP 请求调用 index()
,我得到:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to undefined function App\Http\Controllers\pcntl_fork()
那我试试这个:
class CodeSheet extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'code_sheet';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
pcntl_fork();
echo "1\n";
}
}
然后我调用这个命令:
vagrant@homestead:~$ php artisan code_sheet
1
1
所以我的问题是,为什么我可以在命令中调用 pcntl_fork()
,但不能在 HTTP 请求中调用?
PCNTL 扩展在 Web 环境中被禁用(它甚至可能只针对 CLI SAPI 进行编译),这与 Laravel.
无关原因很简单 - Web 服务器本身(或 PHP-FPM)控制进程管理,因此使用此扩展会与其产生冲突。
它在 Windows 下也不可用,因为它是 UNIX-specific 的东西。