从 Linux 迁移到 Windows 后的 WSOD
WSOD after migrating from Linux to Windows
最初我在 Linux 笔记本电脑上本地设置网站,最近将我的工作从那里迁移到我的主 PC - Windows。我转移工作的原因是我发现我使用的那种 Linux 是非常错误的,即使互联网很好,连接也会不断断开,或者需要很长时间才能刷新网站.
我现在使用 XAMPP 而不是手动设置具有 PHP、Apache 和 MySQL 的本地主机。我现在也在使用的 IDE 是直接连接到我的 phpmyadmin 的 PhpStorm。
现在我的问题是,现在我得到了 WSOD - 死亡白屏,当我尝试通过我的网站注册某人时,这个空白的白屏没有显示任何错误,我已经查看了每一个我可以找到解决此问题的可能帮助。但是没有成功,所以现在我不知道是我的代码是问题还是其他原因,我无法分辨。
当我尝试登录功能时也是如此。
这在我的笔记本电脑上运行良好,尽管偶尔会出现一些小错误。
我启用了错误报告,我已经尝试在 php.ini
文件中启用它,但它只会被忽略或使 XAMPP 拒绝它(不起作用)。
无论如何,这是我的数据库和注册代码,只是举个例子:
Register.php:
<?php
require 'connection.php';
ini_set('display_errors', 1);
ini_set('html_errors', 0);
error_reporting(E_ALL);
$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
$lastname = isset($_POST['lastname']) ? $_POST['lastname'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
$confirmpassword = isset($_POST['confirmpassword']) ? $_POST['confirmpassword'] : '';
$message[] = '';
if (!empty($_POST['username']) && !empty($_POST['password']))
{
//var_dump($password, $confirmpassword);
if(strlen($password) > 6 && strlen($password) < 32)
{
if($password == $confirmpassword)
{
$records = $conn->prepare('SELECT * FROM users WHERE Username = :username');
$records->bindParam(':username', $_POST['username']);
$records->execute();
$results = $records->fetchAll(PDO::FETCH_ASSOC);
//var_dump($results);
if(count($results) > 0)
{
echo 'That username is already in use, please use a different one.';
}
else
{
$emailRecords = $conn->prepare('SELECT * FROM users WHERE Email = :email');
$emailRecords->bindParam(':email', $_POST['email']);
$emailRecords->execute();
$emailResults = $emailRecords->fetchAll(PDO::FETCH_ASSOC);
if(count($emailResults) > 0)
{
echo 'That email is already in use, are you sure you\'re not registered with us already? <a href="loginPage.php">Login Here</a>';
}
else
{
$sql = "INSERT INTO users (Firstname, Lastname, Role, Email, Username, Password) VALUES (:firstname, :lastname, :role, :email, :username, :passwords)";
$stmt = $conn->prepare($sql);
$hashPassword = password_hash($password, PASSWORD_DEFAULT);
$stmt->bindParam(':firstname', strip_tags($firstname));
$stmt->bindParam(':lastname', strip_tags($lastname));
$stmt->bindParam(':role', $_POST['role']);
$stmt->bindParam(':email', strip_tags($email));
$stmt->bindParam(':username',strip_tags($username));
$stmt->bindParam(':passwords',strip_tags($hashPassword));
if ($stmt->execute())
{
echo 'Well done! You have successfully registered with us!';
header('Location:loginPage.php');
}
else
{
echo 'There seems to be an issue getting you registered.';
//$message = 'There seems to be an issue getting you registered.';
}
}
}
}
else
{
echo 'Your passwords do not match, please enter them correctly.';
//$message = 'Your passwords do not match, please enter them correctly.';
//header('Location:registerPage.php');
}
}
else
{
echo 'Your password must be between 6 to 32 characters.';
//header('Location:registerPage.php');
}
}
数据库 - Table 用户:(登录和注册需要)
CREATE TABLE users
(
id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
Firstname VARCHAR(50) NOT NULL,
Lastname VARCHAR(50) NOT NULL,
Role VARCHAR(30) NOT NULL,
Email VARCHAR(150) NOT NULL,
Username VARCHAR(60) NOT NULL,
Password VARCHAR(128) NOT NULL
);
CREATE UNIQUE INDEX Email ON users (Email);
CREATE UNIQUE INDEX Username ON users (Username);
您正在使用 PhpStorm 自己的内置网络服务器,它现在有 一些 问题(尤其是 POST 请求,例如 WEB-17317 --您可以观看此票证 (star/vote/comment) 以获得有关任何进展的通知。
解决方案是使用您自己的适当网络服务器(来自您的 XAMPP 的 Apache)。
- 定义适当类型的部署条目。
In place
类型可能没问题,只要您的 Apache 可以从该位置提供文件;否则要么配置 Web 服务器以能够执行此操作 .. 要么使用其他类型的部署(例如 Local or Mounted Folders
for IDE 为您将文件复制到另一个位置)。
- 对其进行配置(提供所需的 URL 等)-- 确保它不会在前 2 个选项卡上显示有关未填写字段的警告。
- 将其标记为该项目的默认值。
现在 IDE 将在您使用 Open in Browser
或 Run/Debug 操作时使用该基础 URL(注意:它不会影响任何现有的 Run/Debug配置 -- 只有未来的配置;您必须手动更新当前的 Run/Debug 配置)。
两者有什么区别:
最初我在 Linux 笔记本电脑上本地设置网站,最近将我的工作从那里迁移到我的主 PC - Windows。我转移工作的原因是我发现我使用的那种 Linux 是非常错误的,即使互联网很好,连接也会不断断开,或者需要很长时间才能刷新网站.
我现在使用 XAMPP 而不是手动设置具有 PHP、Apache 和 MySQL 的本地主机。我现在也在使用的 IDE 是直接连接到我的 phpmyadmin 的 PhpStorm。
现在我的问题是,现在我得到了 WSOD - 死亡白屏,当我尝试通过我的网站注册某人时,这个空白的白屏没有显示任何错误,我已经查看了每一个我可以找到解决此问题的可能帮助。但是没有成功,所以现在我不知道是我的代码是问题还是其他原因,我无法分辨。
当我尝试登录功能时也是如此。
这在我的笔记本电脑上运行良好,尽管偶尔会出现一些小错误。
我启用了错误报告,我已经尝试在 php.ini
文件中启用它,但它只会被忽略或使 XAMPP 拒绝它(不起作用)。
无论如何,这是我的数据库和注册代码,只是举个例子:
Register.php:
<?php
require 'connection.php';
ini_set('display_errors', 1);
ini_set('html_errors', 0);
error_reporting(E_ALL);
$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
$lastname = isset($_POST['lastname']) ? $_POST['lastname'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
$confirmpassword = isset($_POST['confirmpassword']) ? $_POST['confirmpassword'] : '';
$message[] = '';
if (!empty($_POST['username']) && !empty($_POST['password']))
{
//var_dump($password, $confirmpassword);
if(strlen($password) > 6 && strlen($password) < 32)
{
if($password == $confirmpassword)
{
$records = $conn->prepare('SELECT * FROM users WHERE Username = :username');
$records->bindParam(':username', $_POST['username']);
$records->execute();
$results = $records->fetchAll(PDO::FETCH_ASSOC);
//var_dump($results);
if(count($results) > 0)
{
echo 'That username is already in use, please use a different one.';
}
else
{
$emailRecords = $conn->prepare('SELECT * FROM users WHERE Email = :email');
$emailRecords->bindParam(':email', $_POST['email']);
$emailRecords->execute();
$emailResults = $emailRecords->fetchAll(PDO::FETCH_ASSOC);
if(count($emailResults) > 0)
{
echo 'That email is already in use, are you sure you\'re not registered with us already? <a href="loginPage.php">Login Here</a>';
}
else
{
$sql = "INSERT INTO users (Firstname, Lastname, Role, Email, Username, Password) VALUES (:firstname, :lastname, :role, :email, :username, :passwords)";
$stmt = $conn->prepare($sql);
$hashPassword = password_hash($password, PASSWORD_DEFAULT);
$stmt->bindParam(':firstname', strip_tags($firstname));
$stmt->bindParam(':lastname', strip_tags($lastname));
$stmt->bindParam(':role', $_POST['role']);
$stmt->bindParam(':email', strip_tags($email));
$stmt->bindParam(':username',strip_tags($username));
$stmt->bindParam(':passwords',strip_tags($hashPassword));
if ($stmt->execute())
{
echo 'Well done! You have successfully registered with us!';
header('Location:loginPage.php');
}
else
{
echo 'There seems to be an issue getting you registered.';
//$message = 'There seems to be an issue getting you registered.';
}
}
}
}
else
{
echo 'Your passwords do not match, please enter them correctly.';
//$message = 'Your passwords do not match, please enter them correctly.';
//header('Location:registerPage.php');
}
}
else
{
echo 'Your password must be between 6 to 32 characters.';
//header('Location:registerPage.php');
}
}
数据库 - Table 用户:(登录和注册需要)
CREATE TABLE users
(
id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
Firstname VARCHAR(50) NOT NULL,
Lastname VARCHAR(50) NOT NULL,
Role VARCHAR(30) NOT NULL,
Email VARCHAR(150) NOT NULL,
Username VARCHAR(60) NOT NULL,
Password VARCHAR(128) NOT NULL
);
CREATE UNIQUE INDEX Email ON users (Email);
CREATE UNIQUE INDEX Username ON users (Username);
您正在使用 PhpStorm 自己的内置网络服务器,它现在有 一些 问题(尤其是 POST 请求,例如 WEB-17317 --您可以观看此票证 (star/vote/comment) 以获得有关任何进展的通知。
解决方案是使用您自己的适当网络服务器(来自您的 XAMPP 的 Apache)。
- 定义适当类型的部署条目。
In place
类型可能没问题,只要您的 Apache 可以从该位置提供文件;否则要么配置 Web 服务器以能够执行此操作 .. 要么使用其他类型的部署(例如Local or Mounted Folders
for IDE 为您将文件复制到另一个位置)。 - 对其进行配置(提供所需的 URL 等)-- 确保它不会在前 2 个选项卡上显示有关未填写字段的警告。
- 将其标记为该项目的默认值。
现在 IDE 将在您使用 Open in Browser
或 Run/Debug 操作时使用该基础 URL(注意:它不会影响任何现有的 Run/Debug配置 -- 只有未来的配置;您必须手动更新当前的 Run/Debug 配置)。
两者有什么区别: