Php 设置从本地主机到服务器的服务器代码

Php 设置从本地主机到服务器的服务器代码,php,android,mysql,sql,sockets,Php,Android,Mysql,Sql,Sockets,我一直在试着运行一些代码 代码可以在下一个链接中找到 正如您所看到的,它有一个客户端和一个服务器代码,这是一个基于套接字通信的android即时通讯器 服务器代码包含三个文件——一个sql文件和两个php文件 问题是,当我使用XAMPP作为本地主机测试代码时,一切都很好 当我试图将其移动到服务器时,问题就出现了 我所做的很简单——我在serversfree.com上开了一个账户。然后我转到MySQL数据库,创建了一个数据库名:和用户名。之后,我上传了sql文件 然后我转到文件管理器选项,并将in

我一直在试着运行一些代码

代码可以在下一个链接中找到

正如您所看到的,它有一个客户端和一个服务器代码,这是一个基于套接字通信的android即时通讯器

服务器代码包含三个文件——一个sql文件和两个php文件

问题是,当我使用XAMPP作为本地主机测试代码时,一切都很好

当我试图将其移动到服务器时,问题就出现了

我所做的很简单——我在serversfree.com上开了一个账户。然后我转到MySQL数据库,创建了一个数据库名:和用户名。之后,我上传了sql文件

然后我转到文件管理器选项,并将index.php和mysql.class.php上传到它。我还在index.php文件中编辑了四行相关内容-

$dbHost = "";
$dbUsername = "DBUSERNAME";
$dbPassword = "DBPASSWORD";
$dbName = "DBNAME";
当然,每行的输入与这里显示的不同


问题是,例如,当一个用户试图注册时——当我在本地主机上尝试时,一切正常,但在服务器上——在客户端,它告诉用户出了问题,注册失败了——但是当我查看mySQL表时,我可以看到用户信息确实进入了表中,甚至我也可以用用户信息登录

我遇到的另一个问题是,当一个用户试图将另一个用户添加到他的联系人列表中时,它肯定不起作用。 即使当我转到mySQL表并将值从0更改为1时(好像说好友请求已被批准),用户名仍然不会显示在好友列表中。在本地主机场景中,这一点确实有效

我希望这里有人能帮我弄清楚是什么造成了这个问题

当我按下注册按钮时,这是android的日志-

    03-05 15:48:20.834: D/SSRMv2:Monitor(2346): SIOP:: AP = 300, Prev AP = 300, Duration = 10002
