鹰击长空yuetao.org

5月 9
通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题:

用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_size这个参数,否则会中断在nginx的请求中,在php中是无法记录到访问的.

一般上传大文件流程:

首先修改php.ini文件:
  file_uploads on 是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir – 文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize 8m 望文生意,即允许上传文件大小的最大值。默认为2M
post_max_size 8m 指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M

  一般来说,设置好上述四个参数后,在网络正常的情况下,上传<=8M的文件是不成问题的

但如果要上传>8M的大文件的话,只设置上述四项还不一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得继续设置下面的参数。
  max_execution_time 600 每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time 600 每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit 8m 每个PHP页面所吃掉的最大内存,默认8M

  webserver用的是nginx,在nginx的conf中添加了一个参数:

默认是1M,需要增大的话。

在nginx.conf中增加一句
  client_max_body_size 30m;

  重启即可

30m表示最大上传30M,需要多大设置多大。
5月 9
swfupload是一个不错的文件上传组件,最近参与了一个使用了此控件的项目,测试中发现上传控件在IE8以上浏览器中无法使用,即便Flash加载了,但右键显示“影片未能加载”,百度了一下发现IE9及更高版本的浏览器需要加上classid,flash才能正常执行。

解决方法也很简单,为IE浏览器的Flash代码加上ClassId即可:


 
SWFUpload.prototype.getFlashHTML = function () {
 // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
 var myclass="";
 if(navigator.userAgent.indexOf("MSIE")>0){
     myclass='classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
 }
 
 return ['<object '+myclass+'  id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
    '<param name="wmode" value="', this.settings.button_window_mode, '" />',
    '<param name="movie" value="', this.settings.flash_url, '" />',
    '<param name="quality" value="high" />',
    '<param name="menu" value="false" />',
    '<param name="allowScriptAccess" value="always" />',
    '<param name="flashvars" value="' + this.getFlashVars() + '" />',
    '</object>'].join("");
};
加上后确实解决了IE9\IE10下无法上传的问题,但是在IE11下仍然无法使用,断点跟踪后发现 myclass未被赋值,再次添加navigator.userAgent发现IE11下的userAgent(Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; rv:11.0) like Gecko)中已经没有了“MSIE”,看来上面的解决方案不适用于IE11了,根据源代码我们可以断定只要判断出是IE浏览器即可。

