繁体   English   中英

包含会话时,我不能使用$ _FILES

[英]When including session I can not use $_FILES

我正在上传一个csv文件,并将其发送到页面以使用js fetch api进行处理。 我已经使用自己的init文件包含了会话,并且所有工作都很好地接受了应该处理以归档信息的页面。 如果不包括会话,它可以正常工作,并且我可以处理文件,当包含文件时,我可以看到所有会话信息,但是$ _FILES只是停止工作,由于某种原因,我看不到任何信息。

我真的希望这是愚蠢的

如果需要一些代码

初始化文件

<?php

    //define Site Root and Includes Path
    defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);
    defined('SITE_ROOT') ? null : define('SITE_ROOT', __DIR__ . DS );
    defined('INCLUDES_PATH') ? null : define('INCLUDES_PATH', SITE_ROOT);

    //get class files
    include(INCLUDES_PATH.DS."Session.php");
    require_once(INCLUDES_PATH.DS."functions.php");
    require_once(INCLUDES_PATH.DS."DB.php");
    require_once(INCLUDES_PATH.DS."Validation.php");
    require_once(INCLUDES_PATH.DS."User.php");
    require_once(INCLUDES_PATH.DS."Swp.php");
    require_once(INCLUDES_PATH.DS."Incident.php");
    require_once(INCLUDES_PATH.DS."Hira.php");
    require_once(INCLUDES_PATH.DS."Mail.php");

Session.php页面

<?php

    class Session
    {
        private $logged_in;
        public $user_id;

        function __construct()
        {
            session_start();
            $this->check_login();
        }

        public function is_logged_in() {

            return $this->logged_in;
        }

        private function check_login() {

            if (isset($_SESSION['UserID'])) {
                $this->user_id = $_SESSION['UserID'];
                $this->logged_in = true;
            } else {
                unset($this->user_id);
                $this->logged_in = false;
            }
        }

    }

    $session = new Session();

表单页面

<?php
    //get all the includes
    require_once("../php_functions/_init.php");
  print_r($_FILES);
    //all rows from csv file
    $rows = array_map('str_getcsv', file($_FILES['file']['tmp_name'][0]));

    //get only the headers
    $header = array_shift($rows);

    //declare the array
    $csv = array();

    //create associative array using array_combine
    foreach ($rows as $row) {
        $csv[] = array_combine($header, $row);
    }

    print_r($csv);

就像我提到的,如果我从此页面删除了一次require,它将按预期工作。 任何想法都会有所帮助

万一您需要它,这里是用于上传文件的js

document.querySelector("#upload_file").addEventListener("click", function () {

        const url = 'php/employee/upload_employee_csv_form.php';

        const files = document.querySelector('[type=file]').files;
        const formData = new FormData();

        for (let i = 0; i < files.length; i++) {
            let file = files[i];

            formData.append('file[]', file);
        }

        console.log(formData);

        fetch(url, {
            method: 'POST',
            body: formData
        }).then(response => {
            console.log(response);
        });
    });

我真的想通了。 因此,在我实际添加会话之前将其包含在内,以解决此问题,而不仅仅是说session_start,而是检查会话是否存在,然后仅在必要时启动。

编码

if (session_status() === PHP_SESSION_NONE) {
                session_start();
            }

奖金提示:-)

上面的代码适用于php 5.4及更高版本,如果您运行的版本低于5.4,则可以执行以下操作:

if(session_id() == '') {
    session_start();
}

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM