mysql经纬度坐标距离计算

四 09 2011

本文章主要解决数据库如果存有经纬度,获取一定距离的记录数

首先我们在mysql建立一个可重复使用的计算两个坐标经纬度的Function

DELIMITER $$

DROP FUNCTION IF EXISTS `MyDistance`$$

CREATE FUNCTION `MyDistance`(lat1 FLOAT, lng1 FLOAT, lat2 FLOAT, lng2 FLOAT)
	RETURNS  DOUBLE
BEGIN
	DECLARE  distance  DOUBLE;
     SET distance= 2 * 6378.137* ASIN(SQRT(POW(SIN(PI() * (lat1–lat2) / 360), 2) + COS(PI() * lat1 / 180)* COS(lat2* PI() / 180) * POW(SIN(PI() * (lng1–lng2) / 360), 2)));
	RETURN distance;

END$$

DELIMITER ;

接下来,就是运用这个function计算距离了。
为了提高效率,在计算距离时首先通过经度和纬度过滤,然后再通过距离过滤,因为如果计算所有记录的距离毕竟不是很高效的做法。

No responses yet

Ubuntu 10.10 server 实践–mysql安装

十二 10 2010

今天开始用源码安装mysql,首先需要下载mysql的源码文件,然后解压,进入到解压后的目录
安装MySQL源码分发版的基本命令是:

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root  .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &

mysql安装是依赖包ncurses,所以安装mysql前必须要要安装这个,否则会报错,大概信息是:
configure: error: No curses/termcap library found
解决的办法就是到如下地址http://ftp.gnu.org/pub/gnu/ncurses/,选择最新源码,然后解压执行./configure, make , make install安装完毕,安装ncurses不要设置prefix参数,否则可能出现不能正确查找到的情况。

注意:在make时,需要很长的时间,我用了大概半个小时
以下命令的工作目录都是基于/usr/local/mysql,请注意。
启动命令:

sudo bin/mysqld_safe --user=mysql &

停止命令:

sudo bin/mysqladmin shutdown

查看mysql版本:

sudo bin/mysqladmin version

查看mysql的状态:

sudo bin/mysqladmin pin

No responses yet

Ubuntu 10.10 server 实践–ftp proftp安装

十二 09 2010

今天晚上安装了ftp服务程序,我们选择proftp,首先源码下载到windows,网站http://www.proftpd.org/, 我下载的软件包为proftpd-1.3.3c.tar.gz,接下来通过昨天的方法,利用xshell把windows的源码包传到linux上,源码安装需要gcc支持,请确认系统已经安装gcc编译器,接下来具体操作步骤:

$sftp username@ip
$>put local_file remote_dir  #(> put D:proftpd-1.3.3c.tar.gz  /home/software/)
$>quit
$ssh username@ip
$cd /home/software
$tar -xzvf /home/software/proftpd-1.3.3c.tar.gz -C /home/lib
$cd /home/lib/proftpd-1.3.3c
$sudo ./configure --prefix=/usr/local/proftp
$sudo make
$sudo make install

接下来修改/usr/local/proftp/etc/proftpd.conf

# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName                      "ProFTPD Default Installation"
ServerType                      standalone
DefaultServer                   on

# Port 21 is the standard FTP port.
Port                            21

# Don't use IPv6 support by default.
UseIPv6                         off

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                           022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances                    30

# Set the user and group under which the server will run.
User                            nobody
Group                           nogroup

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
DefaultRoot ~

# Normally, we want files to be overwriteable.
AllowOverwrite          on
SystemLog   /usr/local/proftp/log/proftpd.log

# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
  DenyAll
</Limit>

# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.
<Anonymous ~ftp>
  User                          ftp
  Group                         ftp

  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias                     anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients                    10

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin                  welcome.msg
  DisplayChdir                  .message

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>
</Anonymous>
# user access config file path
AuthUserFile /usr/local/lib/proftp/etc/passwd
# change the auth file order
AuthOrder mod_auth_file.c mod_auth_unix.c

配置文件中我们已经配置权限验证通过文件方式。接下来我们参照http://www.proftpd.org/docs/contrib/ftpasswd.html来配置添加ftp用户。我们用到也就是

ftpasswd --passwd --name=bob--uid=1001 --file=/usr/local/lib/proftp/etc/passwd --home=/home/bob --shell=/bin/false

会提示你输入密码,输入密码后就会生成一个用户密码配置文件,路径如下: /usr/local/lib/proftp/etc/passwd,如果你不知道怎么获取uid,那么请用下面的命令查看,那个显示的数字就是了

id nobody

现在如果你启动proftp可能出现总是登录不上的情况,解决办法就是在/etc/shells 添加一行 /bin/false

最后启动你的proftp,

