魏长东

weichangdong

东邪

正在查看: 2015年04月日志归档(第 2 页 / 共 22 篇)

mysql的IN查询的数量限制

有个需求,给了一张excel表,一行847个uid,让我再数据表查询出对应uid的另一个数据。

开始想写个程序循环查,但是嫌麻烦。就想直接select  *  from  table where uid IN (1,2,3,4,5........);然后把id都弄成逗号分割,拼接成sql,放到一个sql文件。因为这个sql太长了,不好从win下复制粘贴到linux。就rz传上去,然后命令行下用source sql文件来执行,执行结果直接into outfile了。

但是查询出来的结果总数和uid的总数差3-40呢,然后第一想法就是:是不是sql的IN 里面的数据太多了。就把之前的sql分解了下,分解成两个,然后再次执行,发现结果的总数虽然多了点但是还是不够。然后我就继续分解sql,妈蛋,发现总数虽然增多,但是还是不够。

好吧,我就放弃了。如是写了程序搞定之。

但是在网上查询了下,都说IN没有数量限制。好吧,我也不清楚,难道是因为我是source执行的sql文件的原因???还有IN具体的最大个数,我也不知道。因为是在正式环境上,我也不好继续在折腾了。何况运营还等着要数据呢。

select timediff('2015-04-07 20:28','2015-04-08 11:28'); //返回两个时间的差值

php的socket学习笔记

用php的socket实现了:

客户端发送信息=》服务器收到信息=》客户端收到服务器的返回信息=》显示出来

代码是网上copy别人的,自己搭建环境执行了下。

server.php 服务端文件

<?php
error_reporting(E_ALL);
set_time_limit(0);
//ob_implicit_flush();
$address = '127.0.0.1';
$port = 10005;
//创建端口
if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
	echo "socket_create() failed :reason:" . 
socket_strerror(socket_last_error()) . "\n";
}
//绑定
if (socket_bind($sock, $address, $port) === false) {
	echo "socket_bind() failed :reason:" . 
socket_strerror(socket_last_error($sock)) . "\n";
}
//监听
if (socket_listen($sock, 5) === false) {
	echo "socket_bind() failed :reason:" . 
socket_strerror(socket_last_error($sock)) . "\n";
}
do {
	//得到一个链接
	if (($msgsock = socket_accept($sock)) === false) {
		echo "socket_accepty() failed :reason:".
socket_strerror(socket_last_error($sock)) . "\n";
		break;
	}
	//welcome  发送到客户端
	$msg = "<font color='red'>server send:welcome</font><br/>";
	socket_write($msgsock, $msg, strlen($msg));
	echo 'read client message\n<br />';
	$buf = socket_read($msgsock, 8192);
	$talkback = "received message:$buf\n<br/>";
	echo $talkback;//在服务端命令行可以看到的此输出
	if (false === socket_write($msgsock, $talkback, strlen($talkback))) {
		echo "socket_write() failed reason:" . 
socket_strerror(socket_last_error($sock)) ."\n";
	} else {
		echo 'send success';//在服务端命令行可以看到的此输出
	}
	socket_close($msgsock);
} while(true);
//关闭socket
socket_close($sock);
?>

»»阅读全文

php长连接workerman学习

在linux虚拟机环境下安装了workerman,开始不知道从哪开始,最后自己搞了几个文件,折腾出了几个效果。

虽然暂时不知道内部代码是咋实现的,但是表面的应用层算是知道了点皮毛。

启动的效果(因为是监听不同的端口,所以虽然启动了两个,也不冲突,I think)。

workerman-0.jpg

显示http的形式:
建立了一个http.php文件。代码都是来自workerman的说明文件。

<?php
require_once './Workerman/Autoloader.php';
use Workerman\Worker;

// #### http worker ####
$http_worker = new Worker("http://127.0.0.1:10000");
$http_worker->count = 4;
$http_worker->onMessage = function($connection, $data)
{
    // send data to client
    $connection->send("hello world $data\n");
};

