五四陈透过PHP看JAVA系列:fsockopen

本系列主要总结PHP与JAVA之间的一些异同,给从PHP学JAVA或者是从JAVA学PHP的同学一点启发,五四陈科学院出品。

第一部分,先看PHP的fsockopen

先来看PHP手册中的定义http://www.54chen.com/p/function.fsockopen.html

看完定义后,来看一段代码,利用PHP去更新squid的缓存:

<?php
function updateCache($myUrl) {
global $vSquidConfig;
foreach ( $vSquidConfig ['host'] as $mySquid ) {
$myHandle = @fsockopen ( "127.0.0.1", 80, $myErrNo, $myErrStr, 30 );
if ($myHandle) {
$myResult = '';
@fputs ( $myHandle, "PURGE " . $myFileName . " HTTP/1.0\r\n" );
@fputs ( $myHandle, "Accept: */*\r\n" );
@fputs ( $myHandle, "\r\n\r\n" );
while ( ! feof ( $myHandle ) ) {
$myResult .= fgets ( $myHandle, 128 );
} @fclose ( $myHandle );
} }
} ?>
第二部分,再看JAVA如何达到这个目的
public void flushSquid() {
try {
int port = 80;
Socket socket = new Socket("127.0.0.1", port);
String path = http://test.com/test.html";
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
wr.write("PURGE " + path + " HTTP/1.0\r\n");
wr.write("Accept: */*\r\n");
wr.write("\r\n\r\n");

wr.flush();

// Get response
BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
// Process line...
System.out.println(line);
wr.close();
rd.close();
} catch (Exception e) {
}

亲爱的读者,您喜欢用PHP还是JAVA?

如何让squid 2.6.STABLE21输出Content-Encoding: Gzip

问题描述:

一个WEB服务器,跑nginx 0.6。前端一squid 2.6代理。用户访问先经过squid。

现需要squid服务器输出gzip压缩。

问题解决方案:

原来的nginx已经支持gzip,修改或者增加nginx.conf中内容(打开nginx的gzip支持附后):

gzip_http_version 1.0;
gzip_vary on;
add_header Vary Accept-Encoding;

清空原来的squid对应的缓存,新缓存即是带了gzip的header。

参考文献:

http://wiki.nginx.org/NginxHttpGzipModule

附录:

如何打开gzip,【优化php\nginx】 一段。

五四陈透过PHP看JAVA系列:strtotime

本系列主要总结PHP与JAVA之间的一些异同,给从PHP学JAVA或者是从JAVA学PHP的同学一点启发,五四陈科学院出品。

第一部分,先看PHP的Date/Tme函数

详细见:http://www.54chen.com/p/ref.datetime.html

今天要说的是其中的strtotime函数

http://www.54chen.com/p/function.strtotime.html

函数的功能:接受一个包含佬英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)。

例子:

<?php
echo strtotime("2010-3-3 3:3:3");
?>

将得到结果:

1267585383 在PHP应用中,经常在需要记录时间的时候,使用Mysql的int(10)来保存这个 Unix 时间戳,并且时间的比较查找等作,都用大于小于来进行。

第二部分,看JAVA对应的方法

try {
fromUnixTime = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/03/2010 08:00:00").getTime(); fromUnixTime /= 1000;
} catch (ParseException e1) {
e1.printStackTrace();
}
看上去有点麻烦,不过因为java中作mysql的jdbc对类型的要求是非常严格的,所以一般在java项目中,不使用int来代替datetime类型的字段。

第三部分,提升部分,反过来咋整(从Unix时间戳格式化为datetime)?

先说PHP:

<?php
echo date("Y-m-d H:i:s",1267585383);
?>
再说JAVA:
String date2 = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date ((long)1267585383*1000));
System.out.println(date2);
注意java中的强转为long不能丢,否则计算后结果不正确。