Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 标头位置未采用声明的路径_Php - Fatal编程技术网

Php 标头位置未采用声明的路径

Php 标头位置未采用声明的路径,php,Php,如果$\u session的数组键为空,我试图杀死一个会话,然后重定向到一个脚本,该脚本破坏会话并重定向到索引。这是我的文件结构 backend apis profiles search.php core session_end.php CoreTools.php frontend index.php landing.php 这是CoreTools.php代码 class CoreTools{ protected $session; pub

如果$\u session的数组键为空,我试图杀死一个会话,然后重定向到一个脚本,该脚本破坏会话并重定向到索引。这是我的文件结构

backend
  apis
    profiles
      search.php
  core
    session_end.php
    CoreTools.php
frontend
index.php
landing.php
这是
CoreTools.php
代码

class CoreTools{

  protected $session;
  public function __construct( $inSession ){
      $this->session = $inSession;
  }


  public function sessionLost(){

    $return = false;
    if( empty( $this->session ) ){
      $return = true;

    }else{
      foreach( $this->session as $s ){
          if( empty( $s ) ){$return = true;}
      }
    }


    return $return;
  }

  public function checkPermissions( $perm ){
    if( self::sessionLost() ){
     header('Location: session_end.php');

    }else{
      //too much code
      return true;
    }
  }
}
上面的代码由
search.php调用

session_start();
require '../../core/CoreTools.php';
$_SESSION = null;
$tools = new CoreTools( $_SESSION );
if( !$tools->checkPermissions( 'get' ) ){
    $response['success'] = false;
    $response['message'] = 'Not allowed';

  }else{


  }
我故意设置
$\u SESSION=null
来测试代码

search.php
landing.php
通过AJAX调用

我有404个错误

如果我使用

header('Location: session_end.php');
服务器响应

找不到请求的URL/backend/api/profiles/session_end.php 在此服务器上找不到

此外,在尝试查找时遇到404 Not Found错误 使用ErrorDocument来处理请求

看起来它正在profiles文件夹中搜索
session\u end.php
文件,为什么
CoreTools.php
位于核心文件夹中,除了
session\u end.php

session_start();
require '../../core/CoreTools.php';
$_SESSION = null;
$tools = new CoreTools( $_SESSION );
if( !$tools->checkPermissions( 'get' ) ){
    $response['success'] = false;
    $response['message'] = 'Not allowed';

  }else{


  }
我也这样试过

header('Location: http://www.mysite.tv/backend/core/session_end.php');
$path = $_SERVER['HTTP_HOST'] . '/backend/core/session_end.php';
header('Location: ' . $path);
它返回一个CORS错误(我现在不想配置CORS)

也是这样吗

header('Location: http://www.mysite.tv/backend/core/session_end.php');
$path = $_SERVER['HTTP_HOST'] . '/backend/core/session_end.php';
header('Location: ' . $path);
这是404错误

找不到请求的URL /backend/api/profiles/http//www.mysite.tv/backend/core/session_end.php 在此服务器上找不到

此外,在尝试查找时遇到404 Not Found错误 使用ErrorDocument来处理请求

这是去散化的解决方案

echo '<script>window.location.href="./backend/core/session_end.php"</script>';
echo'window.location.href=“./backend/core/session_end.php”;
而且它不起作用


我的代码怎么了?

相对URL由客户端处理,而不是服务器。客户端相对于加载的URL解释它,URL位于
profiles
文件夹中,因此它在那里查找
session\u end.php

重定向AJAX调用没有多大意义,因为AJAX不会在客户端重新加载页面

CORS错误可能是由使用
https:
的原始AJAX调用引起的,但您正在重定向到
http:
,这被认为是另一个域。您可以在URL中省略协议和域,它将从原始URL继承它们

header('Location: /backend/core/session_end.php');

相对URL由客户端而不是服务器处理。客户端相对于加载的URL解释它,URL位于
profiles
文件夹中,因此它在那里查找
session\u end.php

重定向AJAX调用没有多大意义,因为AJAX不会在客户端重新加载页面

CORS错误可能是由使用
https:
的原始AJAX调用引起的,但您正在重定向到
http:
,这被认为是另一个域。您可以在URL中省略协议和域,它将从原始URL继承它们

header('Location: /backend/core/session_end.php');

我通常使用小写的l,并在末尾加一个换行符,但是你说的是ajax,所以ajax不会遵循重定向,你需要在javascript@DavidBray大小写在标题名称中不重要,不应添加换行符。不要忘记退出
!看起来当前的URL路径是
/backend/api/profile/search.php
,所以如果您想从该路径重定向到
session\u end.php
,您可以使用绝对路径
/backend/core/session\u end.php
或相对路径
。/../core/session\u end.php
@phil,如果我这样做,可能在我使用
CoreTools()时
从核心文件夹中,它将不起作用。为什么相对路径不起作用?达曼,我也试过了,它返回了第一个错误。我通常使用小写的l,并在末尾添加换行符,但是你说的是ajax,所以ajax不会遵循重定向,你需要在javascript@DavidBray大小写在标题名称中不重要,不应添加换行符。不要忘记退出!看起来当前的URL路径是
/backend/api/profile/search.php
,所以如果您想从该路径重定向到
session\u end.php
,您可以使用绝对路径
/backend/core/session\u end.php
或相对路径
。/../core/session\u end.php
@phil,如果我这样做,可能在我使用
CoreTools()时
从核心文件夹中,它将不起作用。为什么相对路径不起作用?达曼,我也试过了,它返回了第一个错误。