【发布时间】: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:cache和php 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