我正在上传一个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);
});
});
答案 0 :(得分:0)
我实际上知道了。因此,在我实际添加会话之前已将其包含在内,以解决此问题,而不仅仅是说session_start,而是检查会话是否存在,然后仅在必要时开始。
代码
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
奖金提示:-)
以上代码适用于php 5.4及更高版本,如果您运行的版本低于5.4,则可以执行以下操作:
if(session_id() == '') {
session_start();
}
希望这会有所帮助