php - 从 Linux 迁移到 Windows 后的 WSOD

标签 php mysql windows phpstorm wsod

最初,我在 Linux 笔记本电脑上本地设置了网站,最近将我的工作从那里迁移到了我的主 PC - Windows。我转移工作的原因是,我发现我使用的 Linux 存在令人难以置信的错误,即使互联网很好,连接也会不断断开,或者刷新网站需要花费非常长的时间。

我现在使用 XAMPP,而不是手动设置带有 PHP、Apache 和 MySQL 的本地主机。我现在也在使用的IDE是PhpStorm,它直接连接到我的phpmyadmin。

现在我的问题是,现在我得到了 WSOD - 白屏死亡,当我尝试通过我的网站注册某人时,这个空白的白屏出现,没有显示任何错误,我已经查看了所有可能的帮助我能找到解决这个问题的方法。但没有成功,所以现在我陷入了困境,不知道是我的代码有问题还是其他问题,我无法判断。

当我尝试登录功能时也是如此。

这在我的笔记本电脑上运行良好,尽管到处都有小错误。

我启用了错误报告,并且我尝试在 php.ini 文件中启用它,该文件只会被忽略或使 XAMPP 拒绝它(不起作用)。

这里是我的数据库和注册代码,仅举一个例子:

注册.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');
}
}

数据库-表用户:(登录和注册时需要)

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 自己的内置 Web 服务器,该服务器目前存在一些问题(尤其是 POST 请求,例如 WEB-17317 - 您可以观看此票证(星标/投票/评论) )以获得有关任何进展的通知)。

解决方案是使用您自己的适当的 Web 服务器(来自 XAMPP 的 Apache)。

  1. 定义适当类型的部署条目。 In place 类型可能没问题,只要您的 Apache 可以从该位置提供文件;否则,要么配置 Web 服务器来执行此操作.. 要么使用其他类型的部署(例如 IDE 的本地或已安装文件夹,以便将文件复制到另一个位置)。
  2. 配置它(提供所需的网址等)- 确保它不会在前 2 个选项卡上显示有关未填写字段的警告。
  3. 将其标记为该项目的默认值。

现在,当您使用在浏览器中打开或运行/调试操作时,IDE 将使用该基本 URL(注意:它不会影响任何现有的运行/调试配置 - 仅影响将来的配置;您将必须手动更新当前的运行/调试配置)。

<小时/>

两者有什么区别:https://stackoverflow.com/a/33598214/783119

关于php - 从 Linux 迁移到 Windows 后的 WSOD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36558619/

相关文章:

java - 如何在加载 DLL 时加载 JVM 并在卸载 DLL 时释放它

php - PHP 中两个日期之间的完整天数?

php - 如何使用 Zend Framework 在用户之间实现共享变量?

php - 密码确认字段在 angularjs 中不起作用

mysql - 在使用 CodeIgniter 的 Active Record 类形成的 MySQL UPDATE 查询中执行算术运算

mysql - 如何避免在 MySQL 中重复注册

mysql - 如何查找每个零件的总数量

php - Wordpress SQL 选择错误

c++ - 在关闭文件时获取段错误

c - 两个线程中的同步问题共享一个队列以使用临界区进行读写