表示 进入内容 17
Displaying posts with tag: 花荣在写PHP代码 (reset)
Vector Quantization with PHP

最近看到某同学在串讲k-means, 而且说它是很简单的一个聚簇算法,于是就抽空google了一下,发现还真的很简单,而且有点意思。
于是参考了一些文章和代码,自己用php写了一个demo。

参考:

http://scikit-learn.org/stable/auto_examples/cluster/plot_color_quantization.html

http://www.medphysics.wisc.edu/~ethan/kmeans/kmeans.zip

http://en.wikipedia.org/wiki/Vector_quantization

<?PHP
/**
 
 
1) load image,W*H*C
 
2) turn into   (W*H, C)
 
3) sample 1000 pixels
 
4) kmeans sample data and  get 64 centers.
 
5) divide real data into 64 groups
 
6) output
 
 
 
*/
 
class A {
        private $is_debug = true;
        private $file_name;
        private $output_file_name;
        private $im;
        private $width;
        private $height;
        private $d = 3; //RGB
        private $data ;
        private $sample_count = …
[获取更多]
评: PHP foreach 是如何遍历数组的

评: PHP foreach 是如何遍历数组的

在qq群中看到下面的文章:

http://www.blogkun.com/php/2014/02/08/how-foreach-work/

作者在文中介绍了array在PHP中的结构(zval):HashTable.
然后罗列了若干test case,从不同角度去理解foreach的机制:

reset();
while (get_current_data(&data) == SUCCESS) {
        move_forward();
        code();
}

结论是:

1) 数组的refcount__gc为1,is_ref__gc为0,那么foreach并不会复制zval;
2) 数组的refcount__gc>1,is_ref__gc为0,那么foreach将会复制zval;
3) 数组的is_ref__gc为1,那么foreach并不会复制zval;

看完文章之后,我对结论 2) 提出了更深层次的疑问,也就是作者文中的[附加的一个问题]:

[获取更多]
Php5.5 与 thinkphp
$str = "11111aaaaaa";
 
 
function tr($s) {
        return "222222";
}
 
$a = preg_replace('#(\d+)#e', "tr('\\1')", $str);
print $a.PHP_EOL;
 
 
$b = preg_replace('#(\d+)#', '3333333', $str);
print $b.PHP_EOL;
[root@www php550]# ./bin/php -v
PHP 5.5.0 (cli) (built: Jul  2 2013 10:23:21) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0-dev, Copyright (c) 1998-2013 Zend Technologies
[root@www php550]# 
[root@www php550]# ./bin/php ./test.php 
PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/php550/test.php on line 10
 
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/php550/test.php on line 10
222222aaaaaa
3333333aaaaaa

/e 已经被废弃了, 而thinkphp中大量使用了这个 /e…

转载也不必注明出处。 …

[获取更多]
php setcookie时value为null或空字符串,会删除此cookie

php setcookie时value为null或空字符串,会删除此cookie

长久以来,在php中删除cookie的时候,都是使用
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

$value 随便写, $expire设置为一个已经过去的时间即可。

官方文档中也是这样写的:

http://www.php.net/manual/en/function.setcookie.php

Example #2 setcookie() delete example
When deleting a cookie you should assure that the expiration date is in the past, to trigger the removal mechanism in your browser. Examples follow how to delete cookies sent in previous example:
<?php
// set the expiration date to one hour ago
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
?>

[获取更多]
php memcached Consistent Hashing

php memcached Consistent Hashing

php连接memcache服务器的时候,最初我们只是按照业务来划分不同的memcache服务器。
后来随着流量的增加, 有些业务需要更多台memcache服务器做缓存的负载均衡。
为了增加缓存的命中率,最好是在均衡分布的基础上保证同一个key只对应一台cache服务器(貌似这个说法不太专业…)。
算法也很简单,假设cache服务器数量为N, 我们只要把key转化成int或者long(比如做个md5),然后mod N就可以了。
恩,看起来很正常,很靠谱。
直到有一天,其中一台cache服务器挂了。于是mod N 变成了 mod N-1。
代价?由于N变成了N-1,mod之后,大量的key对应的cache服务器都发生了变化, 缓存命中率大幅度降低。
添加新服务器的时候,也会有这种现象存在。
看个简单的例子, 现在有1 2 3 4四份数据, …

[获取更多]
在php中使用crypt函数的注意事项

在php中使用crypt函数的注意事项

提起crypt,熟悉linux的童鞋肯定想到了用户密码保存到/etc/shadow时,就使用了这个函数进行加密。
centos5.8使用的是CRYPT_MD5方式,centos6.2使用的是CRYPT_SHA512方式。

在php开发时,很多系统也会使用crypt来加密用户密码,然后保存到mysql中。

下面讲几点使用crypt的注意事项:
1) 一定要使用随机的salt.
有些人,为了设计和开发上的简便,整个系统都使用同一个salt。这其实算是一种比较严重的错误。
可能他们认为,如果使用随机salt, 那么salt也肯定要保存到数据库中, 如果被爆库,加密后的密码与salt同时泄露, 使得暴力破解成为可能;与其这样,还不如让salt全局唯一,然后保存到php文件中,这样至少在爆库后,攻击者在不知道salt的情况下,无法进行暴力破解。

[获取更多]
php中的filter_var函数远没有想像中好用

php中的filter_var函数远没有想像中好用

http://www.d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/

php5.2开始,添加了一个新函数filter_var:

      mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )

如果$variable可以通过某条规则,就原样返回,
如果不通过,就返回false.

可以使用它对数据进行检测:

      var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
//string(15) "bob@example.com"
 
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
//bool(false)

支持的filter可以在这里看到:

http://php.net/manual/en/filter.filters.validate.php

[获取更多]
表示 进入内容 17