魏长东

weichangdong

正在查看: php 分类下的文章(第 1 页 / 共 94 篇)

php array_multisort

<?php
$uploaded_img_files=[];
$uploaded_img_files[] = [
                            'full_name' => '3.jpg',
                            'extension' => 'jpg',
                            'file_name' => '3',
                            ];
$uploaded_img_files[] = [
                            'full_name' => '1.jpg',
                            'extension' => 'jpg',
                            'file_name' => '1',
                            ];
$uploaded_img_files[] = [
                            'full_name' => '2.jpg',
                            'extension' => 'jpg',
                            'file_name' => '2',
                            ];
                            
        
        $uploaded_img_files[] = [
                            'full_name' => '7.jpg',
                            'extension' => 'jpg',
                            'file_name' => '7',
                            ];   



//array_multisort ( $uploaded_img_files [ "file_name" ],  SORT_NUMERIC ,  SORT_DESC );


          foreach ($uploaded_img_files as $key => $v) {
            $need_sort[$key] = $v['file_name'];
          }          
          array_multisort ( $need_sort , SORT_NUMERIC, SORT_ASC , $uploaded_img_files );     
             
                          //  print_r($uploaded_img_files);
                 
$str = 'http://sanguofengyun.i.wcd.com/sticker/6_149742815654.png,
http://sanguofengyun.i.wcd.com/sticker/5_149742815683.png,
http://sanguofengyun.i.wcd.com/sticker/4_149742815730.png,
http://sanguofengyun.i.wcd.com/sticker/3_149742815853.png,
http://sanguofengyun.i.wcd.com/sticker/2_149742815889.png,
http://sanguofengyun.i.wcd.com/sticker/1_149742815996.png';
          
          $wcd = explode(',',$str);
          $need_sort=[];
     foreach ($wcd as $key => $v) {
        $tmp = explode('/',$v);
        $tmp = array_pop($tmp);
        $seq_name = explode('_',$tmp)[0];
        
            $need_sort[$key] = $seq_name;
          }          
          array_multisort ( $need_sort , SORT_NUMERIC, SORT_ASC , $wcd ); 
          print_r($wcd);                    

ThinkPHP运算符与mysql运算符 对照表

ThinkPHP运算符 与 SQL运算符 对照表
TP运算符	SQL运算符	例子	实际查询条件
eq	=	$map['id'] = array('eq',100);	等效于:$map['id'] = 100;
neq	!=	$map['id'] = array('neq',100);	id != 100
gt	>	$map['id'] = array('gt',100);	id > 100
egt	>=	$map['id'] = array('egt',100);	id >= 100
lt	<	$map['id'] = array('lt',100);	id < 100
elt	<=	$map['id'] = array('elt',100);	id <= 100
like	like	$map<'username'> = array('like','Admin%');	username like 'Admin%'
between	between and	$map['id'] = array('between','1,8');	id BETWEEN 1 AND 8
not between	not between and	$map['id'] = array('not between','1,8');	id NOT BETWEEN 1 AND 8
in	in	$map['id'] = array('in','1,5,8');	id in(1,5,8)
not in	not in	$map['id'] = array('not in','1,5,8');	id not in(1,5,8)
and(默认)	and	$map['id'] = array(array('gt',1),array('lt',10));	(id > 1) AND (id < 10)
or	or	$map['id'] = array(array('gt',3),array('lt',10), 'or');	(id > 3) OR (id < 10)
xor(异或)	xor	两个输入中只有一个是true时,结果为true,否则为false,例子略。	1 xor 1 = 0
exp	综合表达式	$map['id'] = array('exp','in(1,3,8)');	$map['id'] = array('in','1,3,8')

php多进程神功

用php的pcntl_fork 实现多进程感觉挺麻烦的。

最近发现swoole除了tcp socket udp之类的,还可以实现多进程,太帅了。

另外workerman,实现的网页推送效果也非常的赞!!!但是他的多进程咋用,暂时还么研究。

下面是swoole的多进程测试。

思路是:给redis的list push 100w数据,然后常规的pop,耗时一般是32妙,然后使用swoole,如果进程数量是1,也是32妙,但是进程数量改成2的话,时间就是16秒了。

造数据

<?php
$redis = new redis();
$redis->connect("127.0.0.1");
for($i=0;$i<1000000;$i++){
	$redis->lpush("test_swoole",$i);
}
echo $redis->llen("test_swoole");

»»阅读全文

开发利器

nc 发送请求到指定端口
netstat /tcpdump 查看网络请求

strace 调试程序,可以看见程序每一步的输出之类的。

