文档标签: dev
一道PHP面试题:已知x,y是2000以内的自然数,用递归方法求这两个数之间所有自然数的和
先看一下在百度百科上自然数的说明:
用以计量事物的件数或表示事物次序的数。即用数码0,1,2,3,4,……所表示的数 。表示物体个数的数叫自然数,自然数由0开始(包括0),一个接一个,组成一个无穷的集体。
[php]
<?php
//已知x,y是2000以内的自然数,用递归方法求这两个数之间所有自然数的和
function number($x,$y){
if($x < $y && $x < 2000 && $y < 2000 && $y >= 0){
return $x + number($x+1,$y);
}else{
return $x;
}
}
echo number(1,0);
[/php]...
上一篇文章我们是写的用prototype+php实现了comet,本人对prototype不熟,为理解它的原理,所以用Jquery改写了一下,php代码没有变.
[php]
<?php
set_time_limit(9990);
$filename = dirname(__FILE__).'/data.txt';
// store new message in the file
$msg = isset($_GET['msg']) ? $_GET['msg'] : '';
if ($msg != ''){
file_put_contents($filename,$msg,LOCK_EX);
die();
}
// infinite loop until the data file is not modified
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$currentmodif = filemtime($filena...
最近在看“服务器推送技术”,在B/S结构中,通过某种magic使得客户端不需要通过轮询即可以得到服务端的最新信息 (比如股票价格,聊天室,webQQ、开心网、白社会),这样可以节省大量的带宽。
传统的轮询技术对服务器的压力很大,并且造成带宽的极大浪费。如果改用ajax轮询,可以降低带宽的负荷(因为服务器返回的不是完整页面),但是对 服务器的压力并不会有明显的减少。
而推技术(push)可以改善这种情况。但因为HTTP连接的特性(短暂,必须由客户端发起),使得推技术的实现比较困难,常见的做法是通过延长 http连接的寿命,来实现push。
基本实现原理:
接下来自然该讨论如何延长http连接的寿命,最简单的自然是死循环法,如果使用观察者模式则可以进一步提高性能。
但是这种做法的缺点在于客户端请求了这个servlet后,web服务器会开启一个线程执行servlet的代码,而servlet由迟迟不肯结 束,造成该线程也无法被释放。于是乎,一个客户端一个线程,当客户端数量增加时,服务器依然会承受很大的负担。
要从根本上...
在这篇教程里,我们将了解这一过程,用EventSource对象处理接收的数据并将其写入页面。我们将在客户端使用HTML5和JavaScript,而在服务器端则使用PHP。
在现有模式下,如Ajax,网页中的代码会持续询问服务器是否要提供新数据,而客户端则负责要对这一信息发出请求。有了服务器发送的请求,你就可以把数据导出服务器,这样就可以从那儿推出更新,而不需要客户端代码不停对其发出请求。一旦页面发出服务器发送事件,服务器脚本就会持续发送更新。你的JavaScript代码会在接收到新数据的时候将其写入页面。
创建一个HTML5页面
用下列代码创建你的HTML5页面:
[html]
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
[/html]
添加一个要素显示服务器发送的数据
我们要在一个专用页面要素里显示从服务器接收到的数据...
有些时候我们为了查看文件是否变化会用修改时间来对比,那么我们就会用到PHP filemtime() 这个函数
下面来看一下这个函数的使用方法。
定义和用法
filemtime() 函数返回文件内容上次的修改时间。
若成功,则时间以 Unix 时间戳的方式返回。若失败,则返回 false。
语法
filemtime(filename)
参数 描述
filename 必需。规定要检查的文件。
说明
本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。...
今天手里有一个网站的文件要上传,文件太多,速度跟不上
于是就找了一个php解压zip文件的方法,将要上传的文件上传到服务器解压
[php]
<?php
header("Content-type: text/html;charset=utf-8");
error_reporting(E_ALL);
set_time_limit(0);
$zip_filename = "Test.zip";
$zip_filename = array_key_exists('zip', $_GET) && $_GET['zip'] ? $_GET['zip'] : $zip_filename;
$zip_filepath = str_replace('\\', '/', dirname(__FILE__)) . '/' . $zip_filename;
if(!is_file($zip_filepath))
{
die("文件".$zip_f...
apache性能优化
精简一部分的模块(LoadModule)以减少不必要的内存占用。根据俺目前在用的经验,除了下面这些模块,其他都不是必须的:
mod_authz_host.so
mod_log_config.so
mod_expires.so
mod_deflate.so
mod_headers.so
mod_setenvif.so
mod_mime.so
mod_autoindex.so
mod_negotiation.so
mod_dir.so
mod_alias.so
mod_rewrite.so
mod_proxy.so(网上其他人的经验是可以不加载这个模块,不过抓抓试过启动apache会出错。。。)
保存httpd.conf,重启Apache即可生效。
在优化完Apache之后,还需要进行MySQL的优化,主要是修改/etc/my.cnf来达到降低MySQL内存占用的目的。
在/etc/my.cnf的[mysqld]段里面添加:
skip-locking
skip-bdb
skip...
读图网以前是用的LAMP环境,但是阿里云主机总是超时apache总是溢出,最后下定决心换成LNMP环境
于是原来的伪静态规则来搬到NGINX环境上来
第一个来看一下在nginx环境如何取消目录的PHP执行权限
将以下代码添加至Server容器中的合适位置,也就是在定义fastcgi的规则之前.
location ~ /(uploads|data|templets)/.*\.(php|php5)?$ {
deny all;
}
注意上面要定义在fastcgi的前面。
...
php中register_shutdown_function函数用法详解:
由于程序出现一些不可预知的问题,给用户显示一个致命错误,又或者一个空白页(在display_errors设为off的情况下),不是一个很好的处理方法 . PHP中有一个叫做 register_shutdown_function 的函数,可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了.我准备了一个非常基本的例子,可以演示在一个致 命错误需要显示时,你应该怎么给用户一些合适的反馈.你可以通过关闭致命错误的显示(译注:可以设置display_errors和 error_reporting),让例子看起来好看些.
[php]
<?php...
$GLOBALS['HTTP_RAW_POST_DATA']
最近在做Flash在线裁剪图片 生成图片的东西。
通过Flash POST 图片的二进制数据给php,由php生成图片保存。
开始想到用$_POST来接受。后来发现行不通。
查阅了很多资料 明白了所以然,这里做一个笔记:
于PHP默认只识别application/x-www.form-urlencoded标准的数据类型。
因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用$_POST数组来接收就会失败!
故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。
另外还有一项 php://input 也可以实现此这个功能
php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input和 $HTTP_RAW_PO...
一看便知这种错误提示是由于PHP的版本不同造成的,解决方法请看:
set_magic_quotes_runtime(0)函数作用解释
在php.ini的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反斜线。
当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()设置和检测php.ini文件中magic_quotes_runtime状态。
为了使自己的程序不管服务器是什么设置都能正常执行。可以在程序开始用get_magic_quotes_runtime检测设置状态秋决定是否要手工处理,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉。
magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据...
前两天写PHP代码的时候遇到要判断一个变量是否为数字,所以就把相关的文章简单的摘抄了过来:
php 正则验证字符串是否为数字
方法一:
php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的写法,在此利用正则表达式的方式来列举一下判断数字的方法。
方法二:
建议大家对关键的参数必须做过滤。如数字正则过滤
if(preg_match("/^\d*$/",$fgid)) echo('是数字');
else echo('不是数字');
//注:$fgid为null 是为true
或者用函数
if(is_numeric($fgid)) echo('是数字');
else echo('不是数字');[/code]这两种方法的区别是 is_numeric小数也会认为是数字,而前面正则会把小数点当作字符。
附一些常用的正则运算:
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n...
php try catch实例:
[php]
try {
if (@mysql_connect('localhost','root','123456')){
//
echo 'success!';
}else{
throw new Exception('ERROR:'.mysql_error());
}
} catch (Exception $e) {
echo $e->getMessage();
}
[/php]
Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象
当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。
如果异常没有被捕获,而且又没用使...