session_start() 导致错误:没有这样的文件或目录(新鲜的、可移植的 XAMPP)

问题描述 投票:0回答:5

我有以下 PHP 代码:

include './globallyUsedFunctions/connectToDatabase.php';
include './globallyUsedFunctions/hashInput.php';
session_start();

由于某种原因,它会导致此错误:

<br />
<b>Warning</b>:  session_start(): open(\xampp\tmp\sess_4p70knkr6lb7r9ha0pitktl3fe, O_RDWR) failed: No such file or directory (2) in <b>D:\foundationtests\src\assets\php\login.php</b> on line <b>2</b><br />
<br />
<b>Warning</b>:  session_start(): Failed to read session data: files (path: \xampp\tmp) in <b>D:\foundationtests\src\assets\php\login.php</b> on line <b>2</b><br />

现在我认为其原因在于代码之外,所以这里是有关我的系统的一些信息: 我有最新版本的免安装 XAMPP,我在其中运行 apache 和 mariaDB。 它在 Windows 10 计算机上运行,使用没有管理员权限的用户帐户(这就是我选择 XAMPP 的免安装版本的原因)。

该网站也在 ZURB 基础框架(ZURB 模板 6.4)内运行,该框架基于 webpack4、gulp 和 babel7。

编辑: 我已经尝试过的替代方案:

由“代码构建者”建议(参见答案)

session_start();
require_once $_SERVER['DOCUMENT_ROOT'].'/globallyUsedFunctions/connectToDatabase.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/globallyUsedFunctions/hashInput.php';

结果 =>

<br />
<b>Warning</b>:  session_start(): open(\xampp\tmp\sess_14rr40ahtg7rbgb20fvqocet83, O_RDWR) failed: No such file or directory (2) in <b>D:\foundationtests\src\assets\php\login.php</b> on line <b>2</b><br />
<br />
<b>Warning</b>:  session_start(): Failed to read session data: files (path: \xampp\tmp) in <b>D:\foundationtests\src\assets\php\login.php</b> on line <b>2</b><br />
php apache session
5个回答
4
投票

<b>Warning</b>:  session_start(): open(\xampp\tmp\sess_4p70knkr6lb7r9ha0pitktl3fe, O_RDWR) failed: No such file or directory (2) in <b>D:\foundationtests\src\assets\php\login.php</b> on line <b>2</b><br />

session_start()
尝试写入数据的路径没有驱动器号。由于您是从
D:\foundationtests\src\assets\php\login.php
运行代码,因此也假定它位于
D:
。你说实际路径应该在
E:
。这就是你的问题所在。

我不熟悉第三方捆绑包(有时它们似乎造成的问题比解决的问题还要多),但它肯定会有一个

php.ini
文件,其中包含不完整的
session.save_path
指令
找到它并修复它。

除此之外,更好的长期解决方案是为每个应用程序启用自定义会话目录。机制大致相同:

  1. 在代码库中创建一个位于 DOCUMENT_ROOT 之外的目录(我猜是在

    D:\foundationtests\src
    的某个位置)。

  2. 在致电

    session.save_path
    之前配置 session_start()

这具有提供对会话超时的完全控制的额外好处。


1
投票

session_start();
应该始终是项目中的第一行代码。

使用相对路径会给你带来麻烦。尝试使用 $_SERVER['DOCUMENT_ROOT'] 的绝对路径,然后指定文件所在位置。

require_once $_SERVER['DOCUMENT_ROOT']."/connectToDatabase.php";

0
投票

只需在所有项目所在的根目录中创建一个文件夹“xampp/tmp”即可。例如:

我在我的

C:/
上安装了xampp(默认),并且我拥有的所有项目根目录是
D:/
所以我创建了一个像这样的文件夹结构:
D:/xampp/tmp


0
投票

我也有同样的问题。我终于发现这是我从 cPanel 复制 .htaccess 文件引起的。如果您使用 cPanel 并且本地 XAMPP 服务器上有相同的 .htaccess 文件,请查找此行...

开始 cPanel 生成的 php ini 指令,请勿编辑

下面的代码为 cPanel 上安装的 PHP 版本设置 php.ini 值,其中的某些内容会干扰 XAMPP。删除该代码块(XAMPP 不需要它),这应该可以解决您的问题。


0
投票

谢谢! 您的解决方案简单、快速且有效。

© www.soinside.com 2019 - 2024. All rights reserved.