时间:2021-07-01 10:21:17 帮助过:5人阅读
1、 请简述echo、print和print_r的区别? 答:echo和print实际上都不是函数,而是一个语法结构。不同的是echo返回值是void,并且可以输出多个参数值;而print返回值是int(总是返回1),且只能输出一个字符串值。Print_r是一个输出函数,返回值为boolean型,如果给出的是 string、integer或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素,并将把数组的指针移到最后边,使用 reset() 可让指针回到开始处。object与数组类似。 2、 请简述一下htmlspecialchars和htmlentities的区别? 答:这两个函数的功能都是将特殊字符转换为HTML字符编码(有& ' " < 和 > 这几个特殊符号),防止字符标记被浏览器执行。但是 htmlentities将转换所有的html标记,连同里面的它无法识别的中文字符也给转化了。 3、 请简述func_get_args和func_num_args的功能。 答:①int func_num_args( void )-- 这个函数返回传递到目前定义函数的参数数目;②array func_get_args (void )-- 这个函数返回的是包含目前定义函数所有参数的一个数组;③mixed func_get_arg ( int $arg_num )-- 函数返回的是指定位置的参数的值 4、 请列举一下php错误日志处理的方法。 答:对于PHP开发者来说,一旦某个产品投入使用,应该立即将display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。如果需要将程序中的错误报告写入错误日志中,只要在PHP的配置文件中,将配置指令log_errors开启即可。错误报告默认就会记录到Web服务器的日志文件里,例如记录到Apache服务器的错误日志文件error.log中。当然也可以记录错误日志到指定的文件中或发送给系统syslog,分别介绍如下: ①??使用指定的文件记录错误报告日志 如果使用指定的文件记录错误日志,一定要确保将这个文件存放在文档根目录之外,以减少遭到攻击的可能。并且该文件一定要让PHP脚本的执行用户(Web服务器进程所有者)具有写权限。假设在Linux操作系统中,将/usr/local/目录下的error.log文件作为错误日志文件,并设置Web服务器进程用户具有写的权限。然后在PHP的配置文件中,将error_log指令的值设置为这个错误日志文件的绝对路径。需要将php.ini中的配置指令做如下修改: 1. error_reporting = E_ALL;将会向PHP报告发生的每个错误?? 2. display_errors = Off;不显示满足上条指令所定义规则的所有错误报告?? 3. log_errors=On;决定日志语句记录的位置?? 4. log_errors_max_len = 1024;设置每个日志项的最大长度?? 5. error_log = /usr/local/error.log; 指定产生的错误报告写入的日志文件位置 PHP的配置文件按上面的方式设置完成以后,并重新启动Web服务器。这样,在执行PHP的任何脚本文件时,所产生的所有错误报告都不会在浏览器中显示,而会记录在自己指定的错误日志/usr/local/error.log中。此外,不仅可以记录满足error_reporting所定义规则的所有错误,而且还可以使用PHP中的error_log()函数,送出一个用户自定义的错误信息。该函数的原型如下所示: 1. bool error_log ( string message [, intmessage_type? [, string destination [,string extra_headers]]] )? 此函数会送出错误信息到Web服务器的错误日志文件、某个TCP服务器或到指定文件中。该函数执行成功则返回TRUE,失败则返回FALSE。第一个参数message 是必选项,即为要送出的错误信息。如果仅使用这一个参数,会按配置文件php.ini中所设置的位置处发送消息。第二个参数message_type为整数值:0表示送到操作系统的日志中;1则使用PHP的Mail()函数,发送信息到某E-mail处,第四个参数extra_headers亦会用到;2则将错误信息送到TCP 服务器中,此时第三个参数destination表示目的地IP及Port;3则将信息存到文件destination中。 ②错误信息记录到操作系统的日志里? 错误报告也可以被记录到操作系统日志里,但不同的操作系统之间的日志管理有点区别。在Linux上错误语句将送往syslog,而在Windows上错误将发送到事件日志里。如果希望将错误报告写到操作系统的日志里,可以在配置文件中将error_log指令的值设置为syslog。具体需要在php.ini中修改的配置指令如下所示: 1. error_reporting=E_ALL;将会向PHP报告发生的每个错误?? 2. display_errors = Off ;不显示满足上条指令所定义规则的所有错误报告?? 3. log_errors = On;决定日志语句记录的位置?? 4. log_errors_max_len = 1024;设置每个日志项的最大长度?? 5. error_log = syslog;指定产生的错误报告写入操作系统的日志里? 除了一般的错误输出之外,PHP还允许向系统syslog中发送定制的消息。虽然通过前面介绍的error_log()函数,也可以向syslog中发送定制的消息,但在PHP中为这个特性提供了需要一起使用的4个专用函数。分别介绍如下: define_syslog_variables()? 在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。 openlog() 打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数。? syslog() 该函数向系统日志中发送一个定制消息。需要两个必选参数,第一个参数通过指定一个常量定制消息的优先级。例如LOG_WARNING表示一般的警告,LOG_EMERG表示严重地可以预示着系统崩溃的问题,一些其他的表示严重程度的常量可以参考官方文档使用。第二个参数则是向系统日志中发送的定制消息,需要提供一个消息字符串,也可以是PHP引擎在运行时提供的错误字符串。 closelog() 该函数在向系统日志中发送完成定制消息以后调用,关闭由openlog()函数打开的日志连接。如果在配置文件中,已经开启向syslog发送定制消息的指令,就可以使用前面介绍的四个函数发送一个警告消息到系统日志中,并通过系统中的syslog解析工具,查看和分析由PHP程序发送的定制消息。 5、 请简述一下include、include_once、require和require_once的区别?require和include的效率哪个高? 答:include和require语句包含并运行指定文件。区别是require是编译包含,只要有引入就会包含,而且如果包含的文件出现异常,怎会抛出异常停止执行;而include是运行包含,只有执行到include语句时,才包含引入文件,并且如果包含的文件出现异常,怎会抛出异常继续执行。 ???????? include_once()函数的作用与include相同,不过它会首先验证是否已经包含了该文件。如果已经包含,则不再执行include_once。否则,则必须包含该文件。Require_once()同include_once()相同,区别同上。 Php在遇到include时就解释一次,如果页面中出现10次include,php就解释10次, 而php遇到require时只解释一次,即使页面出现多次require也只解释一次,因此require 的执行表率比include高。 6、 $_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什么 答:它们都是PHP预定义变量。 ???????? $_REQUEST用来获取post或get方式提交的值 ???????? $_POST用来获取post方式提交的值 ???????? $_GET用来获取get方式提交的值 ???????? $_COOKIE用来获取cookie存储的值 ???????? $_SESSION用来获取session存储的值 ???????? $_FILE用来获取上传文件表单的值 7、 数组中下标最好是什么类型的,为什么? 答:数组的下标最好是数字类型的,数字类型的处理速度快。 8、 ++i和i++哪一个效率高,为什么? 答:++i效率比i++的效率更高,因为++i少了一个返回i的过程。 9、 magic_quotes_gpc、magic_quotes_runtime的意思是什么? 答:Magic_quotes_gpc是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的所有的 ' (单引号)、" (双引号)、\(反斜杠)和 NUL's 被一个反斜杠自动转义。 ???????? magic_quotes_runtime是php配置文件中的,如果设置为on,则大多数返回任何形式外部数据的函数,包括数据库和文本段将会用反斜线转义引号。如果启用了 magic_quotes_sybase,单引号会被单引号转义而不是反斜线。(特性已自PHP 5.3.0 起废弃并将自 PHP 5.4.0起移除。) 10、你对Memcach的理解,优点有哪些? 答:Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件, 下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache 做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。 ???????? Memcache的优点:稳定、配置简单、多机分布式存储、速度快。 11、表单中 get与post提交方法的区别? 答:get用户端将数据加到URL后,格式为”?字段1=输入数据1&字段2=输入数据2&..."。由于get提交参数后会在地址栏中显示出来,所以会产生严重的安全问题。并且get传输的数据量小,这主要是因为受url长度限制; ???????? post方式提交,就不会使用url传参数,而且数据量几乎没有限制,这样可以提交大量的数据,安全性可靠! 12、数据库中的事务是什么? 答:数据库事务是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。 13、优化MYSQL数据库的方法。 答:(1)数据库设计方面,要有良好的数据库结构,必要的时候,去正规化,允许部分数据冗余,避免JOIN操作,以提高查询效率,并检查有没有少加索引 ?(2)系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档. (3)数据库集群,主服务器Read &write,从服务器read only,或者N台服务器,各机器互为Master (4)写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句 ?(5)只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) … where article_id = ? 就可以了,不要先select * … where article_id = ?然后msql_num_rows.只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update … set title = ? where article_id = ?不要set content = ?(大文本) ?(6)必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度. 14、对于大流量的网站,您采用什么样的方法来解决访问量问题? 答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,大量采用缓存队列,程序功能规则,实现网站的静态化,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量。 15、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别 答:int是数字类型,char固定长度字符串,varchar可变长度字符串,datetime日期时间型,text文本字符串。 ???????? char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节). ???????? 在MySQL中用来判断是否需要进行对据列类型转换的规则 1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的. 2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的. 3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.例外:长度小于4个字符的char数据列不会被转换为varchar类型 建意: myisam 存储引擎建议使用固定长度,数据列代替可变长度的数据列。 memory存储引擎目前都使用固定数据行存储,因此无论使用char varchar列都没关系, innodb 存储引擎建意使用varchar 类型 16、一些编译php时的configure 参数 答:./configure --prefix=/usr/local/php-----php安装目录 –with-config-file-path=/usr/local/php/etc----指定php.ini位置 --with-mysql=/usr/local/mysql/----mysql安装目录,对mysql的支持 –with-mysqli=/usr/local/mysql/bin/mysql_config----mysqli文件目录,优化支持 --with-jpeg-dir=/usr/local/jpeg/----打开对jpeg图片的支持 --with-freetype-dir=/usr/local/freetype/----打开对freetype字体库的支持 --with-png-dir=/usr/local/libpng---打开对png图片的支持 --with-gd=/usr/local/gd/----打开gd库的支持 --with-curl=/usr/local/curl/----打开对cURL库支持 --with-libxml-dir=/usr/local/libxml2/----打开libxml2库的支持(libxml2软件包提供允许用户操控XML文件的函数库,包含有读、修改和写XML和HTML文件支持) --with-zlib=/usr/local/zlib/----打开zlib库的支持(zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并能检测解压出来的数据的完整性。zlib 也支持读写 gzip (.gz) 格式的文件) --with-iconv-dir=/usr/local/libiconv/----开启iconv函数库的支持,实现字符集间的转换 --with-mcrypt=/usr/local/libmcrypt/----开启mcrypt加密模块的支持 --with-openssl=/usr/local/openssl/----开启OpenSSL模块,可以产生、验证签名和加密解密数据 --with-mhash=/usr/local/mhash/---开启对hash函数库的支持 --enable-gd-native-ttf-----支持TrueType字符串函数库 --enable-soap-----开启对soap的支持(wenbservice) --enable-sockets-----打开 sockets 支持 --enable-mbstring-----多字节,字符串的支持 --enable-zip -----打开对zip的支持 --enable-fpm-----开启PHP-FPM的支持 --disable-debug----关闭调试模式 17、使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请打开mod_rewrite. 答:1.启用mod_rewrite模块,打开Apache2\conf\httpd.conf搜索 : LoadModulerewrite_module modules/mod_rewrite.so (Apache2是这个)去掉前面的# 2. 找到AllowOverride None 改成 AllowOverride All。注:AllowOverride 的参数设置为ALL,表示整台服务器上都支持URL规则重写。Apache 服务器要读每个网站下目录下的 .htaccess 文件。如果没有这个文件,或者这个文档没有定义任何关于URL重写的规则就不会有任何效果。 3.对于不同的网址,需要在APACHE中增加如下内容 /*引号里代表你的web存放目录*/ /*如果是Linux,只要你定位到你网站目录即可*/ Options FollowSymLinks 4.重启apache服务器,先按stop再start。 5.在你需要URL重写的网站目录下放一个.htaccess文件,文件名是.htaccess,Windiws下不能直接建立,你可以用记事本另存为。注:我测试的时候在每个需要伪静态的目录下都存放了对应的.htaccess文件,同时在httpd.conf文件中像第三步那样对相关的目录添加了相应的 6.在.htaccess中通过正则表达式映射需要伪静态的页面。
|