2014-03-05 224 views
1

我一直在试图让一些代码运行。设置服务器代码从本地主机到服务器

的代码可以在下一环节code link

发现正如你可以看到它有一个客户端和服务器代码,这个代码是基于socket通信的机器人即时通讯。

服务器代码包含三个文件 - 一个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的logcat的时候我就签按上 -

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; 
} 

?> 

mysql.class.php - 代码:

<?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);  
    }  
} 
+0

“出事错误和注册失败“ - 究竟发生了什么问题?什么错误信息?哪里? – NickT

+0

当我按下注册时,我添加了android的logcat – 4this

回答

0

那么发现问题似乎像免费托管网站 - serversfree.com或000webhost.com添加到代码分析代码。

因此,要克服这一点 - 为000webhost的解决方案,是如下 -

在文件管理器,在[的public_html]你需要创建一个名为[文件。htaccess的] 和里面你需要输入 -

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

这将阻止所有.php文件从被附加与分析代码。只需将[php]替换为您要删除分析代码的任何文件扩展名即可。

,并从您的域名,以防止被取消,不要去到下一个环节禁用分析代码 - http://members.000webhost.com/analytics.php

编辑 - 这也适用于 serversfree.com

相关问题