Laravel 5.1给出了';未定义索引:http#u主机';运行时';php artisan serve';
我用Laravel 5.1给出了';未定义索引:http#u主机';运行时';php artisan serve';,php,laravel-5,Php,Laravel 5,我用Version5.4学习了6个月的laravel。我安装了最新的xampp。但现在我开始从事一个基于Laravel5.1的项目。但是当我想运行应用程序时,它会给我一个错误(未定义的索引:http_host)!如何找到错误的来源? 我怎样才能解决这个问题?我在网上搜索了一下,但没有发现任何结果。 你能帮帮我吗? Storage/log.php: [2017-07-18 21:55:50] local.ERROR: ErrorException: Undefined index: HTTP_HO
Version5.4
学习了6个月的laravel
。我安装了最新的xampp。但现在我开始从事一个基于Laravel5.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
堆栈跟踪:
#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'])));
变量
$\u SERVER['HTTP\u HOST']
仅在浏览器上工作,而不是在PHP-CLI上工作,因此当您运行命令PHP artisan
$\u SERVER['HTTP\u HOST']
时,将不存在,您可以在此处进行检查
在这种情况下,您可以通过检查$\u服务器['HTTP\u HOST']
是否存在来修复代码
if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])){
$gethost = explode(".",$_SERVER['HTTP_HOST']);
$domain = array_shift($gethost);
}else{
$domain = "school";
}
关于行将解决您的问题,并有一点改进。这里是完整版本的固定代码和测试
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);
}
}
}
希望获得此帮助,发布日志而不是自动加载。请问在哪里可以找到日志文件?您可以在
存储\logs
中找到日志文件,删除此处的每个文件并重新运行artisan命令以获取错误,然后打开日志文件并更新帖子编辑我的问题@vietnguyen09检查我的答案谢谢!你能解释一下代码的作用吗?正如我所说,这不是我的任务,但我会努力的。我有表“site\u infos”,其中有“site\u alias”列。据我所知,每次加载页面时都会运行引导方法。那么,引导方法中的代码是什么呢?您可以从这里读取,但无论如何,我认为您应该找到另一种方法来执行此操作,而不是为每个请求向数据库发送查询,这是不好的。我应该做什么来代替此操作?这取决于您的系统,如果表site\u infos
中的数据不太多,您可以将它们放入配置中并从中读取。如果表中的行太多,则应使用memcache
或redis
存储并读取它们。我的站点信息表不太大。我不知道如何在每次加载页面时都将其放入config并使用它。不知道memcache或redis。你有我可以从哪里学到这些的链接吗?