使用PHP内置的Web服务器与Symfony的生产模式

6

我刚刚创建了一个新的Symfony 3.4应用程序。根据Symfony文档,我可以通过运行以下命令来使用PHP内置的Web服务器来提供我的应用程序:

php bin/console server:start

然而,似乎这将在开发模式下运行应用程序。这意味着异常打印已启用,开发人员工具栏显示等。
有没有办法在Symfony的生产模式下使用内置的Web服务器?这不是为了向公众提供应用程序(这将不是一个好主意),而是因为我想测试可能仅在生产模式下出现的问题。

php bin/console server:start --env=prod 怎么样? - revo
2
您可以手动编辑 app_dev.php 文件将其切换到生产环境。注释掉 Debug::enable() 并将其更改为 prod,例如:$kernel = new AppKernel('prod', false); - Jared Farrish
感谢您的建议@revo - 但是,这导致了一个在“server”命名空间中未定义命令异常,并且服务器没有启动。 这是一个奇怪的错误消息,但[耸肩表情符号] - Alana Storm
如果您更改顺序 php bin/console --env=prod server:start 会怎样呢? - revo
@revo 同样的错误。(如果有影响,则为Symfony 3.4) - Alana Storm
1
仅供参考,网络服务器捆绑包仅在开发中启用。您可以在AppKernel.php或bundles.php中看到这一点。因此,指定环境基本上是一条死路。所以你可以尝试调整app.php文件,但如果您真的想获得适当的测试结果,最好的方法是配置Apache或Nginx服务器进行生产测试。 - Cerad
4个回答

8

不必使用Symfony的server命令,您可以直接使用以下命令运行PHP内置的Web服务器:

php -S localhost:8000 -t web/ app.php

假设您当前位于项目目录中,并且web/目录包含您的app.php文件。 -t表示文档根目录。在此示例中,它是web/app.php被指定为路由器脚本,并将处理您的请求。 有关PHP内置Web服务器命令的更多信息 现在,当您访问localhost:8000时,它将以Production模式提供Symfony项目。
这不会在后台运行服务器,但您可以轻松搜索谷歌以了解如何进行操作。

2
对我来说,这个可以工作:php -S localhost:8000 -t web/ web/app.php - Pavel Alazankin

5

如果您正在使用Symfony 4,需要在bundles.php文件中对all环境启用服务器bundle。默认情况下,它仅针对dev开启。

<?php

return [
    // ...
    Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['all' => true],
];

1
php -S localhost:8000 -t web/ web/app.php

这对我有用。 否则,将抛出此错误: PHP致命错误:未知:在第0行中包含路径(include_path ='.:/usr/local/lib/php')无法打开所需的'app.php'。

1
我并没有看到你的回答与两年前被接受和回答的回答有什么不同。如果您有有价值的东西可以为现有答案带来改进,您将有特权在拥有更多声望时对帖子进行评论。 - β.εηοιτ.βε

1

是的,你需要在浏览器输入的URL中指定app.php,就像这样:

mysite.dev/app.php/login

或者

localhost:8000/app.php/login

默认情况下,它会自动使用 app_dev.php

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接