当前位置:首页 » 编程语言 » php编程题

php编程题

发布时间: 2022-08-18 16:06:48

php编程

在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能。但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法。
需求

有一个800M的日志文件,大约有500多万行, 用php返回最后几行的内容。

实现方法

1. 直接采用file函数来操作

注:由于 file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的memory_limit = 16M来进行设置,这个值如果设置-1,则内存使用量不受限制.

下面是一段用file来取出这具文件最后一行的代码.
整个代码执行完成耗时 116.9613 (s).

$fp = fopen($file, "r");
$num = 10;
$chunk = 4096;
$fs = sprintf("%u", filesize($file));
$max = (intval($fs) == PHP_INT_MAX) ? PHP_INT_MAX : filesize($file);
for ($len = 0; $len < $max; $len += $chunk) {
$seekSize = ($max - $len > $chunk) ? $chunk : $max - $len;
fseek($fp, ($len + $seekSize) * -1, SEEK_END);
$readData = fread($fp, $seekSize) . $readData;

if (substr_count($readData, "n") >= $num + 1) {
preg_match("!(.*?n){".($num)."}$!", $readData, $match);
$data = $match[0];
break;
}
}
fclose($fp);
echo $data;

我机器是2个G的内存,当按下F5运行时,系统直接变灰,差不多20分钟后才恢复过来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万不得以,memory_limit这东西不能调得太高,否则只有打电话给机房,让reset机器了.

2.直接调用linux的tail命令来显示最后几行

在linux命令行下,可以直接使用tail -n 10 access.log很轻易的显示日志文件最后几行,可以直接用php来调用tail命令,执行php代码如下.
整个代码执行完成耗时 0.0034 (s)

file = 'access.log';
$file = escapeshellarg($file); // 对命令行参数进行安全转义
$line = `tail -n 1 $file`;
echo $line;

3. 直接使用php的fseek来进行文件操作

这种方式是最为普遍的方式,它不需要将文件的内容全部读入内容,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法.

方法一
首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行。
实现代码如下
整个代码执行完成耗时 0.0095 (s)

function tail($fp,$n,$base=5)
{
assert($n>0);
$pos = $n+1;
$lines = array();
while(count($lines)< =$n){
try{
fseek($fp,-$pos,SEEK_END);
} catch (Exception $e){
fseek(0);
break;
}
$pos *= $base;
while(!feof($fp)){
array_unshift($lines,fgets($fp));
}
}
return array_slice($lines,0,$n);
}
var_mp(tail(fopen("access.log","r+"),10));

方法二
还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换行符(n)的个数来判断是否已经读完最后$num行数据.
实现代码如下
整个代码执行完成耗时 0.0009(s).

$fp = fopen($file, "r");
$line = 10;
$pos = -2;
$t = " ";
$data = "";
while ($line > 0) {
while ($t != "n") {
fseek($fp, $pos, SEEK_END);
$t = fgetc($fp);
$pos --;
}
$t = " ";
$data .= fgets($fp);
$line --;
}
fclose ($fp);
echo $data

方法三
整个代码执行完成耗时 0.0003(s)

ini_set('memory_limit','-1');
$file = 'access.log';
$data = file($file);
$line = $data[count($data)-1];
echo $line;
php压缩HTML函数轻松实现压缩html/js/Css及注意事项 phpexcel导出excel的颜色和网页中的颜色显示不一致

㈡ (100分悬赏)几道PHP题,速度快,准确高的多加200分

