您的位置:首页 > 编程语言 > PHP开发

PHP 基础问答01

2013-05-25 09:49 169 查看
// 表单中 get与post提交方法的区别?

get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.

post相对要比get安全,post的传输大小可以在php.ini中设置默认为2M

// session与cookie的区别?

session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放

cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。session 都可以设置他们的生存时间。

// 数据库中的事务是什么?

对数据的完整性,如果程序操作成功则所有的单元都会成功,如果在执行过程中有一个操作失败,则整个操作程序都会失败,进行事物回滚。

// echo(),print(),print_r(),var_dump()的区别

echo() 用来输出一个或多个字符串,echo是php语句,是语言结构 没有返回值 比 print 快

print() print 与echo相同 用来输出一个或者多个字符串, print是一个函数 返回int类型的值 只能打印出 int string

print_r() 用来打印数组或对象 返回bool类型的值,按结构输出变量的值

var_dump() 可以打印出复杂类型变量的值和类型

// 语句include和require的区别是什么?为避免多次包含同一文件应该怎么办?

include 引进,当发生错误时 会警告 但是程序会继续执行

require 引进,当发生错误时 会报错 程序禁止执行 相对来说require 比 include安全

如果include 与 require 都不存在文件 include 会警告 require会报错 并程序禁止执行

// 如何修改SESSION的生存时间?

session_set_cookie_params('1*3600');

// 在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?

<<<show

这里面是我的字符串

show;

// 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?

传值:在函数内部对值的修改不会影响函数外部的值。

传引:在函数内部操作会对函数外部的值有影响

传值 引用大的字符串会占用一些系统资源,传引则不会。如果不希望改变函数外部的值,则使用传值。

// 在PHP中error_reporting这个函数有什么作用?

设置PHP报错级别 输出错误信息。

// error_reporting(2047)?

控制输出全部错误信息 相当于: error_reporting = E_ALL

// JS表单弹出对话框函数是?获得输入焦点函数是?

alert()

onfocus()

// foo()和@foo()之间有什么区别?

@foo()禁止错误输出页面上,很多应用到 @mysql_query(); @mysql_fetch_array();

// mysql_fetch_row() 和 mysql_fetch_array 之间有什么区别?

mysql_fetch_row() 从结果集中返回一行数组作为数字数组,如果没有返回一行或者多行则返回false

mysql_fetch_array() 从结果集中返回一行数组作为关联数组,或者数字数组 两者兼得,如果没有返回一行或者多行 则返回false

mysql_fetch_asoc(); 从结果集中返回一行数组作为关联数组, 如果没有返回一行或者多行,则返回false

// GD库是做什么用的?

GD库提供了很多处理图片的API 可以利用GD库的函数来处理图片,如缩略图,数据生成公司报表,给图片添加水印等。

// 请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别

int : 数字类型

char : 字符串类型

varchar : 字符串类型

datetime: 时间格式类型

text : 文本字符串

char 是固定字符串长度 varchar 字符串长度是可变化的 char在做搜索的时候查询速度比varchar快 而varchar 省系统资源

// 请写出PHP5权限控制修饰符?

public private protected

// 请写出php5的构造函数和析构函数?

__construct

__destruct

// MYSQL取得当前时间的函数是?,格式化日期的函数是?

now()

strtotime()

// 数组函数 arsort 的作用?

对数组进行逆向排序 并 保持索引关系

// 类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是

serialize()/unserialize()

// 一个函数的参数是不能对变量的引用,除非在php.ini中把

allow_call_time_pass_reference 设置为 on

// 设置POST 上传文件的大小 在php.ini 中设置

upload_file_filesize

post_max_size

// JS的转向函数是?怎么引入一个外部JS文件?

。window.location.href

。<script type="text/javascript" src="js/js_function.js"></script>

指出一些在PHP输入一段HTML代码的办法。

。echo "字符串";

。print("字符串");

。print_r("字符串");

。echo <<<show

字符串

show;

// 以Apache模块的方式安装PHP,在文件http.conf中首先要用语句什么语句加载动态装载PHP模块?然后再用语句什么语句使得Apache把所有扩展名为php的文件都作为PHP脚本处理。

。LoadModule php5_module "c:/php/php5apache2.dll"

。AddType application/x-httpd-php .php,

// reference 跟一个正规的变量有什么分别?如何 pass by reference?在什么情况下我们需要这样做?

Reference 传送的是变量的地址而非它的值,所以在函式中改变一个变量的值时,整个应用都见到这个变量的新值。

一个正规变量传送给函式的是它的值,当函式改变这个变量的值时,只有这个函式才见到新值,应用的其他部分仍然见到旧值。

$myVariable = "its' value";

Myfunction(&$myVariable); // 以 reference 传送参数

以 reference 传送参数给函式,可以使函式改变了的变量,即使在函式结束后仍然保留新值。

// 函式可以用来在现正执行的脚本中插入函式库?

