泛解析的路径重写rewrite path

首先要重写所有泛解析过来的域名。
RewriteEngine  on
RewriteCond %{HTTP_HOST}  ^你的泛解析域名$
RewriteRule  ^.*$                index.php?HTTP_HOST=%{HTTP_HOST}    [last]

在重写规则里面利用 RewriteMap 指令 ${MapName:LookupKey|DefaultValue}        用 外部的重写程序 (MapType: prg,)来获取过来的泛解析子域是多少。

php上传进度条

利用到了php创始人主持的apc项目。

效果演示:http://progphp.com/progress.php

By Justin Silverton

This progess meter is based on the yahoo user interface library and alternative php cache (APC).  You will need both of these for it to display properly.  PHP 5.2.0 or higher is also required. (I have written a previous article on alternative PHP cache here).

The yahoo user interface library can be found here.

How it works

Once APC is installed and configured, the following needs to be added to your php.ini:

apc.rfc1867 = on

Aside from the Yahoo libraries, this is what makes the progress meter possible using php.

This is called the File Upload Progress hook handler and it is only available
if you compiled APC against PHP 5.2.0 or later.  When enabled
any file uploads which includes a field called 
APC_UPLOAD_PROGRESS before the file field in an upload form
will cause APC to automatically create an upload_
user cache entry where is the value of the APC_UPLOAD_PROGRESS form entry.

Download

Demo can be found here
Source can be found here

效果演示:http://progphp.com/progress.php
源码    :http://progphp.com/progress.phps

参考资料:http://www.whenpenguinsattack.com/2006/12/12/how-to-create-a-php-upload-progress-meter/

nginx 可以干什么。

Squid可以用来做静态文件的缓存。由于前端都是Squid,当用户修改播客内容时,需要去刷新各地的Squid缓存,这时都是调用“Nginx+PHP”服务器来刷新Squid。

由 于大部分服务器用来跑Squid,留给刷新Squid的服务器只有几台,如果跑Apache+PHP,每台服务器的并发连接达不到要求,而1台 “Nginx+PHP”服务器的并发连接数能达到“Apache+PHP”的10倍,可以顶10台“Apache+PHP”服务器了。

Nginx还用作内网的负载均衡。

参考:http://blog.s135.com/read.php/302.htm

利用 nginx 的第三方模块 ngx_http_accesskey_module 来实现下载文件的防盗链。

比如我的 download 目录下有一个 file.zip 的文件。对应的URI 是http://example.com/download/file.zip
使用ngx_http_accesskey_module  模块后http://example.com/download/file.zip?key=09093abeac094. 只有给定的key值正确了,才能够下载 download 目录下的 file.zip
而且 key 值是根据用户的 Ip 有关的,这样就可以避免被盗链了。
安装模块方法
解压,然后在编译nginx的时候加上:
    ./configure --addon-module=path/to/nginx-accesskey
 
 
 
配置方法
 
需要在nginx的配置文件里面添加
    location /download {
        accesskey             on;
        accesskey_hashmethod md5;
        accesskey_arg         "key";
        accesskey_signature   "mypass$remote_addr";
    }
 
 
 
语法:
accesskey [on|off]
默认是off。
用 on 开启这个功能。
 
accesskey_arg "string"
默认是 key,就是用于http://example.com/download/file.zip?key=09093abeac094 里面的 key。
如果使用 accesskey_arg "string"
 
accesskey_hashmethod [md5|sha1]
默认是 md5.
这里是选择哈希的类型。随便用哪个都可以。不过在生成下载 uri 的时候需要使用相应的哈希方法。
 
accesskey_signature "string"
默认是accesskey_signature "$remote_addr"
这里是被签名(哈希)的字符串。
$remote_addr 表示用户的 ip
为了很好的防盗链,这里应该给用户ip加上噪声。让别人无法猜到。
比如accesskey_signature " myPassWord $remote_addr"
 
 
 
 
 
生成下载URI 的方法。
假设    
location /download {
        accesskey             on;
        accesskey_hashmethod md5;
        accesskey_arg         "key";
        accesskey_signature   "mypass$remote_addr";
    }
Php:
http://example.com/download/file.zip?key=<?php echo md5(“mypass “.$_SERVER[‘REMOTE_ADDR’]); ?>
 
 
 
 
参考文献: http://wiki.codemongers.com/NginxHttpAccessKeyModule

加速php 的eAccelerator的web管理界面