另外发现了一个 Linux比较好的工具 inotify-tools。我本地mac也装了一个类似的,但是没有linux下的好。
图片处理 mac装了 gm  convert  和convert  感觉好牛逼啊 。很好用。

lua和php运行速度

在网上看到一篇文章,同样的功能用集中语言实现,然后执行比较速度。其中有我喜欢的php和正在学习的lua,就把代码搞到自己的机器上运行了,lua比php慢,但是luajit却快了十倍,让我开始喜欢luajit了。我喜欢一个语言,很简单,只需要一个简单的理由。

这是执行时间

php time:17811.112880707ms php5.6

lua time:31530ms lua5.14

luajit time:2790ms

检测你的nginx是否使用了jit

ldd /usr/local/openresty/nginx/sbin/nginx

下面上代码

»»阅读全文

qconf 批量添加配置

<?php
//之前是代码写死配置的,要让用qconf,但是一个一个的添加太麻烦,就写这个小工具。把之前代码要用的fb数据抓取信息都添加到qconf里面。

$qzk = new QConfZK("*:2181");
//$value = $qzk->nodeGet("/common/products/wcd/uiver");
//print_r($value) . PHP_EOL;

$app_info_old = [
        9 => ['app_id' => '*******************','token' => '*******************|kdn-***-zuiqCjXkf97I'], //
        8 => ['app_id' => '*******************','token' => '**********************************'], //
		10 => ['app_id' => '*******************','token' => '**********************************'],//
		30001 => ['app_id' => '*******************','token' => '**********************************'],//
        10000 => ['app_id' => '*******************', 'token' => '*******************|***--Ps7EezCrc'],//
        //20000 => ['app_id' => '*******************', 'token' => '**********************************'],//
		20000 => ['app_id' => '*******************', 'token' => '**********************************'],//
		20001 => ['app_id' => '*******************', 'token' => '*******************|alaGob-***-EzLsWG5gxKE'],//
	  20 => ['app_id' => '*******************','token' => '**********************************'],// 
	  21 => ['app_id' => '*******************','token' => '**********************************'],//
      23 => ['app_id' => '*******************','token' => '*******************|***-wuZI'],//
	  10023 => ['app_id' => '*******************','token' => '**********************************'],//
	  24 => ['app_id' => '*******************','token' => '**********************************'],//
	  25 => ['app_id' => '*******************','token' => '**********************************'],//
    ];

$path = '/common/products/';
$all_product = $qzk->list($path);
foreach ($all_product as  $pc) {
	if ($pc != 'wcd_test'){
		//continue;
	}
	$wcd = $qzk->listWithValue($path.$pc);
	$appid = $wcd['appid'];
	if (!isset($app_info_old[$appid])){
		continue;	
	}
	$qzk->nodeSet($path.$pc.'/fb_app_id',$app_info_old[$appid]['app_id']);
	$qzk->nodeSet($path.$pc.'/fb_token',$app_info_old[$appid]['token']);
	$qzk->nodeSet($path.$pc.'/fb_online',1);
	$get_value = $qzk->listWithValue($path.$pc);
	print_r($get_value);
}

test

[need password!]

php获取linux的env 然后使用不同config内容

 /etc/profile.d/env.sh
REGION=AP
export REGION

php-fpm配置文件中
env[REGION] = $REGION

有一种简单的实现方式,是在nginx配置中配置,但是这样代码可以获取,php命令行的形式就不行了.

最近开发的新项目

前一阵子开发了360天气,本来打算用lua的,最后感觉进度很紧,就还用php了,用了新的php框架yaf,第一次用,然后主要是redis和elastic search。es主要的geo经纬度的定位和搜索,算是es入了门。

最近有开发了新的项目,播客。这个api我用lua的openresty、lor,redis。后台我用php的thinkphp框架,这个框架接触很久了,用在实际工作中,也是第一次。然后还用到了mongodb,这个算是第二次使用,估计仅仅算是入了门,mysql。也催的非常紧。这次尝试使用lua,感觉适合做api的开发。但是这次没有采用加密,如果使用的话,不知道这个lua能调试通不,360天气使用的aes的加密。

yii1扑捉php错误

因为php环境可能配置的不是很完善,php的500错误,只是表现在nginx的access日志,一直以为是redis处理不过来(每秒请求1300)。

最后发现是代码迁移过程中,php版本变化了,有带吗报错,但是没有显现出来。通过下面这个方法,直到了是有php报错,然后很快就修复了,问题解决了。

public function actionError()
{
    if($error=Yii::app()->errorHandler->error)
        $this->render('error', $error);
}