03-05 15:48:21.214: I/InputReader(2346): Touch event's action is 0x0 (deviceType=0) [pCnt=1, s=0.13493 ] when=137349122712000
03-05 15:48:21.214: I/InputDispatcher(2346): Delivering touch to: action: 0x0
03-05 15:48:21.269: D/STATUSBAR-NetworkController(31809): refreshSignalCluster: data=-1 bt=false
03-05 15:48:21.284: D/STATUSBAR-IconMerger(31809): checkOverflow(384), More:false, Req:false Child:2
03-05 15:48:21.359: I/InputReader(2346): Touch event's action is 0x1 (deviceType=0) [pCnt=1, s=] when=137349265664000
03-05 15:48:21.359: I/InputDispatcher(2346): Delivering touch to: action: 0x1
03-05 15:48:21.359: E/DatabaseUtils(2346): Writing exception to parcel
03-05 15:48:21.359: E/DatabaseUtils(2346): java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
03-05 15:48:21.359: E/DatabaseUtils(2346):  at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
03-05 15:48:21.359: E/DatabaseUtils(2346):  at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
03-05 15:48:21.359: E/DatabaseUtils(2346):  at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
03-05 15:48:21.359: E/DatabaseUtils(2346):  at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
03-05 15:48:21.359: E/DatabaseUtils(2346):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
03-05 15:48:21.359: E/DatabaseUtils(2346):  at android.os.Binder.execTransact(Binder.java:388)
03-05 15:48:21.359: E/DatabaseUtils(2346):  at dalvik.system.NativeStart.run(Native Method)
03-05 15:48:21.359: W/ActivityManager(2346): Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
03-05 15:48:21.379: V/WindowManager(2346): Window{42eec348 u0 Keyguard}mOrientationRequetedFromKeyguard=false
03-05 15:48:21.399: I/SurfaceFlinger(1935): id=5600 createSurf (1x1),1 flag=4, Uoast
03-05 15:48:21.399: V/WindowManager(2346): Window{42eec348 u0 Keyguard}mOrientationRequetedFromKeyguard=false
03-05 15:48:21.419: D/PowerManagerService(2346): [api] acquire WakeLock flags=0x2000000a tag=WindowManager uid=1000 pid=2346
03-05 15:48:22.274: D/STATUSBAR-NetworkController(31809): refreshSignalCluster: data=-1 bt=false
03-05 15:48:22.284: D/STATUSBAR-IconMerger(31809): checkOverflow(384), More:false, Req:false Child:2
03-05 15:48:22.879: D/SensorService(2346):   1.9 4.0 8.4
03-05 15:48:23.284: D/STATUSBAR-NetworkController(31809): refreshSignalCluster: data=-1 bt=false
03-05 15:48:23.299: D/STATUSBAR-IconMerger(31809): checkOverflow(384), More:false, Req:false Child:2
03-05 15:48:23.329: D/SSRMv2:Monitor(2346): SIOP:: AP = 300 (read only)
03-05 15:48:23.554: D/dalvikvm(2346): GC_CONCURRENT freed 1476K, 18% free 47668K/57704K, paused 10ms+13ms, total 227ms
03-05 15:48:24.294: D/STATUSBAR-NetworkController(31809): refreshSignalCluster: data=-1 bt=false
03-05 15:48:24.304: D/STATUSBAR-IconMerger(31809): checkOverflow(384), More:false, Req:false Child:2
03-05 15:48:25.294: D/STATUSBAR-NetworkController(31809): refreshSignalCluster: data=-1 bt=false
03-05 15:48:25.299: D/STATUSBAR-IconMerger(31809): checkOverflow(384), More:false, Req:false Child:2
03-05 15:48:25.419: I/SurfaceFlinger(1935): id=5600 Removed Uoast (5/5)
03-05 15:48:25.419: I/SurfaceFlinger(1935): id=5600 Removed Uoast (-2/5)
03-05 15:48:25.424: D/PowerManagerService(2346): [api] [s] userActivity : event: 0 flags: 0 (uid: 1000 pid: 2346)
03-05 15:48:25.429: D/PowerManagerService(2346): [api] release WakeLock flags=0x2000000a tag=WindowManager uid=1000 pid=2346 (0x0)
03-05 15:48:25.429: D/PowerManagerService(2346): [api] applyWakeLockFlagsOnReleaseLocked : userActivityNoUpdateLocked is called : SCREEN_BRIGHT_WAKE_LOCK        'WindowManager' ON_AFTER_RELEASE (uid=1000, pid=2346, ws=WorkSource{10161}) (elapsedTime=4012)
下面是每个php文件的代码-

index.php-代码:

    <?php
/****************************************
*       Server of Android IM Application
*               
*       Supported actions: 
*           1.  authenticateUser
*               if user is authentiated return friend list
*           
*           2.  signUpUser
*       
*           3.  addNewFriend
*       
*           4.  responseOfFriendReqs
*
*           5.  testWebAPI
*************************************/


//TODO:  show error off

require_once("mysql.class.php");

$dbHost = "localhost";
$dbUsername = "DBUSERNAME";
$dbPassword = "DBPASSWORD";
$dbName = "DBNAME";


$db = new MySQL($dbHost,$dbUsername,$dbPassword,$dbName);

// if operation is failed by unknown reason
define("FAILED", 0);

define("SUCCESSFUL", 1);
// when  signing up, if username is already taken, return this error
define("SIGN_UP_USERNAME_CRASHED", 2);  
// when add new friend request, if friend is not found, return this error 
define("ADD_NEW_USERNAME_NOT_FOUND", 2);

// TIME_INTERVAL_FOR_USER_STATUS: if last authentication time of user is older 
// than NOW - TIME_INTERVAL_FOR_USER_STATUS, then user is considered offline
define("TIME_INTERVAL_FOR_USER_STATUS", 60);

define("USER_APPROVED", 1);
define("USER_UNAPPROVED", 0);


$username = (isset($_REQUEST['username']) && count($_REQUEST['username']) > 0) 
                            ? $_REQUEST['username'] 
                            : NULL;
$password = isset($_REQUEST['password']) ? md5($_REQUEST['password']) : NULL;
$port = isset($_REQUEST['port']) ? $_REQUEST['port'] : NULL;

$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : NULL;
if ($action == "testWebAPI")
{
    if ($db->testconnection()){
    echo SUCCESSFUL;
    exit;
    }else{
    echo FAILED;
    exit;
    }
}

