我有以下 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 />
<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
指令。 找到它并修复它。
除此之外,更好的长期解决方案是为每个应用程序启用自定义会话目录。机制大致相同:
在代码库中创建一个位于 DOCUMENT_ROOT 之外的目录(我猜是在
D:\foundationtests\src
的某个位置)。session.save_path
之前配置 session_start()
。这具有提供对会话超时的完全控制的额外好处。
session_start();
应该始终是项目中的第一行代码。
使用相对路径会给你带来麻烦。尝试使用 $_SERVER['DOCUMENT_ROOT'] 的绝对路径,然后指定文件所在位置。
require_once $_SERVER['DOCUMENT_ROOT']."/connectToDatabase.php";
只需在所有项目所在的根目录中创建一个文件夹“xampp/tmp”即可。例如:
我在我的
C:/
上安装了xampp(默认),并且我拥有的所有项目根目录是D:/
所以我创建了一个像这样的文件夹结构:D:/xampp/tmp
我也有同样的问题。我终于发现这是我从 cPanel 复制 .htaccess 文件引起的。如果您使用 cPanel 并且本地 XAMPP 服务器上有相同的 .htaccess 文件,请查找此行...
开始 cPanel 生成的 php ini 指令,请勿编辑
下面的代码为 cPanel 上安装的 PHP 版本设置 php.ini 值,其中的某些内容会干扰 XAMPP。删除该代码块(XAMPP 不需要它),这应该可以解决您的问题。
谢谢! 您的解决方案简单、快速且有效。