如何在Windows上使用PHP的内置Web服务器和Symfony,具有指定的主机名和非标准端口?

EDIT: Sorry everyone, this isn't something you could have fixed! The AppKernel class had been modified to change the cache directory, as below:

public function getCacheDir()
{
    if(isset($_SERVER['HTTP_HOST']))
    {
        return $this->rootDir.'/cache/'.$this->environment.'/'.$_SERVER['HTTP_HOST'];
    }
    else{
        return $this->rootDir.'/cache/'.$this->environment.'/default';
    }
 }

So not down to Symfony, or PHP, but a previous developer (presumably not on Windows!). Thanks for all your help, +1s all round.


I'm hoping there's a simple answer to this, but right now I can't see it!

Windows 10
Symfony 2.8.11
PHP 5.5.9

For convenience, I'd like to use PHP's built-in webserver (via the Symfony Console) to run a Symfony (2.8) application, on a port other than 80. I have a colleague successfully doing this, but he's using Linux, and I'm on Windows 10. The issue is that, on anything other than the standard port 80, when Symfony builds its cache the port is appended to one of the directory names, with a colon, which is illegal in Windows filenames (although not elsewhere). The cache build process fails, and the app doesn't run.

I'm starting the PHP server via Symfony's Console, like so:

php app/console server:run appname.local

The directory it's trying to build is:

C:\git\appname\app/cache/dev/appname.local:8000

And so I get the error:

RuntimeException in bootstrap.php.cache line 2763:
Unable to create the cache directory C:\git\appname\app/cache/dev/appname.local:8000)

I'd just use the standard port (this does work), but in fact I want to run several things at once, and they can't all be on 80.

Is there any way I can run a Symfony site on PHP's webserver, on Windows, on a non-standard port, in such a way that Symfony doesn't choke at the point of building the cache? For clarity, I could change webserver, and I could change OS, but for the purposes of this question assume that those are fixed. I'd prefer not to switch off the cache (it's slow enough as it is!) but that's an option if it would help.

EDIT: it seems like this works for at least some people, so there must be something different about my config. Best bet is probably the PHP version, which is quite old (not for any particular reason, just laziness).

duan198299
duan198299 哦,那好吧。我经常为几个不同的项目运行几个服务器。
3 年多之前 回复
dongtong5242
dongtong5242 我想可能是多个主机。通常,缓存在开发目录中直接进行。我承认我以前从未使用过内置服务器。谢谢你的尝试!
3 年多之前 回复
dsa5233
dsa5233 似乎有点离奇。我在我的Windows10上尝试了几个不同的端口,一切都按预期工作。我不知道为什么它会尝试在cache/dev下创建另一个目录。我当然没有。安装一个新项目并试一试。你是否愚弄配置或网络文件?
3 年多之前 回复
duanliexi1052
duanliexi1052 是的,主机文件。该应用程序目前根据浏览器中使用的主机名从一个代码库有效地提供3个站点,所以我坚持这一点。
3 年多之前 回复
dongyu9667
dongyu9667 没错,但是太累了!我实际上考虑过,并且可能已经尝试了但是我无法看到路径的来源(我可以看到getCacheDir函数,但从它返回的内容似乎不正确)。我退开了,保持目光接触。
3 年多之前 回复
duankanjian4642
duankanjian4642 不确定。不,我没有,我克隆了一个回购并从那里开始。也就是说,我不认为它导致了这个问题(考虑到摆脱“:portnumber”可以让事情发挥作用)。
3 年多之前 回复
dongzhi9032
dongzhi9032 这是事实,但我想这样做!
3 年多之前 回复
douwen1937
douwen1937 这个appname.local来自哪里?你的主机文件中的东西可能吗?通常它会是一个IP地址。
3 年多之前 回复
dongming6201
dongming6201 这就是Symfony如何创建缓存目录,可能并不理想,但您可以深入研究创建缓存的代码并更改它...
3 年多之前 回复
drzk21632
drzk21632 为什么你有不同的目录分隔符?你刚开始创作作曲家安装吗?
3 年多之前 回复
dongzanghui4624
dongzanghui4624 使用xamp/wamp,您可以让虚拟主机拥有许多没有端口问题的网站(如mysite1.dev,mysite2.dev)。
3 年多之前 回复

3个回答



Symfony有一个运行web服务器的命令(使用php内置的PHP服务器)</ p>

< pre> php bin / console server:start
</ code> </ pre>

此命令将在端口8000上启动服务器(默认配置)</ p>

有关可用选项的详细信息,请查看此处: https:// symfony。 com / doc / current / setup / built_in_web_server.html </ p>
</ div>

展开原文

原文

Symfony has a command to run a webserver (which uses the php built-in PHP server)

php bin/console server:start

This command will start the server on port 8000 (default config)