对这道题目不同的理解会有不同的答案,

我的第一个想法是插入 PHP 函式库不外乎 include()、include_once()、require()、require_once(),

但细心再想,“函式库”也应该包括 com 物件和 .net 函式库,所以我们的答案也要分别包括 com_load 和 dotnet_load,

下次有人提起“函式库”的时候,别忘记这两个函式。

// 你如何替 PHP 的应用程式侦错?

我并不常这样做,我曾经试过很多不同的侦错工具,在 Linux 系统中设定这些工具一点也不容易。不过以下我会介绍一个近来颇受注目的侦错工具。

PHP - Advanced PHP Debugger 或称 PHP - APD,第一步是执行以下的指令安装:

pear install apd安装后在你的脚本的开头位置加入以下的语句开始进行侦错:

apd_set_pprof_trace();执行完毕,打开以下档案来查阅执行日志:

apd.dumpdir

你也可以使用 pprofp 来格式化日志。

详细的资料可以参阅 http://us.php.net/manual/en/ref.apd.php。

// “===”是什么?试举一个“==”是真但“===”是假的例子。

“===”是给既可以送回布尔值“假”,也可以送回一个不是布尔值但却可以赋与“假”值的函式,strpos() 和 strrpos() 便是其中两个例子。

问题的第二部份有点困难,想一个“==”是假,但是“===”是真的例子却很容易,相反的例子却很少。但我终于找到以下的例子:

if (strpos("abc", "a") == true){

// 这部分永不会被执行,因为 "a" 的位置是 0,换算成布尔值“假”

}

if (strpos("abc", "a") === true){

// 这部份会被执行,因为“===”保证函式 strpos() 的送回值不会换算成布尔值.

}

// 在一个类别内如何存取这个类别的特性及变改它的值?

使用语句:$this->propertyName,例如:

class myclass{

private $propertyName;

public function __construct(){

$this->propertyName = "value";

}

}

// 以下哪一个函式可以把浏览器转向到另一个页面?

redir()

这不是一个 PHP 函式,会引致执行错误。

header()

这个是正确答案,header() 用来插入卷头资料,可以用来使浏览器转向到另一个页面,例如:

header("Location: http://www.search-this.com/");

location()

这不是一个 PHP 函式,会引致执行错误。

redirect()

这不是一个 PHP 函式,会引致执行错误。

// 以下哪一个函式可以用来开启档案以便读/写?

fget()

这不是一个 PHP 函式,会引致执行错误。

file_open()

这不是一个 PHP 函式,会引致执行错误。

fopen()

这是正确答案,fopen() 可以用来开启档案以便读/写,事实上这个函式还有很多选项,详细资料请参阅 php.net

open_file()

这不是一个 PHP 函式,会引致执行错误。

// 下面的代码用来做什么?请解释。

// ereg_replace :

在字符串中搜索正则表达式所有匹配的项,并替换为指定的字符,区分大小写。

ereg_replace() 函数 与 preg_replace() 函数效果相同,建议用preg_replace() 速度要比 ereg_replacea() 函数快

$date='08/26/2003';

print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\2/\\1/\\3",$date);

这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。

():代表一个表达式。

[]: 代表表达式的开始结束

/: 代表匹配边界。进行开始匹配结束匹配

\\2/\\1/\\3

代表前面匹配到的值替换为开始与结束

// 给你一行文字 $string,你会如何编写一个正规表达式,把 $string 内的 HTML 标签除去?

strip_tags()

// 去除字符串中的HTML和PHP标签

有两个参数,第一个为要去掉的变量,第二个是哪个标签不被过滤

正则表达式方式

@ $stringOfText = "<p>This is a test</p>";

$expression = "/<(.*?)>(.*?)<\/(.*?)>/";

echo preg_replace($expression, "\\2", $stringOfText);

@ $expression = "/(<[^>]*>)/";

echo preg_replace($expression, "", $stringOfText);

// 你如何利用 PHP 解决 HTTP 的无状态本质?

最主要的俩各选择是 session 和 cookie。使用 session 的方法是在每一页的开始加上 session_start(),然后利用 $_SESSION 散列表来储存 session 变量。

至于 cookie 你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 变量。

还有一个不那么可靠的方法,就是利用访客的 IP 地址,这个方法有特定的危险性。

// 打开php.ini中的Safe_mode,会影响哪些函数?至少说出6个。

1:用户输入输出函数(fopen() file() require(),只能用于调用这些函数有相同脚本的拥有者)

2:创建新文件(限制用户只在该用户拥有目录下创建文件)

3:用户调用popen() systen() exec()等脚本,只有脚本处在safe_mode_exec_dir配置指令指定的目 录中才可能

4:加强HTTP认证,认证脚本拥有者的UID的划入认证领域范围内,此外启用安全模式下,不会设置PHP_AUTH

5:mysql服务器所用的用户名必须与调用mysql_connect()的文件的拥有者用户名相同

