web-dev-qa-db-ja.com

laravel5:chdir():そのようなファイルまたはディレクトリはありません(errno 2)

laravel 5のWebサイトビルドをVPSサーバーにデプロイするときに問題がありますが、ローカルマシンでは問題なく動作します。

私のページは http://easyway.vn/ エラーで現在のページが空白で表示されます

リソースの読み込みに失敗しました:サーバーはステータス500(内部サーバーエラー)で応答しました

私が走るとき

php artisan serve --Host = 0.0.0.0

エラーが発生しました

[エラー例外]
chdir():そのようなファイルまたはディレクトリはありません(errno 2)



サーバー情報

OS:Linux 2.6
サーバーバージョン:Apache/2.2.29(Unix)
PHP 5.4.41(cli)(built:Jun 4 2015 13:27:02)Copyright(c)1997-2014 The PHP Group Zend Engine v2.4.0、Copyright (c)1998-2014 Zend Technologies

お願い助けて!

9
Terry To

パブリックフォルダ名を変更すると、この問題が発生します。

ベンダーディレクトリの下のファイルに触れることは、あなたが決して行うことができないものです。

ここに私がテストして私のアクティブなプロジェクトで使用した代替作業方法があります。

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();
    }
}

それで全部です!

ここで、serveコマンドを実行します。

$ php artisan serve

サーバーが起動しました:

Laravel development server started on http://localhost:8000/
13
Sinan Eldem

Laravelアプリケーションがパブリックフォルダを見つけられないことを意味します。

私はそれを働かせました

変更:

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

で:

vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php

へ:

chdir('/');
12
sam ben
  1. ステップ1ベンダー/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php
_`chdir($this->laravel->publicPath());`
_
_change to 
_

chdir('/');

2 .ステップ2 your_public_folder/index.phpのこれら2つのパスを変更します

_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';
_

:アプリの新しいフォルダー構造に従ってこれらのパスを変更します。

4
Karan Datwani

変化する

chdir(public_path());

chdir( '/');

から:vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php

4
Hasib Kamal

このエラーは、publicフォルダーの名前を変更すると表示されます。

なしベンダーフォルダ内のファイルを編集します。 composer updateまたはfresh installを実行すると、変更が失われます。

より良い解決策は、bootstrap/app.phpを編集して、このスニペットをreturnステートメントの前に配置することです。

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

通常、このタイプのエラーが発生した場合、Laravelがパブリックフォルダーを探していて見つからないことを意味します。これは、アプリケーションの設定方法とphp artisan serve --Host=0.0.0.0はこの場合機能しません。これを処理する最良の方法は、アプリケーションをサーバー(htdocs)に配置し、URLにアクセスすることです。

ベンダーディレクトリには、Composer依存関係が含まれています。詳細は Laravelのドキュメント にアクセスしてください。composer更新。

1
Kiarie Henry

ルートフォルダーのserver.phpに移動し、publicの名前をany name you haveに変更します

1
amir

私はあなたがずっと前にこの質問をしたことを知っていますが、この問題を解決する最も簡単で効率的な方法を探している人のために:

このエラーは、laravelがパブリックフォルダーを見つけられないことを意味します。このコードをregisterメソッドに追加する必要がありますプロバイダー/AppServiceProvider.php

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

このように、laravelは、パブリックフォルダパスを見つけるためにどこを探すべきかを知っています。

0
Salar Bahador