为啥我的网站在 xampp 中运行,但不在我的 Apache 服务器和我在 Ubuntu 上设置的 mySQL 中运行?

Posted

技术标签:

【中文标题】为啥我的网站在 xampp 中运行,但不在我的 Apache 服务器和我在 Ubuntu 上设置的 mySQL 中运行?【英文标题】:Why my site run in xampp but not run in my Apache server and mySQL i setting up on Ubuntu?为什么我的网站在 xampp 中运行,但不在我的 Apache 服务器和我在 Ubuntu 上设置的 mySQL 中运行? 【发布时间】:2012-05-30 23:38:34 【问题描述】:

我的登录站点完全在 Windows 上的 Xampp 中运行。 但是现在我将它复制到 Apache 服务器,它运行但是当我输入 id 时,通过并提交。登录不了,老是返回“ID或密码不匹配,重试”

我在 Ubuntu 11.10 上安装了 Apache 服务器、mysqlphp5,并将我的数据库从 Xampp 复制到 Ubuntu 上的 MySQL。

这是我的代码:

登录.php

<?php session_start(); ?>
<?php if(isset($_SESSION['name'])) 
header('location: member.php?id='.$_SESSION['name']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Login page</title>
<link href="resources/style.css" type="text/css" rel="stylesheet">
</head>

<body>
<?php

require "./references/BLLClass.php";

//Khoi tao doi tuong BLL
$bllObj = new BLLClass();

//Kiem tra truong du lieu trong 2 o nhap
if(isset($_POST['submit'])) 
    $errors = array();
    $required = array('account', 'password');
    foreach($required as $fieldname) 
        if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) 
            $errors[] = "The <strong> $fieldname </strong> was left bank.";
        
     // end: foreach

    if(empty($errors)) 
        $acc = mysql_real_escape_string($_POST['account']);
        $pword = mysql_real_escape_string($_POST['password']);
        //ket noi lay du lieu xac thuc
        $result = $bllObj->AuthMember($acc, $pword);
        if(mysql_num_rows($result) == 1)
            while($rows = mysql_fetch_assoc($result))
                $_SESSION['name'] = $rows['member_name'];
                header('Location: member.php');
            ; //end while
         else 
            $errors[] = "The ID or Password do not match, try again";
        
    //end if(empty($errors)

 // end isset($_POST['submit'])
?>
<div id="wrapper">

    <?php
        if(!empty($errors)) 
            echo "<ul>";
            foreach($errors as $error) 
                echo "<li>$error</li>";
            
            echo "</ul>";
        
    ?> <!-- Hien thi thong bao loi khi o nhap lieu rong -->

    <?php if(isset($message)) echo $message;?>
    <form action="" method="POST">
    <p>
        <label for="account or id"> Account or ID: </label>
        <input type="text" name="account"/>
    </p> <!-- o nhap ID hoac nick login-->

    <p>
        <label for="password"> Password </label>
        <input type="password" name="password"/>
    </p> <!--o nhap password-->

    <p>
        <input type="submit" name="submit" value="Login"/>
        <a href="register.php">Register</a>
    </p> <!-- nut submit va chuyen trang dang ky-->

<!--        <div class='login'>
        <a href="#">Login</a>
    </div>
--> 
    </div>
</body>
</html>

BLLClass.php

<?php

//Business Logic Layer

require_once 'DBClass.php';

class BLLClass     

    private $dbo;

    function BLLClass()

    
    //Check username password
    function AuthMember($username, $pword) 
        $this->dbo =    new DBClass();    
        $hash_pw = sha1($pword);
        $query = "SELECT member_name
                  FROM member
                  WHERE member_ID='$username'
                  OR member_login_name = '$username'
                  AND member_password = '$hash_pw'
                  LIMIT 1
                  ";
        $result = $this->dbo->SqlEx($query);
        return $result;
    



?>

还有 DBClass.php

<?php

//Data Access Layer
class DBClass

    private $mysql_hostname = "localhost";
    private $mysql_port = "3306";
    private $mysql_user = "root";
    private $mysql_password = "mypass";
    private $mysql_database = "db.sums01";


    public function DBClass()


    

    //khoi tao ket noi
    public function GetConn() 
    $conn = mysql_connect($this->mysql_hostname.":".$this->mysql_port, $this->mysql_user, $this->mysql_password) or die("Could not connect to DB");
    mysql_select_db($this->mysql_database, $conn) or die("Opps some thing went wrong");

    return $conn;
    

    //gui query len co so du lieu
    public function SqlEx($query) 
        $conn = $this->GetConn();
        $result = mysql_query($query, $conn) or die (mysql_error($conn));
        return $result;
    

?>

这是我的 apache 错误日志

[Thu May 24 20:42:27 2012] [error] [client 192.168.40.1] PHP Warning:  mysql_real_escape_string(): Access denied for user 'www-data'@'localhost' (using password: NO) in ~/site/Login.php on line 33, referer: http://192.168.40.130/Login.php
[Thu May 24 20:42:27 2012] [error] [client 192.168.40.1] PHP Warning:  mysql_real_escape_string(): A link to the server could not be established in ~/site/Login.php on line 33, referer: http://192.168.40.130/Login.php
[Thu May 24 20:42:27 2012] [error] [client 192.168.40.1] PHP Warning:  mysql_real_escape_string(): Access denied for user 'www-data'@'localhost' (using password: NO) in ~/site/Login.php on line 34, referer: http://192.168.40.130/Login.php
[Thu May 24 20:42:27 2012] [error] [client 192.168.40.1] PHP Warning:  mysql_real_escape_string(): A link to the server could not be established in ~/site/Login.php on line 34, referer: http://192.168.40.130/Login.php
[Thu May 24 20:42:27 2012] [error] [client 192.168.40.1] File does not exist: ~/site/favicon.ico

【问题讨论】:

这通常与区分大小写有关。 Windows 不区分大小写,但 Linux 是。 error_reporting,记录,添加一些调试语句。 【参考方案1】:

mysql_real_escape_string 使用当前 MySQL 连接找出要转义的内容:

转义未转义字符串中的特殊字符,考虑连接的当前字符集,以便将其安全地放在 mysql_query() 中。如果要插入二进制数据,则必须使用该函数。

如果没有可用的连接,它会尝试创建一个:

如果未指定链接标识符,则假定最后一个由 mysql_connect() 打开的链接。 如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用 mysql_connect()。如果没有找到或建立连接,则会生成 E_WARNING 级别的错误。

这就是您收到该特定警告的原因 - 它正在尝试连接到本地主机,因为用户 PHP 正在以 (www-data) 身份运行且没有密码。

为了匹配您的其余代码,您可能希望创建一个使用该类中的连接的DBClass-&gt;escape() 函数。

【讨论】:

以上是关于为啥我的网站在 xampp 中运行,但不在我的 Apache 服务器和我在 Ubuntu 上设置的 mySQL 中运行?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的网站图标不在服务器上工作,但在本地工作?

为啥我的 ReactJS 应用程序在本地运行但不在 Azure 中运行?

Laravel 安全重定向过滤器在我的本地工作,但不在服务器上

为啥我不能在我的 XAMPP 上为这个 PHP 网站设置虚拟主机?

当 XAMPP 不在分区的根目录中时,为啥它不能工作?

为啥我无法访问本地 XAMPP 上的某些页面或目录?