由于我的Ubuntu实在用这不爽,作为Linux新手我完全不能应对Ubuntu的各种报错,比如今天图形界面的关机按钮没有了,明天图形界面的时间没有了,后天图形界面的输入法不显示了。之前用过几天的Fedora,感觉界面比较炫。
在Fedora 20 安装VirtualBox的时候发生了些小意外。
第一步、下载Vbox。上官网,下对应自己系统的版本。

sudo rpm -i VirtualBox-4.3-4.3.8_92456_fedora18-1.i686.rpm

然后。让我头疼的事情来了。
警告:VirtualBox-4.3-4.3.8_92456_fedora18-1.i686.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID 98ab5139: NOKEY
错误:依赖检测失败:
	libGL.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libQtCore.so.4 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libQtGui.so.4 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libQtNetwork.so.4 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libQtOpenGL.so.4 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libSDL-1.2.so.0 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libX11.so.6 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libXcursor.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libXext.so.6 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libXinerama.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libXmu.so.6 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libXt.so.6 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libasound.so.2 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.1) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.1.1) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.1.2) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.1.3) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.15) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.2) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.2.3) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.3) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.3.2) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libc.so.6(GLIBC_2.4) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libcrypt.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libcrypt.so.1(GLIBC_2.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libcrypto.so.10 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libcrypto.so.10(libcrypto.so.10) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libcurl.so.4 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libdevmapper.so.1.02 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libdevmapper.so.1.02(Base) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libdl.so.2 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libdl.so.2(GLIBC_2.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libdl.so.2(GLIBC_2.1) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libgcc_s.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libgcc_s.so.1(GCC_3.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libgcc_s.so.1(GLIBC_2.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libm.so.6 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libm.so.6(GLIBC_2.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libm.so.6(GLIBC_2.1) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpng15.so.15 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpng15.so.15(PNG15_0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpthread.so.0 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpthread.so.0(GLIBC_2.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpthread.so.0(GLIBC_2.1) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpthread.so.0(GLIBC_2.2) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpthread.so.0(GLIBC_2.3.2) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpthread.so.0(GLIBC_2.3.3) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpthread.so.0(GLIBC_2.3.4) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libpython2.7.so.1.0 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	librt.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	librt.so.1(GLIBC_2.2) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libssl.so.10 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libssl.so.10(libssl.so.10) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libstdc++.so.6 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libstdc++.so.6(CXXABI_1.3) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libstdc++.so.6(CXXABI_1.3.1) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libstdc++.so.6(GLIBCXX_3.4) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libstdc++.so.6(GLIBCXX_3.4.11) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libstdc++.so.6(GLIBCXX_3.4.15) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libstdc++.so.6(GLIBCXX_3.4.9) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libvpx.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libxml2.so.2 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libxml2.so.2(LIBXML2_2.4.30) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libxml2.so.2(LIBXML2_2.6.0) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libxml2.so.2(LIBXML2_2.6.8) 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要
	libz.so.1 被 VirtualBox-4.3-4.3.8_92456_fedora18-1.i686 需要

我去年买了个表啊!!!这么多的库文件却是难道要我一个一个手打安装????
各种Baidu\Google。然后。被我发现了一个好发方法。。
双击打开!!
然后他会自己安装这些关联关系的软件包。

是不是要喷?开头我就说了很狗血的~

-------------我是分割线------------------------

安装完成,打开。报错
不能为虚拟电脑 XP 打开一个新任务.
The virtual machine 'XP' has terminated unexpectedly during startup with exit code 1.



RTR3InitEx failed with rc=-1912 (rc=-1912)

The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing

'/etc/init.d/vboxdrv setup'

may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.

按照提示输入/etc/init.d/vboxdrv setup都提示OK了也没有用啊。
搜索的解决方法
sudo yum install kernel-devel
sudo yum install gcc
sudo /etc/init.d/vboxdrv setup

再次打开,还是不可以,报同样的错。

继续搜索~
来了个狠的,更新系统
sudo yum -y update
sudo /etc/init.d/vboxdrv setup

Stopping VirtualBox kernel modules                         [  OK  ]
Uninstalling old VirtualBox DKMS kernel modules            [  OK  ]
Removing old VirtualBox kernel module                      [  OK  ]
Trying to register the VirtualBox kernel modules using DKMS[  OK  ]
Starting VirtualBox kernel modules                         [  OK  ]
好了。可以了哦

题目一:

<?php
echo -10%3;
?>

答案:-1。
考查:优先级。
因为-的优先级比%求余的优先级低,也就是-(10%3)。

题目二:

print (int)pow(2,32);

答案:0

题目三:

//file1.php
<?php
$a = '123';
?>
//file2.php
<?php
echo include('file1.php');
?>

答案:1.
考查:返回值。
因include()也是一个函数,有返回值。在成功时返回1,失败时返回错误信息。如果被包含的文件有return,则inculde()成功时返回该文件的返回值。

题目四:

<?php
$count = 5;
function get_count() {
    static $count = 0;
    return $count++;
}
++$count;
get_count();
echo get_count();
?>

答案:1.
考查:static和++。
因static $count,所以只在第一次调用get_count的时候对$count赋值为0,第二次再进来这个函数,则不会第二次赋值。其次就是return $count++和return ++$count了,前者先返回,后者先++再返回。

题目五:

<?php
$arr = array(0 =>1,'aa' => 2,3,4);
foreach($arr as $key => $val){
    print($key == 'aa' ? 5 : $val);
}
?>

答案:5534.
考查:类型转换。
因遍历数组第一次的时候,$key和aa的比较实际就是0和aa的比较,一个是int一个是string,这个时候会转换类型,将字符串转换为数字再与数字比较。所以0=='aa'就是0==0,所以为true,也就是输出5。虽然PHP是若类型语言,但是人家也有类型的好吗。

题目六:

<?php
echo count (false);
$a = count ("567")  + count(null) + count(false);
echo $a;
?>

答案:2.
考查:count的用法。
因count()的官方解释“If the parameter is not an array or not an object with implemented Countable interface, 1 will be returned.”.意思是说,如果不是数组或者对象的其他类型,返回1.那么这个值应该就是1+0+1了(boolen人家也是一个类型,虽然是讨厌的false)。NULL的意思是没有值,难道在计数函数中还能有1?

题目七:

<?php
$arr = array(1,2,3);
foreach($arr as &$val) {
    $val += $val % 2 ? $val++ : $val--;
}
$val = 0;
print(join('',$arr));
?>

答案:330。
考查:++和&。
因foreach结束后的数组应该是array(3,3,7);最后给第三个元素赋值为0,所以就是330了。其中注意的是&,如果有&则是对原变量操作,如果没有,则是先生成一个新变量,然后给这个变量复制,最后操作的是这个新变量。

题目八:

<?php
echo intval((0.1+0.7)*10);
?>

答案:7。
考查:浮点数的概念。
因0.1+0.7=0.8 0.8*10=8 所以转换成整数后还是8?错!因为0.1+0.7=0.8是浮点数,0.8*10在数学计算中是正整数8,可是在计算机中它仍然是浮点数8,什么叫浮点数8?每一个看起来像整数的浮点数,其实都不是整数,比如这个8,它其实只是7.9999循环,无限接近于8,转换成整数会舍弃小数部分,就是7喽。

题目九:

<?php
ini_set('display_errors',0);
$arr = array(1=>1,3=>3);
$i = 2;
$a = 'test' . isset($arr[$i]) ? $arr[$i] : $i;
请问$a的值是什么?
A、test B、NULL C、2 D、test2
?>

答案:B。
考查:优先级。
因“."的优先级高于三元运算符"?:"。所以程序其实报错了。会说$arr的索引2不存在。

题目十:

<?php
$a = 3;
$b = 5;
if($a = 5 || $b = 7) {
    $a++;
    $b++;
}
echo $a . " " . $b;
?>
A、6 8  B、6 6  C、2 6  D、1 6  E、4 6

答案:D。
考查:优先级,基础概念,++。
因“="的优先级低于“||”,所以先逻辑判断再赋值。也就是($a = (5 || $b = 7))。所以,最后其实给a赋值了,$a等于1.

题目十一:

<?php
$x = 2;
echo $x == 2 ? '我' : $x == 1 ? '你' : '它';
?>
输出的结果是()
A、我
B、你
C、它
D、syntax error

答案:B。
考查:优先级。
因“=="的优先级高于“?:”。我已经不想说为什么了,整理一下这种东西,我感觉要疯了,除了笔试题外估计也不会遇到了吧。

PHP时间种子批量随机数。本文说明PHP如何用时间种子批量生成随机数。
PHP函数mt_rand()和rand()会在批量生成的时候是会有几率出现重复的随机数。srand()和mt_srand()在PHP4.1开始已经不在显式调用了,在mt_rand和rand的时候会自动生成种子。因为,在批量随机的时候,我们自己显式条用生成种子,就可以避免重复。为什么呢?因为种子不一样了呀。种子为什么不一样了呢?因为他是时间种子。

<?php
//存储生存的随机数
$randArr = array();
//生成十万个吧
for($i=0;$i<100000;$i++){
    //生成种子
    $date = explode(' ', microtime());
    $seed = $date[0];
    //种子发生器
    mt_srand($seed);
    //生成随机数
    $randArr[] = mt_rand();
}
?>

随机数生成了。并且不会重复的哦。以时间为种子的好处就是省略了在普通的伪随机数会出现重复的情况时进行do{生成随机数code}while(!isset(新生成的一个随机数))的判断步骤。

本文以Ubuntu为例,讲解Linux下如何安装Linux、Apache、Mysql、PHP的LAMP架构。可用于Ubuntu和CentOS系列。
1、安装Apache,Mysql,PHP,在安装Mysql的时候会要求建立管理员帐号和密码:

sudo apt-get install php5 apache2 mysql-client mysql-server 

2、安装PHP的扩展。如php中的mysql,GD库,CURL等。这样才可以使用GD库做图,mysql扩展,CURL扩展等功能

sudo apt-get install php5-mysql php5-gd php5-curl 

3、修改目录权限,为方便此时测试,暂且修改为777,也就是drwxrwxrwx。在实际中,777可是非常危险的哦。一般apache的项目根目录在/var/www

cd /var/www
sudo chmod 777 /var/www/

4、安装PHPMyAdmin,安装时会要求选择服务器端软件,选择Apache就好了。还会要求你输入Mysql的帐号和密码。这个帐号和密码是在第一步安装的时候就有提示的。

sudo apt-get install phpmyadmin

5、为PHPMyAdmin建立软链接,放在/var/www下,这样可以直接通过localhost/phpmyadmin来访问了。

sudo ln -s /usr/share/phpmyadmin /var/www

重启Apache是/etc/init.d/apache2 restart或者service apache2 restart

OK,安装好了。自己在/var/www建立index.php吧

cd /var/www
touch index.php
vim index.php
<?php 
echo 'hello wordl';
?>
touch phpinfo.php
vim phpinfo.php
<?php
phpinfo();
?>

好了。自行玩吧~

本文主要谈论如何实现Mysql的随机查询,多表随机查询。在Mysql中随机取出一条记录的实现方法。
我们通常的查询是没有where或者where fields>2这样的方式,这样只能取出在某种条件下的一条或多条,如果条件不变(例如2),那么结果就一直不会有变化。
那么如何实现随机查询呢?本人有两种方法。

方法一、数据表记录不大的情况下:

select * from `table`

查出来所有的记录列表,然后array_rand()随机出一个结果的数组的key。连续的key可以使用mt_rand(1, count($list)); 为什么不使用rand而是mt_rand呢?因为mt_rand币rand快4倍。
这种情况下,查出整个列表,存入到Memcache的缓存或者Redis的NoSQL中,下次直接取出结果集而不需要查表。不过当数据量一旦超过万级别,取出列表就很困难了。

方法二:使用SQL语句随机
MYSQL函数RAND(),产生一个0-1之间的小数,然后MAX(`id`)可以获得该表中最大的ID。那么MAX(`id`) * RAND()就可以取到表中所有的ID。OK,看语句。

SELECT * FROM `table` WHERE `id` > (SELECT RAND() * (SELECT MAX(`id`) FROM `table`) LIMIT 0, 1

既然MAX(`id`) * MAX(`id`)可以取到表里所有值,那么本语句的WHERE就可以取到本表的所有情况,那么这就是一个所有记录都有可能被取到的随机SQL语句。