我学会了laravel使用version 5.46个月。然后我安装了最新的xampp。但是现在我开始着手建立一个项目laravel 5.1。但是,当我想运行该应用程序时,它给了我错误(未定义索引:http_host)!我如何找到错误的来源?我该如何解决这个问题?我在网上搜索,但没有发现任何成果。你能帮我吗?Storage / log.php:
[2017-07-18 21:55:50] local.ERROR: ErrorException: Undefined index: HTTP_HOST in H:\Current\school\school\app\Providers\AppServiceProvider.php:40
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
#0 H:\Current\school\school\app\Providers\AppServiceProvider.php(40): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined index...', 'H:\\Current\\scho...', 40, Array)
#1 [internal function]: Erp\Providers\AppServiceProvider->boot()
#2 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Container\Container.php(507): call_user_func_array(Array, Array)
#3 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(734): Illuminate\Container\Container->call(Array)
#4 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(717): Illuminate\Foundation\Application->bootProvider(Object(Erp\Providers\AppServiceProvider))
#5 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation\{closure}(Object(Erp\Providers\AppServiceProvider), 18)
#6 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(718): array_walk(Array, Object(Closure))
#7 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\BootProviders.php(17): Illuminate\Foundation\Application->boot()
#8 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(203): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application))
#9 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php(208): Illuminate\Foundation\Application->bootstrapWith(Array)
#10 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php(105): Illuminate\Foundation\Console\Kernel->bootstrap()
#11 H:\Current\school\school\artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 {main}
Run Code Online (Sandbox Code Playgroud)
AppServiceProvider:
public function boot()
{
if(!Session::get(SITE_ID)){
$subdomain_name = array_shift((explode(".",$_SERVER['HTTP_HOST'])));
if(isset($subdomain_name) && !empty($subdomain_name)){
$domain = $subdomain_name;
}else{
$domain = "school";
}
$siteToRecollect = DB::table('site_infos')->where('site_alias',$domain)->first();
if(isset($siteToRecollect->id) && !empty($siteToRecollect->id) && $siteToRecollect->id != 0){
Session::put(SITE_ID,$siteToRecollect->id);
}else{
Session::put(SITE_ID,1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
40线:
$subdomain_name = array_shift((explode(".",$_SERVER['HTTP_HOST'])));
Run Code Online (Sandbox Code Playgroud)
该变量$_SERVER['HTTP_HOST']仅适用于浏览器,不适用于PHP-CLI,因此,当您运行命令时,该命令php artisan $_SERVER['HTTP_HOST']将不存在,您可以在此处检查未定义的索引HTTP_HOST,即使已将其选中
在这种情况下,可以通过检查是否$_SERVER['HTTP_HOST']存在来修复代码。
if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])){
$gethost = explode(".",$_SERVER['HTTP_HOST']);
$domain = array_shift($gethost);
}else{
$domain = "school";
}
Run Code Online (Sandbox Code Playgroud)
关于线路将解决您的问题,并且会有一些改进。这是固定代码的完整版本,并经过测试。
public function boot()
{
if(!Session::get(SITE_ID)){
$domain = "school";
if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])){
$gethost = explode(".",$_SERVER['HTTP_HOST']);
$domain = array_shift($gethost);
}
$siteToRecollect = DB::table('site_infos')->where('site_alias', $domain)->first();
if(isset($siteToRecollect->id) != 0 && !empty($siteToRecollect->id))
{
Session::put(SITE_ID, $siteToRecollect->id);
}else{
Session::put(SITE_ID,1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助,