为什么在Laravel Controller中未定义pcntl_fork()?

时间:2019-05-14 03:47:32

标签: php laravel pcntl

我有控制器:

struct Patient: Codable {
  let hospitalNumber: String?
  let patientName: String?
  let totalAmount: Double

  enum CodingKeys: String, CodingKey {
    case hospitalNumber = "hospitalNumber"
    case patientName = "patientName"
    case totalAmount = "totalAmount"
  }
}

然后我通过HTTP请求调用totalAmount,然后得到:

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(){}

    public function index()
    {
        pcntl_fork();
    }
}

然后我尝试一下:

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"; } } 但不能在HTTP请求中调用?

1 个答案:

答案 0 :(得分:2)

PCNTL扩展在Web环境中被禁用(它甚至可能仅针对CLI SAPI进行编译),这与Laravel无关。

原因很简单-Web服务器本身(或PHP-FPM)可以控制流程管理,因此使用此扩展名将与其产生冲突。

由于它是UNIX专用的东西,因此在Windows下也不可用。