我的目的是在微信里回复一个关键词,然后公众号就从指定文件夹的txt里获取相关信息并输出(以行为单位)
但是。。。每次到 $results=get_results($q);这条语句就不行了 求大神
<?php
define("TOKEN", "weixin");
$time_start = microtime(true);
define('ROOT', dirname(__FILE__).'/');
define('MATCH_LENGTH', 0.1*1024*1024); //字符串长度 0.1M 自己设置,一般够了。
define('RESULT_LIMIT',100);
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
function my_scandir($path){//获取数据文件地址
$filelist=array();
if($handle=opendir($path)){
while (($file=readdir($handle))!==false){
if($file!="." && $file !=".."){
if(is_dir($path."/".$file)){
$filelist=array_merge($filelist,my_scandir($path."/".$file));
}else{
$filelist[]=$path."/".$file;
}
}
}
}
closedir($handle);
return $filelist;
}
function get_results($keyword){//查询
$return=array();
$count=0;
$datas=my_scandir(ROOT."kieoidfrwq!!1123@#fewf"); //数据库文档目录
if(!empty($datas))foreach($datas as $filepath){
$filename = basename($filepath);
$start = 0;
$fp = fopen($filepath, 'r');
while(!feof($fp)){
fseek($fp, $start);
$content = fread($fp, MATCH_LENGTH);
$content.=(feof($fp))?"\n":'';
$content_length = strrpos($content, "\n");
$content = substr($content, 0, $content_length);
$start += $content_length;
$end_pos = 0;
while (($end_pos = strpos($content, $keyword, $end_pos)) !== false){
$start_pos = strrpos($content, "\n", -$content_length + $end_pos);
$start_pos = ($start_pos === false)?0:$start_pos;
$end_pos = strpos($content, "\n", $end_pos);
$end_pos=($end_pos===false)?$content_length:$end_pos;
$return[]=array(
'f'=>$filename,
't'=>trim(substr($content, $start_pos, $end_pos-$start_pos))
);
$count++;
if ($count >= RESULT_LIMIT) break;
}
unset($content,$content_length,$start_pos,$end_pos);
if ($count >= RESULT_LIMIT) break;
}
fclose($fp);
if ($count >= RESULT_LIMIT) break;
}
return $return;
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
$msgType="text";
set_time_limit(0);
$q=strip_tags(trim($keyword);
$results=get_results($q);
$count=count($results);
if(!empty($results)){
foreach($results as $v){
$contentStr =$contentStr.'From_['.$v['f'].']_Datas 。Content: '.$v['t'];}}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "";
exit;
}
}
}
?>