更改公用文件夹名称后使用工匠服务

Posted

技术标签:

【中文标题】更改公用文件夹名称后使用工匠服务【英文标题】:Using artisan serve after changing the public folder name 【发布时间】:2015-08-01 18:36:06 【问题描述】:

与许多主机一样,我们的公用文件夹称为public_html。这是在共享主机上,因此无法更改。我已将 public 文件夹更改为 public_html 以反映这一点,但是当我这样做时 artisan serve 停止工作。每次我尝试启动它时,我都会得到:

[ErrorException]
chdir(): No such file or directory (errno 2)

如果我将文件夹重命名为 public,那么 artisan serve 将再次开始工作。

我试过following this post on laracasts,帖子中的用户报告说工匠为他们工作,但这对我没有任何影响。如何更改文件夹并让artisan serve 工作?

【问题讨论】:

仅供参考,Laravel 不太可能与许多共享主机配合得很好。 @ceejayoz 为什么会这样?我即将使用 Laravel 重新开发我们的 CMS,所以如果是这样的话,那将是一件非常痛苦的事情。 取决于主机。有些不会让您在storage 目录上正确设置权限/ACL。我会在您首选的主机上使用最小的应用程序进行测试,看看一切是否按预期工作。您还可以考虑使用 DigitalOcean 之类的工具来获得每月 5 美元的 VPS。 好吧,我们使用 Heart Internet,似乎有人已经和他们一起编写了 Laravel 指南 - novate.co.uk/…。我认为我们应该没事。 【参考方案1】:

Dipesh 的回答实际上是一个非常糟糕的主意 - 只要您执行 Composer 安装/更新/要求,这些更改就会被吹走。 切勿直接编辑vendor 目录中的任何内容。

相反,在bootstrap/app.php 中,您应该添加:

$app->bind('path.public', function() 
    return __DIR__;
);

紧接着

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__ . '/../')
);

请参阅https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5 以了解进一步的讨论以及以安全方式执行此操作的替代方法。

您也可以extend Illuminate\Foundation\Application。这似乎是 Laravel CLI(以 php artisan 开头的任何内容)所必需的。

【讨论】:

谢谢你,但如果你注意到我在我原来的问题中链接了那个讨论。我已经修改了bootstrap/app.php 无济于事。我还设置了 /app/Providers/CustomServiceProvider.php 并将其与其他提供者一起列在 config/app.php 中,正如最后一篇文章所建议的那样。 @Styphon 您是否尝试了我添加的最后一个链接,扩展了 Illuminate\Foundation\Application?我怀疑这是必要的,因为 Laravel 的 CLI 似乎需要 publicPath() 函数,您需要使用扩展技术。同样,另一个答案 - 直接编辑 vendor - 会很快打断你。 我刚刚尝试过,它很有魅力。谢谢。 不幸的是,答案中的两个链接都已损坏。如果您需要它与artisan 一起使用,请在此处查看我的答案:***.com/a/33652169/1296104【参考方案2】:

找到/vendor/laravel/framework/src/Illuminate/Foundation/Application.php这个文件 并更改以下功能

/**
 * Get the path to the public / web directory.
 *
 * @return string
 */
public function publicPath()

    return $this->basePath.DIRECTORY_SEPARATOR.'public_html';

【讨论】:

@Styphon 这实际上是一个非常糟糕的主意,下次使用composer updatecomposer requirecomposer install 时会被吹走。 您不应更改核心文件上的任何代码。从 ceejayoz 的帖子中选择任一方式。 您可以轻松地扩展核心类。在这里查看我的答案:***.com/a/33652169/1296104

以上是关于更改公用文件夹名称后使用工匠服务的主要内容,如果未能解决你的问题,请参考以下文章

更改文件夹结构以删除公用文件夹时对 Laravel 5 安全性的影响

expressJWT阻塞公用文件夹,如何解锁?

公用文件夹上的 Windows 窗体 app.config

win10怎么把专用网络改成公用网络

SVN多项目代码公用怎么实现?

无法从反应应用程序访问快速服务器中的公用文件夹