我们在开发测试时,有时web服务器会绑定一个域名,但是因为dns是无法解析的,我们需要设置host文件去访问。

但是,如果我们是需要通过curl访问的话,无法访问该url的host主机。所以,需要通过指定host的方式来访问,具体访问方式如下:

如果是linux下的curl命令:

curl --silent -H "Host: www.digdeeply.info" "192.168.0.1/index.php"

如果使用php的curl的话,使用curl_setopt设置一下CURLOPT_HTTPHEADER即可。

请参考以下函数使用:

//httpHeader	设置的 http head 参数 数组形式 如 array('Host: digdeeply.info')
function curl_by_host($url,$postString='',$httpHeader='')
{
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_POSTFIELDS,$postString);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
	curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
if(!empty($httpHeader) && is_array($httpHeader))
{
	curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
}
$data = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if(curl_errno($ch)){
	return $info;
}
return $data;

}


阅读全文

通过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输出你希望下载的内容即可了。

$name = rawurlencode($filename);
        header("Content-type: text/plain; charset=utf-8");
	header("Content-Type: application/force-download");  
	header("Content-Type: application/octet-stream");  
	header("Content-Type: application/download");  
	header('Content-Disposition:inline;filename="'.$name.txt.'"');  
	header("Content-Transfer-Encoding: binary");  
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
	header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");  
	header("Pragma: no-cache");  

阅读全文

本文总结一下浏览器在 javascript 的加载方式。
关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性
一、同步加载与异步加载的形式
1. 同步加载
我们平时最常使用的就是这种同步加载形式:
<script src="http://yourdomain.com/script.js"></script>
同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。
 js 之所以要同步执行,是因为 js 中可能有输出 document 内容、修改dom、重定向等行为,所以默认同步执行才是安全的。
以前的一般建议是把<script>放在页面末尾</body>之前,这样尽可能减少这种阻塞行为,而先让页面展示出来。
简单说:加载的网络 timeline 是瀑布模型,而异步加载的 timeline 是并发模型。

2. 常见异步加载(Script DOM Element)

(function() {
     var s = document.createElement('script');
     s.type = 'text/javascript';
     s.async = true;
     s.src = 'http://yourdomain.com/script.js';
     var x = document.getElementsByTagName('script')[0];
     x.parentNode.insertBefore(s, x);
 })();

异步加载又叫非阻塞,浏览器在下载执行 js 同时,还会继续进行后续页面的处理。


阅读全文

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

备注:


阅读全文

8月22,一人到我的站来留言,邀请我去参加一个关于他们联盟的关键字的百度的SEO,我拒绝了。。

百度seo

百度seo

然后,从8月23日开始,我的站从百度搜索来的量急剧下降。。。。几乎为0了。。。

本站从百度来的流量

本站从百度来的流量

擦嘞,,,这是巧合么。。。


阅读全文

目前有一个需求,其它20台机器上每隔5分钟向另外一台服务器提交一些文件的MD5信息,这台服务器每隔几分钟跑一个脚本,把这些信息进行对比,如果有不一致的信息需要报警。

现在的问题就是,系统自带的crontab定时只能每几分钟跑一次,这样每次脚本跑的时候都是在某分的第一秒。

但是,如果在服务器提交信息的时候去进行比对信息,就可能发生异常了,所以需要把服务器上检查的脚本推迟一些运行,不要也是在1秒时候跑。

crontab不支持,但是脚本支持延迟啊,所以,解决办法很简单。在检查脚本里开头 sleep 10s 即可啦。这样这个脚本在1秒时开始执行,但是sleep一会后才继续后边检查,所以,不会发生冲突了~~

sleep用法Tips

sleep 1 睡眠1秒<br /> sleep 1s 睡眠1秒<br /> sleep 1m 睡眠1分<br /> sleep 1h 睡眠1小时<br /> echo `expr $RANDOM % 60` 睡眠随机0-60秒


阅读全文

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

解决方法就是

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

client_max_body_size 2m;

然后重启nginx,

sudo /etc/init.d/nginxd reload

即可。

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

post_max_size = 2M

upload_max_filesize = 2M


阅读全文

作者的图片

DigDeeply

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

Web Development Engineer

Beijing China