Have a look here for more information about available options : https://symfony.com/doc/current/setup/built_in_web_server.html

doukuang6795
doukuang6795 非常感谢您尝试这一点,看起来您正在做我正在做的事情,但没有错误。 哦,这是PHP 5.5.9,不知道这是否会有所作为。 这是一个继承的项目,因此我无法轻易告诉您默认情况下的更改。
3 年多之前 回复
dongxun3424
dongxun3424 在Windows 10上使用一个新的symfony 2.8.15安装与php 7.1,我没有错误... img15.hostingpics.net/pics/869212Capture.png你在symfony配置中更改了什么? (作为旁注,我在app / cache中没有appname目录)
3 年多之前 回复
douhuang2673
douhuang2673 你让我都很兴奋,但事实上我正在使用它! 虽然Symfony控制台有一个启动它的命令,但它实际上是交付给引擎盖下的PHP服务器。 我会更清楚地提出我的问题。
3 年多之前 回复



在特定端口上启动服务器从命令行指定IP地址后的端口。 使用IP地址也很有用,因为您可以从其他主机访问。</ p>

例如,假设您运行 ipconfig / all </ code>并看到您的IPv $ address是 192.168.1.100 </ code>。 然后你可以运行:</ p>

  php bin / console server:start 192.168.1.100:8888

nn

这个开始 在端口 8888 </ code>上 Symfony的内置Web服务器 在IP地址 192.168.1.100 </ code>上。 因此,在浏览器中,您可以输入: http://192.168.1.100:8888/ 其中 / </ code>是您要访问的路径。</ p>

要停止内置服务器,请输入:</ p>

  php bin console server  :stop 192.168.1.100:8888

nn

您将在命令行上看到显示内置Web服务器停止/启动的消息。</ p>

</ div>

展开原文

原文

to start the server on a particular port specify the port after the IP address from the command line. Using the IP address is useful too, because you can access from a different host.

For example, let's say you run ipconfig /all and you see your IPv$ address is 192.168.1.100. Then you can run:

php bin/console server:start 192.168.1.100:8888

This starts Symfony's built-in web server on port 8888 on IP address 192.168.1.100. So in a browser you can enter: http://192.168.1.100:8888/ where / is the route you want to access.

To stop the built-in server enter:

php bin console server:stop 192.168.1.100:8888

You'll see messages on the command line showing the stopping/starting of the built-in web server.

dtrotfd1012
dtrotfd1012 这些只是警告,听起来不错。 为什么不像Cerad那样创建一个新项目。 我认为这可能是一个好主意。
3 年多之前 回复
dss087358
dss087358 事实上,我找到了SymfonyRequirements.php,运行它,并没有任何结果。 check.php给了我几个警告(没有安装intl和PHP加速器),否则OK。
3 年多之前 回复
dtu11716
dtu11716 对不起,我刚才意识到你在2.8。 试试php app / check.php吧。 看到这个链接。 它应该打印出您可能需要安装/更改的任何消息。 此外,你使用xampp或wamp,还是其他什么?
3 年多之前 回复
doumu8217
doumu8217 没有输出,不确定是什么意思发生。 我已经通过调试确认它正在尝试创建一个目录:在其中,并且Windows肯定不喜欢那样......
3 年多之前 回复
duanliang1019
duanliang1019 嗨,太好了。 你可以从命令行运行php bin / symfony_requirements,看看它显示了什么。 缓存问题很奇怪,因为我唯一能想到的是权限问题,但由于这是一个Windows系统,所以不应该发生。
3 年多之前 回复
dongqing6755
dongqing6755 谢谢阿尔文。 我的问题不是启动服务器,或配置它使用的IP和端口,而是Symfony之后做的事情。
3 年多之前 回复



在我的问题编辑中,这取决于开发人员的行动,而不是社区要解决的Symfony或PHP问题。</ p>

  public function getCacheDir()
{
if if(isset($ _ SERVER ['HTTP_HOST']))
{
返回$ this-&gt; rootDir。'/ 缓存/'.$这 - &GT;环境 '/' $ _ SERVER [ 'HTTP_HOST']。。 // KABOOM
}
其他{
返回$ this-&gt; rootDir。'/ cache /'.$ this-&gt; environment。'/ default';
}
}
</ code> </ pre>

感谢您的所有努力!</ p>
</ div>

展开原文

原文

As in my question edit, this was down to developer action rather than a Symfony or PHP issue to be solved by the community.

public function getCacheDir()
{
    if(isset($_SERVER['HTTP_HOST']))
    {
        return $this->rootDir.'/cache/'.$this->environment.'/'.$_SERVER['HTTP_HOST']; //KABOOM
    }
    else{
        return $this->rootDir.'/cache/'.$this->environment.'/default';
    }
}

Thanks for all your efforts!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