当 PHP 内置服务器崩溃时,端口仍在使用中

When PHP built in server crashes, the port is still in use

我正在使用 PHP 内置服务器,如下所示:

$ composer serve
> php -S localhost:8000 -t public/

但是超时了..?

[Symfony\Component\Process\Exception\ProcessTimedOutException]                     
  The process "php -S localhost:8080 -t public/" exceeded the timeout of 300 seconds.

所以,我尝试重新启动它:

$ composer serve
> php -S localhost:8000 -t public/
[Thu May 26 21:31:51 2016] Failed to listen on localhost:8000 (reason: Address already in use)
Script php -S localhost:8000 -t public/ handling the serve event returned with error code 1

为什么服务器在超时之前 运行 所在的端口仍在使用中?我可以停止 PHP 内置服务器的所有实例吗?

如果重要,下面是我的 composer.json 文件:

{
    .
    .
    .
    "scripts": {
        "serve": "php -S localhost:8000 -t public/"
    }
}

问题是 composer 在 300 秒后有默认超时。

执行命令时可以使用--timeout=0,这会禁用超时。在您的示例中,命令看起来像 composer run-script server --timeout=0

您可以像这样在 composer.json 文件中设置进程超时:

  {
    ...
    "scripts": {
      "start": "php -S 127.0.0.1:80 .router.php -t public"
    },
    "config": {
      "process-timeout": 0
    }
  }

并像这样启动网络服务器:

$ composer start