6:受影响的函数变量以及配置命令达到40个

// 写个函数来解决多线程同时读写一个文件的问题。

flock($hander,LOCK_EX); 这个可是内置函数啊,

这个尚待解决

// echo count("abc"); 输出什么?

答:"1"

count — 计算数组中的单元数目或对象中的属性个数

int count ( mixed $var [, int $mode ] ), 如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。

对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。

// MySQL数据库,一天一万条以上的增量,怎么优化?

答:我们曾做过短信SP的东西,有个短信发送的日志表,每天增量也很大,处理的方法是按月进行分表,因为是日志表,主要操作是insert操作,所以每月初自动生成新的数据表,数据插入到对应月份的那张数据表。[比如表明前缀是cdb_smslog 后面加200910 及时cdb_smslog_200910]

其他优化方式暂时想不起来,对于myISAM, 考虑容量的话,也有优化的方案

但是对于那种查询操作的表的话,我的思路是根据作者的发布时间存储到不同的表里面

所以对sina那种海量数据的处理很感兴趣,很好奇他们的处理方法,[以前同事说sina 的首页同时操作10多个数据库]

// 请举例说明在你的开发过程中用什么方法来加快页面的加载速度

A.生成静态HTML

B.生成xml

C.可不用数据库的尽量不用数据库把变量参数存于文本.

D.用ZEND加速

// 求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数

(strtotime(‘2007-3-6’)-strtotime(‘2007-2-5’))/3600*24

// 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

select case when A>B then A else B end,

case when B>C then B else C end

From test

// 请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析?

(1)选择最有效率的表名顺序

(2)WHERE子句中的连接顺序

(3)SELECT子句中避免使用‘*’

(4)用Where子句替换HAVING子句

(5)通过内部函数提高SQL效率

(6)避免在索引列上使用计算。

(7)提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。

// 请举例说明在你的开发过程中用什么方法来加快页面的加载速度

要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具啦

// 防止SQL注射漏洞一般用函数?

addslashes

// 传值是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 是传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象

// 如何通过javascript判断一个窗口是否已经被屏蔽

获取open()的返回值,如果是null,就是屏蔽了

// javascript里打开一个新窗口是什么方法

window.open();

// 说明php 和smarty,thinkphp之间的关系?

Php 包含Smarty和Thinkphp

Smarty是PHP模版引擎

Thinkphp 是PHP框架

// 在php中 break 与 continue 的区别?

break: 跳出整个循坏体

continue: 跳过本次循坏,继续下一次循坏

// PHP中使用的四种标量类型都是?

boolean:布尔型

float : 浮点型

int : 整型

string : 字符串型

// 如果想让下拉列表框多选,需要设置?

multiple

// 如果要上传文件,表单中要设置?

enctype="multipart/form-data"

// array_push函数用于?

将值压缩在数组的末端,键值以数字自增

// 用PHP打印出前一天的时间格式是2006-5-10 22:21:21

echo date('Y-m-d H:i:s',strtotime('-1 day'));

或者

echo date('Y-m-d H:i:s',strtotime('-1 days'));

// 用PHP写出显示客户端IP与服务器IP的代码

echo $_SERVER['SERVER_ADDR']; //服务器端

echo $_SERVER['REMOTE_ADDR'] //服务器端

// 利用域名获取ip地址

echo gethostbyname('http://www.baidu.com');

// 有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html, 如何得到它的内容?

file_get_contents('http://www.baidu.com');

// 30、执行程序段<?php echo 8%(-2) ?>将输出?

0

// 在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量?而链接到当前页面的URL记录在预定义变量?

$_SERVER[PHP_SELF]

$_SERVER['REQUEST_URL']

// 简述如何得到当前执行脚本路径,包括所得到参数?

$_SERVER['SCRIPT_FILENAME'] //得到当前脚本的路径 不包括参数

$_SERVER['QUERY_STRING'] //得到当前脚本的参数

echo $_SERVER['SCRIPT_FILENAME']."?".$_SERVER['QUERY_STRING']

// 进制运算

可以是让他模拟一些简单的字符串函数,类似 bin2hex、base_convert、base64_encode,或者单纯的,让他手动算一下 7 进制的 54321 显示为 9 进制是多少。

应该高中或者之前就能接触到 2 进制 10 进制之间的换算了吧,当然,他当时很可能没听懂。通常的情况,如果以前没留意这个问题但有理解能力的,可能能在几分钟的做出一些成功不成功的尝试。至少不应该很茫然。最糟糕的情况,连整数的最大值是多少都不知道,那就算了。

// 描述一下常见的关于读取文件内容的操作,及各自的特点

应该不用迟疑太久就把 file、fopen、file_get_contents、readfile 列出来。表现好点还可以提下 readfile 的流式读取不占内存之类的。如果看的教材太老,可能只会说 fopen。最糟糕的辩解是不说跟数据库打交道比较多,文件操作没怎么接触过,完全无视文件静态化的存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: