2017-07-18 25 views
1

我学会了laravel使用version 5.4 6个月。然后我安装了最新的xampp。但是现在我得到了一个建在laravel 5.1上的项目。但是,当我想运行应用程序,它给了我错误(未定义的索引:http_host)!我怎样才能找到错误来自哪里? 我该如何解决这个问题?我在网上搜索,但没有发现富有成效。 你能帮我吗? 存储/ log.php:Laravel 5.1在运行'php artisan serve'时给出'未定义索引:http_host'

[2017-07-18 21:55:50] local.ERROR: ErrorException: Undefined index: HTTP_HOST in H:\Current\school\school\app\Providers\AppServiceProvider.php:40 

堆栈跟踪:

#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} 

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

     } 

    } 

} 

40行:

$subdomain_name = array_shift((explode(".",$_SERVER['HTTP_HOST']))); 
+0

后您的日志,而不是自动加载,请 – vietnguyen09

+0

我在哪里可以找到日志文件? – Fawel

+0

你可以在'storage \ logs'中找到,删除这里的每个文件并重新运行你的artisan命令以获取错误,并打开你的日志文件并更新你的文章 – vietnguyen09

回答

2

可变$_SERVER['HTTP_HOST']仅WO RK上的浏览器,而不是PHP-CLI,所以当你运行命令php artisan$_SERVER['HTTP_HOST']将不存在,您可以点击这里Undefined index HTTP_HOST even though it is checked

在这种情况下,你可以通过检查$_SERVER['HTTP_HOST']存在修复您的代码。

关于线条将解决您的问题,并有一点改进。这是固定代码的完整版本并经过测试。

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

希望这有助于,

+0

谢谢作品!你能解释一下代码的作用吗?正如我所说,这不是我的任务,但我会努力。我有'site_infos'有'site_alias'列的表。我知道每次页面加载时都会运行引导方法。那么,启动方法中的代码是干什么的? – Fawel

+0

你可以从这里阅读https://laravel.com/docs/5.4/providers,但无论如何,我认为你应该找到另一种方式来做到这一点,而不是发送查询到您的数据库的每一个请求,这是不好的。 – vietnguyen09

+0

我该怎么做而不是那个? – Fawel