yjiang's cake

CI发送邮件遇到的一点问题

CI写的一个WEB站点,迁移到另一个服务器以后出现无法发送邮件的情况.打开CI的调试后提示php Mail()函数无法成功发送邮件,
按照google大神的结果,有配置php.inisendmail_path的,有安装各种奇葩程序的,均以失败告终,后来忘了从哪看到的了,
执行如下命令:

echo "FuckYou" | mail -s "test" j582033@163.com

提示sendmail异常,重新安装sendmail试试,可能能解决此问题.

php js数组操作对照

==========================================================
xx($a)                     a.xx()
----------------------------------------------------------
php                        js                    说明

array_pop()                pop()                 #出栈
array_push()               push()                #入栈
array_shift()              shift()               #顶部弹出
array_unshift()            unshift()             #顶部压入

implode()                  join()                #数组转为字符串
explode()                  split()               #字符串转为数组

array_sclice()             slice()               #按条件取值(php为按偏移量取出 js为按片段取出)
array_spclice()            splice()              #按条件插入或删除元素
-----------------------------------------------------------
$a = array('a', 'b', 'c'); a = ['a', 'b', 'c']
-----------------------------------------------------------
array_reverse()            reverse()             #数组元素颠倒
arsort()                   sort()                #php对数组进行排序并保持索引,且php的支持数字及字母排序,
asort()                    -                     当字母数字混合时,排序规则为[A~z0~9]
rsort()                    -                     #js的sort()只能对字母区分大小写排序,如需对数字排序需使用函数表达式
                                                 var a = [46, 85, 99, 33];
                                                 a.sort(function(a, b){
                                                     return a-b;           // b-a为倒序
                                                 });

                                                 #js的sort()对字符串进行不区分大小写的排序也需要使用函数表达式
                                                 var a = ['Bug', 'Dog', 'ant', 'cat'];
                                                 a.sort(function(s, t){
                                                     var a = s.toLowerCase(); 转换为小写
                                                     var  = s.toLowerCase();
                                                     if(a < b) return -1;
                                                     if(a > b) return 1;
                                                     return 0;
                                                 });
-----------------------------------------------------------

较多数据导出CSV

使用分页的方式,按偏移量来多次导出,追加合并为一个新文件,避免占用内存过高或下载过慢.

例子较简单:

<pre>
<?php
class test extends Controller {
    private $table;
    private $file;
    private $filename;
    public function __construct(){
        parent::__construct();
        $this->file = FCPATH.'files/excel/';
        $this->filename = time().".csv";
    }
    function index($pid=null) { //{{{
        if(!$pid) exit("缺少id");
        $this->table = "project_{$pid}_search";
        $count = $this->db->from($this->table)->count_all_results();
        $basic = 300;
        $time = ceil($count/$basic);
        $t = 0;
        $start_time = microtime(true);
        for($i=0; $i&lt;$time; $i++){
            $start = $basic*$t++;
            self::section($start, $basic);
        }
        $end_time = microtime(true);
        echo '耗时'.round($end_time-$start_time,3).'秒';
        echo "<a href='/files/excel/{$this->filename}'>点击下载</a>";
    }   //}}}
    private function section($start, $limit){   //用分页的方式取出数据并写入文件{{{
        $sql = "select * from {$this->table} limit $start, $limit";
        $result = $this->db->query($sql)->result_array();
        $new_result = self::mapping($result);
        $file = $this->file.$this->filename;
        $open = fopen($file, 'a');  //以追加模式打开文件
        foreach($new_result as $r){
            fputcsv($open, $r);
        }
        fclose($open);
        $end = $start+$limit;
        echo "第 $start ~ $end 处理完成...<br />";
        ob_flush();
        flush();
    }   //}}}
    private function mapping($array){   //结果集转换成新的数组{{{
        $new_array = array();
        foreach ($array as $arr){
            $tmp_array = array();
            foreach($arr as $k){
                $tmp_array[] = $k;
            }
            $new_array[] = $tmp_array;
        }
        return $new_array;
    }   //}}}
}
?>

nginx下wordpress上传文件提示无法移动

想上传张图片,结果报错了

QQ截图20130518185313

按照以往思路开始排查

  • 先修改图片格式及文件名,依旧上传失败.

难道是服务器设置问题?

  • 排查文件夹权限.

查看 wp-contents 下uploads权限, 755, 没有问题.

查看 /tmp 权限, 没问题.


  • 上次重启fastcgi,用户组参数没生效,但网站访问正常,所以也就没有在意.

    究其原因,是由于 php5-cgi 未使用 www-data 用户组来启动导致.

解决方法如下
killall php5-cgi

/usr/bin/spawn-fcgi -p 9000 -a 127.0.0.1 -C 4 -u www-data -g www-data -f /usr/bin/php5-cgi

上传成功,问题解决.

一直用源安装环境,很少在意用户组问题,看来手动编译还是有必要的.

URL安全传递base64编码

URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式而导致解码失败,可以替换相关字符来达到安全传递的目的.

<?php
    function base64_url_encode($input)    {
        return strtr(base64_encode($input), '+/=', '-_,');
    }

    function base64_url_decode($input)    {
        return base64_decode(strtr($input, '-_,', '+/='));
    }
?>

Copyright © 2016 yjiang's cake

返回顶部