IE11虽然遵循了web标准,但仍然保留了ActiveXObject,所以我们可以通过判断ActiveXObject来确定是否是IE浏览器(关于IE11的细节 http://msdn.microsoft.com/zh-cn/library/ie/dn467845(v=vs.85).aspx)。

最终解决方案如下:

JavaScript

 
SWFUpload.prototype.getFlashHTML = function () {
 // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
 var myclass="";
 if(window.hasOwnProperty("ActiveXObject")){
     myclass='classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
 }
 
 return ['<object '+myclass+'  id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
    '<param name="wmode" value="', this.settings.button_window_mode, '" />',
    '<param name="movie" value="', this.settings.flash_url, '" />',
    '<param name="quality" value="high" />',
    '<param name="menu" value="false" />',
    '<param name="allowScriptAccess" value="always" />',
    '<param name="flashvars" value="' + this.getFlashVars() + '" />',
    '</object>'].join("");
};
Tags:
4月 15
----------------------------------------------------------------------
#!/bin/bash
#echo "$shijian start done." >> /home/yuetao/plan_task/wifi_mac_unlock.log
www_path="/home/yuetao/www/web"
www_name="web"
log_path="/home/yuetao/plan_task/wifi_mac_unlock.log"
mac_log="${www_path}/mac_lock.txt"
nohup_log_path="/home/yuetao/plan_task/wifi_mac_unlock.nohup"
pid_path="/home/yuetao/plan_task/wifi_mac_unlock.pid"


check_start () {
    pid=`get_pid`
    status=`check_status`
    if [ "$status" = "1" ]
    then
        echo "$www_name mac unlock allready run pid:$pid."
        ps aux | grep $pid
        exit 1
    fi
}

check_stop () {
     pid=`get_pid`
         status=`check_status`
         if [ "$status" = "0" ]
         then
                 echo "$www_name mac unlock count not run pid:$pid."
         ps aux | grep $pid
                 exit 1
         fi

}
check_status (){
    pid=`get_pid`
        psnum=`ps aux | grep "$pid" | wc -l`
        if [ "$psnum" = "1" ]
        then
        return 0             
    else
        return 1
        fi
}
get_pid () {
    cat "$pid_path"
}

save_pid () {
    pid=$1
    echo $! > $pid_path
}

save_log () {
    content="$1"
    echo "$content"
    echo "$content" >> $log_path
}

case "$1" in
 start)
     check_start
         cd $www_path
     nohup php home_task.php PlanTask mac_unlock > $nohup_log_path&
     save_pid $!
     save_log "$www_name mac unlock started pid:$pid."
         ;;
 stop)
     check_stop
         pid=`get_pid`
     kill $pid
     save_log "$www_name mac unlock stop success pid:$pid."
         ;;
 log)
    less $mac_log
    ;;
 cleanlog)
    echo "" > $mac_log
    echo "clearn log done."
    ;;
 status)
    pid=`get_pid`
        status=`check_status`
        if [ "$status" = "0" ]
        then
            echo "$www_name mac unlock not run."
        ps aux | grep $pid
            exit 1
    else
            echo "$www_name mac unlock run normal pid:$pid."
        ps aux | grep $pid
            exit 1
        fi
    ;;
 pid)
    pid=`get_pid`
    echo $pid
    ;;
 --help)
    echo "now not have help content."
    ;;
 *)
       echo "Usage: $0 {start | stop | log | cleanlog | status | pid}"
       exit 1
 esac
 exit 1
------------------------------------------------------------------
以上内容保存成文件
运行 空格 跟着 参数
Tags:
3月 27
修改 nginx.conf 增加下面这段 
实际效果为

访问 xxx.bdy.baidu.com  网站主目录会定位到 /home/baiduyun/tags/xxx
访问 abc.bdy.baidu.com  网站主目录会定位到 /home/baiduyun/tags/abc

同时支持3级域名进行访问

server
 {
   listen 80;
   server_name *.bdy.baidu.com;
   #two level domain resolve
   if ( $host ~* ^([^\.]+)\.bdy\.baidu\.com$ ) {
     set $subdomain $1;
     #rewrite ^/(.*) http://$subdomain.com permanent;
   }
   #three level domain resolve
   if ( $host ~* ^([^\.]+)\.([^\.]+)\.bdy\.baidu\.com$ ) {
     set $subdomain $2;
     #rewrite ^/(.*) http://$subdomain.com permanent;
   }
   root /home/baiduyun/tags/$subdomain;
   index index.php index.html index.htm;
   location ~ .*\.(php|php5)$ {
     try_files $uri =404;
     fastcgi_pass  unix:/tmp/php-cgi.sock;
     fastcgi_index index.php;
     include fcgi.conf;
   }
 }

3月 26
#!/bin/bash

REPOS="$1"
REV="$2"

export LANG=en_US.UTF-8

# count commited file num

check=$(svnlook changed -t $REV $REPOS | awk 'NF!=2{for(i=2;i<=NF;i++)if(i!=NF)printf $i" ";if(i=NF)printf $i","}')


# compare files
if [ "$check" != "" ]
then
         check_del=$(svnlook changed -t $REV $REPOS  | awk '{for(i=1;i<NF;i++)if($i=="D")print $1}')
         if [ "$check_del" == "" ]
         then
                 echo "★★★★★★★★★★★★" 1>&2
                 echo "发现带空格的文件名:【${check}】" 1>&2
                 echo "请单独对其执行svn删除后," 1>&2
                 echo "重新尝试提交本次内容." 1>&2
                 echo "★★★★★★★★★★★★" 1>&2
                 exit 1
         fi
fi
exit 0
分页: 4/61 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]