Profilo di 磊Mrgaolei的BlogFotoBlogElenchi Strumenti Guida

Blog


16 gennaio

PHP 计算权重算法

假设有一堆服务器,我根据他们的配置给他们打分,想通过一个函数,随机的到一个服务器实例,当然不是百分百随机,而是配置越高的服务器得到几率越高,这就是权重。写了半天写出来了个算法,不过目前还有有一点Bug,就是权重值不能有重复的,否则重复的永远不会得到。

<?php
/**

* 权重DEMO
*/

$data = array(
    array('server1', 5),
    array('server2', 10),
    array('server3', 5),
    array('server4', 7),
    array('server5', 3),
    array('server6', 31)
);
var_dump(checkWeight($data));

function checkWeight($data) {

    # 权重和
    $sum = 0;
    # 权重值不能有负数
    foreach ($data as $val) {
        if ($val[1] < 0) return false;
        $sum += $val[1];
    }

    # 根据权重数排序
    $sorted = true;
    while ($sorted) {
        $sorted = false;
        for ($i = 0; $i < count($data) - 1; $i ++) {
            if ($data[$i][1] < $data[$i + 1][1]) {
                swapvar(&$data[$i], &$data[$i + 1]);
                $sorted = true;
            }
        }
    }

    # 产生随机数,最小1,最大权重和
    $randnum = rand(1, $sum);
    echo $randnum;
    # 如果随机数大于等于最大值,返回最大
    if ($randnum >= $data[0][1]) return $data[0][0];
    # 如果随机数小于最小值,返回最小
    if ($randnum < $data[count($data) - 1][1]) return $data[count($data) - 1][0];
    for ($i = 0; $i < count($data) - 1; $i ++) {
        if ($randnum < $data[$i][1]) $current = $data[$i+1][0];
    }
    return $current;
}

function swapvar(&$var1, &$var2) {
    $tmpvar = $var1;
    $var1 = $var2;
    $var2 = $tmpvar;
}

14 gennaio

PHP 5.2.1 参数类型不能定义成基础类型的问题

在PHP 5.2.5中,可以按照如下方法声明函数

function getProductById(int $id);

而在PHP 5.2.1中,调用时则会报错,具体原因未知。

11 agosto

php通过ADO在Windows下操作Access数据库范例

<?php //读取mdb数据库例程
$conn = new com("ADODB.Connection");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("data/db.mdb");

$conn->Open($connstr);
$rs = new com("ADODB.RecordSet");
$rs->Open("select * from [table1]",$conn,1,1);
while(! $rs->eof) {
$f = $rs->Fields(1);
echo $f->value;
$rs->MoveNext();
}
?>
14 maggio

网站负载承受力差又一波——网民捐款挤瘫红十字会与基金会两大网站

这说明了什么?
系统架构师对一个Web项目来说多么重要。
18 aprile

今天在rhel4下编译apache+php使其支持gd库的感想

以前一直认为是个很繁琐的过程,编译php的时候需要加一大堆的参数,弄不好就要出错。今天静下心来好好琢磨了一下,原来只要gd库安装好了,php编译的时候只需要--with-gd={GD库的路径}就可以了,无需--with-png-dir={} --with-jpeg-dir={}等等一大堆。
今天在装好gd库的前提下,只用了下面的简单命令,就装好了。
'./configure' \
'--with-apxs2=/usr/local/apache2/bin/apxs' \
'--with-mysql=/usr/include/mysql/' \
'--enable-mbstring' \
'--with-gd=/usr/lib'
08 aprile

写了一个PHP5的连接数据库类,支持分页,面向对象

<?php
class Database {
    private $host = "localhost";
    private $schema = "hgcms";
    private $username = "hgcms";
    private $password = "123456";
    private $connected = false;
    private $conn = null;

    /**
     * Database 类 构造方法
     *
     * @param string $host
     * @param string $schema
     * @param string $username
     * @param string $password
     */
    public function __construct($host = null, $schema = null, $username = null, $password = null, $autoConn = true) {
        $host        == null ? $host        = self::getHost()        : $host = $host;
        $schema        == null ? $schema    = self::getSchema()        : $schema = $schema;
        $username    == null ? $username    = self::getUsername()    : $username = $username;
        $password    == null ? $password    = self::getPassword()    : $password = $password;
        self::setHost($host);
        self::setSchema($schema);
        self::setUsername($username);
        self::setPassword($password);
        if ($autoConn) self::connect();
    }
   
