标签归档:PHP基础

如何设置一个严格30分钟过期的Session

问题是Laruence在微博上提出的:

我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识多着呢, 特别适合考察基本功是否扎实, 谁来回答试试? 呵呵

说实话,如果是面试我的话,我回答不好。我找了一下stackoverflow发现有人讨论过同样的问题,How do I expire a PHP session after 30 minutes?,看了一下Gumbo回复应该是最好的。过了不久Laruence也整理了一篇文章,讲的更全面一些。 Gumbo说的对,要回到好这个问题只要弄清楚session.gc_maxlifetimesession.cookie_lifetime这两个配置的原理就可以了。 session.gc_maxlifetime这个时间是指的Session过多少时间会被session GC回收。这里需要主要以下几点

  • GC启动本身是有概率的( session.gc_probabilitysession.gc_divisor
  • 不同的脚本具有不同的 session.gc_maxlifetime 数值但是共享了同一个地方存储会话数据,则具有最小数值的脚本会清理数据。此情况下,与 session.save_path 一起使用本指令
  • GC和这个时间比较的时候是用的sesssion文件的mtime( >PHP 4.2.3)而不是atime

session.cookie_lifetime

这个是Server发送给浏览器的cookie过期时间

所以只要明白了这两个配置的原理,那么这个问题至少会回答及格(我认为)。

所以手册很重要,不管是哪种技术,如果把手册研究一篇,搞懂80%以上,那么不是大牛也是个高级工程师鸟。

 

ubuntu下安装 Apache+PHP+MySQL文本服务器


#Install SSH Client and Server (for my remote access)
sudo apt-get install ssh

#Install Database Server
sudo apt-get install mysql-server-5.0

#Install Apache HTTP Server
sudo apt-get install apache2

#Install PHP5 and Apache PHP5 module
sudo apt-get install php5 libapache2-mod-php5

#Restart Apache
sudo /etc/init.d/apache2 restart

#Optionally, install phpMyAdmin
sudo apt-get install phpmyadmin

sudo /etc/init.d/apache2 restart (重启 apache)

sudo gedit /etc/php5/apache2/php.ini (配置 php.ini)

sudo gedit /etc/apache2/apache2.conf (配置 apache2.conf)

/var/www/(主目录位置)

是不是要用array_key_exists函数

在PHP中判断一个数组的特定索引的值是否存在,通常会用array_key_exists()函数。但是我们可能更熟悉另一个判断变量是否存在的函数isset(),当然我们也可以用isset()来判断数组中的值是否设置。

比如:

$a = array('site'=>'blog.webfuns.net');

isset($a['site']);
//同:array_key_exists('site', $a);

两种方法都能达到同样的目的,但是通过测试发现isset()函数的效率更高。


$a = range(1,1000);
$a['tom'] = 'heng';
$begin = microtime(true);
for($i=0; $i<100000; $i++){ array_key_exists('tom', $a); } $end = microtime(true); for($i=0; $i<100000; $i++){ isset($a['tom']); } $end2 = microtime(true); echo $end - $begin; echo '
';
echo $end2 - $end;

测试结果:

0.053144931793213
0.014554023742676

可以看到isset()函数的效率要高四倍左右,这下知道以后该怎么办了吧。

substr_count函数

PHP提供了很多很好用的内置函数,用好这些函数可以提高自己的效率,所以没事应该多看看php手册。

int substr_count ( string haystack, string needle)

函数可以统计haystack字符串中needle字符串的出现频率。

PS:

haystack 草垛

needle 针

在草垛中找针

创建多级目录的PHP函数

因为目前在找工作,所以复习下PHP,尽管此题很无聊,但是还是练练手吧

创建多级目录的PHP函数


//创建多级目录的PHP函数
function mmkdir(){
$nums=func_num_args();
if($nums>=1){
$arglist=func_get_args();
$rpath='.';
foreach($arglist as $path){
$rpath.='/'.$path;
mkdir($rpath);
}

}

}
mmkdir('a','b');

一些常见的预定义全局变量

$_SERVER[‘DOCUMENT_ROOT’]
当前运行脚本所在的文档根目录。在服务器配置文件中定义。   
$_SERVER[‘HTTP_HOST ‘]
当前请求的 Host: 头部的内容
$_SERVER[‘REMOTE_ADDR’]
正在浏览当前页面用户的 IP 地址
$_SERVER[‘HTTP_REFERER’]
链接到当前页面的前一页面的 URL 地址
$_SERVER[‘SERVER_NAME’]
当前运行脚本所在服务器主机的名称
$_FILES
包含有所有上传的文件信息。
$_FILES[‘userfile’][‘name’]
客户端机器文件的原名称。
$_FILES[‘userfile’][‘type’]
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES[‘userfile’][‘size’]
已上传文件的大小,单位为字节。
$_FILES[‘userfile’][‘tmp_name’]
文件被上传后在服务端储存的临时文件名。
$_FILES[‘userfile’][‘error’]
和该文件上传相关的错误代码。