【问题标题】:PHP Laravel code returns Error 500 with no warning or errors in logPHP Laravel 代码返回错误 500,日志中没有警告或错误
【发布时间】:2019-09-01 01:05:54
【问题描述】:

我已经购买了一个 Laravel 项目,并且有一个控制器脚本/代码导致了我的问题。我已经将我的 XAMPP 更新到 7.3.3 并完成了安装,但是在最后它给了我错误 500。

经过几个小时的调试,我发现注释以下行可以解决问题,但随后会在网站上给我带来更大的错误。下面的代码有什么问题?

完整代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use URL;
use DB;
use Hash;
use App\GeneralSetting;
use App\BusinessSetting;
use App\User;
use App\Product;

class InstallController extends Controller
{
    public function step0() {
        $this->writeEnvironmentFile('APP_URL', URL::to('/'));
        return view('installation.step0');
    }

    public function step1() {
        $permission['curl_enabled']           = function_exists('curl_version');
        $permission['db_file_write_perm']     = is_writable(base_path('.env'));
        $permission['routes_file_write_perm'] = is_writable(base_path('app/Providers/RouteServiceProvider.php'));
        return view('installation.step1', compact('permission'));
    }

    public function step2() {
        return view('installation.step2');
    }

    public function step3($error = "") {

        if($error == ""){
            return view('installation.step3');
        }else {
            return view('installation.step3', compact('error'));
        }
    }

    public function step4() {
        return view('installation.step4');
    }

    public function step5() {
        return view('installation.step5');
    }

    public function purchase_code(Request $request) {
        $request->session()->put('purchase_code', $request->purchase_code);
        return redirect('step3');
    }

    public function system_settings(Request $request) {
        $generalsetting = GeneralSetting::first();
        $generalsetting->site_name = $request->name;
        $generalsetting->address = $request->address;
        $generalsetting->phone = $request->phone;
        $generalsetting->email = $request->email;
        $generalsetting->save();

        $businessSetting = BusinessSetting::where('type', 'system_default_currency')->first();
        $businessSetting->value = $request->system_default_currency;
        $businessSetting->save();

        $this->writeEnvironmentFile('APP_NAME', $request->system_name);

        $user = new User;
        $user->name      = $request->admin_name;
        $user->email     = $request->admin_email;
        $user->password  = Hash::make($request->admin_password);
        $user->user_type = 'admin';
        $user->email_verified_at = date('Y-m-d H:m:s');
        $user->save();

        foreach(Product::all() as $product){
            $product->user_id = $user->id;
            $product->save();
        }

        $previousRouteServiceProvier = base_path('app/Providers/RouteServiceProvider.php');
        $newRouteServiceProvier      = base_path('app/Providers/RouteServiceProvider.txt');
        copy($newRouteServiceProvier, $previousRouteServiceProvier);
        //sleep(5);
        return view('installation.step6');

        // return redirect('step6');
    }
    public function database_installation(Request $request) {

        if(self::check_database_connection($request->DB_HOST, $request->DB_DATABASE, $request->DB_USERNAME, $request->DB_PASSWORD)) {
            $path = base_path('.env');
            if (file_exists($path)) {
                foreach ($request->types as $type) {
                    $this->writeEnvironmentFile($type, $request[$type]);
                }
                return redirect('step4');
            }else {
                return redirect('step3');
            }
        }else {
            return redirect('step3/database_error');
        }
    }

    public function import_sql() {
        $sql_path = base_path('shop.sql');
        DB::unprepared(file_get_contents($sql_path));
        return redirect('step5');
    }

    function check_database_connection($db_host = "", $db_name = "", $db_user = "", $db_pass = "") {

        if(@mysqli_connect($db_host, $db_user, $db_pass, $db_name)) {
            return true;
        }else {
            return false;
        }
    }

    public function writeEnvironmentFile($type, $val) {
        $path = base_path('.env');
        if (file_exists($path)) {
            $val = '"'.trim($val).'"';
            file_put_contents($path, str_replace(
                $type.'="'.env($type).'"', $type.'='.$val, file_get_contents($path)
            ));
        }
    }
}

解决错误 500(删除/注释时)但导致更多问题的代码段:

$user->save();

foreach(Product::all() as $product){
    $product->user_id = $user->id;
    $product->save();
}

我不知道为什么删除/注释那段代码似乎可行,但我希望有人能解释一下?

【问题讨论】:

  • 你检查了两个日志吗?服务器错误日志或 Laravel 日志中可能有信息,位于 storage/logs
  • Laravel 日志中最新的几行是:#62 /Applications/XAMPP/xamppfiles/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate \\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request)) #63 /Applications/XAMPP/xamppfiles/htdocs/index.php(55): Illuminate\\Foundation\\Http\ \Kernel->handle(Object(Illuminate\\Http\\Request)) #64 {main} "}
  • 哇,这是堆栈跟踪的方式。进一步查看时间戳的位置,它将显示错误消息
  • 在 .env 文件中启用 app_debug=true 并运行 php artisan config:cachephp artisan config:clear
  • 我得到的错误是:“SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db_mydb.users' 不存在(SQL: insert into users (name , email, password, user_type

标签: php laravel xampp


【解决方案1】:

此问题已修复。解决方案如下。

我按照 Mayank Dudakiya 的指示在 env 文件中将 app_debug 设置为 true。然后,我可以查看所有问题,并逐个修复它们,总共有 4 个主要问题。

我的实际问题是由于 mysqld 中的 innodb 内存大小。对 my.ini 的简单编辑使我能够将其从 5m 设置为 500m,从而解决了问题,允许数据库正确安装,瞧。

感谢所有回复的人。

【讨论】:

    猜你喜欢
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多