标签 PHP 下的文章

php mail函数发邮件标题和发件人乱码问题解决办法


使用mail方法发信时,如果标题或发件人含有中文就会造成乱码,而正文不会。解决办法如下

首先在报文头加入声明

//如果你的网站是GBK,下面将utf-8改为gbk
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

然后在需要使用中文的地方将中文进行如下转移

//如果你的网站是GBK,下面将utf-8改为gb2312
//例如标题
$subject = "新密码通知信";
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
//例如发件人
$headers .= 'From: =?UTF-8?B?'.base64_encode("某某网站").'?=<service@apieye.com>' . "\r\n";

php 自设公式计算思路


背景简介:
1.由公式去计算一些数字,如工资计算
2.方便后期维护,易修改公式

鉴于上述两点,在程序中写死公式就显得不妥,于是有了下面的思路,使用字符串型的公式进行计算:
1.可以设置一些科目,如科目1、科目2
2.由1中设置的科目来编写公式(通过加减乘除以及任何php可以识别的数学方法),简单例子如可以设置为 "[科目1]+[科目2]"
3.计算时通过str_replace方法将科目变为程序中的变量
4.最终就生成了程序可以使用的公式如$p1+$p2
5.计算,使用eval方法 $result = eval("return $p1+$p2;");

其他说明:
仅用加减乘除会无法实现一些公式计算,如计算个人所得税不同基数公式不同,那么可以使用形如 "[税前工资]>3500?(xxx计算公式):0"这样的公式来进行计算。
某些环境会禁用eval,那么就需要开放。

缺点:
公式错误程序会报错,可编写方法验证公式语法的正确性。


ftp_connect方法无法连接FTP服务器的解决办法


最近做了个关于PHP连接FTP服务器的小功能,发现一些FTP服务器用客户端可以连接但是PHP程序却无法连接。再排出网络问题外,最后得出结论如下:

首先介绍一下连接FTP服务器的两种工作模式:

主动模式的ftp是这样的;客户端从一个任意的非特权端口连接到ftp服务器的命令端口(21),然后客户端开始监听端口,并发送ftp命令到ftp服务器。服务器从它自己的数据端口20连接到客户端指定的数据端口。
被动模式ftp中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口,并发送PORT P命令给客户端。然后客户端发起从本地端口到服务器的端口的连接用来传送数据。

这些ftp服务器并非直接建立在公网,而是建设在内网通过端口映射的方式可使公网访问。也就是说必须采用主动模式访问,因为服务端仅有21端口映射到了公网。而php_connect默认为被动模式,所以调用ftp_pasv方法即可,具体如下:

$conn = ftp_connect("ftp.testftp.com") or die("Could not connect");
ftp_login($conn,"admin","ert456");
ftp_pasv($conn,FALSE);
ftp_close($conn);

PHP 数组转字符集编码


直接上代码~

   /**
     * 数组转编码
     * @param array $array 待转码数组
     * @param String $inCharset 原编码
     * @param String $outCharset 转换后的编码
     * @return $array 转换后的数组
     */
    private function arrayCoding ($array, $inCharset, $outCharset) {
        if (!is_array($array))
            return false;
        foreach ($array as $key => &$value) {
            if (is_array($value)) {
                $value = $this->arrayCoding($value, $inCharset, $outCharset);
            } else {
                $value = iconv($inCharset, $outCharset, $value);
            }
        }
        return $array;
    }

php 平均跳转到多个网址的代码


这是最简单的负载均衡了。。大家可以试试。

$url[0] = "http://www.hao123.com/"; 
$url[1] = "http://www.baidu.com/ "; 
$url[2] = "http://www.google.cn/ "; 

srand ((double)microtime()*1000000); //这句是取一个随机数种子,产生随机数用的 
$randomnum = rand(0, count($url)-1); //这句是产生一个0和url数量-1之间的随机数,也就是上面的地址数组的下标
header ("Location: $url[$randomnum]"); //这句是跳转指令