魏长东

weichangdong

东邪

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

tp5解决数据表大写的问题

别的的数据表叫taskConf,tp解析之后成了,task_conf了,看了源码,
找到了 
thinkphp/library/think/Loader.php文件的这个函数,改了之后就OK了.
parseName

public static function parseName($name, $type = 0, $ucfirst = true)
    {
        if ($type) {
            $name = preg_replace_callback('/_([a-zA-Z])/', function 
            ($match) {
                return strtoupper($match[1]);
            }, $name);
            return $ucfirst ? ucfirst($name) : lcfirst($name);
        } else {
            // 这个if是我加的
            if(in_array($name,Config::get('sp_mysql_tables'))){
                return $name;
            }
            return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));

        }
    }

php好的资源汇总

copy from http://php-note.com/article/detail/845

最近1年多了,都没咋正经的搞php了,都去搞lua,golang去了.

以后这个还得加强啊.php是世界最好的语言,我一直坚信.

依赖管理

——用于依赖管理的包和框架

Composer/Packagist : 一个包和依赖管理器

Composer Installers:  一个多框架Composer库安装器

Pickle: 可以在任意平台上安装PHP扩展包

»»阅读全文

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命令行的形式就不行了.