填空选择题
1、在ASP页面中用以下语句声明<script language=VbScript _2___=server>脚本</script>,要求能在服务器端运行VbScript脚本
2、把数值型转换为字符串型的VbScript函数是_ CStr 3_;把字符串转换为整数 VbScript函数是¬¬¬5¬cint()
3、HTML标记,可单独使用或嵌入在各个ASP脚本单元中,以" __1____"为定界符; VBScript(或JScript)语句,可单独使用或嵌入在各个ASP脚本单元中,以___9______为定界符,通过对"__2______"属性的设置来决定是否在服务器端运行;
ASP脚本命令,可单独使用或包含在此和〈/html〉内,以"_____7____"为定界符
4、一段连接ACCESS数据库的代码
<% set conn=server.creatobject("adodb.connection")
Connstr= "DSN=____4___;UID=___6_____;PWD=;”
conn.open Connstr
%>
5、Session对象保存的用户信息是存储在___10_____;Cookie对象保存的用户信息是存储在____8_____
选项:
(1)< 和 〉 (2)runat (3)cstr (4)数据源的名称 (5)cint
(6)数据库的用户名 (7)<% 和 %> (8)客户端(9)<Script>和</Script> (10)服务器端
三、判断题
1、Vbscript只有一种数据类型,称为Variant ( 1 wrong)
2、数据库中的数据中最不可能为空值的是外键 ( 2 wrong)
3、Vbscript脚本语言不区分大小写,而JavaScript区分大小写 (right )
4、在特定的asp页面中指定主要的脚本语言,格式为<%@ language=Language of Script%>,这一行声明可以放在ASP页面的任何位置 ( wrong)
5、一个包含动态脚本的ASP页面直接双击,该页面的内容不能正常显示。( wrong)
6、删除student表中学号为‘200501012‘的学生信息的SQL语句为
delete * from student where StudentID=’ 200501012’ (right )
7、Vbscript声明变量的时候用var;JavaScript声明变量的时候用dim (wrong )
8、<%response.write Server.HTMLEncode(“<font color=’red’>颜色</font>”)%>将会以红色的字体显示“颜色”。( wrong)
9、ASP中request语句主要是用于用户接收服务器的数据 (wrong )
10、在用浏览器访问某个网站的页面时,可通过查看源文件的方式,修改网页的源代码( wrong)
四、问答题
1、ASP的工作原理 :用iis服务以网页的形式浏览asp文件,
2、<form name="form1" method="post" action="">
<form name="form1" method="get" action="">
简述Post和get方法的区别,并指出接收数据时用到的对象与方法
通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。如果:
1、 登陆页面可以被浏览器缓存
2、 其他人可以访问客户的这台机器。
那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。
建议 :在Form中,建议使用post方法。
post请求无长度限制(至少是理论上的)
表单提交中get和post方式的区别归纳如下几点:
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。
get有长度限制,最长不超过2048字节(1024个汉字)

㈢ php选择题

答案为D

strcmp函数功能为:比较两个字符串(区分大小写)

函数返回:

  • 0 - 如果两个字符串相等

  • <0 - 如果string1小于string2

  • >0 - 如果string1大于string2

㈣ PHP基础编程题

//第二题
<?php
$i=1;
$sum=0;
while($i)
{
$i=$i*2;
$sum++;
if($i==4096)
break;
}
echo $sum;
?>

㈤ php编程题目,直接回答代码,谢谢

<?php
$day = "2008-1-1";
function testp8($day)
{
return date("Y-m-d")-$day;
}
echo testp8($day);
?>

㈥ PhP面向对象编程练习题

header("Content-type:text/html;charset=utf-8");
classperson{
public$name;
public$xb;
function_construct($xm,$sex){
$this->name=$xm;
$this->xb=$sex;
}
}
classstudentextendsperson{
var$xh;
function_construct($xm,$sex,$id){
$this->xh=$id;
parent::_construct($xm,$sex);
}
functiongetInfo(){
echo'姓名:'.$this->name.'<br>';
echo'性别:'.$this->xb.'<br>';
echo'学号:'.$this->xh.'<br>';
}
}

$stu1=newstudent;
$stu1->_construct('张三','男','20011020305');
$stu1->getInfo();

㈦ php程序设计选择题

a.
a.
a.
d. Select * from employees where 姓名 like ‘%文%’
d.
d.
b.
cd.
b.

热点内容
锐程cc尊贵版都有哪些配置 发布:2025-01-19 18:27:08 浏览:977
php手机网站 发布:2025-01-19 18:26:34 浏览:456
一加存储路径 发布:2025-01-19 18:21:01 浏览:446
sqlserver误删 发布:2025-01-19 18:21:00 浏览:649
球球安全中心动态密码在哪里 发布:2025-01-19 18:20:23 浏览:790
python读取config文件 发布:2025-01-19 18:15:10 浏览:458
android生成so 发布:2025-01-19 18:14:33 浏览:697
比亚迪汉ev家用哪个配置值得 发布:2025-01-19 18:08:02 浏览:382
aspnet批量上传文件 发布:2025-01-19 17:59:36 浏览:395
攻击服务器ip会不会判刑 发布:2025-01-19 17:59:28 浏览:32