if ($username == NULL || $password == NULL)  
{
    echo FAILED;
    exit;
}

$out = NULL;

error_log($action."\r\n", 3, "error.log");
switch($action) 
{

    case "authenticateUser":


        if ($userId = authenticateUser($db, $username, $password)) 
        {                   

            // providerId and requestId is Id of  a friend pair,
            // providerId is the Id of making first friend request
            // requestId is the Id of the friend approved the friend request made by providerId

            // fetching friends, 
            // left join exp<b></b>ression is a bit different, 
            //      it is required to fetch the friend, not the users itself

            $sql = "select u.Id, u.username, (NOW()-u.authenticationTime) as authenticateTimeDifference, u.IP, 
                                        f.providerId, f.requestId, f.status, u.port 
                            from friends f
                            left join users u on 
                                        u.Id = if ( f.providerId = ".$userId.", f.requestId, f.providerId ) 
                            where (f.providerId = ".$userId." and f.status=".USER_APPROVED.")  or 
                                         f.requestId = ".$userId." ";

            //$sqlmessage = "SELECT * FROM `messages` WHERE `touid` = ".$userId." AND `read` = 0 LIMIT 0, 30 ";

            $sqlmessage = "SELECT m.id, m.fromuid, m.touid, m.sentdt, m.read, m.readdt, m.messagetext, u.username from messages m \n"
    . "left join users u on u.Id = m.fromuid WHERE `touid` = ".$userId." AND `read` = 0 LIMIT 0, 30 ";


            if ($result = $db->query($sql))         
            {
                    $out .= "<data>"; 
                    $out .= "<user userKey='".$userId."' />";
                    while ($row = $db->fetchObject($result))
                    {
                        $status = "offline";
                        if (((int)$row->status) == USER_UNAPPROVED)
                        {
                            $status = "unApproved";
                        }
                        else if (((int)$row->authenticateTimeDifference) < TIME_INTERVAL_FOR_USER_STATUS)
                        {
                            $status = "online";

                        }
                        $out .= "<friend  username = '".$row->username."'  status='".$status."' IP='".$row->IP."' userKey = '".$row->Id."'  port='".$row->port."'/>";

                                                // to increase security, we need to change userKey periodically and pay more attention
                                                // receiving message and sending message 

                    }
                        if ($resultmessage = $db->query($sqlmessage))           
                            {
                            while ($rowmessage = $db->fetchObject($resultmessage))
                                {
                                $out .= "<message  from='".$rowmessage->username."'  sendt='".$rowmessage->sentdt."' text='".$rowmessage->messagetext."' />";
                                $sqlendmsg = "UPDATE `messages` SET `read` = 1, `readdt` = '".DATE("Y-m-d H:i")."' WHERE `messages`.`id` = ".$rowmessage->id.";";
                                $db->query($sqlendmsg);
                                }
                            }
                    $out .= "</data>";
            }
            else
            {
                $out = FAILED;
            }           
        }
        else
        {
                // exit application if not authenticated user
                $out = FAILED;
        }



    break;

    case "signUpUser":
        if (isset($_REQUEST['email']))
        {
             $email = $_REQUEST['email'];       

             $sql = "select Id from  users 
                            where username = '".$username."' limit 1";



             if ($result = $db->query($sql))
             {
                    if ($db->numRows($result) == 0) 
                    {
                            $sql = "insert into users(username, password, email)
                                values ('".$username."', '".$password."', '".$email."') ";                          

                                error_log("$sql", 3 , "error_log");
                            if ($db->query($sql))   
                            {
                                    $out = SUCCESSFUL;
                            }               
                            else {
                                    $out = FAILED;
                            }                           
                    }
                    else
                    {
                        $out = SIGN_UP_USERNAME_CRASHED;
                    }
             }                      
        }
        else
        {
            $out = FAILED;
        }   
    break;

    case "sendMessage":
    if ($userId = authenticateUser($db, $username, $password)) 
        {   
        if (isset($_REQUEST['to']))
        {
             $tousername = $_REQUEST['to']; 
             $message = $_REQUEST['message'];   

             $sqlto = "select Id from  users where username = '".$tousername."' limit 1";



                    if ($resultto = $db->query($sqlto))         
                    {
                        while ($rowto = $db->fetchObject($resultto))
                        {
                            $uto = $rowto->Id;
                        }
                        $sql22 = "INSERT INTO `messages` (`fromuid`, `touid`, `sentdt`, `messagetext`) VALUES ('".$userId."', '".$uto."', '".DATE("Y-m-d H:i")."', '".$message."');";                       

                                error_log("$sql22", 3 , "error_log");
                            if ($db->query($sql22)) 
                            {
                                    $out = SUCCESSFUL;
                            }               
                            else {
                                    $out = FAILED;
                            }                       
                        $resultto = NULL;
                    }   

        $sqlto = NULL;
        }
        }
        else
        {
            $out = FAILED;
        }   
    break;

    case "addNewFriend":
        $userId = authenticateUser($db, $username, $password);
        if ($userId != NULL)
        {

            if (isset($_REQUEST['friendUserName']))         
            {               
                 $friendUserName = $_REQUEST['friendUserName'];

                 $sql = "select Id from users 
                                 where username='".$friendUserName."' 
                                 limit 1";
                 if ($result = $db->query($sql))
                 {
                        if ($row = $db->fetchObject($result))
                        {
                             $requestId = $row->Id;

                             if ($row->Id != $userId)
                             {
                                     $sql = "insert into friends(providerId, requestId, status)
                                         values(".$userId.", ".$requestId.", ".USER_UNAPPROVED.")";

                                     if ($db->query($sql))
                                     {
                                            $out = SUCCESSFUL;
                                     }
                                     else
                                     {
                                            $out = FAILED;
                                     }
                            }
                            else
                            {
                                $out = FAILED;  // user add itself as a friend
                            }                                                
                        }
                        else
                        {
                            $out = FAILED;                      
                        }
                 }                               
                 else
                 {
                        $out = FAILED;
                 }              
            }
            else
            {
                    $out = FAILED;
            }           
        }
        else
        {
            $out = FAILED;
        }   
    break;

    case "responseOfFriendReqs":
        $userId = authenticateUser($db, $username, $password);
        if ($userId != NULL)
        {
            $sqlApprove = NULL;
            $sqlDiscard = NULL;
            if (isset($_REQUEST['approvedFriends']))
            {
                  $friendNames = split(",", $_REQUEST['approvedFriends']);
                  $friendCount = count($friendNames);
                  $friendNamesQueryPart = NULL;
                  for ($i = 0; $i < $friendCount; $i++)
                  {
                    if (strlen($friendNames[$i]) > 0)
                    {
                        if ($i > 0 )
                        {
                            $friendNamesQueryPart .= ",";
                        }

                        $friendNamesQueryPart .= "'".$friendNames[$i]."'";

                    }               

                  }
                  if ($friendNamesQueryPart != NULL)
                  {
                    $sqlApprove = "update friends set status = ".USER_APPROVED."
                                    where requestId = ".$userId." and 
                                                providerId in (select Id from users where username in (".$friendNamesQueryPart."));
                                ";      
                  }

            }
            if (isset($_REQUEST['discardedFriends']))
            {
                    $friendNames = split(",", $_REQUEST['discardedFriends']);
                  $friendCount = count($friendNames);
                  $friendNamesQueryPart = NULL;
                  for ($i = 0; $i < $friendCount; $i++)
                  {
                    if (strlen($friendNames[$i]) > 0)
                    {
                        if ($i > 0 )
                        {
                            $friendNamesQueryPart .= ",";
                        }

                        $friendNamesQueryPart .= "'".$friendNames[$i]."'";

                    }                   
                  }
                  if ($friendNamesQueryPart != NULL)
                  {
                    $sqlDiscard = "delete from friends 
                                        where requestId = ".$userId." and 
                                                    providerId in (select Id from users where username in (".$friendNamesQueryPart."));
                                            ";
                  }                     
            }
            if (  ($sqlApprove != NULL ? $db->query($sqlApprove) : true) &&
                        ($sqlDiscard != NULL ? $db->query($sqlDiscard) : true) 
               )
            {
                $out = SUCCESSFUL;
            }
            else
            {
                $out = FAILED;
            }       
        }
        else
        {
            $out = FAILED;
        }
    break;

    default:
        $out = FAILED;      
        break;  
}

