laravel5:chdir():没有这样的文件或目录(错误2)

时间:2015-06-16 16:59:43

标签: laravel-5 vps

将laravel 5上的网站部署到VPS服务器时遇到问题,但在本地计算机上运行正常。

我的页面为http://easyway.vn/当前页面显示为空白,错误

  

无法加载资源:服务器响应状态为500(内部服务器错误)

当我跑步时

  

php artisan serve --host = 0.0.0.0

我有错误

  

[ErrorException]
    chdir():没有这样的文件或目录(错误2)



服务器信息

  

操作系统:Linux 2.6
  服务器版本:Apache / 2.2.29(Unix)
  PHP 5.4.41(cli)(建于2015年6月4日13:27:02)   版权所有(c)1997-2014 PHP小组   Zend Engine v2.4.0,版权所有(c)1998-2014 Zend Technologies

请帮帮我!

9 个答案:

答案 0 :(得分:11)

重命名公用文件夹名称会导致此问题。

触摸供应商目录下的文件是您可能永远不会做的事情。

这是我在我的活动项目中测试和使用的另一种替代方法。

创建app / Console / Commands / Serve.php文件并将内容设置为:

<?php

namespace App\Console\Commands;

use Exception;
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Process\PhpExecutableFinder;
use Symfony\Component\Process\ProcessUtils;

class Serve extends Command {
    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'serve';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Serve the application on the PHP development server';

    /**
     * Execute the console command.
     *
     * @return void
     *
     * @throws \Exception
     */
    public function fire() {
        chdir('/');

        $host = $this->input->getOption('host');

        $port = $this->input->getOption('port');

        $base = ProcessUtils::escapeArgument($this->laravel->basePath());

        $binary = ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false));

        $this->info("Laravel development server started on http://{$host}:{$port}/");

        if (defined('HHVM_VERSION')) {
            if (version_compare(HHVM_VERSION, '3.8.0') >= 0) {
                passthru("{$binary} -m server -v Server.Type=proxygen -v Server.SourceRoot={$base}/ -v Server.IP={$host} -v Server.Port={$port} -v Server.DefaultDocument=server.php -v Server.ErrorDocument404=server.php");
            } else {
                throw new Exception("HHVM's built-in server requires HHVM >= 3.8.0.");
            }
        } else {
            passthru("{$binary} -S {$host}:{$port} {$base}/server.php");
        }
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions() {
        return [
            ['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', 'localhost'],

            ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 8000],
        ];
    }
}

使用以下内容更新app / Console / Kernel.php文件:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel {
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        // Commands\Inspire::class,
        Commands\Serve::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule) {
        // $schedule->command('inspire')
        //  ->hourly();
    }
}

这就是全部!

现在运行你的服务命令:

$ php artisan serve

服务器已启动:

Laravel development server started on http://localhost:8000/

答案 1 :(得分:10)

这意味着您的Laravel应用程序无法找到公用文件夹。

我通过改变

来实现它
/tr

在vendor / laravel / framework / src / Illuminate / Foundation / Console / ServeCommand.php中:

chdir($this->laravel->publicPath());

答案 2 :(得分:3)

  1. 第一步在vendor / laravel / framework / src / Illuminate / Foundation / Console / ServeCommand.php中
  2. `chdir($this->laravel->publicPath());`
    
    change to 
    
      

    chdir('/');

    2. 第二步更改your_public_folder / index.php中的这两个路径

      

    require __DIR__.'/../your_app/bootstrap/autoload.php';

         

    $app = require_once __DIR__.'/../your_app/bootstrap/app.php';

    3. 第三步更改your_app / server.php中的公共路径

        if ($uri !== '/' && file_exists(__DIR__.'/../public_html/'.$uri)) {
        return false;
    }
    
    require_once __DIR__.'/../public_html/index.php';
    
      

    注意:根据应用的新文件夹结构更改这些路径。

答案 3 :(得分:2)

更改

  

chdir(public_path());

收件人

  

chdir('/');

来自: vendor / laravel / framework / src / Illuminate / Foundation / Console / ServeCommand.php

答案 4 :(得分:2)

重命名public文件夹时出现此错误。

从不编辑供应商文件夹中的文件。 composer更新新安装后,您将丢失所做的更改。

一种更好的解决方案是编辑 bootstrap / app.php 并将此代码段放在return语句之前。

$app->bind('path.public', function() {
    return base_path() . '/web';
});

答案 5 :(得分:1)

转到根文件夹中的server.php并将任何public重命名为any name you have

答案 6 :(得分:1)

通常在发生此类错误时,这意味着Laravel正在寻找公共文件夹,但无法找到它。这取决于您如何配置您的应用程序并使用php artisan服务--host=0.0.0.0在这种情况下不起作用。处理此问题的最佳方法是将应用程序放在服务器(htdocs)中并在您的URL中访问它。

供应商目录包含您的Composer依赖项。有关详细信息,请访问Laravel Documentation。永远不要编辑供应商中的任何内容,因为当您进行作曲家更新时可能会导致问题。

答案 7 :(得分:0)

我知道您很久以前就问过这个问题,但对于那些寻求最简单有效的方法来解决此问题的人来说:

此错误意味着laravel无法找到公用文件夹。您必须在Providers / AppServiceProvider.php register 方法中添加以下代码:

public function register()
{
        $this->app->bind('path.public', function() {
          return base_path('PATH TO PUBLIC FOLDER');
        });
}

通过这种方式,laravel知道在哪里可以找到公用文件夹路径。

答案 8 :(得分:0)

请记住当您在生产环境中运行时,将公共更改的路径更改为public_html,以便再次在localhost中运行时,我将其更改为app / Providers / AppServiceProvider.php

此:

public function register()
    {
       $this->app->bind('path.public',function(){return'/public';});
    }

对此:

public function register()
    {
       // commented this line
    }

更改.env环境后,也可以在server.php和index.php中