X

由于无法提供服务器的高昂费用,博客即将迁移到github pages...

点击右上的X可以临时关闭此框并阻止跳转^_^

现在带您过去 秒后跳转...

我是如何将mac OS X(10.11.6)的PHP版本升级到5.6.29的


    由于项目和学习的需要,本机曾经升级到了5.5.38已经不够折腾了,所以时候升级一波5.6了(没必要到7的时候,我是不会去升级的)。
    首先直接去搜索引擎找便捷的方法呗,直接就选中了一款来自“简书”的文章,因为它就简单的一条命令:

    curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6
    

    看到这个地址,我心里就放心了!因为上一个版本也是liip的。
    我首先看了一下这个install.sh的内容,确定没有什么危险,里面其实就是检测一下设备的系统版本和cpu类型是否可以升级。
    环境检测没问题就去下载了一个叫做“packager.tgz”的压缩包,然后解压,运行里面的pythony脚本。

    #TYPE = 5.6-10.10
    sudo packager.py install $TYPE-frontenddev
    

    (…继续阅读这篇文章…)

实现寻找两个字符串的最大公子串的方法

    昨天在做土巴兔的校招笔试题的时候遇到的题目,就这一个编程题,然而当时却没有拿下,把它和字符串匹配中的子串包含给弄混了,哎!
    废话少说,上代码!

     $maxlen){	//当本次计数长度大于最大记录时
                        $maxlen = $count;	//更新最大计数长度
                        $start1 = $i;		//更新本次比较的字符串1起点
                        $start2 = $j;		//更新本次比较的字符串2起点
                    }
                }
            }
        }    
        return substr($str1,$start1,$maxlen);	//直接返回字符串1,从$start1起点往后$maxlen最大匹配长度个数的子串
    }
    
    $str1 = 'abcdefgabc';
    $str2 = 'defghijabc';
    echo MaxSubCommonStr($str1,$str2);
    ?>
    

    没什么含金量,只是写出来练练手,思路照搬过来的。

PHP常用算法的方法实现(冒泡、选择、插入、快排、二分查找)

    以前说起写算法,基本上都是拿C语言来写,因为用C可以更清楚的理解各种排序算法和数据结构。今天遍换成使用PHP语言来写几个常用的算法。
    这次要写的算法包括:

    • 冒泡排序
    • 插入排序
    • 选择排序(直接)
    • 快速排序
    • 二分查找

    冒泡:

    < ?php
    $arr = array(4,3,5,6,8,0,10,15,11);
    echo implode(' ',$arr);
    //冒泡排序 最坏 平均O(N^2) 最好O(N)
    function BubbleSort($arr){
    	$length = count($arr);
    	if($length <= 1){
    		return $arr;
    	}
    	for($i=0;$i<$length;$i++){
    		for($j=0;$j<$length-$i-1;$j++){
    			if($arr[$j] > $arr[$j+1]){
    				$tmp = $arr[$j];
    				$arr[$j] = $arr[$j+1];
    				$arr[$j+1] = $tmp;
    			}
    		}
    	}
    	return $arr;
    }
    echo "\nBubbleSort:\n";
    echo implode(' ',BubbleSort($arr))."\n";
    ?>
    

    (…继续阅读这篇文章…)

一种较好的实现PHP异步发送邮件的实现

    前些天在写我的TR-System(社团招新管理系统)的时候,用到了邮箱验证用户注册,也就是注册成功后,需要访问收到的邮件中的URL进行用户激活。这个事件发生在用户提交注册请求之后,系统需要立即发送一封邮件用于激活,但是系统在调用PHPMailer的时候需要进行SMTP连接邮箱系统(用的腾讯企业邮),往往在这个时候会出现等待的情况。如果让用户来承担这个等待时间,体验也太差了!,没见过哪个系统上注册个用户,还需要慢慢等待系统告诉我到底有没有注册成功。
    一开始在写的时候,直接在POST请求中处理,写入数据库后就调用sendEmail方法,情况是这样的:
    1.提交注册 --> 2.写入数据库 --> 3.发送Email --> 4.注册成功。
    这样在用户看来是有一个漫长的等待的。
    实际上应该为:

    1.提交注册 --> 2.写入数据库 --> 3.注册成功。
    ||||||||||||||||||-->发送Email

    这样的才是一个拥有良好用户体验的系统 ^_^ 。
    若是在Java等环境下,咱们可以很好利用多线程,分出来一个任务让另一个线程去完成。
    但是!PHP这个单线程环境下,没有new Thread来搞这个事情啊。 不过,换一个角度,线程不行的,我就给个新进程呗。当然不是在当前进程创建新进程。
    (…继续阅读这篇文章…)

通用笔试-PHP测试编程题[2题]

    水仙花数

    题目描述:
    春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
    “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
    现在要求输出所有在m和n范围内的水仙花数。

    输入
    输入数据有多组,每组占一行,包括两个整数m和n(100< =m<=n<=999)。

    输出
    对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
    如果给定的范围内不存在水仙花数,则输出no;
    每个测试实例的输出占一行。

    样例输入

    100 120
    300 380

    样例输出

    no
    370 371

    < ?php
    echo "Please Input\n";
    $in = '';
    while($in != "\n"){
    	$first = false;
    	// $stdin = fopen("php://stdin",'r');
        // $in = fgets($stdin);
        $in = fgets(STDIN);//使用标准输入
        $args[] = explode(' ',trim($in));
    }
    // fclose($stdin);
    array_pop($args);
    foreach ($args as $item) {
    	if($item[0] <100 || $item[1]>999 || $item[0]>=$item[1]) {
    	  	echo "输入参数不合法!\n";
    	   	exit(0);
    	}
    	$start = $item[0];
    	$end = $item[1];
    	$res = array();
    	while($start < = $end){
    		$a = floor($start/100);
    		$b = floor(($start-$a*100)/10);
    		$c = $start%10;
    		if($start == ($a*$a*$a+$b*$b*$b+$c*$c*$c)){
    		    $res[] = $start;
    		}
    		$start += 1;
    	}
    	echo empty($res)?"No\n":implode(' ',$res)."\n";
    }
    ?>
    

    第二题:
    (…继续阅读这篇文章…)