很多一起的文章都是说eaccelerator.php
但是现在已经改掉了,现在使用的是control.php 作为新的控制台。

需要这三个文件。默认的用户名和密码是admin     eAccelerator   。
PHP_Highlight.php  control.php    dasm.php    Requirements
————
apache >= 1.3, mod_php >= 4.1, autoconf, automake, libtool, m4

Compatibility
————-
eAccelerator has been reported working with php4 and php5, php 5.1 support
hasn’t been integrated yet. It is being used on Linux, FreeBSD, MacOS X,
Solaris and Windows with apache 1.3 and 2, lighttpd and IIS.

Quick install
————-

You can find more information about installation on eAccelerator website.
http://eaccelerator.sourceforge.net/

Note(1): for Microsoft Windows installation, please refer to README.win32 file.

Step 1. Compiling eAccelerator

  export PHP_PREFIX="/usr"
 
  $PHP_PREFIX/bin/phpize
 
  ./configure \
  –enable-eaccelerator=shared \
  –with-php-config=$PHP_PREFIX/bin/php-config
 
  make

  You must specify the real prefix where PHP is installed in the "export"
  command. It may be "/usr" "/usr/local", or something else.

Step 2. Installing eAccelerator

  make install

Step 3. Configuring eAccelerator

eAccelerator can be installed both as Zend or PHP extension.

For eaccelerator > 0.9.1, if you have /etc/php.d directory, you should copy eaccelerator.ini inside and modify default value if you need.

If not, you need to edit your php.ini file (usually /etc/php.ini).

To install as Zend extension:

  zend_extension="/usr/lib/php4/eaccelerator.so"
  eaccelerator.shm_size="16"
  eaccelerator.cache_dir="/tmp/eaccelerator"
  eaccelerator.enable="1"
  eaccelerator.optimizer="1"
  eaccelerator.check_mtime="1"
  eaccelerator.debug="0"
  eaccelerator.filter=""
  eaccelerator.shm_max="0"
  eaccelerator.shm_ttl="0"
  eaccelerator.shm_prune_period="0"
  eaccelerator.shm_only="0"
  eaccelerator.compress="1"
  eaccelerator.compress_level="9"

  If you use thread safe build of PHP you must use "zend_extension_ts" instead
  of "zend_extension".

To install as PHP extension:

  extension="eaccelerator.so"
  eaccelerator.shm_size="16"
  eaccelerator.cache_dir="/tmp/eaccelerator"
  eaccelerator.enable="1"
  eaccelerator.optimizer="1"
  eaccelerator.check_mtime="1"
  eaccelerator.debug="0"
  eaccelerator.filter=""
  eaccelerator.shm_max="0"
  eaccelerator.shm_ttl="0"
  eaccelerator.shm_prune_period="0"
  eaccelerator.shm_only="0"
  eaccelerator.compress="1"
  eaccelerator.compress_level="9" 

Step 4. Creating cache directory

  mkdir /tmp/eaccelerator
  chmod 0777 /tmp/eaccelerator

Configuration Options
———————

eaccelerator.shm_size
    The amount of shared memory (in megabytes) that eAccelerator will use.
    "0" means OS default. Default value is "0".

eaccelerator.cache_dir
    The directory that is used for disk cache. eAccelerator stores precompiled
    code, session data, content and user entries  here. The same data  can  be
    stored in shared memory also (for more quick access). Default value is
    "/tmp/eaccelerator".

eaccelerator.enable
    Enables or disables eAccelerator. Should be "1" for enabling  or  "0"  for
    disabling. Default value is "1".

eaccelerator.optimizer
    Enables or disables internal peephole optimizer which may  speed  up  code
    execution. Should be "1" for enabling or "0" for disabling. Default  value
    is "1".

eaccelerator.debug
    Enables or disables debug logging. Should be "1" for enabling or  "0"  for
    disabling. Default value is "0".

eaccelerator.check_mtime
    Enables or disables PHP file modification checking .  Should  be  "1"  for
    enabling or "0" for disabling. You should set it to "1"  if  you  want  to
    recompile PHP files after modification. Default value is "1".

eaccelerator.filter
    Determine which PHP files must be cached. You may specify  the  number  of
    patterns (for example "*.php *.phtml") which specifies to cache or not  to
    cache. If pattern starts with the character "!", it means to ignore  files
    which are matched by the following pattern. Default value is "" that means
    all PHP scripts will be cached.

