【问题标题】:JQuery, Ajax, PHP post error 500 (Internal Server Error)JQuery、Ajax、PHP 发布错误 500(内部服务器错误)
【发布时间】:2017-06-27 20:01:43
【问题描述】:

我使用 ajax 将数据发布到 PHP,此代码在本地服务器中运行良好(我使用 XAMPP),但是当我将其上传到 Web 服务器时,它没有获取数据并向我显示此错误

POST http://my_server_IP/login.php 500(内部服务器错误)

如果我将 dataType 从 json 更改为 application/json 并添加 contentType: 'application/json; charset=utf-8',

那就是另一个错误

POST http://my_server_IP/login.php500(内部服务器错误)

但是在本地机器上它工作正常,我可以使用相同的代码登录

这是我的 JQuery、AJAX 代码

$.ajax({
  dataType: "json",
  type: "POST",
  data: {user: sEmail, pass: sPass},
  url: "login.php",
  success:function(response){
    var a = response;
    if(a.res=='agree'){
      var st = a.role+","+a.name;
      $.cookie("imgup", st, { path: '/imgup', expires: 2 });
      window.location.href = "logged.php";
    }else if (a.res == 'error') {
      errorDisplay(a.error);
    }
  }
});

这是 PHP

<?php
header('Content-Type: application/json');
require_once('inc/init.php');
require_once "helper/helper.php";
$email = sanitize($_POST['user']);
$pass = sanitize($_POST['pass']);

$sql_query = $db->query("SELECT * FROM `user_admin` WHERE `username`='$email'");
if(mysqli_num_rows($sql_query) > 0){
    $sql = mysqli_fetch_assoc($sql_query);
  if(password_verify($pass, $sql['password'])){
    $role = explode(',',$sql['role']);
    if(in_array("admin", $role)){
            echo json_encode(array('res' => 'agree', 'role' => 'admin','name' => $sql['id']));
    }elseif(in_array("editor", $role)){
        echo json_encode(array('res' => 'agree', 'role' => 'editor','name' => $sql['id']));
    }elseif(in_array("user", $role)){
        echo json_encode(array('res' => 'agree', 'role' => 'user','name' => $sql['id']));
    }
  }else{
    echo json_encode(array('res' => 'error', 'error' => 'user_pass'));
  }
}else{
    echo json_encode(array('res' => 'error', 'error' => 'user_not_exist'));
}
?>

错误日志是

PHP 致命错误:在第 11 行的 /var/www/html/login.php 中调用未定义函数 password_verify(),引用者:http://__my_IP__/login_page.php

但该功能在 localhost 中工作正常!!!

我该如何解决这个错误?

注意: sanitize 是检查字符串中存在的 html 实体的函数

【问题讨论】:

  • 查看您的服务器错误日志,它会告诉您为什么它会抛出 500 错误。
  • 检查服务器日志...并分享错误,以便我们提供更好的帮助或建议。
  • password_verify 函数在哪里定义...?由于 PHP 无法找到该函数定义
  • 听起来您的网络服务器运行在 PHP 5.5 以下。
  • 您的主机可能默认为 5.4。与他们交谈,或者看看是否可以使用 php55php56 软件包安装它。

标签: javascript php jquery json ajax


【解决方案1】:

phpinfo() 放在您的PHP 代码之上,并在您的托管服务器上直接运行(而不是通过AJAX)。如果您在浏览器屏幕上看到的 PHP 版本低于 5.5.0 - 请要求您的主机升级或使用其他逻辑进行密码检查。

【讨论】:

  • 谢谢您,先生,但我已经安装了新版本的 php,它现在可以工作了 :)
【解决方案2】:

这个错误是因为我有旧版本的 PHP (v5.4),将我的 PHP 版本更新到 5.6 并解决了问题!

password_verify()以及v5.5.0之后增加了一些功能,

确保您的 PHP 版本是 5.5+,然后这些功能可以正常工作:)

【讨论】:

    【解决方案3】:

    如果您使用数组完成了json_encode(),它适用于 localhost。
    如果您在实时服务器上,您应该删除 header("Content Type","application/json"); 才能正常工作。
    我已经尝试并搜索了很多,但这最终对我有用。

    【讨论】:

      【解决方案4】:

      您的 PHP 版本似乎不支持 password_verify 功能。有关更多信息,您可以查看 PHP 手册:

      https://www.php.net/manual/en/function.password-verify.php

      主要来源:https://www.php.net

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-10
        • 2019-12-10
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        相关资源
        最近更新 更多