PHP面试

(^s)|(s$)这个正则表达式作用是:__________

匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串

编写函数取得上一月的最后一天

function last_month_lastday($date = "")
{
    if (empty($date)) {
        $date = time();
    } else {
        $date=strtotime($date);
    }
    echo "<br>";
    $this_month_daty = date('j', $date);//d取出天数有零头
    echo date('Y-m-d', strtotime("-{$this_month_daty} days", $date));

    echo "<br>";
    echo date('Y-m-d', $date - $this_month_daty * 24 * 60 * 60);
}
last_month_lastday("2017-04-05");
last_month_lastday();

.如果我的网站用的utf-8编码,为防止乱码出现,都需要注意哪些地方?

从以下几个方面考虑:

数据库中库和表都用utf8编码

php连接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);

php文件指定头部编码为utf-8header(“content-type:text/html;charset=utf-8”);

网站下所有文件的编码为utf8

html文件指定编码为utf-8<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>

在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码

urlencode()

写出两种对变量加密的函数

crypt($str);
base64_encode($str);
sha1($str);
md5($str);
urlencode($str);

如何把一个GB2312格式的字符串装换成UTF-8格式

<?php
    iconv('GB2312','UTF-8','悄悄是别离的笙箫');
?>

如果需要原样输出用户输入的内容,在数据入库前,要用哪个函数处理

htmlspecialchars或者htmlentities

写出五种以上你使用过的PHP的扩展的名称(提示:常用的PHP扩展)

mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO等

php中WEB上传文件的原理是什么,如何限制上传文件的大小

上传文件的表单使用post方式,并且要在form中添加enctype='multipart/form-data'。enctype属性确保文件采用正确的格式上传格式
一般可以加上隐藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>位置在file域(文件域是由一个文本框和一个“浏览”按钮组成的,用户可以直接将要上传给网站的文件的路径输人到文本框中,也可以单击“浏览”按钮进行选择。不知道为啥 )前面。
value的值是上传文件的客户端字节限制。可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
使用file文件域来选择要上传的文件,当点击提交按钮之后,文件会被上传到服务器中的临时目录,在脚本运行结束时会被销毁,所以应该在脚本结束之前,将其移动到服务器上的某个目录下,可以通过函数move_uploaded_file()来移动临时文件,要获取临时文件的信息,使用$_FILES。

限制上传文件大小的因素有:

  1. 客户端的隐藏域MAX_FILE_SIZE的数值(可以被绕开)。
  2. 服务器端的upload_max_filesize,post_max_size和memory_limit。这几项不能够用脚本来设置。
  3. 自定义文件大小限制逻辑。即使服务器的限制是能自己决定,也会有需要个别考虑的情况。所以这个限制方式经常是必要的

怎么把文件保存到指定目录?怎么避免上传文件重名问题

可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。
可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名(在此之间进行检查是否存在相同文件),这样就避免了重名。

_____函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的

function a() {
    b();
}

function b() {
    c();
}

function c(){
    debug_print_backtrace();
}

a();


#0  c() called at [E:wamp64wwwtestgc.php:102]
#1  b() called at [E:wamp64wwwtestgc.php:98]
#2  a() called at [E:wamp64wwwtestgc.php:109]

请描述如下URL重写规则的用意

<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
</IfModule>

如果REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则,
如果REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则,
RewriteRule./index.php[L]的意思是把所有的请求都给index.php处理。

Warning:Cannot modify header information-headers already sent by(output started at D:srcinit.php:7)in D:srcinit.php on line10通常什么情况下php会报该警告信息

一般是在header

自 php5.4 起(php5.3的高端也是),php 做了友善的调整
在 session_start、header、setcookie 等函数前允许有输出了

所以在set_cookie以及session_start函数前面有输出(包括空格)的情况下,不会有警告信息。

0 条评论
发表一条评论