eaccelerator.shm_max
    Disables putting large values into shared memory by " eaccelerator_put() "
    function. It indicates the largest allowed size in bytes (10240, 10K, 1M).
    The "0" disables the limit. Default value is "0".

eaccelerator.shm_ttl
    When eaccelerator fails to get shared memory for new script it removes all
    scripts which were not accessed  at  last "shm_ttl"  seconds  from  shared
    memory. Default value is "0" that means –  don’t  remove  any  files  from
    shared memory.

eaccelerator.shm_prune_period
    When eaccelerator fails to get shared memory for new script  it  tryes  to
    remove  old  script   if   the   previous   try   was   made   more   then
    "shm_prune_period" seconds ago. Default value is "0" that  means  –  don’t
    try to remove any files from shared memory.

eaccelerator.shm_only
    Enables or disables caching of compiled scripts on disk. It has  no  effect
    on session data and content caching. Default value is "0" that means –  use
    disk and shared memory for caching.

eaccelerator.compress
    Enables or disables cached content compression. Default value is  "1"  that
    means enable compression.

eaccelerator.compress_level
    Compression level used for content caching.  Default value is "9" which  is
    the maximum value

eaccelerator.name_space
    A string that’s prepended to all keys. This allows two applications that
    use the same key names to run on the same host by setting this in .htaccess
    or in the main configuration file for the whole webserver.
   
eaccelerator.keys
eaccelerator.sessions
eaccelerator.content
    Determine where keys, session data and content will be cached. The possible
    values are:
    "shm_and_disk" – cache data in shared memory and on disk (default value)
    "shm"          – cache data in shared memory or on disk if shared memory
                     is full or data size greater then "eaccelerator.shm_max"
    "shm_only"     – cache data in shared memory
    "disk_only"    – cache data on disk
    "none"         – don’t cache data

eaccelerator.allowed_admin_path
    The script paths that are allowed to get admin information and do admin
    controls

Control panel and disassembler
——————————

If you want to use the control-panel you need to compile eAccelerator with
    –with-eaccelerator-info which is the default value.
You need to copy the control.php file to your webroot and set the path to it
in the php.ini or eaccelerator.ini in the eaccelerator.allowed_admin_path
directive. If you don’t do this you wont be able to see much information and
can’t control eAccelerator.
You can set the username and password needed to access the control-panel in
the control.php file.

When you compile eAccelerator with –with-eaccelerator-disassembler you need
to place the dasm.php and PHP_Highlight.php file also in the same directory
as the control.php file. The disassembler requires PHP to be compiled with
tokenizer support (–enable-tokenizer).
You can set the username and password needed to access the disassembler at the
top of dasm.php.

eAccelerator API
—————-

API documentation can be found on this website: http://bart.eaccelerator.net/doc/phpdoc/

Contact us
———-
You can contact us with questions, patches or bugs, by sending an email to
Bart Vanbrabant <zoeloelip at users.sourceforge.net>

linux设置时间,设置时区

使用
#tzselect
然后选择大洲,回车
再选择国家回车。

通俗点讲比如设置成台北时间
TZ="Asia/TaiPei";export TZ;
把上面的这句加载你的home目录下面的.profile里面,这样你每次登录就会自动设置时区了。

程序员 要 学以致用

刚开始学编程,能看懂basic语言的时候欢呼雀跃
2年以后,学会了C语言和系统调用,觉得用basic的都是傻B
又过了两年,能用汇编写程序了,觉得C语言不过如此
又过了很多年,看的懂机器码了,知道编译器和操作系统是怎么一回事了,以为已经学通底层了
突然有一天,同事拿着示波器在测驱动程序,网上的朋友在说网格计算……….,有人写的FORTRAN居然需要用工作站算好几天。

浮云,一切都索浮云

终于想通了
对自己编程有帮助的就学(长期的、短期的),没帮助的统统扔一边去

Lynx 简明使用指南

(一) Lynx 简介
Lynx 是一个字符界面下的全功能的WWW浏览器。Lynx 可以运行在很多种 操作系统下,如VMS, UNIX, Windows 95, Windows NT等,当然也包括Linux。 由于没有漂亮的图形界面,所以 Lynx 占用资源极少,而且速度很快。另外 Lynx 还是唯一能在字符终端下运行的 WWW 浏览器。

Lynx 的主页地址是:http://lynx.browser.org , 另外 http://www.cc.ukans.edu/lynx_help/Lynx_users_guide.html 是 Lynx 的用户指南。(三) Lynx 的键盘命令

