总之,我的头脑越来越高,但这次我真的在推动自己。呵呵。 我的新项目没有任何代码,因为我不确定从哪里开始。
以下是我需要做的背景信息。 我正在尝试做的是我的(成人)wecam广告网站之一的“状态指示器”。 在线表演者列在XML(online.xml)中。这很公平,可以退出,但这里是我停止的地方。 我需要做的是一个简单的PHP脚本(例如status.php?id = performername),它将检查表演者名称是否在xml列表中,并给我一个在线/离线回复。所有好的想法和帮助都非常受欢迎。 :)
XML示例(已清理的版本)
<webcams_online>
<webcam account="a6632" sex="F" star="N" nickname="18brunette" priority="11289" preview_webcam="6632_webcam.jpg" number_visitors="none">
</webcam>
<webcam account="a18205" sex="F" star="N" nickname="Attraction" priority="11155" preview_webcam="18205_webcam.jpg" number_visitors="none">
</webcam>
</webcams_online>
答案 0 :(得分:3)
最简单的方法是使用DOM和XPath:
public function isOnline($performer)
{
$dom = new DOMDocument;
$dom->load('webcams.xml');
$xPath = new DOMXPath($dom);
$nodes = $xPath->query(sprintf('//webcam[@nickname="%s"]', $performer));
return (bool) $webcams->length;
}
以上使用DOM扩展来加载具有网络摄像头状态的XML文件。然后,它会搜索<webcam>
元素,其中nickname
属性包含已传递的$performer
名称。假设每个执行者昵称只有一个凸轮,如果没有匹配XPath的元素,则此方法将返回FALSE
,如果匹配,则此方法将返回TRUE
。
您没有指定脚本的响应方式。假设您通过Ajax检查凸轮,一个简单的status.php脚本可能如下所示:
<?php
// Clean input to script
$performer = filter_input(
INPUT_GET, 'performer', FILTER_SANITIZE_STRING,
FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);
// Try to find webcam with nickname of performer in online cams XML
$dom = new DOMDocument;
$dom->load('webcams.xml');
$xPath = new DOMXPath($dom);
$webcams = $xPath->query(sprintf('//webcam[@nickname="%s"]', $performer));
// send a JSON response depending on the search result
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
// create a JSON response for the calling client
if( $webcams->length === 0 ) {
echo json_encode(array('status' => 'offline'));
} else {
$webcam = $webcams->item(0);
echo json_encode(array(
'status' => 'online',
'data' => array(
'account' => $webcam->getAttribute('account'),
'sex' => $webcam->getAttribute('sex'),
'star' => $webcam->getAttribute('star'),
'nickname' => $webcam->getAttribute('nickname'),
'priority' => $webcam->getAttribute('priority'),
'preview' => $webcam->getAttribute('preview_webcam'),
'visitors' => $webcam->getAttribute('number_visitors')
)
));
};
答案 1 :(得分:1)
这实际上取决于信息的格式。如果您提供示例xml文件,我们可以更具体。
基础知识是:
答案 2 :(得分:1)
这样的功能应该适合你
function check_user_online($file, $username)
{
$xml = simplexml_load_file($file);
foreach($xml->webcam as $cam)
{
if ($cam['nickname'] == $username)
{
return true;
}
}
return false;
}
只需调用check_user_online($filename, $performer);
并将$ filename替换为XML文件的路径,并将$ performer替换为执行者的昵称。根据是否找到表演者,它会返回真或假。