$sudo /usr/local/lib/proftp/sbin/proftpd

那么整个ftp就成功了,如果发生错误请查看日志文件,路径我们配置文件中也配置了 /usr/local/proftp/log/proftpd.log
如果是端口占用,请用下面命令查看是什么进程占用了

$sudo netstat -pant

查到占用21端口的进程,你可以kill,还可以更改配置文件的端口来解决这个问题。
如果你的proftp不是系统service,怎么停掉呢,方法很简单

$ps aux|grep "proftpd"
$kill id

那个/usr/local/proftp/sbin/ftpshut 命令是不能完全停止进程的,会一直占用21端口,这种停止只能让ftp用户没有办法登录。

No responses yet

Ubuntu 10.10 server 实践–简单介绍

十二 08 2010

以前搞过Linux server,但是因为工作开发比较忙,有很长一段时间没有练习了,很多东西开始淡忘,温故而知新,所以决定重新操作一边,随便做一下笔记,以便以后使用。

下载好iso文件,在windows下使用虚拟化软件virtualbox(免费开源)安装Ubuntu Server.安装时到最后的软件选择时,因为要从头做起,不用系统做好的LAMP,Tomcat server软件包,如果用系统软件包,那就达不到练习的目的了。我只选择了OpenSSH server,因为要其他的机器传输文件到服务器上,必须有一个连接方式能够支持,那么ssh就是最好的方法。Ftp server 我们后面搭建,现在系统就只有ssh了。如果你通过网络的话也可以通过wdget来做,但是我不喜欢用server去下载东西。

接下来介绍一下SSH怎么传输文件,我的是从windows xp到Ubuntu server传输文件。windows下可以使用Xshell命令终端软件,命令使用sftp.

> sftp username@ip port
> help
bye     finish your SFTP session
cd      change your remote working directory
clear   clear screen
exit     finish your SFTP session
explore explore your local directory
get     download a file from the server to your local machine
help    give help
lcd     change and/or print local working directory
lls      list contents of a local directory
lpwd    print your local working directory
ls      list contents of a remote directory
mkdir   create a directory on the remote server
mv      move or rename a file on the remote server
put     upload a file from your local machine to the server
pwd     print your remote working directory
quit    finish your SFTP session
rename  move or rename a file on the remote server
rm      delete a file
rmdir   remove a directory on the remote server

当然你也可以选择SCP命令作为你的传输命令:scp 命令是 SSH 中非常有用的命令,在两台服务器之间直接传送文件,仅仅用 scp 一个命令就完全解决了。 你可以在一台服务器上 以 root 身份运行 #scp servername:/home/ftp/pub/file1 . 这样就把另一台服务器上的文件 /home/ftp/pub/file1 直接传到本机器的当前目录下,当然你也可以用 #scp /tmp/file2 servername:/boot 把本机上的文件 /tmp/file2 送到另一台机器的 /boot 目录下。而且整个传送过程仍然是用 SSH 加密的。在windows下需要安装一个软件Winscp就可以了。

通过sftp传输文件到服务器上,是一个非常好的windows和linux通信的方法。当然你也可以用scp,如果是linux到linux推荐scp方法传输。

天很晚了。呵呵,困死了,睡觉了,今晚收工了。^_^

No responses yet

godaddy空间的magento安装支持

六 04 2010

今天在godaddy空间安装magento,跳转后页面空白,后来在google上搜索一了下,在国外的blog终于找到解决方案,现在分享,希望帮助到你。

我的空间是linux的,php5.

修改你的php5.ini

register_globals = on
allow_url_fopen = on
cgi.fix_pathinfo = 1
注意配置文件的这三项配置,设置完成了刷新你的页面,会有惊喜了。哈哈 ^_^

2 responses so far

magic toolbox 破解第一步之eval(function(p,a,c,k,e,d)系列解密javascript程序

十二 24 2009

破解函数的代码是:

<script>
a=62;
function encode() {
 var code = document.getElementById('code').value;
 code = code.replace(/[rn]+/g, '');
 code = code.replace(/'/g, "\'");
 var tmp = code.match(/b(w+)b/g);
 tmp.sort();
 var dict = [];
 var i, t = '';
 for(var i=0; i<tmp.length; i++) {
   if(tmp[i] != t) dict.push(t = tmp[i]);
 }
 var len = dict.length;
 var ch;
 for(i=0; i<len; i++) {
   ch = num(i);
   code = code.replace(new RegExp('\b'+dict[i]+'\b','g'), ch);
   if(ch == dict[i]) dict[i] = '';
 }
 document.getElementById('code').value = "eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k1)p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1);return p}("
   + "'"+code+"',"+a+","+len+",'"+ dict.join('|')+"'.split('|'),0,{}))";
}

function num(c) {
 return(c<a?'':num(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36));
}

function run() {
 eval(document.getElementById('code').value);
}

function decode() {
 var code = document.getElementById('code').value;
 code = code.replace(/^eval/, '');
 document.getElementById('code').value = eval(code);
}
</script>
<textarea id=code cols=80 rows=20>

</textarea>

<input type=button onclick=encode() value=编码>
<input type=button onclick=run() value=执行>
<input type=button onclick=decode() value=解码>

One response so far

godaddy主机升级zend到最新版本

十二 22 2009

今天,因为一个电子商务程序需要zend 3.3,所以把godaddy主机的zend升级一下,搞了好几个小时才搞定,做个笔记

  1. 下载ZendOptimizer 我的主机是linux的所以下载了最新的ZendOptimizer-3.3.9-linux-glibc23-i386
  2. 解压,我的php是5.2.6,拷贝ZendOptimizer-3.3.9-linux-glibc23-i386data5_2_x_compZendOptimizer.so,ftp上传至根目录下的zend目录
  3. ftp打开空间,找到根目录下的php.ini,下载到本地备份,删除服务器上的php.ini,把本地php.ini重命名为php5.ini
  4. 编辑php5.ini,找到

[Zend]
zend_extension=/usr/local/zo/ZendExtensionManager.so
zend_extension=/usr/local/zo/4_3/ZendOptimizer.so

修改为:

[Zend]
zend_optimizer.optimization_level=15
zend_extension=/home/content/XX/XXXXXXX/html/zend/ZendOptimizer.so

6.上传php5.ini至根目录,用<?php phpinfo();?>查看zend版本升级成功

注意:

zend_optimizer.optimization_level=15一定要设置,否则phpinfo的版本变成了3.3.9. 但是程序检测时还是不能使用

3 responses so far

php模板显示浏览器眉头有空行解决方法

十一 04 2009

最近在写php时,莫名其妙的浏览器头多出一行空行,在网上搜索一下,大致都是把文件保存为非BOM的UTF-8格式,在本地也解决了,但是上传到服务器依然有空行,搞了一个上午,都快崩溃了,最后决定自己想办法解决,经过几个小时的摸索终于有了完美解决方法了。

运用php显示缓冲区显示原理,成功去掉

在php的头上加一行ob_start(); 然后再模板显示前加个ob_end_clean(); 在模板显示后加个ob_end_flush();

这样问题就解决了,现在给出整体结构实例代码:

<?php

ob_start();

//此处为php逻辑操作

ob_end_clean();

//此处为php模板显示

ob_end_flush();

?>

No responses yet

Notice: Use of undefined constant

十 16 2009

Notice: Use of undefined constant,一般是由于php的数组非数字索引没有加单引号,解决的方法:修改php.ini的error_reporting,默认的报错级别是all,在配置文件中有个error_reporting = E_ALL & ~E_NOTICE,其中~的意思就是排除,即报除了notice级别的所有错.另外也可以在页面顶部写error_reporting(E_All);可以在上线的程序中设置为error_reporting(E_ERROR | E_WARNING | E_PARSE);现在很多国产论坛里会出现此类错误.主要原因,他们之前在php4中开发,php 4 是支持不加引号的.php 5 不支持.所以出现了这种情况.那到底需不需要加引号呢.虽然php 5 也支持,但是我们建议加上单引号,不加单引号的效率是加上单引号的1/3,所以损失的是效率.那么不加单引号是怎么能工作的呢?过程大致如下,php解析变量,由于没有加引号又不是关键字,所以就认为是常量,而我们有没有定义常量,所以就抛出了notice提示.没有常量值,php自动输出此常量名为常量值.这样就和单引号有一样的功效了.但是在这期间进行多次转换和查找.所以性能损耗了.

No responses yet

php session_id 恢复 session的内容

九 25 2009

php的session是可以程序恢复的,这个和java不太一样,session的恢复机制可以实现多个应用程序session的共享,因为php的session都是以文件形式或者数据库存储的.首先是session_id的获取是通过session_id()函数获取,这个值可以进行传递.

程序恢复session,首先要知道session_id,大家通过手册可以知道session的恢复通过session_id($id);但是在恢复时要注意一个先后顺序,要得到之前session的内容,必须在session_start()之前执行session_id($id),这样才能在执行了session_start时初始化session的时候恢复到之前的内容,否则的话你得到的是一个空的session,你什么也得不到.之前session被重新初始化了.这个和session_start()的作用有密切关系,因为session_start告诉php,session要初始化,要从session文件中反序列化session内容,所以session_start的作用就是把之前存储的文件内容反序列化.session_start序列化之前要知道session_id,如果没有就生成一个新的session_id.如果有就反序列化相应文件的内容.

No responses yet

Older »