移动命令:
下方向键:页面上的下一个链接(用高亮度显示)。
上方向键:页面上的前一个链接(用高亮度显示)。
回车和右方向键:
跳转到链接指向的地址。
左方向键:回到上一个页面。

滚动命令:
+,Page-Down,Space,Ctrl+f:
向下翻页。
-,Page-Up,b,Ctrl+b:
向上翻页。
Ctrl+a: 移动到当前页的最前面。
Ctrl+e: 移动到当前页的最后面。
Ctrl+n: 向下翻两行。
Ctrl+p: 往回翻两行。
): 向下翻半页。
(: 往回翻半页。
#: 回到当前页的 Toolbar 或 Banner。

文件操作命令:

c: 建立一个新文件。
d: 下载选中的文件。
E: 编辑选中的文件。
f: 为当前文件显示一个选项菜单。
m: 修改选中文件的名字或位置。
r: 删除选中的文件。
t: Tag highlighted file。
u: 上载一个文件到当前目录。

其他命令:

?,h: 帮助。
a: 把当前链接加入到一个书签文件里。
c: 向页面的拥有者发送意见或建议。
d: 下载当前链接。
e: 编辑当前文件。
g: 跳转到一个用户指定的URL或文件。
G: 编辑当 前页的URL,并跳转到这个URL。
i: 显示文档索引。
j: 执行预先定义的“短”命令。
k: 显示键盘命令列表。
l: 列出当前页上所有链接的地址。
m: 回到首页。
o: 设置选项。
p: 把当前页输出到文件,e-mail,打印机或其他地方。
q: 退出。
/: 在当前页内查找字符串。
s: 在外部搜索输入的字符串。
n: 搜索下一个。
v: 查看一个书签文件。
V: 跳转到访问过的地址。
x: 不使用缓存。
z: 停止当前传输。
[backspace]:
跳转到历史页(同 V 命令)。
=: 显示当前页的信息。
: 查看当前页的源代码。
!: 回到shell提示符下。
_: 清除当前任务的所有授权信息。
*: 图形链接模式的切换开关。
@: 8位传输模式或CJK模式的切换开关。
[: pseudo_inlines 模式的切换开关。
]: 为当前页或当前链接发送一个“HEAD”请求。
Ctrl+r: 重新装如当前页并且刷新屏幕。
Ctrl+w: 刷新屏幕。
Ctrl+u: 删除输入的行。
Ctrl+g: 取消输入或者传送。
Ctrl+t: 跟踪模式的切换开关。
;: 看 Lynx 对当前任务的跟踪记录。
Ctrl+k: 调用 Cookie Jar 页。
数字键: 到后面的第 n 个链接。

利用Nginx的X-Accel-Redirect头实现下载控制

有时你可能需要实现控制下载:即将下载文件的请求转发到某脚本, 然后由这脚本决定怎么做:发送这个文件给用户,出现决绝访问页,或着其他的事。在lighttpd服务器里可以通过从脚本传回X-Sendfile头实现;而Nginx是通过使用X-Accel-Redirect头实现的。在这篇文章里我会尽量简捷地描述在php和rails里如何使用这一特性。

假设你使用Apache运行PHP或Rails产生动态内容,而用Nginx作为前台反向代理(bianbian注:反向代理又称为服务器加速 (Server accelerate),原理是将用户的请求转发到目标服务器,然后将结果转发给用户。好处有很多:保护目标服务器安全、负载均衡容易实现、有点类似防火 墙;坏处我认为就是要传递用户的IP的时候多了些步骤)。你就达到了两个目标:

  1. 因为Nginx服务器会改善所有对动态内容的缓慢请求,能节省服务器的资源(细节正在
  2. 你能对静态文件的下载做出控制.(bianbian注:后面的一大段都是说这个啦!)

在这里,假设网站位于 /var/www 目录,而一些静态文件(类似电影、歌曲、或其他)位于 /var/www/files 目录。Apache监听8080端口。

参考文章:
1.http://bianbian.org/index.php/technology/linux/154.html
2.http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/

nginx + php 实现高负载于apache

apache一直使用perwork工作,访问量大了之后,就会产生非常多的httpd进程。因为每个httpd进程只能服务于一个http请求。这样就耗费了大量的内存空间。

现在改用nginx(Engine X)使用fastcgi方式来跑php。内存消耗一下子就下来了很多。

参考文献:http://blog.s135.com/read.php/314.htm