echo $out;



///////////////////////////////////////////////////////////////
function authenticateUser($db, $username, $password)
{

    $sql22 = "select * from users 
                    where username = '".$username."' and password = '".$password."' 
                    limit 1";

    $out = NULL;
    if ($result22 = $db->query($sql22))
    {
        if ($row22 = $db->fetchObject($result22))
        {
                $out = $row22->Id;

                $sql22 = "update users set authenticationTime = NOW(), 
                                                                 IP = '".$_SERVER["REMOTE_ADDR"]."' ,
                                                                 port = 15145 
                                where Id = ".$row22->Id."
                                limit 1";

                $db->query($sql22);             


        }       
    }

    return $out;
}

?>
    <?php


class MySQL
{   
    private $dbLink;
    private $dbHost;
    private $dbUsername;
        private $dbPassword;
    private $dbName;
    public  $queryCount;

    function MySQL($dbHost,$dbUsername,$dbPassword,$dbName)
    {
        $this->dbHost = $dbHost;
        $this->dbUsername = $dbUsername;
        $this->dbPassword = $dbPassword;
        $this->dbName = $dbName;    
        $this->queryCount = 0;      
    }
    function __destruct()
    {
        $this->close();
    }
    //connect to database
    private function connect() {    
        $this->dbLink = mysql_connect($this->dbHost, $this->dbUsername, $this->dbPassword);     
        if (!$this->dbLink) {           
            $this->ShowError();
            return false;
        }
        else if (!mysql_select_db($this->dbName,$this->dbLink)) {
            $this->ShowError();
            return false;
        }
        else {
            mysql_query("set names latin5",$this->dbLink);
            return true;
        }
        unset ($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);     
    }   
    /*****************************
     * Method to close connection *
     *****************************/
    function close()
    {
        @mysql_close($this->dbLink);
    }
    /*******************************************
     * Checks for MySQL Errors
     * If error exists show it and return false
     * else return true  
     *******************************************/
    function ShowError()
    {
        $error = mysql_error();
        //echo $error;      
    }   
    /****************************
     * Method to run SQL queries
     ****************************/
    function  query($sql)
    {   
        if (!$this->dbLink) 
            $this->connect();

        if (! $result = mysql_query($sql,$this->dbLink)) {
            $this->ShowError();         
            return false;
        }
        $this->queryCount++;    
        return $result;
    }
    /************************
    * Method to fetch values*
    *************************/
    function fetchObject($result)
    {
        if (!$Object=mysql_fetch_object($result))
        {
            $this->ShowError();
            return false;
        }
        else
        {
            return $Object;
        }
    }
    /*************************
    * Method to number of rows
    **************************/
    function numRows($result)
    {
        if (false === ($num = mysql_num_rows($result))) {
            $this->ShowError();
            return -1;
        }
        return $num;        
    }
    /*******************************
     * Method to safely escape strings
     *********************************/
    function escapeString($string)
    {
        if (get_magic_quotes_gpc()) 
        {
            return $string;
        } 
        else 
        {
            $string = mysql_escape_string($string);
            return $string;
        }
    }