利用PHP实现QQ的登陆和发送消息

    利用CURL抓取3GQQ的网页实现的。
    这里只是简单实现了功能,可以修改代码实现更多可能。
    如:定时发送消息、机器人客服等高级功能。
    展示代码,分两个步骤完成。

    第一步:登录获取sid,有sid是发送消息的前提。

    //发送方QQ账号和密码
    $qq  = '';
    $pwd = '';
    //准备要POST数据
    $data = array(
        'qq'            => $qq,
        'pwd'           => $pwd,
        'bid_code'      => '3GQQ',
        'toQQchat'      => true,
        'login_url'     => 'http://pt.3g.qq.com/s?aid=nLoginnew&q_from=3GQQ',
        'q_from'        => '',
        'modifySKey'    => 0,
        'loginType:'    => 1,
        'aid'           => 'nLoginHandle',
        'i_p_w'         => 'qq|pwd|',
    );
    //开始CURL模拟登录
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,'http://pt.3g.qq.com/psw3gqqLogin');
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data));
    $file = curl_exec($ch);
    curl_close($ch);
    //分析登录是否成功
    preg_match('%sid=(.*?)&%si',$file,$sid);
    $sid = $sid[1];
    if($sid){
        echo '登陆成功!'.$sid;
    }else{
        echo '登陆失败!请检查用户名和密码是否正确!';
        exit();
    }
    

    获取到sid后就可以发送消息了。
    第二步:发送消息,利用上一步获取到的sid。

    $sid='';
    $qq   = "909047801";
    $text = "你好,豆豆!";
    //准备要POST的数据
    $data = array(
        'u'         => $qq,
        'saveUrl'   => 0,
        'do'        => 'send',
        'on'        => 1,
        'aid'       => '发送',
        'msg'       => $text,
    );
    //开始CURL模拟发送
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,'http://q16.3g.qq.com/g/s?sid=' . $sid);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data));
    $file = curl_exec($ch);
    curl_close($ch);
    //分析发送是否成功
    preg_match('%

    (.*?)
    %si',$file,$callback); $callback = $callback[1]; echo $callback;

作业4-2(带用户的留言板)单页面实现!

    作业4-2要求
    演示页面:http://www.dshui.wang/html/board2.php
    本次作业基于作业4-1完成,部分文件在4-1中给出:
    所需要的数据表:

    CREATE TABLE `msg` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `content` varchar(254) NOT NULL DEFAULT '',
      `username` char(10) DEFAULT '',
      `stime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `user` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `username` char(20) NOT NULL DEFAULT '',
      `pwd` varchar(20) NOT NULL DEFAULT '',
      `registtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    文件board2.php

     ''){
    		$_SESSION['username'] = $row['username'];
    		echo "";
    	}else{
    		echo "";
    	}
    	header ( "refresh:0;url=" );
    }elseif($_POST['do']=="registe"){
    	$rname = $_POST['rname'];
    	$rpwd = $_POST['rpasswd'];
    	$sql = "insert into user(username,pwd) values ('$rname','$rpwd');";
    	if(mysql_query($sql)){
    		$_SESSION['username'] = $rname;
    		echo "";
    	}else{
    		echo "";
    	}
    	header ( "refresh:0;url=" );
    }elseif($_POST['do']=="submit"){
    	$content = $_POST['content'];
    	echo $content;
    	$sql = "insert into msg(content,username) values (\"{$content}\",'".$_SESSION['username']."');";
    	if(mysql_query($sql)){
    		echo "";
    		header ( "refresh:0;url=" );
    	}else{
    		echo "";
    	}
    }elseif($_POST['do']=="logout"){
    	session_unset();
    	session_destroy();
    	echo "";
    	header ( "refresh:0;url=" );
    }
    $sql = "select * from msg order by id desc;";
    $result = mysql_query($sql);
    ?>
    
    
    
    
    简易留言板(带用户验证)
    
    
    
    
    	

    当前用户:


     

作业4-1(简易留言板)

    作业4-1(简易留言板)
    演示页面:http://www.dshui.wang/html/board1.php
    首先我们得建立一个数据表用来存放留言信息:(由于之前作业有建立数据库’XSGL’,我们就直接用这个数据库啦)

    CREATE TABLE `msg` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `content` varchar(254) NOT NULL DEFAULT '',
      `username` char(10) DEFAULT '',
      `stime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    建立一个mysql的连接文件: mysqlconfig.php

    
    

    新建一个留言本程序:board1.php

    
    
    
    
    
    
    简易留言板
    
    
    
    	

     

作业2-2(PHP表单数据提交与接收)

    作业2-2
    展示页面:http://www.dshui.wang/html/work2.php

    
    
    
    
    
    Second Class Work
    
    
    
    
    姓名:
    兴趣:
    性别:
    血型:
    擅长语言:
    最擅长的操作系统:
    留言:








    请选择您擅长的一种或几种编程设计语言:



    请选择您最擅长的操作系统:

    如果您有什么建议,敬请留言:


      
1/2 1 2