如果一个多选题,选项数量不确定,如何记录用户的选项到1个字段内呢?
方法1
A|B|D 用|作为分割符,把用户所有记录都存在一个字段里。但是如果要统计多少用户先了A,如何是好?
方法2
选项N=2^N A=1 B=2 C=4 D=8
如果选了 A B C 字段的值为11
方法3
使用二进制(类似方法2)
1 代表A
11 代表了AB
101 代表了A C
如果统计多少人选了B 那与10进行与操作
以上内容为随便瞎想想到的,目测MYSQL效率不高,大数据量还是一个个字段存吧。
如果一个多选题,选项数量不确定,如何记录用户的选项到1个字段内呢?
方法1
A|B|D 用|作为分割符,把用户所有记录都存在一个字段里。但是如果要统计多少用户先了A,如何是好?
方法2
选项N=2^N A=1 B=2 C=4 D=8
如果选了 A B C 字段的值为11
方法3
使用二进制(类似方法2)
1 代表A
11 代表了AB
101 代表了A C
如果统计多少人选了B 那与10进行与操作
以上内容为随便瞎想想到的,目测MYSQL效率不高,大数据量还是一个个字段存吧。
WordPress禁止全英文评论主要是为了反垃圾评论,因为一般垃圾评论都有是全英文带有链接。具体修改:打开当前使用的主题目录下的functions.php,增加函数:
1 2 3 4 5 6 7 8 9 | $pattern = '/[一-龥]/u'; // 禁止全英文评论 if(!preg_match($pattern, $incoming_comment['comment_content'])) { wp_die( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" ); } return( $incoming_comment ); } add_filter('preprocess_comment', 'scp_comment_post'); |
最终效果如图:
更多wordpress反垃圾方法:http://www.ludou.org/wordpress-simple-way-to-anti-spam.html
通常使用explode获取文件扩展名。
其实pathinfo函数就能搞定:
$extension = pathinfo($path, PATHINFO_EXTENSION);
service mysqld stop 或者service mysqld restart的时候,很可能导致异常,提示一下信息。
MySQL manager or server PID file could not be found! [FAILED]
主要原因是进程没有彻底关闭,导致冲突。
使用ps aux |grep mysq* 查看当前进程
root 2643 0.0 0.2 4536 1224........
mysql 2757 0.0 1.2 36976 6608 ?..........
其中2643 2757分别是进程号
如果看到上面的内容,那说明,Mysql的进程卡死了,这时用就要把这些卡死的进程都关闭
kill 进程号
然后启动Mysql 就ok了
service mysqld start
服务器上线2周,日志报错多达1G。主要都是Notice错误,诸如:Notice: Use of undefined。可以选择关闭.
关闭 PHP 提示的方法
搜索php.ini:
error_reporting = E_ALL
改为:
error_reporting = E_ALL & ~E_NOTICE
还有个不是办法的办法就是
在每个文件头上加
error_reporting(0);
或者
error_reporting(E_ALL ^ E_NOTICE);
不过关闭掉PHP错误输出并不会关闭php内核对错误的处理,代码中如果有大量的Notice级别的错误,还是会降低php程序的性能。还是应该谨慎的处理掉每处不合理的代码,这样既可以提高了代码的严谨性,也提高了代码的运行性能。
参考资料:PHP NOTICE级错误提示对程序性能影响的研究
Apache
(1)如果采用RPM包安装,安装路径应在 /etc/httpd目录下
Apache配置文件: /etc/httpd/conf/httpd.conf
Apache模块路径: /usr/sbin/apachectl
Web目录: /var/www/HTML
(2)如果采用源代码安装,一般默认安装在/usr/local/apache2目录下
PHP
(1)如果采用RPM包安装,安装路径应在 /etc/目录下
php的配置文件: /etc/php.ini
(2)如果采用源代码安装,一般默认安装在/usr/local/lib目录下
php配置文件: /usr/local/lib/php.ini
或 /usr/local/php/etc/php.ini
MySQL
(1)如果采用RPM包安装,安装路径应在/usr/share/mysql目录下
MySQL dump文件位置: /usr/bin/mysqldump
MySQL配置文件: /etc/my.cnf
或 /usr/share/mysql/my.cnf
MySQL数据目录: /var/lib/mysql
(2)如果采用源代码安装,一般默认安装在/usr/local/mysql目录下
昨天在《5月23日》提到准备写三个程序,今天花了点时间把第一个写完了——每天能够自动提示女朋友去睡觉的程序。
简单的思路是每当0点到5点之间,发现她又有新的微博出现的时候,程序自动去留一条言,提示她去睡觉。
程序主要分三大部分,第一步微博应用的认证,第二部设置相关参数,第三部定时检查是否有新微薄出现。
第一步,略。
第二部,主要保存用户自己的id,Ta的id,Ta最后条微博的id、时间,检查的开始时间、结束时间,你要留给Ta的话,以及微博账号认证的oauth_token、oauth_token_secret。
weibolist.php
<?php
header("Content-type: text/HTML; charset=utf-8");
session_start();
include_once( 'config.php' );
include_once( 'weibooauth.php' );
$url=$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"];
if (!isset($_POST['u_id']) && !isset($_POST['comments']) && !isset($_POST['begin_time']) && !isset($_POST['end_time']))
{
echo <<< EOT
<form action="http://{$url}" method="post">
Ta微博的昵称
<input type="text" name="u_id" size="15" maxlength="20" title="Ta微博的昵称" /><br>
想要给TA留的言
<input type="text" name="comments" size="15" maxlength="200" title="想要给TA留的言" /><br>
起始时间(24小时制)
<input type="text" name="begin_time" size="15" maxlength="6" title="起始时间" /><br>
终止时间(24小时制)
<input type="text" name="end_time" size="15" maxlength="6" title="终止时间" /><br>
<input type="submit" value="提交" name="name">
</form>
EOT;
}
else
{
include_once( 'conn.php' );//连接数据库
$c = new WeiboClient( WB_AKEY ,
WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
$u_id=$_POST['u_id'];
$comments=$_POST['comments'];
$begin_time=$_POST['begin_time'];
$end_time=$_POST['end_time'];
$msg = $c->show_user($u_id);
if ($msg === false || $msg === null){
echo "Error occured";
return false;
}
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] );
return false;
}
$last_weibo_id=$msg['status']['id'];
$oauth_token=$_SESSION['last_key']['oauth_token'];
$oauth_token_secret=$_SESSION['last_key']['oauth_token_secret'];
$me = $c->verify_credentials();
$u_my_id=$me['id'];
$mysql = "SELECT * FROM goodnight WHERE u_my_id = '".$u_my_id."' ";
$result = mysql_query($mysql) or die(mysql_error());
$num = mysql_num_rows($result);
if($num==0)
{
mysql_query("INSERT INTO goodnight (u_my_id,oauth_token,oauth_token_secret,u_id,last_weibo_id,begin_time,end_time,comments) VALUES ('".$u_my_id."','".$oauth_token."','".$oauth_token_secret."','".$u_id."','".$last_weibo_id."','".$begin_time."','".$end_time."','".$comments."')")or die(mysql_error());
echo "保存成功<br>";
}
else
{
$mysql = "UPDATE goodnight SET u_id = '".$u_id."',last_weibo_id = '".$last_weibo_id."',begin_time = '".$begin_time."',end_time = '".$end_time."',comments = '".$comments."' WHERE u_my_id = '".$u_my_id."'";
$result = mysql_query($mysql) or die(mysql_error());
echo "修改成功<br>";
}
echo <<< EOT
{$u_id}每天在{$begin_time}和{$end_time}之间还在发微博的话,系统将自动留言:{$comments}到微博{$last_weibo_id}
EOT;
}
?>
<?php
header("Content-type: text/HTML; charset=utf-8");
session_start();
include_once( 'config.php' );
include_once( 'weibooauth.php' );
$url=$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"];
if (!isset($_POST['u_id']) && !isset($_POST['comments']) && !isset($_POST['begin_time']) && !isset($_POST['end_time']))
{
echo <<< EOT
<form action="http://{$url}" method="post">
Ta微博的昵称
<input type="text" name="u_id" size="15" maxlength="20" title="Ta微博的昵称" /><br>
想要给TA留的言
<input type="text" name="comments" size="15" maxlength="200" title="想要给TA留的言" /><br>
起始时间(24小时制)
<input type="text" name="begin_time" size="15" maxlength="6" title="起始时间" /><br>
终止时间(24小时制)
<input type="text" name="end_time" size="15" maxlength="6" title="终止时间" /><br>
<input type="submit" value="提交" name="name">
</form>
EOT;
}
else
{
include_once( 'conn.php' );//连接数据库
$c = new WeiboClient( WB_AKEY ,
WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
$u_id=$_POST['u_id'];
$comments=$_POST['comments'];
$begin_time=$_POST['begin_time'];
$end_time=$_POST['end_time'];
$msg = $c->show_user($u_id);
if ($msg === false || $msg === null){
echo "Error occured";
return false;
}
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] );
return false;
}
$last_weibo_id=$msg['status']['id'];
$oauth_token=$_SESSION['last_key']['oauth_token'];
$oauth_token_secret=$_SESSION['last_key']['oauth_token_secret'];
$me = $c->verify_credentials();
$u_my_id=$me['id'];
$mysql = "SELECT * FROM goodnight WHERE u_my_id = '".$u_my_id."' ";
$result = mysql_query($mysql) or die(mysql_error());
$num = mysql_num_rows($result);
if($num==0)
{
mysql_query("INSERT INTO goodnight (u_my_id,oauth_token,oauth_token_secret,u_id,last_weibo_id,begin_time,end_time,comments) VALUES ('".$u_my_id."','".$oauth_token."','".$oauth_token_secret."','".$u_id."','".$last_weibo_id."','".$begin_time."','".$end_time."','".$comments."')")or die(mysql_error());
echo "保存成功<br>";
}
else
{
$mysql = "UPDATE goodnight SET u_id = '".$u_id."',last_weibo_id = '".$last_weibo_id."',begin_time = '".$begin_time."',end_time = '".$end_time."',comments = '".$comments."' WHERE u_my_id = '".$u_my_id."'";
$result = mysql_query($mysql) or die(mysql_error());
echo "修改成功<br>";
}
echo <<< EOT
{$u_id}每天在{$begin_time}和{$end_time}之间还在发微博的话,系统将自动留言:{$comments}到微博{$last_weibo_id}
EOT;
}
?>
第三部,读取数据库存的最后条微博的ID和目前最后条微博ID是否相同,如果不同,并且在时间内,则触法评论功能。其中每次评论需要不同,否则会出现BUG。
goodnight.php
<?php
header("Content-type: text/HTML; charset=utf-8");
echo <<< EOT
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>goodnight</title>
<meta http-equiv=refresh content="60">
</head>
EOT;
ignore_user_abort(1);
set_time_limit(0);
date_default_timezone_set('Asia/Shanghai');
include_once( 'conn.php' );//连接数据库
include_once( 'config.php' );
include_once( 'weibooauth.php' );
$result = mysql_query("SELECT * FROM goodnight ");
while($row = mysql_fetch_array($result))
{
$u_my_id=$row['u_my_id'];
$oauth_token=$row['oauth_token'];
$oauth_token_secret=$row['oauth_token_secret'];
$u_id=$row['u_id'];
$last_weibo_id=$row['last_weibo_id'];
$begin_time=$row['begin_time'];
$end_time=$row['end_time'];
$comments=$row['comments'];
$c = new WeiboClient( WB_AKEY ,
WB_SKEY ,
$oauth_token,
$oauth_token_secret );
$msg = $c->show_user($u_id);
if ($msg === false || $msg === null){
echo "Error occured";
return false;
}
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] );
return false;
}
$sid=$msg['status']['id'];//获取最近评论ID
if($sid!=$last_weibo_id)
{
$weibo_time=$msg['status']['created_at'];//获取最近一条微博时间
$weibo_time=date('H:i:s', strtotime($weibo_time));
$comments="都".$weibo_time."了,".$comments;//避免每次回复内容相同,否则会报错
if(($weibo_time<$end_time&&$weibo_time>$begin_time&&$begin_time<$end_time)||($begin_time>$end_time&&$weibo_time>$begin_time)||($begin_time>$end_time&&$weibo_time<$end_time))
{
$msg = $c->send_comment($sid,$comments,null);
if ($msg === false || $msg === null){
echo "Error occured";
return false;
}
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] );
return false;
}
echo "发送成功";
$mysql = "UPDATE goodnight SET last_weibo_id = '".$sid."' WHERE u_my_id = '".$u_my_id."'";
$result = mysql_query($mysql) or die(mysql_error());
}
else
{
echo "未在时间范围内不修改";
}
}
else
{echo "这条微博是以前的";}
}
$now=date('Y-m-d H:i:s');
echo "<br>".$now;
?>
核心思路:使用mysql全文索引,但是mysql全文索引不支持中文,所以需要进行一些处理。
创建一张专门用于搜索的索引表
数据录入
1、将内容进行分词(可以使用开源的scws 或者dedesplit)
2、分词结果base64转码存入数据库
数据库查询
1、限制查询输入长度(不超过64个字符 //自动截取前64个字符)
2、将查询内容进行分词
3、去除标点符号和无用关键词(例如 的 地 得)
4、将分词结果base64转码,在数据库全文索引
5、数据库按照相关性返回结果
6、根据对应题目ID找到该题地址
参考资料:
http://edu.codepub.com/2010/0606/23306.php
http://info.codepub.com/2008/07/info-20442.html
先简单介绍下环境godaddy的Linux虚拟主机,php+zend+smarty的MVC开发模式。
结果将新版本的所有文件上传到服务器后,打开页面(http://www.33iq.com )结果评分、评论、登陆等所有AJAX功能全部出错,通过chrome的console功能发现AJAX提交的页面都是404。检查所有代码和相关配置后没有发现有什么异常的错误,更加悲剧的是虽然返回现实的是404页面,但是数据都正常返回的,由于AJAX通过返回状态来判断数据是否读取,以至于AJAX全部瘫痪。然后分别测试每个页面是否有这个问题,发现所有带有index的链接都存在这个问题,其余页面都正常,于是尝试在服务器上加了个index的文件夹。结果奇迹发生了,好了。
分析一下,觉得通过zend读取了相应数据,但是返回的状态却是通过服务器上的路径,原因不清楚,本地测试都没有发生错误。可能是因为服务器上一些位置的故障。比如godaddy上的缓冲没清干净,总之说不清。。。faint
mysql4.0与mysql5.0是不兼容的,前几天亲自将mysql5.0转换到低版本的mysql4.0,发现主要有这些不同:
1、mysql4.0 varchar类型最大支持255个字符
2、mysql4.0 不支持多语言,也就是set names utf这样的语句不支持
3、mysql4.0使用的是latin1编码
话说为何要要进行这个转换?无法又被国内的空间服务商给吭了,因为网站被攻击,然后服务商把我的域名剔除了所谓的白名单,还不给回复。然后经过多次涉交和电话联系,再同意更换服务器作为解决办法。但服务器竟然装的是这么低版本的mysql,真的是要让人吐血了。被坑也就坑一次吧,什么买2年送1年,便宜没好货,再次强烈鄙视这个中国合租网。