2012-11-10 20 views
2

我有一个包含用户信息和站点上Web服务的数组,我可以查询用户的状态(在线/离线)。我想要做的是每隔x秒查询一次每个用户的状态。PHP迭代多维数组 - 每x秒查询Web服务

大约有10个用户和belwois数组的例子。我可以改变阵列是需要的。只有我需要手动输入的是用户名和全名。我可以从服务器调用的“状态”。

$users = array 
( 
    "username"=>array("Fullname","Status"), 
    "johndoe"=>array("John Doe","Online"), 
    "janedoe"=>array("Jane Doe","Offline") 
); 

这是URL,我可以用它来查询该网站的一个例子(查询只返回用户状态(在线或离线):
http://thesite.com:80/webservice/user/用户名/

这是代码我可以用它来获取特定的用户状态:

$url = 'http://thesite.com:80/webservice/user/johndoe/'; 
$get = fopen($url, "r"); 
if ($get) { 
    while (!feof($get)) { 
     $state = fgets($get, 4096); 
    } 
    fclose($get); 
} 

echo "User johndoe is: ".$status; 
// Output: User johndoe is: Online 

现在我只需要通过用户和网站每x秒遍历帮助s并使用用户的最后一个数组字段中的每个用户状态更新阵列。

请注意,下面我使用php和fopen,因为这是一个跨域获取函数,我无法让ajax/jquery工作。我没有修改webservice服务器的选项。

谢谢:)

+0

你如何使用该脚本的输出 - 它是一个CLI或CGI脚本? –

+0

嗨,这是打算在仪表板上使用,我只打算显示在线用户的全名。 –

+0

你想每隔x秒更新仪表板,对吧?然后使用JavaScript来每x秒进行部分刷新。 –

回答

1

如果你的$用户数组不改变,你可以这样做:

foreach($users as $username=>$userdata) { 
    $url = 'http://thesite.com:80/webservice/user/'.$username.'/'; 
    $get = fopen($url, "r"); 
    if ($get) { 
     while (!feof($get)) { 
      $state = fgets($get, 4096); 
     } 
     fclose($get); 
    } 
    $users[$username][1] = $state; 
} 

如果你可以改变你的$用户数组是联想这样的:

$users = array( 
    "username"=>array("fullname"=>"Fullname","status"=>"Status"), 
    "johndoe"=>array("fullname"=>"John Doe","status"=>"Online"), 
    "janedoe"=>array("fullname"=>"Jane Doe","status"=>"Offline") 
); 

这将让您使用更多的键/值和更安全一点。

+0

这实际上是完美的。有任何机会帮助我用“在线”状态回应所有用户?我想显示在线用户的全名。 –

+0

我知道有3种方式来做到这一点: 1.在foreach中回显它(在我之前发送的代码片段中) 2.仅在线用户设置一个新变量 3.用$ users数据运行第二个foreach循环,使用if条件仅回应在线用户。 你需要密码吗?或者这足够好? –

2

您需要创建一个每x秒运行一次的cronjob脚本。该脚本应该是对此PHP函数的异步请求。

public function updateUsers(){ 
$users = $_SESSION['users']; 
foreach($users as $username=>$data) { 
    $url = 'http://thesite.com:80/webservice/user/'.$username.'/'; 
    $get = fopen($url, "r"); 
    if ($get) { 
     while (!feof($get)) { 
      $status = fgets($get, 4096); 
     } 
     fclose($get); 
    } 
    $users[$username][] = $status; 
} 
$_SESSION['users'] = $users; 
} 

发布异步请求的指南。 http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

希望它能帮助:)

+0

感谢您指出这一点。今晚晚些时候我会更好地看看这个:) –