    function free($result)
    {
        if (mysql_free_result($result)) {
            $this->ShowError();
            return false;
        }   
        return true;
    }

    function lastInsertId()
    {
        return mysql_insert_id($this->dbLink);
    }

    function getUniqueField($sql)
    {
        $row = mysql_fetch_row($this->query($sql));

        return $row[0];
    }
    function testconnection() { 
        $this->dbLink = mysql_connect($this->dbHost, $this->dbUsername, $this->dbPassword);     
        if (!$this->dbLink) {           
            $this->ShowError();
            return false;
        }
        else if (!mysql_select_db($this->dbName,$this->dbLink)) {
            $this->ShowError();
            return false;
        }
        else {
            mysql_query("set names latin5",$this->dbLink);
            return true;
        }
        unset ($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);     
    }       
}

我们很好地发现了这个问题,像-serversfree.com或000webhost.com这样的免费托管网站正在向代码中添加一个分析代码

为了克服这个问题,000webhost的解决方案如下-

在文件管理器的[public_html]中,您需要创建一个名为[.htaccess]的文件 你需要在里面打字-

    <FilesMatch "\.(php)$">
php_value auto_append_file none
</FilesMatch>

php_值自动_追加_文件无
这将防止所有.php文件都附加分析代码。只需将[php]替换为您希望删除分析代码的任何文件扩展名

为了防止您的域被取消,请不要通过转到下一个链接来禁用您的分析代码-

编辑- 这也适用于
serversfree.com

“出了点问题,注册失败了”-到底出了什么问题?什么错误消息?哪里?当我按下注册按钮时,我已经添加了android的logcat