    /**
     * connect()
     *
     */
    public function connect() {
        if ($this->connected) return;
        $conn = @mysql_connect(self::getHost(), self::getUsername(), self::getPassword()) or die("Error Database unavaliable!");
        self::setConn($conn);
        mysql_select_db(self::getSchema(), self::getConn()) or die("Error Select db!");
        mysql_query("set names 'GBK'");
        $this->connected = true;
    }
   
    /**
     * execute($sql) without resultset
     *
     * @param string $sql
     * @return resource
     */
    public function execute($sql) {
        #echo "<h1>" . $sql . "</h1>";
        $result = @mysql_query($sql, self::getConn()) or die("Cann't execute T-SQL : <br />\n $sql");
        return $result;
    }
   
    /**
     * executeCount($sql)
     *
     * @param string $sql
     * @return integer
     */
    public function executeCount($sql) {
        $sql = str_replace("*", "count(*) as count", $sql);
        $result = self::executeQuery($sql, 0);
        return $result[0]->count;
    }
   
    /**
     * executeQuery($sql) with resultset
     *
     * @param string $sql
     * @param integer $pageSize
     * @param integer $page
     * @return object
     */
    public function executeQuery($sql, $pageSize = 20, $page = 1) {
        $array = array();
        # 开始分页处理
        if ($pageSize != 0) {
            $recordCount = self::executeCount($sql);
            $pageCount = intval($recordCount / $pageSize);
            if ($recordCount % $pageSize) $pageCount ++;
            if (isset($page) && intval($page) > 0){
                $page = intval($page);
            } else {
                $page = 1;
            }
            if ($page > $pageCount) $page = $pageCount;
            $offset = $pageSize * ($page - 1);
            $limit = " limit $offset, $pageSize";
            $sql.= $limit;
        }
        # 分页处理结束
        $result = self::execute($sql);
        while ($rs = mysql_fetch_object($result)) {
            $array[] = $rs;
        }
        return $array;
    }
   
    /**
     * getHost()
     *
     * @return string
     */
    public function getHost() {
        return $this->host;
    }
   
    /**
     * setHost($host)
     *
     * @param string $host
     */
    public function setHost($host) {
        $this->host = $host;
    }
   
    /**
     * getSchema()
     *
     * @return string
     */
    public function getSchema() {
        return $this->schema;
    }
   
    /**
     * setSchema($schema)
     *
     * @param string $schema
     */
    public function setSchema($schema) {
        $this->schema = $schema;
    }
   
    /**
     * getUsername()
     *
     * @return string
     */
    public function getUsername() {
        return $this->username;
    }
   
    /**
     * setUsername($username);
     *
     * @param username $username
     */
    public function setUsername($username) {
        $this->username = $username;
    }
   
    /**
     * getPassword()
     *
     * @return string
     */
    public function getPassword() {
        return $this->password;
    }
   
    /**
     * setPassword($password)
     *
     * @param string $password
     */
    public function setPassword($password) {
        $this->password = $password;
    }
   
    /**
     * getConn()
     *
     * @return resource
     */
    public function getConn() {
        return $this->conn;
    }
   
    /**
     * setConn($conn)
     *
     * @param resource $conn
     */
    public function setConn($conn) {
        $this->conn = $conn;
    }
   
   
}
?>
15 luglio

终于搞定了PHP5最新版本链接Oracle9i或者更低版本的数据库

由于公司数据库服务器是Oracle9i,现在要做一套管理系统,需要用PHP链接公司数据库,费了半天劲启动不了OCI8.dll。从网上查了很多资料,原来PHP从5.12(大概是这个版本)已经放弃了Oracle10G以下版本的客户端连接。也就是说PHP5.12版本里面的OCI8.dll只支持链接Oracle10G或者更高版本,我的Oracle9i肯定不行了。网上也有一些解决方案,甚至找到了有人说需要反编译dll文件,我狂晕……
经过n次重装系统,发现了一个免费的好方法:
去Oracle官方网站下载免费的Oracle10G Client,(不是XE,那个只有SQLPlus),然后将9i的服务加入到树就可以了。重启Apache,PHP成功打开OCI8支持。