// run all workers
Worker::runAll();
我的理解是当127.0.0.1的10000端口有数据的话,就会给他返回hello world加上发送过来的数据(经自己
测试,还会返回http的头信息)。

»»阅读全文

nginx网站配置别的端口

想折腾下网站端口的事情,把默认的80端口改成别的端口。发现很简单。只是把nginx配置的

 listen 80;改成你想改的端口(当然这些端口别被别的程序占用了)

我改成 listen 8080;

»»阅读全文

今日将旗举,明日取龙城

既然选择了,就努力向前。就像魁拔中蛮吉说的,一路向前!向前!向前!

从来没有低估前方路的艰险性,但是穷则思变,种种原因,自己久留无益。

不管是福是祸,既然没有退路,就拼力一搏。纵然伤痕累累,那也是为自己的无能,自己的弱小买单。

失了港湾,就得杨帆,走脚下的征途。

安逸了这么久,焦躁了这么久,该是一个了结的时候了。

此战偃旗息鼓,下一站再见。

延迟输出ob_start学习

有时候处理问题,比如对好多uid循环处理,然后逐个输出处理uid的结果,ok或者error。

除了直接输出以外,还可以延迟输出。

ob_start();
for ($i=0;$i<10;$i++) {
    echo "$i<br />";
}
$buffer = ob_get_contents();
ob_end_clean();
echo 'hello'.PHP_EOL.$buffer;//会输出for循环的内容
//echo 'hello'.PHP_EOL;这里不会输出for循环的数据

php安装protobuff和运用

git clone https://github.com/allegro/php-protobuf/ ,把文件下载下来。

然后mv或者cp到/usr/local/php/include/php/ext/目录(安装php扩展的目录)下

cd进去,pwd

/usr/local/php/include/php/ext/php-protobuf

phpize 
./configure 
make && make install 

然后

php -m|grep pro

protobuf   //有这个扩展

然后开始实际应用 

»»阅读全文

Windows下使用Composer安装yii2

YII简介

Yii Framework是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。Yii是最有效率的PHP框架之一。Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。

Composer简介

Composer 是PHP中用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮你安装这些依赖的库文件。

Windows安装Composer:

一、下载Composer

官网下载:https://getcomposer.org/download/

二、开启PHP的openssl支持

修改D:\WAMP\bin\php\php5.4.12配置文件php.ini

去掉注释;

三、安装Composer

一路"next"安装完毕。

安装完毕会提示你重新打开CMD命令行使用。

安装Yii2 - advanced 模板

一、下载yii2 - advanced 模板

官网下载:http://www.yiiframework.com/download/

下载完毕解压至
C:\xampp\htdocs\

二、通过composer安装

打开CMD,跳转到目录
C:\xampp\htdocs\yii2

我们来生成一个名为“yii2wcd”的app。

输入命令:

composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced ../yii2wcd

等待… …出现如下界面,表示安装成功。

»»阅读全文

php的invoke和invokeArgs函数

看一个框架,没有往常框架的先new一个类,然后执行method,原来是通过 ReflectionMethod的invoke和invokeArgs函数实现的。直接把手册的例子拿来了。

<?php
class HelloWorld {

    public function sayHelloTo($name) {
        return 'Hello ' . $name;
    }

}

$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invokeArgs(new HelloWorld(), array('Mike'));
?>

执行输出:Hello Mike

»»阅读全文

php集成环境xampp小技巧

装了xampp,第一个问题是使用MySQL的PHPmyadmin,能浏览数据库的表,但是看不了数据表的结构,提示token验证不符,解决方法是:

将你的服务器根目录下的【phpMyAdmain】文件夹的名称改成【phpmyadmin】。

如是操作问题解决。

第二个问题是,mysql通过命令行没法插入中文,也没法显示,就算从PHPmyadmin插入中文了,显示也是乱码,解决的方案是:

在phpmyadmin中的【操作】修改【排序规则】,把对应的库改成常用的utf8_general_ci。要是还是不行,就修改phpmyadmin的服务器连接排序规则。也改成上面的那个。