在什么情况下,$name和%_POST['name']可以通用:
设置PHP全局变量,在php.ini文件中register_globals = On。
在实际开发中,不推荐使用,会给程序带来安全隐患。
表单默认采用get方式传递数据
PHP的含义是什么:
PHP是Hypertext Preprocessor(超文本预处理器)的缩写,是一种服务器端的、跨平台的、HTML嵌入式的脚本语言。其独特的语法混合了C、Java和Perl语言的特点,是一种被广泛应用的开原市的多用途脚本语言,尤其适合Web开发。
PHP的优缺点:
优良的PHP代码应该是结构化的。大段的代码应该被分割整理成一个个函数或方法,而那些不起眼的小段代码则应该加上注释,以便日后清楚它们的用途,而且应该尽可能低把前台代码如HTML、Css、Js等从程序中分离出来。PHP的面向对象编程特性可以很好地帮助程序员将代码整理有序。
优良的PHP代码应该是规范化的。无论是为变量名和函数名设定命名规则,还是队一些会重复使用的过程如数据库操作和错误处理进行标准化,抑或是简单到规定好代码是怎样缩进的,这些规范化都可以让代码的可读性大大提高。
优良的PHP代码应该是自适应的。PHP有血多特性,如magic quotes和short tags,这些特性的打开和关闭会影响到程序的运行。所以,一个好的程序员应该在他的代码中加上适当的语句来使程序能够根据环境进行调整。
优良的PHP代码应该是安全的。虽然PHP是一种高效、灵活的语言,没有固定的框架,但它却把安全问题留给了程序员。对潜在安全漏洞的深刻理解,如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、代码注入漏洞、字符编码循环漏洞等,对于今天的专业程序员来说是至关重要的。
简化下面代码:
<?
echo
(
"abvcc"
.
$_GET
[
'query'
]);
?>
|
这段代码的主要问题在于它把用户提交的数据直接显示到了网页上,从而产生XSS漏洞。有很多方法可以填补这个漏洞:
<?
echo
(
"abvcc"
.htmlspecialchars(
$_GET
[
'query'
]));
?>
|
这是最低要求,XSS漏洞用htmlspecialchars()函数填补了,从而屏蔽了非法字符。
<?php
if
(isset(
$_GET
[
'query'
])){
echo
'abvcc'
,htmlspecailchars(
$_GET
[
'query'
],ENT_QUOTES);
}
?>
|
这段代码进行了如下改进:
1. <?被替换成了<?php这样更符合XML规范。
2. 在输出$_GET['query']的值之前先判断它是否为空。
3. echo命令中多余的括号被去掉了。
4. 字符串用单引号限定,从而节省了PHP从字符串中搜索可替换的变量的时间。
5. 用逗号代替句号节省了echo时间。
6. 将ENT_QUOTES表示传递给htmlspecialchars()函数,从而保证单引号也会被转移。
谈谈ASP、PHP和JSP的优缺点:
ASP是一个WEB服务器端的开发环境,通过它可以产生和运行动态的、交互的、高性能的Web服务应用程序。ASP采用脚本语言VB作为自己的开发语言。
JSP是Sun公司推出的新一地啊站点开发语言,他完全解决了目前ASP和PHP的一个通病--脚本及执行。
三者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成Servlet并有Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在ASP、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的HTML页面只依赖于Web服务器,而ASP、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送到浏览器。ASP、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。
列举PHP中数据类型转换和判断方式:
可以通过settype()函数来完成类型转换或强制类型转换:
bool settype(mixed var,string type);
type有7个可选值:boolean、float、integer、array、null、object和string。如果转换成功则返回true。
PHP内置检测类型的系列函数。可以对不同类型的数据进行检测,判断是否属于某个类型:
is_boole、is_string、is_float/is_double、is_integer/is_int、is_null、is_array、is_object、is_numeric
列举一个"=="是真,但"==="是假的例子:
通过strpos()函数查找指定字符串在另一个字符串中首次出现的位置,返回值为字符串所在的位置,如果失败则返回false。
<?php
if
(
strpos
(
"abc"
,
"a"
) == true)
//这部分代码不会被执行,因为a的位置是0,换算成boolean值是假
if
(
strpos
(
"abc"
,
"a"
) === true)
//这部分会被执行,因为===保证函数strpos的返回值不会被换算成boolean值。
?>
|
PHP编写的代码是否区分大小写:
PHP在定义变量时、获取变量的值时确定是不区分大小写的,但是与Web页面进行交互即通过GET、POST获取值时是区分大小写的。
echo("abc")这个语句会输出什么内容:
count()函数统计数组中单元的数目,任何其他类型只有一个单元,因此输出1.
在PHP中如何获取客户端和服务器端的IP地址:
获取客户端和服务器的IP地址可以通过getenv()函数来实现
如果是获取指定域名的IP地址,则使用gethostbyname()函数
getenv('REMOTE_ADDR'); getenv('SERVER_ADDR'); gethostbyname("www.baidu.com");
如何实现PHP与JSP的交互:
通过PHP内置的机制完成PHP与JSP的交互,例如:$php_java = new Java('java.lang.System');
开启php.ini文件中safe_mode选项会影响到哪些函数:
开启safe_mode函数后PHP将检查当前脚本的拥有者是否和被操作文件的拥有者相同。
pathinfo、basename、fopen和exec等函数。
mysql_fetch_row()和mysql_fetch_array()的区别:
两个函数的功能都是获取结果集中的记录,其返回值都是数组。mysql_fetch_row()函数返回的结果集是数字索引数组,mysql_fetch_array()返回的是关联数组。