PHP基础面试题
一、PHP中几个输入函数echo, print(), print_r(), printf(), sprintf(), var_dump()的区别。
1.echo : 是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string);
2.print : 是语句不是函数, 有返回值1,只能输出一个变量, 不一定需要圆括号,不能输出数组和对象,只能打印简单类型(如int,string);
3.print_r() :是函数, 可打印复合类型 (如string, int, float, array, object等)输出array时会用结构表示,而且可通过print_r($str,true)来使print_r()不输出而返回print_r处理后的值;
4.printf() :是函数 把文字格式化后输出,参考C语言
5.sprintf() : 是函数, 跟printf()相似,但不打印,而是返回格式化的文字(该函数把格式化的字符串写入一个变量,而不是输出出来)其他的与printf一样;
6.var_dump() :是函数,输出变量的内容、类型或字符串的内容、类型、长度。
二、禁用cookie的session的使用方案,设置session过期的方法、对应函数:
1.通过url传值,把session id附加到url上(缺点:整个站点中不能有纯静态页面,因为纯静态页面session id 将无法继续传递到下一个页面);
2.通过隐藏表单,把session id放到表单的隐藏文本框中同表单一块提交过去(缺点:不适用<a>标签这种直接跳转的非表单的情况);
3.直接配置php.ini文件, 将php.ini文件里的session.use.trans.sid = 0 设为 1;
4.用文件、数据库等形式保存session ID,在跨页过程中手动调用;
1.setCookie(session_name(),session_id(),time()+60,"/");
2.session_set_cookie_params(60);(把session存入cookie中);
注意:php.ini 中的session.gc_probability / session.gc_divisor
三、PHP获取文件内容的方法,对应的函数
1.file_get_contents() 得到文件的内容(可以以get和post方法获取),整个文件读入一个字符串中;
2.用fopen() 打开url, 以get 方式获取内容(借助fgets()函数);
3.用fsockopen函数 打开url (可以以get 和 post 方式获取)以get方式获取完整的数据 包括header 和 body;
4.使用curl 库获取内容,使用curl库之前,需查看php.ini,查看是否已打开了curl扩展
四、isset() 、empty()与is_null的区别
1、当变量未定义时,is_null()和“参数本身”是不允许作为参数判断的,会报Notice警告错误;
2、empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!
3、isset():仅当null和未定义,返回false;
4、empty():""、0、"0"、NULL、FALSE、array(),未定义,均返回false;
5、is_null():仅判断是否为null,未定义 报警告;
6、变量本身作为参数,与empty()一致,但接受未定义变量时,报警告;
五、strlen()与mb_strlen的作用与区别
在PHP中,strlen与mb_strlen是求字符串长度的函数
PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍(在 UTF-8编码下,一个汉字占3个字节)。
采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用 mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过 mb_internal_encoding()函数得到。
需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。
六、PHP 如何获取客户端的IP地址
$_SERVER['REMOTE_ADDR'] ; 通过全局数组来获得
getenv('REMOTE_ADDR') ; 通过环境变量来获得
当客户机使用代理的时候获取不到真实的IP地址