我们在开发测试时,有时web服务器会绑定一个域名,但是因为dns是无法解析的,我们需要设置host文件去访问。 但是,如果我们是需要通过curl访问的话,无法访问该url的host主机。所以,需要通过指定host的方式来访问,具体访问方式如下: 如果是linux下的curl命令: 如果使用php的curl的话,使用curl_setopt设置一下CURLOPT_HTTPHEADER即可。 请参考以下函数使用:

阅读全文

通过php的header函数,来指定为文件下载流,可以让文件正常下载,但是,文件名确很让人烦恼,文件名有中文时,如果页面编码为utf8,当文件名也为utf8时,在chrome下正常,但是在360se或者IE下,就成了乱码了;如果把文件名的编码设置为GBK,在IE下输出时候的文件名正常了,但是在chrome下,文件名又乱码了,这个太纠结了。 抓包的话,能看到如下的数据流,仔细看看,感觉跟发送邮件时的数据流很相似,于是想想是不是也采用跟邮件似的文件流形式,来避免出现乱码。 HTTP/1.1 200 OK<br /> Date: Mon, 08 Oct 2012 17:32:12 GMT<br /> Content-Length: 204<br /> Content-Disposition: attachment; filename=%E6%B5%8B%E8%AF%95.txt<br /> Cache-Control: public<br /> Content-Type: application/octet-stream<br /> Connection: Close 所以做法就是把文件名进行编码,根据RFC 1738 ,把中文编码,再放到数据流里,输出的时候就会正常了。在php中,具体的做法就是这样了,贡献一个我自己的文件下载头信息。把这个放在前边,再在后边echo输出你希望下载的内容即可了。

阅读全文

cygwin 添加php扩展模块

以添加openssl模块为例子 进入源码目录 cd php-5.2.13/ext/openssl #运行phpize生成configure /usr/local/php/bin/phpize #编译,指定php-config,注意这里的php-config,不是php.ini ./configure –with-php-config=/usr/local/php/bin/php-config #上面可以添加–enable-openssl,也可以不用添加 #编译安装 make;make install #生成一个目录来存放扩展的模块 mkdir /usr/local/php/etc/php/ext #复制openssl.so到模块目录 cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/openssl.so /usr/local/php/etc/ext/ #编辑php.ini文件,指定PHP到哪个目录读模块 vi /usr/local/php/etc/php.ini extension_dir=”/usr/local/php/etc/ext” #Load模块 extension=openssl.so #保存退出 再用/usr/local/php/bin/php -m|grep openssl查看是否有openssl.so 备注: 如果在运行phpize时报错:Cannot find autoconf. Please check your autoconf installation: `以添加openssl模块为例子 进入源码目录 cd php-5.2.13/ext/openssl #运行phpize生成configure /usr/local/php/bin/phpize #编译,指定php-config,注意这里的php-config,不是php.ini ./configure –with-php-config=/usr/local/php/bin/php-config #上面可以添加–enable-openssl,也可以不用添加 #编译安装 make;make install #生成一个目录来存放扩展的模块 mkdir /usr/local/php/etc/php/ext #复制openssl.so到模块目录 cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/openssl.so /usr/local/php/etc/ext/ #编辑php.ini文件,指定PHP到哪个目录读模块 vi /usr/local/php/etc/php.ini extension_dir=”/usr/local/php/etc/ext” #Load模块 extension=openssl.so #保存退出 再用/usr/local/php/bin/php -m|grep openssl查看是否有openssl.so 备注:

阅读全文

在使用curl上传POST一段数据时,被提示413 Request Entity Too Large,应该是nginx限制了上传数据的大小。

解决方法就是

打开nginx主配置文件nginx.conf,一般在/usr/local/nginx/conf/nginx.conf这个位置,找到http{}段,修改或者添加

client_max_body_size 2m;

然后重启nginx,

即可。

要是以php运行的话,这个大小client_max_body_size要和php.ini中的如下值的最大值差不多或者稍大,这样就不会因为提交数据大小不一致出现错误。

post_max_size = 2M

upload_max_filesize = 2M

阅读全文

PHP 输出 $_SERVER[‘HTTP_USER_AGENT’] Ipad: Firefox x64 4.0b13pre on Windows 7 x64: Firefox x86 3.6.15 on Windows 7 x64: Chrome x86 10.0.648.133 on Windows 7 x64: IE9 x64 9.0.8112.16421 on Windows 7 x64: IE9 x86 9.0.8112.16421 on Windows 7 x64: Firefox x64 3.6.10 on ubuntu 10.10 x64: andorid 2.2自带浏览器,不支持HTML5视频 摘自:http://www.cnblogs.com/sink_cup/archive/2011/03/15/http_user_agent.html

阅读全文

【原创】转载请注明,来自:DigDeeply的博客: http://digdeeply.org/

这几天晚上闲着没事干,偶然间发现新浪爱问的积分还可以换实物礼品,积分来源一部分就是提问回答之类的,还有一部分是要每天签到。我是懒人,也懒得每天提问回答啥的,为了那么个小礼品,也不值得。但是签到还是很简单的嘛,每天点一下就OK了。我比一般懒人还懒,每天点一下都懒得点,所以觉定做个模拟登陆,模拟签到的程序,放到SAE上去,每天帮我签个到,拿个积分就好了,哈哈。:)

其实这个模拟登陆,也就是抓站的基础部分吧, 模拟登陆,获取登陆后的状态,然后模拟人的访问流程,获取访问结果,分析保存之……

首先介绍一下抓站的利器吧,httpwatch,也可以用firefox下的firebug或者chrome下自带的开发者工具,其实我原来一直都是用firefox或者chrome的,但是听说httpwatch很好,就拿来试用一下,结果用的还真是很舒服,不错。其次就是Snoopy.class.php,我用PHP,这个PHP类真是好用到极致了,用来抓站so easy。但是这个类用来抓一般的基于http的站是没问题的,如果要是https的就麻烦了,这个类在抓https的站时,采用的不是php本身的curl了,使用的是Linux/Unix下的原生CURL,所以这个类在windows下用着很麻烦,需要自己装一个windows下能用的curl,并且配置好环境。在sae下直接就是不行的了,如果是用Linux/Unix的话,就很方便了~~指定好curl的路径就可以了。我也有一个https的模拟登录签到的脚本,使用的是php的curl,没有使用Snoopy。

由于新浪采用了单点登陆,所以一般的登陆方法是不行的了,不是直接构造用户名密码POST到一个login action页面完事。先使用httpwatch抓取一下登陆的流程吧。

阅读全文

目前的工作是需要对用户的一些数据进行分析,每个用户都有若干条记录,每条记录中有用户的一个位置,是用经度和纬度表示的。

还有一个给定的数据库,存储的是一些已知地点以及他们的经纬度,内有43W多条的数据。

现在需要拿用户的经纬度和已知地点进行距离匹配,如果它们之间的距离小于一定的数据,比如说500米,就认为用户是在这个地点。

MYSQL本身是支持空间索引的,但是在5.x的版本中,取消了对Distance()和Related()的支持,参考这里:MySQL 5.1参考手册 :: 19. 中的空间扩展 19.5.6. 测试几何类之间空间关系的函数,无法使用空间的距离函数去直接去查询距离在一定范围内的点。所以,我首先想到的是,对每条记录,去进行遍历,跟数据库中的每一个点进行距离计算,当距离小于500米时,认为匹配。这样做确实能够得到结果,但是效率极其低下,因为每条记录都要去循环匹配40W条数据,其消耗的时间可想而知。经过记录,发现每条记录处理的时间消耗达到1700ms,针对每天上亿的数据量,这样一个处理速度,让人情何以堪啊。。。

我自己也有个想法,就是找到每条记录所在点的经纬度周围的一个大概范围,比方说正方形的四个点,然后使用mysql的空间计算,使用MBR去得出点在这个矩形内的已知记录,然后进行匹配。可惜,自己没想出能计算到四个点经纬度的方法。

意外的,查询到了一个关于这个计算附近地点搜索初探,里面使用python实现了这个想法。

所以参考了一下原文中的算法,使用PHP进行了实现。

实现原理也是很相似的,先算出该点周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录。

阅读全文

作者的图片

DigDeeply

Technology Stack: Golang/PHP/Openresty, and so on…

Web Development Engineer

Beijing China