[实践OK]PHP强制浏览器不缓存的方法
Php/Js/Shell/Go jackxiang 2010-2-1 14:39
对于PHP页面,以下是代码片段,实践OK:
解释:
PHP页面强制浏览器不缓存的方法:
(1)告诉客户端浏览器不使用缓存,HTTP 1.1 协议。
header("Cache-Control: no-cache, must-revalidate");
(2)告诉客户端浏览器不使用缓存,兼容HTTP 1.0 协议。
header("Pragma: no-cache");
(3)设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。
header("Expires: Mon, 26 Jul 1970 05:00:00 GMT");
(4)设置此页面的最后更新日期(用格林威治时间表示)为当天,可以强迫浏览器获取最新资料。
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
参考:http://blog.sina.com.cn/s/blog_8002308e0100xrmv.html
解释:
PHP页面强制浏览器不缓存的方法:
(1)告诉客户端浏览器不使用缓存,HTTP 1.1 协议。
header("Cache-Control: no-cache, must-revalidate");
(2)告诉客户端浏览器不使用缓存,兼容HTTP 1.0 协议。
header("Pragma: no-cache");
(3)设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。
header("Expires: Mon, 26 Jul 1970 05:00:00 GMT");
(4)设置此页面的最后更新日期(用格林威治时间表示)为当天,可以强迫浏览器获取最新资料。
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
参考:http://blog.sina.com.cn/s/blog_8002308e0100xrmv.html
ctrl + gf (跳转到文件)相对路径
ctrl + o 回到当前的文件
shift+ * 选择文本中的所有词
ctrl + N 补全单词
ctrl + o 回到当前的文件
shift+ * 选择文本中的所有词
ctrl + N 补全单词
echo '<script language="javascript" type="text/javascript">';
echo 'window.location.href="/con/activity/act/area"';
echo '</script>';
新版本的php 降低错误级别:
配置php.ini
打开php.ini,把display_errors = Off 改成 display_errors = On
然后找到 error_reporting 最好设置成
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
然后保存,重启apache
service php-fpm restart
Gracefully shutting down php-fpm . done
写到日志里面去的配置:
log_errors = On
error_log = /data/logs/php/php-cli-error.log
光是:Error_reporting(E_ALL);还不行,还得:ini_set('display_errors','On');
例子:
提示:
Warning: readfile(/tmp/up.php): failed to open stream: No such file or directory in /data/www/XXXX/up.php on line 54
于是整理好后:
下面是一个哥们写的博客:http://blog.linuxphp.org/archives/221/
php错误日志,适合异步调试和线上调试
ini_set("error_reporting",E_ALL ^ E_NOTICE);
ini_set("display_errors",off);
ini_set("log_errors",On);
ini_set("error_log","d:/c");
------------------附加两句解决错误的语句----------------------
@ini_set('memory_limit','500M');
@ini_set('max_execution_time', '180');
特别注意以下顺序才行,否则仍然不会报错的,哈哈:
如果是在linux terminal下运行,可以指定一个php.ini的配置文件,如下示例:
-c <path>|<file> Look for php.ini file in this directory
特别注意:
如果是包含关系的程序,包含好几个程序文件,如果再下级文件出现错误,而你仅仅在上级加入上面的两行,下级是不会报错的,于是还得在下级加入上面的两行才行,呵呵。真是麻烦,不过没办法,有时间线上故障,搬移线上服务,直接在线上调试的时候不得不这样,否则不会出现错误,很是郁闷,不知如何下手,有了这个麻烦事麻烦点,但是已经很好了!
小知识:获取ini里面的变量:
$_ENV['SERVER_TYPE'] = ini_get("phplib.servertype");
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这个是写在PHP.ini配置文件里的是:
display_errors = On
vi /usr/local/stow/php-5.2.5/lib/php.ini
error_get_last 救人老命,php就是高,哈哈 ,值得在线上调试的时候使用!
来自:来自:http://blog.csdn.net/shaobaojie/article/details/26934809
配置php.ini
打开php.ini,把display_errors = Off 改成 display_errors = On
然后找到 error_reporting 最好设置成
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
然后保存,重启apache
service php-fpm restart
Gracefully shutting down php-fpm . done
写到日志里面去的配置:
log_errors = On
error_log = /data/logs/php/php-cli-error.log
光是:Error_reporting(E_ALL);还不行,还得:ini_set('display_errors','On');
error_reporting(E_ALL ^ E_NOTICE);ini_set('display_errors','On');
例子:
提示:
Warning: readfile(/tmp/up.php): failed to open stream: No such file or directory in /data/www/XXXX/up.php on line 54
于是整理好后:
下面是一个哥们写的博客:http://blog.linuxphp.org/archives/221/
php错误日志,适合异步调试和线上调试
ini_set("error_reporting",E_ALL ^ E_NOTICE);
ini_set("display_errors",off);
ini_set("log_errors",On);
ini_set("error_log","d:/c");
------------------附加两句解决错误的语句----------------------
@ini_set('memory_limit','500M');
@ini_set('max_execution_time', '180');
特别注意以下顺序才行,否则仍然不会报错的,哈哈:
如果是在linux terminal下运行,可以指定一个php.ini的配置文件,如下示例:
-c <path>|<file> Look for php.ini file in this directory
特别注意:
如果是包含关系的程序,包含好几个程序文件,如果再下级文件出现错误,而你仅仅在上级加入上面的两行,下级是不会报错的,于是还得在下级加入上面的两行才行,呵呵。真是麻烦,不过没办法,有时间线上故障,搬移线上服务,直接在线上调试的时候不得不这样,否则不会出现错误,很是郁闷,不知如何下手,有了这个麻烦事麻烦点,但是已经很好了!
小知识:获取ini里面的变量:
$_ENV['SERVER_TYPE'] = ini_get("phplib.servertype");
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这个是写在PHP.ini配置文件里的是:
display_errors = On
vi /usr/local/stow/php-5.2.5/lib/php.ini
error_get_last 救人老命,php就是高,哈哈 ,值得在线上调试的时候使用!
来自:来自:http://blog.csdn.net/shaobaojie/article/details/26934809
vi 中 shift + * 跳转到函数的实现处
检讨一下自己,数据结构白学了,自己楞没做出来,晕!~今天想从两个数组里选出不同的来,自己倒腾了半天也不行,找了半天发现一个函数,真真的好用,(真是该挨打了,这个函数是从一篇06年的帖子里找到的,到现在还对很多函数不熟悉,真该找个时间好好看看),array_diff($q,$s),返回值是一个数组,是两个数组中不同的那些!
curl之CURLOPT_HTTPHEADER
单个
我们在不设置host的时候提交到虚拟主机后,会出现:
Tencent:/usr/local/tads/htdocs/mhxy2010hn.act/crontab # curl "http://172.23.129.11*/user_v3/freere*g.php?act_id=109353"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /user_v3/freereg.php was not found on this server.</p>
</body></html>
设置host后就能找到了。
curl为我们用了CURLOPT_HTTPHEADER来做host的工作:
相当于:
这样一折腾,就ok了,呵呵!
其实这个主要是解决,在线上有host指向了,但是其他的需哟又需要这个host的域名,而ip不同的情况。
—————————————————————————————————————————————————
用Curl直接模拟Host如下:
以上摘录自:http://jackxiang.com/post/4022/
单个
<?php
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\n"));
?>
多个curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\n"));
?>
<?php
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\nOtherheader: stuff\n"));
?>
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\nOtherheader: stuff\n"));
?>
我们在不设置host的时候提交到虚拟主机后,会出现:
Tencent:/usr/local/tads/htdocs/mhxy2010hn.act/crontab # curl "http://172.23.129.11*/user_v3/freere*g.php?act_id=109353"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /user_v3/freereg.php was not found on this server.</p>
</body></html>
设置host后就能找到了。
curl为我们用了CURLOPT_HTTPHEADER来做host的工作:
function curl_post($host, $data)
{
$ch = curl_init();
$res= curl_setopt ($ch, CURLOPT_URL,$host);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: act.*.qq.com"));
$xyz = curl_exec ($ch);
//echo $xyz;
if ($xyz == NULL) {
return 0;
}
return $xyz;
}
{
$ch = curl_init();
$res= curl_setopt ($ch, CURLOPT_URL,$host);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: act.*.qq.com"));
$xyz = curl_exec ($ch);
//echo $xyz;
if ($xyz == NULL) {
return 0;
}
return $xyz;
}
相当于:
172.23.129.* act.*.qq.com
这样一折腾,就ok了,呵呵!
其实这个主要是解决,在线上有host指向了,但是其他的需哟又需要这个host的域名,而ip不同的情况。
—————————————————————————————————————————————————
用Curl直接模拟Host如下:
以上摘录自:http://jackxiang.com/post/4022/
在php中,抓取https的网站,会出现错误:
Warning: file_get_contents(https://localhost/myphp/a.asp) [function.file-get-contents]: failed to open stream: Invalid argument in I:\Web\myphp\a.php on line 16
打开php.ini找到 ;extension=php_openssl.dll ,去掉双引号";" ,重启web服务器即可。
apache的可以同时启用mod_ssl模块测试
Warning: file_get_contents(https://localhost/myphp/a.asp) [function.file-get-contents]: failed to open stream: Invalid argument in I:\Web\myphp\a.php on line 16
打开php.ini找到 ;extension=php_openssl.dll ,去掉双引号";" ,重启web服务器即可。
apache的可以同时启用mod_ssl模块测试
最近在写PHP程序时,需要使浏览器在https和http之间转化,上网搜索相关信息,无奈只有最近在写PHP程序时,需要使浏览器在https和http之间转化,上网搜索相关信息,无奈只有一篇介绍用ASP实现“在http和https之间转化”的文章,于是只好行写了用PHP实现http与https转化的代码。
如果网页使用https访问,在网页开头加入以下代码:
view plainprint?
1. <?php
2. //http转化为https
3. if ($_SERVER["HTTPS"]<>"on")
4. {
5. $xredir="https://".$_SERVER["SERVER_NAME"].
6. $_SERVER["REQUEST_URI"];
7. header("Location: ".$xredir);
8. }
9. ?>
<?php //http转化为https if ($_SERVER["HTTPS"]<>"on") { $xredir="https://".$_SERVER["SERVER_NAME"]. $_SERVER["REQUEST_URI"]; header("Location: ".$xredir); } ?>
如果网页使用http访问,在网页开头加入以下代码:
view plainprint?
1. <?php
2. //https转化为http
3. if ($_SERVER["HTTPS"]=="on")
4. {
5. $xredir="http://".$_SERVER["SERVER_NAME"].
6. $_SERVER["REQUEST_URI"];
7. header("Location: ".$xredir);
8. }
9. ?>
如果网页使用https访问,在网页开头加入以下代码:
view plainprint?
1. <?php
2. //http转化为https
3. if ($_SERVER["HTTPS"]<>"on")
4. {
5. $xredir="https://".$_SERVER["SERVER_NAME"].
6. $_SERVER["REQUEST_URI"];
7. header("Location: ".$xredir);
8. }
9. ?>
<?php //http转化为https if ($_SERVER["HTTPS"]<>"on") { $xredir="https://".$_SERVER["SERVER_NAME"]. $_SERVER["REQUEST_URI"]; header("Location: ".$xredir); } ?>
如果网页使用http访问,在网页开头加入以下代码:
view plainprint?
1. <?php
2. //https转化为http
3. if ($_SERVER["HTTPS"]=="on")
4. {
5. $xredir="http://".$_SERVER["SERVER_NAME"].
6. $_SERVER["REQUEST_URI"];
7. header("Location: ".$xredir);
8. }
9. ?>
直接用file_get_contents,会报错;
程序代码$url = (https://xxx.com");
file_get_contents($url);
错误:
程序代码Warning: file_get_contents(https://xxx.com) [function.file-get-contents]: failed to open stream: No such file or directory in D:wampwwwgrabber_clientindex.php on line 3
用curl的方式是可以的:
程序代码$url = (https://xxx.com);
重点是以下两句:
=============================================================
今天项目上线,使用php的curl模块通过https访问某个文件时出错:
这是我日志里记录的信息:
2009-05-11 11:10:23 请求音频列表,错误号:60--错误描述:SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
哎,项目上线急阿,请教同事得知修改如下代码即可,添加黑体字部分就好了。
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout);
虽然有些简单,但是还是写下来吧,以后好作参考。
// 对HTTPS网站的访问,用到了扩展库curl
要在PHP.ini中对curl的extension前面的分号去掉,可能还要把openssl的扩展同样打开
请问如何配置curl才能支持获取https网站内容或者向https的网站提交数据 ?
Linux下编译php的时候,把openssl支持一块编译进去
--with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.6)
--with-openssl-dir[=DIR] FTP: openssl install prefix
--with-imap-ssl[=DIR] IMAP: Include SSL support. DIR is the OpenSSL install prefix
--with-openssl-dir[=DIR] SNMP: openssl install prefix
我一般自己编译,如果你的Linux发行版带有php5-openssl包,安装好就行了
如果是通过OpenSSL加密的https协议传输的网页,curl可以直接访问:
curl https://that.secure.server.com
window下的https 通过curl访问的配置:
http://618119.com/archives/2007/10/26/16.html
http://hi.baidu.com/kkwtre/blog/item/3d20fbfb9a90da204e4aea01.html
http://www.enet.com.cn/article/2011/0617/A20110617874334.shtml
=-----------------------------------------------------------------------------------------=
PHP CURL HTTPS POST:
程序代码$url = (https://xxx.com");
file_get_contents($url);
错误:
程序代码Warning: file_get_contents(https://xxx.com) [function.file-get-contents]: failed to open stream: No such file or directory in D:wampwwwgrabber_clientindex.php on line 3
用curl的方式是可以的:
程序代码$url = (https://xxx.com);
重点是以下两句:
=============================================================
今天项目上线,使用php的curl模块通过https访问某个文件时出错:
这是我日志里记录的信息:
2009-05-11 11:10:23 请求音频列表,错误号:60--错误描述:SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
哎,项目上线急阿,请教同事得知修改如下代码即可,添加黑体字部分就好了。
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout);
虽然有些简单,但是还是写下来吧,以后好作参考。
// 对HTTPS网站的访问,用到了扩展库curl
要在PHP.ini中对curl的extension前面的分号去掉,可能还要把openssl的扩展同样打开
请问如何配置curl才能支持获取https网站内容或者向https的网站提交数据 ?
Linux下编译php的时候,把openssl支持一块编译进去
--with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.6)
--with-openssl-dir[=DIR] FTP: openssl install prefix
--with-imap-ssl[=DIR] IMAP: Include SSL support. DIR is the OpenSSL install prefix
--with-openssl-dir[=DIR] SNMP: openssl install prefix
我一般自己编译,如果你的Linux发行版带有php5-openssl包,安装好就行了
如果是通过OpenSSL加密的https协议传输的网页,curl可以直接访问:
curl https://that.secure.server.com
window下的https 通过curl访问的配置:
http://618119.com/archives/2007/10/26/16.html
http://hi.baidu.com/kkwtre/blog/item/3d20fbfb9a90da204e4aea01.html
http://www.enet.com.cn/article/2011/0617/A20110617874334.shtml
=-----------------------------------------------------------------------------------------=
PHP CURL HTTPS POST:
如何设置自己的共享库目录?/etc/ld.so.conf
Cache与Store jackxiang 2010-1-27 20:29
如何设置自己的共享库目录?/etc/ld.so.conf下增加了路径,还执行了ldconfig后,还提示没找到*.so?
真是烦啊,以前也没在其他版本的linux下搞过这东西,不会是magic的问题吧?
搜索了一天,都是怎么教人设定共享库的啊
/etc/ld.so.conf
是添加一行:
/my/lib
此目录已经建立了,而且把相关的so文件也放进去了
接着
#ldconfig
在安装东西,还是提示没有找到那几个so文件
重起也不行,但要是把这些so拷到/usr/lib下就不会出现说找不到它们
大老们具体说你们是怎么解决这个自设共享库目录的????
谢了先~!~@!
缘起:
同样叫回忆未来,难免看看他的文章,实验实验,在实验
基于HTTP协议的轻量级开源简单队列服务:HTTPSQS[原创],发现:
[root@localhost httpsqs-1.1]# /usr/bin/httpsqs -h
/usr/bin/httpsqs: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory
于是看留言也有这个问题:
# httpsqs
httpsqs: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory
安装完后出现这个哦。centos5.3 32位系统
张宴 回复于 2009-12-31 17:39
这个是tokyocabinet动态链接库找不到的问题。你可以按照以下步骤解决:
1、确认tokyocabinet是否安装成功(查看/usr/local/lib/libtokyocabinet.so.9文件是否存在)
2、如果存在,还是报这个错误,将/usr/local/lib添加到/etc/ld.so.conf文件中,然后在命令行执行/sbin/ldconfig,最后启动httpsqs
这么回事:
[root@localhost httpsqs-1.1]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
我的原则就是:从来在模仿,从未被超越,呵呵。
HTTPSQS 如队列和出队列:
http://blog.s135.com/httpsqs/#entrymore
真是烦啊,以前也没在其他版本的linux下搞过这东西,不会是magic的问题吧?
搜索了一天,都是怎么教人设定共享库的啊
/etc/ld.so.conf
是添加一行:
/my/lib
此目录已经建立了,而且把相关的so文件也放进去了
接着
#ldconfig
在安装东西,还是提示没有找到那几个so文件
重起也不行,但要是把这些so拷到/usr/lib下就不会出现说找不到它们
大老们具体说你们是怎么解决这个自设共享库目录的????
谢了先~!~@!
缘起:
同样叫回忆未来,难免看看他的文章,实验实验,在实验
基于HTTP协议的轻量级开源简单队列服务:HTTPSQS[原创],发现:
[root@localhost httpsqs-1.1]# /usr/bin/httpsqs -h
/usr/bin/httpsqs: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory
于是看留言也有这个问题:
# httpsqs
httpsqs: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory
安装完后出现这个哦。centos5.3 32位系统
张宴 回复于 2009-12-31 17:39
这个是tokyocabinet动态链接库找不到的问题。你可以按照以下步骤解决:
1、确认tokyocabinet是否安装成功(查看/usr/local/lib/libtokyocabinet.so.9文件是否存在)
2、如果存在,还是报这个错误,将/usr/local/lib添加到/etc/ld.so.conf文件中,然后在命令行执行/sbin/ldconfig,最后启动httpsqs
这么回事:
[root@localhost httpsqs-1.1]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
[root@localhost httpsqs-1.1]# ldconfig
[root@localhost httpsqs-1.1]# /usr/bin/httpsqs -h
--------------------------------------------------------------------------------------------------
HTTP Simple Queue Service - httpsqs v1.1
Author: Zhang Yan (http://blog.s135.com), E-mail: net@s135.com
This is free software, and you are welcome to modify and redistribute it under the New BSD License
-l <ip_addr> interface to listen on, default is 0.0.0.0
-p <num> TCP port number to listen on (default: 1218)
-x <path> database directory (example: /opt/httpsqs/data)
-t <second> timeout for an http request (default: 1)
-d run as a daemon
-h print this help and exit
Use command "killall httpsqs", "pkill httpsqs" and "kill PID of httpsqs" to stop httpsqs.
Please note that don't use the command "pkill -9 httpsqs" and "kill -9 PID of httpsqs"!
Please visit "http://code.google.com/p/httpsqs" for more help information.
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
HTTP Simple Queue Service - httpsqs v1.1
Author: Zhang Yan (http://blog.s135.com), E-mail: net@s135.com
This is free software, and you are welcome to modify and redistribute it under the New BSD License
-l <ip_addr> interface to listen on, default is 0.0.0.0
-p <num> TCP port number to listen on (default: 1218)
-x <path> database directory (example: /opt/httpsqs/data)
-t <second> timeout for an http request (default: 1)
-d run as a daemon
-h print this help and exit
Use command "killall httpsqs", "pkill httpsqs" and "kill PID of httpsqs" to stop httpsqs.
Please note that don't use the command "pkill -9 httpsqs" and "kill -9 PID of httpsqs"!
Please visit "http://code.google.com/p/httpsqs" for more help information.
--------------------------------------------------------------------------------------------------
我的原则就是:从来在模仿,从未被超越,呵呵。
HTTPSQS 如队列和出队列:
curl "http://localhost:1218/?name=your_queue_name&opt=put&data=经过URL编码的文本消息"
curl "http://localhost:1218/?charset=utf-8&name=your_queue_name&opt=get"
curl "http://localhost:1218/?charset=utf-8&name=your_queue_name&opt=get"
http://blog.s135.com/httpsqs/#entrymore
vi /etc/security/limits.conf
[codes=php]
# End of file
* soft nofile 65535
* hard nofile 65535
* soft nofile 65535
* hard nofile 65535
[/codes]
1,说明:
ulimit用于shell启动进程所占用的资源.
2,类别:
shell内建命令
3,语法格式:
ulimit [-acdfHlmnpsStvw] [size]
4,参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
5.举例
在Linux下写程序的时候,如果程序比较大,经常会遇到“段错误”(segmentation fault)这样的问题,这主要就是由于Linux系统初始的堆栈大小(stack size)太小的缘故,一般为10M。我一般把stack size设置成256M,这样就没有段错误了!命令为:
ulimit -s 262140
如果要系统自动记住这个配置,就编辑/etc/profile文件,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,添加“ulimit -s 262140”,保存重启系统就可以了!
阅读全文
[codes=php]
# End of file
* soft nofile 65535
* hard nofile 65535
* soft nofile 65535
* hard nofile 65535
[/codes]
1,说明:
ulimit用于shell启动进程所占用的资源.
2,类别:
shell内建命令
3,语法格式:
ulimit [-acdfHlmnpsStvw] [size]
4,参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
5.举例
在Linux下写程序的时候,如果程序比较大,经常会遇到“段错误”(segmentation fault)这样的问题,这主要就是由于Linux系统初始的堆栈大小(stack size)太小的缘故,一般为10M。我一般把stack size设置成256M,这样就没有段错误了!命令为:
ulimit -s 262140
如果要系统自动记住这个配置,就编辑/etc/profile文件,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,添加“ulimit -s 262140”,保存重启系统就可以了!
阅读全文
中国买软件的那么多,都是正版?写软件的都不用正版。。。你怎么让别人付钱买你写的软件?当然,你在单位里,帮单位写程序那是例外,反正你也不当成一个产品来卖的。我也只是逐步在转为正版而己。好软件一定是用正版写的吗?做的不够好,别人用都不会用了。谁来破解你。
日志也是用户应该注意的地方之一。不要低估日志文件对网络安全的重要作用,因为日志文件能够详细记录系统每天发生的各种各样的事件。用户可以通过日志文件检查错误产生的原因,或者在受到攻击和黑客入侵时追踪攻击者的踪迹。
日志的两个比较重要的作用是:审核和监测。配置好的Linux的日志非常强大。对于Linux系统而言,所有的日志文件都在/var/log下。默认情况下,Linux的日志文件已经足够强大,但没有记录FTP的活动。用户可以通过修改/etc/ftpacess让系统记录FTP的一切活动。
Linux日志系统
日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志主要的功能是审计和监测。它还可以实时地监测系统状态,监测和追踪侵入者。
Linux系统一般有3个主要的日志子系统:连接时间日志、进程统计日志和错误日志。
连接时间日志
连接时间日志由多个程序执行,把记录写入到/var/og/wtmp和/var/run/utmp。ogin等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
进程统计日志
进程统计日志由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计。
错误日志
错误日志由sysogd(8)执行。各种系统守护进程、用户程序和内核通过sysog(3)向文件/var/og/messages报告值得注意的事件。另外还有许多UNIX类程序创建日志,像HTTP和FTP这样提供网络服务的服务器也有详细的日志。
日志的两个比较重要的作用是:审核和监测。配置好的Linux的日志非常强大。对于Linux系统而言,所有的日志文件都在/var/log下。默认情况下,Linux的日志文件已经足够强大,但没有记录FTP的活动。用户可以通过修改/etc/ftpacess让系统记录FTP的一切活动。
Linux日志系统
日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志主要的功能是审计和监测。它还可以实时地监测系统状态,监测和追踪侵入者。
Linux系统一般有3个主要的日志子系统:连接时间日志、进程统计日志和错误日志。
连接时间日志
连接时间日志由多个程序执行,把记录写入到/var/og/wtmp和/var/run/utmp。ogin等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
进程统计日志
进程统计日志由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计。
错误日志
错误日志由sysogd(8)执行。各种系统守护进程、用户程序和内核通过sysog(3)向文件/var/og/messages报告值得注意的事件。另外还有许多UNIX类程序创建日志,像HTTP和FTP这样提供网络服务的服务器也有详细的日志。
淘宝上搜索:温度控制板
http://search1.taobao.com/browse/0/n-7---------------------------------------------g,z3blnsf73dlmnmhf----------------40--coefp-0-all-0.htm?ssid=e-p1-s15&at_topsearch=1
http://item.taobao.com/auction/item_detail-0db1-696b052bf7e4ac4f8251e28fcd26700d.htm?cm_cat=0
http://search1.taobao.com/browse/0/n-7---------------------------------------------g,z3blnsf73dlmnmhf----------------40--coefp-0-all-0.htm?ssid=e-p1-s15&at_topsearch=1
http://search1.taobao.com/browse/0/n-7---------------------------------------------g,z3blnsf73dlmnmhf----------------40--coefp-0-all-0.htm?ssid=e-p1-s15&at_topsearch=1
http://item.taobao.com/auction/item_detail-0db1-696b052bf7e4ac4f8251e28fcd26700d.htm?cm_cat=0
这个架构是目前我个人觉得比较稳妥并且最方便的架构,易于多数人接受:
前端的lvs和squid,按照安装方法,把epoll打开,配置文件照搬,基本上问题不多。
这个架构和app_squid架构的区别,也是关键点就是:加入了一级中层代理,中层代理的好处实在太多了:
1、gzip压缩
压缩可以通过nginx做,这样,后台应用服务器不管是apache、resin、lighttpd甚至iis或其他古怪服务器,都不用考虑压缩的功能问题。
2、负载均衡和故障屏蔽
nginx可以作为负载均衡代理使用,并有故障屏蔽功能,这样,根据目录甚至一个正则表达式来制定负载均衡策略变成了小case。
3、方便的运维管理,在各种情况下可以灵活制订方案。
例如,如果有人用轻量级的ddos穿透squid进行攻击,可以在中层代理想办法处理掉;访问量和后台负载突变时,可以随时把一个域名或一个目录的请求扔入二级cache服务器;可以很容易地控制no-cache和expires等header。等等功能。。。
4、权限清晰
这台机器就是不写程序的维护人员负责,程序员一般不需要管理这台机器,这样假如出现故障,很容易能找到正确的人。
对于应用服务器和数据库服务器,最好是从维护人员的视线中消失,我的目标是,这些服务只要能跑得起来就可以了,其它的事情全部可以在外部处理掉。
这个架构基于squid、nginx和lvs等技术,从架构上对bbs进行全面优化和保护,有如下特点:
1、高性能:所有的点击基本上全部由前端缓存负责,提供最快速的处理。
2、高保障度:不需考虑应用程序稳定与否、程序语言是何种、数据库是何种,都能从架构上保证稳定。
3、高可用性:对应用程序的修改达到最简化:在程序的某些地方加入清缓存的语句即可,当然还需要做页面静态化的工作和统计工作。
首先看图,这个图比较大:
这个架构的特点和一些流程的说明:
1、主域名和图片域名分离
域名分离可以使流量分离,缓存策略分离等等,好处诸多。bbs初期一定要做好规划,将图片用另外的域名独立服务,即使没有足够机器,域名也要先分开。另外,图片服务器可以使用有别于主域名的另一个域名,一个好处是可以减少读取cookie对图片服务器的压力,另一个是提高安全性,避免cookie泄露。
2、使用LVS作为前端、二级代理和数据库的访问入口
使用LVS作为入口,比其他任何一种方式都来得更优质。首先LVS的负载能力很强,因为它工作在网络协议的第4层,使用虚拟ip技术,所以它本身并不担负任何流量的处理,仅仅是一个封包转发的功能;第二,LVS的配置相对简单而且稳定,一般去调整的几率比较低,也减少了因人为等因素而出现故障;第三,LVS可以处理任何端口的负载均衡,所以它基本可以做所有服务的负载均衡和容错。在这个架构中,除了处理http的80端口之外,LVS也处理了数据库mysql的3306端口,在数据库这个应用中是采用的双机热备策略。
3、使用nginx+squid作为最前端的缓存组合
在这个架构中,是最能体现app_nginx_squid_nginx架构的优势的。在这个架构中的bbs运行在缓存上,用户每发布一张帖子,都需要使用purge指令清除该帖子的缓存,如果是squid在最前端,那么每次发布一张帖子,都需要在所有的squid中调用purge指令,这样在机器比较多的时候,purge将成为一个巨大的压力。
所以在这里将nginx放在最前端并使用手工url_hash的方式分流,将经常需要purge的帖子页面和列表页面按一个url对应一台squid的策略,分布到各台squid上,并提供了一台或一组backup的squid,个别squid出现异常时将自动使用backup的机器继续提供一段时间的服务直到其正常。在这样的架构下,purge就不再是关键问题,因为一个url只会对应到一台机器上,所以purge的时候,后端app_server找到对应的机器就可以了。
可以看到在前端中还有一台nginx(purge)的机器,这台机器是专用于purge的,只要发送purge指令和需要清除的url到这台机器,就可以找到相应的服务器并清除缓存了。另外,purge时还需要清理backup机器上的缓存,所以无论前端机器增加到多少,purge指令只会在2台机器上执行,如果backup机器使用到2-3台,purge指令就会在3-4台机器上执行,仍然在可接受范围之内。
nginx作为前端,另有的好处:
1/使用nginx的日志统计点击量非常方便
2/nginx也可作为缓存,一般可以直接负责favicon.ico和logo等固定的小图片
4、基于nginx的中层代理
nginx中层代理的优势,在:
nginx和squid配合搭建的web服务器前端系统
这篇文章中有解释。
在这个架构中,假如后端的app_server上把帖子页和列表页直接生成了静态页面,那么使用中层代理再做一次url_hash,将可以解决后端app_server的硬盘容量的压力,但是如果使用到url_hash的话,那做容错就相对麻烦了。所以建议不要采用生成静态页的方式,后端的压力一般不会非常的大,所以没有必要生成静态页。假如前端squid的命中率实在太低下,造成大量穿透,可以考虑使用二级代理暂顶。
5、基于LVS的数据库双机热备
在这个架构中,因为大量的并发和访问量都由前端的缓存处理掉了,所以后端的mysql主要压力来自于数据的写入,所以压力并不是非常大,并且负载比较稳定,一般不会随着访问量上升而提高过快,估计目前一台64位的机器,加满内存并使用高速的硬盘,前端负载数亿访问量时数据库都不会出现性能问题。在数据库这方面应主要考虑故障恢复,因为数据库崩溃的话,按照一般使用备份恢复的做法,耗时很长而且难免丢失数据,是很棘手的问题。使用双机热备的方案,出现故障时首先可由一台时刻同步着的备用数据库即刻充当主数据库,然后卸下的数据库可以有充分的时间对其进行维修,所以是个很安全有效的办法。
当然,数据库的优化还是要细心做的,参考:
mysql性能的检查和调优方法
细心地调一遍,性能会好很多。
6、图片服务器
图片服务器我在这个架构中没有特别详细的介绍,在大型的bbs系统下,图片常常会出现容灾现象——图片数量严重超过了单台前端服务器容纳能力,导致前端服务器命中率低下。处理容灾问题也是非常棘手的,往后会有更详细的介绍。
7、简单的点击量统计办法
1/使用js的script标签访问另一(台)组服务器的空文件,然后定期向数据库更新
2/在前端的nginx上直接开启日志功能,按需要统计点击量的链接规则进行记录,然后定期更新数据
1、高性能:所有的点击基本上全部由前端缓存负责,提供最快速的处理。
2、高保障度:不需考虑应用程序稳定与否、程序语言是何种、数据库是何种,都能从架构上保证稳定。
3、高可用性:对应用程序的修改达到最简化:在程序的某些地方加入清缓存的语句即可,当然还需要做页面静态化的工作和统计工作。
首先看图,这个图比较大:
这个架构的特点和一些流程的说明:
1、主域名和图片域名分离
域名分离可以使流量分离,缓存策略分离等等,好处诸多。bbs初期一定要做好规划,将图片用另外的域名独立服务,即使没有足够机器,域名也要先分开。另外,图片服务器可以使用有别于主域名的另一个域名,一个好处是可以减少读取cookie对图片服务器的压力,另一个是提高安全性,避免cookie泄露。
2、使用LVS作为前端、二级代理和数据库的访问入口
使用LVS作为入口,比其他任何一种方式都来得更优质。首先LVS的负载能力很强,因为它工作在网络协议的第4层,使用虚拟ip技术,所以它本身并不担负任何流量的处理,仅仅是一个封包转发的功能;第二,LVS的配置相对简单而且稳定,一般去调整的几率比较低,也减少了因人为等因素而出现故障;第三,LVS可以处理任何端口的负载均衡,所以它基本可以做所有服务的负载均衡和容错。在这个架构中,除了处理http的80端口之外,LVS也处理了数据库mysql的3306端口,在数据库这个应用中是采用的双机热备策略。
3、使用nginx+squid作为最前端的缓存组合
在这个架构中,是最能体现app_nginx_squid_nginx架构的优势的。在这个架构中的bbs运行在缓存上,用户每发布一张帖子,都需要使用purge指令清除该帖子的缓存,如果是squid在最前端,那么每次发布一张帖子,都需要在所有的squid中调用purge指令,这样在机器比较多的时候,purge将成为一个巨大的压力。
所以在这里将nginx放在最前端并使用手工url_hash的方式分流,将经常需要purge的帖子页面和列表页面按一个url对应一台squid的策略,分布到各台squid上,并提供了一台或一组backup的squid,个别squid出现异常时将自动使用backup的机器继续提供一段时间的服务直到其正常。在这样的架构下,purge就不再是关键问题,因为一个url只会对应到一台机器上,所以purge的时候,后端app_server找到对应的机器就可以了。
可以看到在前端中还有一台nginx(purge)的机器,这台机器是专用于purge的,只要发送purge指令和需要清除的url到这台机器,就可以找到相应的服务器并清除缓存了。另外,purge时还需要清理backup机器上的缓存,所以无论前端机器增加到多少,purge指令只会在2台机器上执行,如果backup机器使用到2-3台,purge指令就会在3-4台机器上执行,仍然在可接受范围之内。
nginx作为前端,另有的好处:
1/使用nginx的日志统计点击量非常方便
2/nginx也可作为缓存,一般可以直接负责favicon.ico和logo等固定的小图片
4、基于nginx的中层代理
nginx中层代理的优势,在:
nginx和squid配合搭建的web服务器前端系统
这篇文章中有解释。
在这个架构中,假如后端的app_server上把帖子页和列表页直接生成了静态页面,那么使用中层代理再做一次url_hash,将可以解决后端app_server的硬盘容量的压力,但是如果使用到url_hash的话,那做容错就相对麻烦了。所以建议不要采用生成静态页的方式,后端的压力一般不会非常的大,所以没有必要生成静态页。假如前端squid的命中率实在太低下,造成大量穿透,可以考虑使用二级代理暂顶。
5、基于LVS的数据库双机热备
在这个架构中,因为大量的并发和访问量都由前端的缓存处理掉了,所以后端的mysql主要压力来自于数据的写入,所以压力并不是非常大,并且负载比较稳定,一般不会随着访问量上升而提高过快,估计目前一台64位的机器,加满内存并使用高速的硬盘,前端负载数亿访问量时数据库都不会出现性能问题。在数据库这方面应主要考虑故障恢复,因为数据库崩溃的话,按照一般使用备份恢复的做法,耗时很长而且难免丢失数据,是很棘手的问题。使用双机热备的方案,出现故障时首先可由一台时刻同步着的备用数据库即刻充当主数据库,然后卸下的数据库可以有充分的时间对其进行维修,所以是个很安全有效的办法。
当然,数据库的优化还是要细心做的,参考:
mysql性能的检查和调优方法
细心地调一遍,性能会好很多。
6、图片服务器
图片服务器我在这个架构中没有特别详细的介绍,在大型的bbs系统下,图片常常会出现容灾现象——图片数量严重超过了单台前端服务器容纳能力,导致前端服务器命中率低下。处理容灾问题也是非常棘手的,往后会有更详细的介绍。
7、简单的点击量统计办法
1/使用js的script标签访问另一(台)组服务器的空文件,然后定期向数据库更新
2/在前端的nginx上直接开启日志功能,按需要统计点击量的链接规则进行记录,然后定期更新数据