标签:reference 例子 tip 适合 perm viso forms on() 结束
---恢复内容开始---
strlen 和mb_strlen 都是用于获取字符串长度的,其中strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数,如果是多字节编码,如gbk和utf8,使用strlen得到的不是字符串的个数,而是该字符串的总字节数,可以使用mb_strlen获取其字符个数,使用mb_strlen要注意两点,一是要开启mbstring扩展,二是要指定字符集。
示例:
相关题目1:实现中文字串截取无乱码的方法。
方法一,使用php内置函数 mb_substr()
方法二,自定义函数,以utf8为例,如下:
代码分析:
//u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字)
join — 别名 implode()表示将一个一维数组的值转化为字符串
array_slice() 函数在数组中根据条件取出一段值,并返回
相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
方法一,使用php内置函数,确保配置中已打开mbstring扩展
方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
代码分析:
A. split
B. implode
C. explode
D. join
答案:A
答案:1
$_SERVER[‘DOCUMENT_ROOT‘] //当前运行脚本所在的文档根目录$_SERVER[‘HTTP_HOST ‘] //当前请求的 Host: 头部的内容
$_SERVER[‘REMOTE_ADDR‘] //正在浏览当前页面用户的 IP 地址
$_SERVER[‘HTTP_REFERER‘] //链接到当前页面的前一页面的 URL 地址
$_SERVER[‘SERVER_NAME‘] //当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息,他是预定义超级全局数组中唯一的二维数组。
S_FILES[‘userfile‘][‘name‘] //客户端机器文件的原名称
$_FILES[‘userfile‘][‘type‘] //文件MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES[‘userfile‘][‘size‘] //已上传文件的大小,单位为字节
$_FILES[‘userfile‘][‘tmp_name‘] //文件被上传后在服务端储存的临时文件名
$_FILES[‘userfile‘][‘error‘] //和该文件上传相关的错误代码
二者区别只有一个,那就是对包含文件的需求程度,include就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。
而require意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。
相关题目1:What is the difference between include & include_once? include & require?(Yahoo)
相关题目2:语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。
在如何处理失败时,include() 产生一个警告而 require() 则导致一个致命错误;require_once()/include_once()
相关题目3:What functions can you use to add library code to the currently running script?(Yahoo)
include、require
POST 根据你php.ini文件配置(默认是8M)
GET的话大小限制在2KB
相关题目:表单中 get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息。
A.php:-------
<?php function fa() { echo "in Function A\n"; }?>
B.php:-------
<?php include ‘a.php‘; ?>
<?php function fb() { fa(); echo "in Function B\n"; } ?>
C.php:-------
<?php include ‘a.php‘; ?>
<?php include ‘b.php‘; ?>
<?php fa(); fb(); ?>
答案:存在问题,a.php 被包含了两次,导致fa()函数重复定义,使用include_once 避免重复包含。(此处应首先想到考点可能就是include和include_once)(总结:函数不能重复定义)
echo 是一个语言结构,输出一个或多个字符串;
print() 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表,它输出一个字符串;
print_r () 是一个函数,打印变量的信息,基本类型,数组,对象。
注意 ,是echo本身支持的一种语法,而. 则是字符串连接操作符,使用 , 的效率要高一些。
相关题目:What is the difference between "print()" and "echo( )"? (腾讯)
answer: print is a function,echo is a language construct
相关题目:求两个日期的差数,例如2009-3-1 ~ 2009-4-4 的日期差数
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
方案一:
方案二:
对字符进行编码,比如base64_encode,要保证编码是可逆的
变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。
对象默认是传引用。
需要操作原始数据,则引用,不能影响原始数据,则值传递。
相关题目1:What would the following code print to the browser? Why?
输出 10 (调用函数的题一定要考虑是否有返回值)
相关题目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)
reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。
一个regular variable传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
相关题目1:如何实现字符串翻转?
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
相关题目2:假设现在有一个字符串www.baidu.com如何使用PHP对它进行操作使字符串以moc.udiab.输出? (亿邮)
客户端IP:$_SERVER["REMOTE_ADDR"]
服务器端IP:$_SERVER["SERVER_ADDR"]
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__
获取参数,使用$_SERVER["QUERY_STRING"]
__FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
A. $users[ ] = "john";
B. array_add($users, "john"); //PHP中没有array_add这个函数
C. array_push($users, "john");
D. $users ||= "john" ;
答案:BD
isset 检测一个变量是否设置
empty 检测是否为空
注意二者的区别,如果 变量是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。
当前脚本名称:$_SERVER["PHP_SELF"] 或者 $_SERVER["SCRIPT_NAME"];
链接到当前页面的前一页面的 URL 地址:$_SERVER["HTTP_REFERER"]。
sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。
assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。
打开或者关闭错误报告,如:
error_reporting(0);
error_reporting(E_ALL & ~ E_NOTICE);
error_reporting(E_ALL);
相关题目:error_reporting(2047) 什么作用?(新浪)
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
其中,1对应E_ERROR,2对应E_WARNING,4对应E_PARSE,8对应E_NOTICE,16对应E_CORE_ERROR,32对应E_CORE_WARNING,64对应E_COMPILE_ERROR, 128对应E_COMPILE_WARNING,256对应E_USER_ERROR,512对应E_USER_WARNING,1024对应E_USER_NOTICE。error_reporting(2047)意味着上述错误都会显示出来。
hotdogok
相关题目:什么是可变变量?
获取一个普通变量的值作为这个可变变量的变量名。
定义常量:define() ,
检测常量是否定义:defined(),如
define("TEST","happy new year!");
if( defined("TEST")){
echo TEST;
}
%为取模运算,输出0
$a % $b 其结果的正负取决于 $a 的符号。
echo ((-8)%3)."<br
/>"; //输出 -2
echo
(8%(-3))."<br />"; //输出 2
arsort:对数组进行逆向排序并保持索引关系
error_reporting(2047)的作用 report All errors and warnings,见21题中相关题目。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
allow_call_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。
顶格写,并且不能包含任何其它字符除";",如:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
输出1
count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
相关题目:What will be the output of the following PHP code: (腾讯)
<?php
echo count(strlen("http://php.net"));
?>
answer: 1
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:
1) 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
2) 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。
3) 编写桌面应用程序。
你可以使用 PHP 中任何一种输出语句,包括echo、print、printf,大部分人都使用如下例的 echo:
echo "My string $variable";
你也可以使用这种方法:
echo <<<END
This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can‘t contain any extra white space.
END;
输出结果为 4
打印第一个元素:echo $arr[0];
以’,’合并成字符串:echo implode(‘,‘,$arr);
echo $a{0} 或 echo $a[0]
相关题目:$string="abcdefg",那么$string{4}的值是? (卓望)
值是 e
=== 表示全等,是指的两个变量的值和类型都相等。
如 if (strpos(‘abc‘,‘a‘) == false) 和 if (strpos(‘abc‘,‘a‘) === false)
A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);
answer:B
A. print substr($text, strchr($text, ‘:‘));
B. print substr($text, strchr($text, ‘:‘) + 1);
C. print substr($text, strpos($text, ‘:‘) + 1);
D. print substr($text, strpos($text, ‘:‘) + 2);
E. print substr($text, 0, strchr($text, ‘:‘));
answer:C
answer:A
answer:C
hello
1
ture
使用intval函数,echo intval("09"),或者使用int强制类型转换。
参考代码:
<?php
$array = array (‘a‘, ‘b‘, ‘c‘,
‘d‘);
?>
A. array_flip()
B. array_reverse()
C. sort()
D. rsort()
答案:BD
array(2,5,7)
max用法示例如下:
双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用‘‘,注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
GB2312支持的汉字较少,GBK是相比GB2312汉字更为丰富,包括全部中日韩汉字,GB18030相比GBK增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用GBK而繁体中文使用BIG5。
echo substr_count ( $text,‘g‘);
print_r($val = 333); // 正确
$a += ($b = 4) + 5; // notice,$a未定义,但可以正确运行
$foo[bar] = ‘enemy‘; // notice,最好bar加上引号
function x($a = "1", $b){} // 无,但给参数默认值应尽量从右向左
相等
相等
不相等
true true true true true false true false
aaaaaa
5 0 1
在PHP中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用global显式声明使用全局变量或直接用$_GLOBALS来引用。
5 2
1 2
array_unshift($arr,’jack’);
echo $arr[0];
echo implode(‘,’,$arr);
$arr = explode(‘,’,$str);
arsort($arr);
print_r($arr);
echo strstr($mail,‘163‘);
echo substr($mail,7);
echo substr($mail, strpos($mail, ‘@‘)+1);
$arr = explode("@",$mail); echo $arr[1];
// 注释内容 C风格的单行注释
# 注释内容 unix风格的单行注释
/* 注释内容 */ C风格的多行注释
global $a 或者 $GLOBALS[‘a‘]
aa is ‘aa‘
相关题目:字符串怎么转成整数,有几种方法?怎么实现?
1) 强制类型转换: (整型)字符串变量名;
2) 直接转换:settype(字符串变量,整型);
3) intval(字符串变量);
break 和 continue 可以用在 switch 语句中,或是循环结构中
它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而continue则表示跳出本次循环,继续下一次的循环,不会终止循环。
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
$arr[ ] = $value;
array_push($arr, $value);
array -- 声明一个数组
count -- 计算数组中的单元数目或对象中的属性个数
foreach -- 遍历数组
list -- 遍历数组
explode -- 将字符串转成数组
implode -- 将数组转成一个新字符串
array_merge -- 合并一个或多个数组
is_array -- 检查是否是数组
print_r -- 输出数组
sort -- 数组排序
array_keys -- 返回数组中所有的键名
array_values -- 返回数组中所有的值
key -- 从关联数组中取得键名
trim() -- 去除字符串首尾处的空白字符(或者其他字符)
strlen() -- 字符串长度
substr() -- 截取字符串
str_replace() -- 替换字符串函数
substr_replace() -- 对指定字符串中的部分字符串进行替换
strstr() -- 检索字符串函数
explode() -- 分割字符串函数
implode() -- 将数组合并成字符串
str_repeat() -- 重复一个字符串
addslashes(); -- 转义字符串
htmlspecialchars() -- THML实体转义
A. a
B. false
C. true
D. b
E. c
答案:B
mixed array_rand( array $input [, int $num_req ] )
从数组中随机取出一个或多个单元,它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。
如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。
所以使用array_rand函数,返回结果要么是键名,有么是数组,在这个例子中,数组是索引数组,所以返回的是整型。
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
A. 不区分
B. 区分
答案:A
函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。以
A. null
B. true
C. false
D. 1
答案:C
is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。
在下列情况下一个变量被认为是 NULL:
1) 被赋值为 NULL
2) 尚未被赋值
3) 被unset()
$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;
使用in_array 函数,代码如下:
使用array_merge()函数
$a 为false,$b = $c = 0
public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问
相关题目:请写出PHP5权限控制修饰符
private protected public
请用PHP5代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)
输出结果 10
__sleep serialize之前被调用
__wakeup unserialize时被调用
__toString 打印一个对象时被调用
__set_state 调用var_export时被调用,用__set_state的返回值作为var_export的返回值
__construct 构造函数,实例化对象时被调用
__destruct 析构函数,当对象销毁时被调用
__call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
__get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
__set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set函数
__isset 检测一个对象的属性是否存在时被调用
__unset unset一个对象的属性时被调用
__clone 克隆对象时被调用
__autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用
相关题目:请写出php5的构造函数和析构函数
构造函数:__construct
析构函数:__destruct
双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("itcast");
class myclass{};
相关题目:如何声明一个名为“myclass”的没有方法和属性的类?
$obj= new myclass();
相关题目:如何实例化一个名为“myclass”的对象?
使用语句:$this->propertyName,例如:
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and
multiple PHP blocks.
答案: B
serialize() 和 unserialize()
A. tmp
B. Picachu
C. disName
D. Doraemon
E. 无输出
答案:D
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字 abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
接口是通过interface关键字来声明的,接口中的成员常量和方法都是public的,方法可以不写关键字public,
接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字const,例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用,即:类名:: 类常量名。
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
A. MVC
B. 代理模式
C. 状态模式
D. 抽象工厂模式
E. 单件模式
答案:E
A. 1个
B. 2个
C. 取决于系统资源
D. 3个
E. 想要几个有几个
答案:A
A. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类b继承自类a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用parent::__construct()来显示调用父类构造函数。
是的
单例模式,工厂模式
单例模式 实现代码 见 第二题
速度快,编译型,缓存技术,插件机制,强大的表现逻辑
safe_mode,php安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。
注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。
PHP 可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为 NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
核心思路:加锁
参考方案1:
参考方案2:
相关题目:使用五种以上方式获取一个文件的扩展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name)
创建类别表如下:
CREATE TABLE category(
cat_id smallint unsigned not null auto_increment primary key comment ‘类别ID‘,
cat_name VARCHAR(30) NOT NULL DEFAULT ‘‘ COMMENT ‘类别名称‘,
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ‘类别父ID‘
)engine=MyISAM charset=utf8;
编写一个函数,递归遍历,实现无限分类
mysql_fetch_row() 把数据库的一列储存在一个以零为基数的数组中,第一栏在数组的索引 0,第二栏在索引 1,依此类推。
mysql_fetch_assoc() 把数据库的一列储存在一个关联数组中,数组的索引就是字段名称,例如我的数据库查询送回“first_name”、“last_name”、 “email”三个字段,数组的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
方法1(对于PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
由模型(model),视图(view),控制器(controller)完成的应用程序,model层负责提供数据,和数据库有关的操作都交给模型层来处理,view层则提供交互的界面,并输出数据,而controller层则负责接收请求,并分发给相应的model来处理,然后调用view层来显示。
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。
A. fget();
B. file_open();
C. fopen();
D. open_file();
答案:C
fget() 这不是一个 PHP 函数,会引致执行错误。
file_open() 这不是一个 PHP 函数,会引致执行错误。
fopen()这是正确答案,fopen() 可以用来开启档案以便读写。
open_file() 这不是一个 PHP 函数,会引致执行错误。
smarty是一个模板引擎,使用smarty主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。 如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。
相关题目1:能够使HTML和PHP分离开使用的模板
smarty,phplib等
相关题目2:您是否用过模板引擎? 如果有您用的模板引擎的名字是?
Smarty
方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
header("Location: 网址"); //直接跳转
header("refresh:3;url=http://axgle.za.net"); //三秒后跳转
方法二:利用meta
echo "<meta http-equiv=refresh content=‘0; url=网址‘>";
可以
SVN 或者 CVS
相关题目:您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
TortoiseSVN-1.2.6
过滤javascript脚本参考:
方案一,使用PHP 内建函数 strip_tags() 除去 HTML 标签
方案二,自定义函数,如下:
preg_match(‘/^[\w\-\.]+@[\w\-]+(\.\w+)+$/‘, $email);
相关题目:请用正则表达式写一个函数,验证电子邮件的格式是否正确。 (鑫众人云)
主要区别有以下三种:
1) preg_replace()里面的正则可以写成型如:"/.xxx/"而ereg_replace()里面的正则需写成型如"xxx"
2) preg_replace()能操作数组,而ereg_replace()不可以
3) 在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
使用 Perl 兼容正则表达式语法的 preg_match() 函数通常是比 ereg() 更快的替代方案。
首先进入php安装目录
php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件
php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记
编写如下函数:
function getAttrValue($str, $tagName, $attrName){
$pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\‘\\\"]?)([^\\‘\\\"]*)
(\\2))*\\s+" . $attrName . "\\s*=\\s*([\\‘\\\"]?)([^\\‘\\\"]*)(\\5)
(\\s+\\w+\\s*=\\s*([\\‘\\\"]?)([^\\‘\\\"]*)(\\9))*\\s*>/i";
$arr = array();
$re = preg_match($pattern1, $str, $arr);
if($re){
echo "<br />\$arr[6]={$arr[6]}";
}
else{
echo "<br />没找到。";
}
}
测试:
$str1 = "<test attr=‘ddd‘>";
getAttrValue($str1,"test","attr"); //找test标签中attr属性的值,结果为ddd
$str2 = "<test2 attr=‘ddd‘ attr2=‘ddd2‘ t1=\"t1 value\" t2 = ‘t2 value‘>";
getAttrValue($str2,"test2","t1"); //找test2标签中t1属性的值,结果为t1 value
这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。
输出26/08/2003
答案:B
redir() 这不是一个 PHP 函数,会引致执行错误。
header() 这个是正确答案,header()函数发送头信息,可以用来使浏览器转向到另一个页面,例如:header("Location: http://www.search-this.com/")。
location() 这不是一个 PHP 函数,会引致执行错误。
redirect() 这不是一个 PHP 函数,会引致执行错误。
A. show_errors, enable
B. show_errors, show
C. register_globals, enhance
D. register_globals, inject
答案:C
allow_call_time_pass_reference
是否启用在函数调用时强制参数被按照引用传递
请注意:
4) 需要处理完整的 html 页面,即不光此 meta 语句
(2) 忽略大小写
11. ‘ 和 " 在此处是可以互换的
12. ‘Content-Type‘ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk‘ 两侧的不行
13. 注意处理多余空格
编写正则表达式如下:
$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*([‘\"]?)Content-Type(\\2)\\s*content\\s*=\\s*([‘\"])
text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";
使用 key() 可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。使用array_keys()则可以得到数组中所有的键名。使用foreach结构foreach($arr as $key=>$value) 可以通过$key 和 $value分别获取键名和值。
$data = array(
0 => array(‘id‘ => 8, ‘name‘ => ‘name1‘),
1 => array(‘id‘ => 10, ‘name‘ => ‘name2‘),
2 => array(‘id‘ => 15, ‘name‘ => ‘name3‘)
);
写出在模板页的代码?若用foreach语句又要怎样显示呢?
用section语句:
<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br />
name:<{$data[test].name}><br /><br />
<{sectionelse}>
数组为空
<{/section}>
用foreach语句:
<{foreach from=$data item=test}>
id:<{$test.id}><br />
name:<{$test.name}><br /><br />
<{foreachelse}>
数组为空
<{/foreach}>
A. ******xyz
B. *****_xyz1
C. ******xyz2
D. _*xyz
答案:C
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:B
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:C
匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串
可以,还可以在需要控制的子目录下创建.htaccess文件,写入访问控制。
从以下几个方面考虑:
1) 数据库中库和表都用utf8编码
2) php连接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);
3) php文件指定头部编码为utf-8 header(“content-type:text/html;charset=utf-8”);
4) 网站下所有文件的编码为utf8
5) html文件指定编码为utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
md5($str);
sha1($str);
htmlspecialchars 或者 htmlentities
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等
FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
上传文件的表单使用post方式,并且要在form中添加enctype=‘multipart/form-data‘。
一般可以加上隐藏域:<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) 自定义文件大小限制逻辑。即使服务器的限制是能自己决定,也会有需要个别考虑的情况。所以这个限制方式经常是必要的。
UBB代码是HTML的一个变种,通过程序自定义我们的标签,比如“[a]PHP中UBB的使用[/a]”这样的标签,其实质就是查找[a][/a]标签,将其替换成<a></a>的标准html,说白了,就是将标准的html标记通过技术手段使其简化,其输出出来的结果还是标准的 html。
明白了ubb的原理,那么再制作一个简单的 ubb 编辑器就不难了,和 fck 之类的编辑器比较起来,ubb 代码最大的优点就是代码简单,功能很少,简单的ubb只需要一个文件,而且 ubb 标签可以自己来定义,更改起来很方便,在 php 中就是利用替换函数就可以将 html 进行标签化,输出时进行标签的转化。
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名,这样就避免了重名。
中,用来判断错误是如何发生的。 (奇矩互动)
debug_print_backtrace()
1),array(‘id‘ => 2),……) id=>0-10000 ,怎么判断当id=>500,让输出的值在HTML里变为红色? (亿邮)
设数组分配过来的数组名为 $ids
{section name = temp loop = $ids}
{if $ids[temp].id == 500}
<span style = ‘color: #f00;’>{$ids[temp].id}</span>
{esle}
{$ids[temp].id}
{/if}
{/section}
使用{$smarty.now} 来获取当前时间,得到的是unix系统时间戳
使用变量调节器进行格式化,如下:
{$smarty.now | date_format : “%Y-%m-%d %H:%M:%S” }
$smarty.get.变量 #显示通过get方式传过来的指定变量的值
$smarty.post.变量 #显示通过post方式传过来的指定变量的值
$smarty.cookies.变量 #显示通过cookie中指定变量的值
$smarty.server.SERVER_NAME #显示server变量值,$_SERVER系列变量
$smarty.env.PATH #显示系统环境变量值,$_ENV系列变量
$smarty.session.变量 #显示session中指定变量的值
$smarty.request.变量 #显示通过post、get、cookie中指定变量的值
使用模板分隔符包含,传递参数则使用HTML属性的方式,例如:
{html_image file="pumpkin.jpg"}
mysql,gd,pdo,XML,zip,filesystem,mail等
utf8_to_gb2312 或者 utf8togb2312
<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处理。
D:\src\init.php:7) in D:\src\init.php on line10通常什么情况下php会报该警告信息?(卓望)
一般是在header、set_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息
可以,COOKIE和SESSION都是用来实现会话机制的,由于http协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的 状态,需要有这么一个机制----会话机制。
COOKIE:将会话信息的保存到浏览器端。
SESSION:将会话信息保存到服务器端。
SESSION默认情况下是基于COOKIE的,对于SESSION来说,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到cookie当中。
如果禁用了COOKIE,则基于COOKIE的SESSION不好使了,我们可以使用get,传递SID,或者直接开启透明的SID(此时需要关闭基于cookie的SESSION配置项)。
相关题目:SESSION与COOKIE的区别?
COOKIE保存在客户端,而SESSION则保存服务器端。
从安全性的角度来讲,SESSION的安全性要高。
从保存内容的类型的角度来讲,COOKIE只保存字符串(及能够自动转换成字符串),而session则可以保存所有的数据类型。
从保存内容的大小的角度来讲,COOKIE保存的内容是有限制的,比较小,而SESSION基本上没有这个限制。
从性能的角度来讲,用SESSION的话,对服务器的压力会更大一些。
用户名(username):温柔一刀
密码(pwd):&123=321&321=123&
个人简介(intro):Hello world!
且该http server需要以下cookie来进行简单的用户动作跟踪:
cur_query:you&me
last_tm:...(上次请求的unix时间戳,定为当前请求时间前10分钟)
cur_tm:...(当前请求的unix时间戳)
设置超时为10秒,发出请求后,将http server的响应内容输出 (腾讯)
参考代码:
if($fp = fsockopen(‘localhost‘, ‘80‘)) {
//连接成功
$request_data = "POST /2.php HTTP/1.1" . "\r\n"; //请求行
$request_data .= "Host: localhost" . "\r\n"; //host头信息
$request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host头信息
$request_content = "username=".urlencode(‘温柔一刀‘)."&pwd=".urlencode(‘&123=321&321=123&‘)."&intro=".urlencode("Hello world!");
$request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";
$request_data .= "Content-Length: " . strlen($request_content) . "\r\n";
$cur_query = urlencode("you&me");
$last_tm = time()-10*60;
$cur_tm = time();
$request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";
$request_data .= "\r\n"; //请求头信息结束时的空行
//请求主体数据部分
$request_data .= $request_content;
//利用建立好的通道,将数据发送过去
fwrite($fp, $request_data); //写入数据(发送数据)
//读取数据
while(!feof($fp)) { //判断是否没有到文件末尾
$resp_data = fgets($fp);
echo $resp_data . ‘<br>‘;
}
}
未经授权:访问由于凭据无效被拒绝
header("HTTP/1.0 404 Not Found")
要注意这里的生存时间指的是什么? 由于session默认是基于cookie的,也就是说使用session会话技术,首先是将session数据保存到服务器端,其次会将sessionID 保存到浏览器端,保存在服务器端的session文件生命周期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor来决定,而保存在客户端的sessionID由客户端cookie来决定,默认其生存周期直到浏览器关闭,它也可以通过php.ini中的设置session.cookie_lifetime 来控制,二者共同来决定session 的生存时间,二者中的其中任意一个失效了,就会造成session失效,要根据自己的需求来决定是要从哪方面来修改其生存时间。
参考1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
参考2:
$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
参考3:
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
最主要的两个选择是SESSION和COOKIE。使用SESSION的方法是在每一页的开始加session_start(),然后利用$_SESSION来存取 SESSION变量。至于 COOKIE你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函数设置COOKIE,使用 $_COOKIE 获取COOKIE变量。
6. PHP程序中如何设置当前页面的编码为utf-8?
header(“content-type:text/html;charset=utf-8”);
setcookie(‘username’,’jack’,time()+7*24*3600);
cookie的总数量没有限制,但是每个域名的COOKIE数量和每个COOKIE的大小是有限制的!
IE每个域名限制为50个。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/webkit貌似没有cookie限制。但是假如cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
不同浏览器间每个cookie文件大小也不同
Firefox和safari是4097个字节,包括名(name)、值(value)和等号。
Opera是4096个字节,包括:名(name)、值(value)和等号。
IE是4095个字节,包括:名(name)、值(value)和等号。
session_start()前面不能有任何输出,包括空行。
相关题目:使用setcookie函数前,需要注意什么?
前面不能有任何输出,包括空行。
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
11. 说说下面这些这些协议的全称和中文解释(提示:都是工作在应用层)SMTP、POP3、HTTP、FTP、DNS (小米)
SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议
POP3 (Post Office Protocol 3) 邮局协议第3版
HTTP (Hypertext Transfer Protocol) 超文本传输协议
FTP (File Transfer Protocol)文件传输协议
DNS (Domain Name System and Domain Name Service protocol) 域名系统(服务)协议
COOKIE和SESSION都是用于会话机制,COOKIE保存在客户端,而SESSION则保存在服务器端。在默认情况下,SESSION机制是基于COOKIE的,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到COOKIE当中,在下次请求的时候,由浏览器携带这个COOKIE。
要想多台web服务器共享SESSION,可以利用MySQL数据库存储SESSION数据。
200 OK 服务器成功处理了请求
301 Moved Permanently(重定向)请求的URL已移走
304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
403 Forbidden(禁止)请求被服务器拒绝了
404 Not Found 未找到资源
Internal Server Error(内部服务器错误) 服务器遇到一个错误,使其无法为请求提供服务
session机制是一种服务器端的机制,它将数据保存到服务器端。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识, 称为 sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 sessionid将被在本次响应中返回给客户端以cookie的形式保存。
session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,另外就是小文件的效率问题,一般我们的session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率肯定会很差,我们可以采用改写session存储机制,比如存放到数据库中。
6个,255.255.255.248换算成二进制就是11111111.11111111.11111111.11111000
后面的三位用来表示主机,前面的29位用来表示网络。
三位表示主机,就是可以用来表示2^3=8个,再减去网络地址和广播地址,就是6个了。
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
header函数
POST www.10086.cn HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost/a.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 25
Connection: Keep-Alive
username=abc&password=123
---恢复内容结束---
strlen 和mb_strlen 都是用于获取字符串长度的,其中strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数,如果是多字节编码,如gbk和utf8,使用strlen得到的不是字符串的个数,而是该字符串的总字节数,可以使用mb_strlen获取其字符个数,使用mb_strlen要注意两点,一是要开启mbstring扩展,二是要指定字符集。
示例:
相关题目1:实现中文字串截取无乱码的方法。
方法一,使用php内置函数 mb_substr()
方法二,自定义函数,以utf8为例,如下:
代码分析:
//u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字)
join — 别名 implode()表示将一个一维数组的值转化为字符串
array_slice() 函数在数组中根据条件取出一段值,并返回
相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
方法一,使用php内置函数,确保配置中已打开mbstring扩展
方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
代码分析:
A. split
B. implode
C. explode
D. join
答案:A
答案:1
$_SERVER[‘DOCUMENT_ROOT‘] //当前运行脚本所在的文档根目录$_SERVER[‘HTTP_HOST ‘] //当前请求的 Host: 头部的内容
$_SERVER[‘REMOTE_ADDR‘] //正在浏览当前页面用户的 IP 地址
$_SERVER[‘HTTP_REFERER‘] //链接到当前页面的前一页面的 URL 地址
$_SERVER[‘SERVER_NAME‘] //当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息,他是预定义超级全局数组中唯一的二维数组。
S_FILES[‘userfile‘][‘name‘] //客户端机器文件的原名称
$_FILES[‘userfile‘][‘type‘] //文件MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES[‘userfile‘][‘size‘] //已上传文件的大小,单位为字节
$_FILES[‘userfile‘][‘tmp_name‘] //文件被上传后在服务端储存的临时文件名
$_FILES[‘userfile‘][‘error‘] //和该文件上传相关的错误代码
二者区别只有一个,那就是对包含文件的需求程度,include就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。
而require意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。
相关题目1:What is the difference between include & include_once? include & require?(Yahoo)
相关题目2:语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。
在如何处理失败时,include() 产生一个警告而 require() 则导致一个致命错误;require_once()/include_once()
相关题目3:What functions can you use to add library code to the currently running script?(Yahoo)
include、require
POST 根据你php.ini文件配置(默认是8M)
GET的话大小限制在2KB
相关题目:表单中 get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息。
A.php:-------
<?php function fa() { echo "in Function A\n"; }?>
B.php:-------
<?php include ‘a.php‘; ?>
<?php function fb() { fa(); echo "in Function B\n"; } ?>
C.php:-------
<?php include ‘a.php‘; ?>
<?php include ‘b.php‘; ?>
<?php fa(); fb(); ?>
答案:存在问题,a.php 被包含了两次,导致fa()函数重复定义,使用include_once 避免重复包含。(此处应首先想到考点可能就是include和include_once)(总结:函数不能重复定义)
echo 是一个语言结构,输出一个或多个字符串;
print() 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表,它输出一个字符串;
print_r () 是一个函数,打印变量的信息,基本类型,数组,对象。
注意 ,是echo本身支持的一种语法,而. 则是字符串连接操作符,使用 , 的效率要高一些。
相关题目:What is the difference between "print()" and "echo( )"? (腾讯)
answer: print is a function,echo is a language construct
相关题目:求两个日期的差数,例如2009-3-1 ~ 2009-4-4 的日期差数
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
方案一:
方案二:
对字符进行编码,比如base64_encode,要保证编码是可逆的
变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。
对象默认是传引用。
需要操作原始数据,则引用,不能影响原始数据,则值传递。
相关题目1:What would the following code print to the browser? Why?
输出 10 (调用函数的题一定要考虑是否有返回值)
相关题目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)
reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。
一个regular variable传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
相关题目1:如何实现字符串翻转?
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
相关题目2:假设现在有一个字符串www.baidu.com如何使用PHP对它进行操作使字符串以moc.udiab.输出? (亿邮)
客户端IP:$_SERVER["REMOTE_ADDR"]
服务器端IP:$_SERVER["SERVER_ADDR"]
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__
获取参数,使用$_SERVER["QUERY_STRING"]
__FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
A. $users[ ] = "john";
B. array_add($users, "john"); //PHP中没有array_add这个函数
C. array_push($users, "john");
D. $users ||= "john" ;
答案:BD
isset 检测一个变量是否设置
empty 检测是否为空
注意二者的区别,如果 变量是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。
当前脚本名称:$_SERVER["PHP_SELF"] 或者 $_SERVER["SCRIPT_NAME"];
链接到当前页面的前一页面的 URL 地址:$_SERVER["HTTP_REFERER"]。
sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。
assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。
打开或者关闭错误报告,如:
error_reporting(0);
error_reporting(E_ALL & ~ E_NOTICE);
error_reporting(E_ALL);
相关题目:error_reporting(2047) 什么作用?(新浪)
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
其中,1对应E_ERROR,2对应E_WARNING,4对应E_PARSE,8对应E_NOTICE,16对应E_CORE_ERROR,32对应E_CORE_WARNING,64对应E_COMPILE_ERROR, 128对应E_COMPILE_WARNING,256对应E_USER_ERROR,512对应E_USER_WARNING,1024对应E_USER_NOTICE。error_reporting(2047)意味着上述错误都会显示出来。
hotdogok
相关题目:什么是可变变量?
获取一个普通变量的值作为这个可变变量的变量名。
定义常量:define() ,
检测常量是否定义:defined(),如
define("TEST","happy new year!");
if( defined("TEST")){
echo TEST;
}
%为取模运算,输出0
$a % $b 其结果的正负取决于 $a 的符号。
echo ((-8)%3)."<br
/>"; //输出 -2
echo
(8%(-3))."<br />"; //输出 2
arsort:对数组进行逆向排序并保持索引关系
error_reporting(2047)的作用 report All errors and warnings,见21题中相关题目。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
allow_call_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。
顶格写,并且不能包含任何其它字符除";",如:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
输出1
count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
相关题目:What will be the output of the following PHP code: (腾讯)
<?php
echo count(strlen("http://php.net"));
?>
answer: 1
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:
1) 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
2) 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。
3) 编写桌面应用程序。
你可以使用 PHP 中任何一种输出语句,包括echo、print、printf,大部分人都使用如下例的 echo:
echo "My string $variable";
你也可以使用这种方法:
echo <<<END
This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can‘t contain any extra white space.
END;
输出结果为 4
打印第一个元素:echo $arr[0];
以’,’合并成字符串:echo implode(‘,‘,$arr);
echo $a{0} 或 echo $a[0]
相关题目:$string="abcdefg",那么$string{4}的值是? (卓望)
值是 e
=== 表示全等,是指的两个变量的值和类型都相等。
如 if (strpos(‘abc‘,‘a‘) == false) 和 if (strpos(‘abc‘,‘a‘) === false)
A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);
answer:B
A. print substr($text, strchr($text, ‘:‘));
B. print substr($text, strchr($text, ‘:‘) + 1);
C. print substr($text, strpos($text, ‘:‘) + 1);
D. print substr($text, strpos($text, ‘:‘) + 2);
E. print substr($text, 0, strchr($text, ‘:‘));
answer:C
answer:A
answer:C
hello
1
ture
使用intval函数,echo intval("09"),或者使用int强制类型转换。
参考代码:
<?php
$array = array (‘a‘, ‘b‘, ‘c‘,
‘d‘);
?>
A. array_flip()
B. array_reverse()
C. sort()
D. rsort()
答案:BD
array(2,5,7)
max用法示例如下:
双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用‘‘,注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
GB2312支持的汉字较少,GBK是相比GB2312汉字更为丰富,包括全部中日韩汉字,GB18030相比GBK增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用GBK而繁体中文使用BIG5。
echo substr_count ( $text,‘g‘);
print_r($val = 333); // 正确
$a += ($b = 4) + 5; // notice,$a未定义,但可以正确运行
$foo[bar] = ‘enemy‘; // notice,最好bar加上引号
function x($a = "1", $b){} // 无,但给参数默认值应尽量从右向左
相等
相等
不相等
true true true true true false true false
aaaaaa
5 0 1
在PHP中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用global显式声明使用全局变量或直接用$_GLOBALS来引用。
5 2
1 2
array_unshift($arr,’jack’);
echo $arr[0];
echo implode(‘,’,$arr);
$arr = explode(‘,’,$str);
arsort($arr);
print_r($arr);
echo strstr($mail,‘163‘);
echo substr($mail,7);
echo substr($mail, strpos($mail, ‘@‘)+1);
$arr = explode("@",$mail); echo $arr[1];
// 注释内容 C风格的单行注释
# 注释内容 unix风格的单行注释
/* 注释内容 */ C风格的多行注释
global $a 或者 $GLOBALS[‘a‘]
aa is ‘aa‘
相关题目:字符串怎么转成整数,有几种方法?怎么实现?
1) 强制类型转换: (整型)字符串变量名;
2) 直接转换:settype(字符串变量,整型);
3) intval(字符串变量);
break 和 continue 可以用在 switch 语句中,或是循环结构中
它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而continue则表示跳出本次循环,继续下一次的循环,不会终止循环。
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
$arr[ ] = $value;
array_push($arr, $value);
array -- 声明一个数组
count -- 计算数组中的单元数目或对象中的属性个数
foreach -- 遍历数组
list -- 遍历数组
explode -- 将字符串转成数组
implode -- 将数组转成一个新字符串
array_merge -- 合并一个或多个数组
is_array -- 检查是否是数组
print_r -- 输出数组
sort -- 数组排序
array_keys -- 返回数组中所有的键名
array_values -- 返回数组中所有的值
key -- 从关联数组中取得键名
trim() -- 去除字符串首尾处的空白字符(或者其他字符)
strlen() -- 字符串长度
substr() -- 截取字符串
str_replace() -- 替换字符串函数
substr_replace() -- 对指定字符串中的部分字符串进行替换
strstr() -- 检索字符串函数
explode() -- 分割字符串函数
implode() -- 将数组合并成字符串
str_repeat() -- 重复一个字符串
addslashes(); -- 转义字符串
htmlspecialchars() -- THML实体转义
A. a
B. false
C. true
D. b
E. c
答案:B
mixed array_rand( array $input [, int $num_req ] )
从数组中随机取出一个或多个单元,它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。
如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。
所以使用array_rand函数,返回结果要么是键名,有么是数组,在这个例子中,数组是索引数组,所以返回的是整型。
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
A. 不区分
B. 区分
答案:A
函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。以
A. null
B. true
C. false
D. 1
答案:C
is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。
在下列情况下一个变量被认为是 NULL:
1) 被赋值为 NULL
2) 尚未被赋值
3) 被unset()
$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;
使用in_array 函数,代码如下:
使用array_merge()函数
$a 为false,$b = $c = 0
public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问
相关题目:请写出PHP5权限控制修饰符
private protected public
请用PHP5代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)
输出结果 10
__sleep serialize之前被调用
__wakeup unserialize时被调用
__toString 打印一个对象时被调用
__set_state 调用var_export时被调用,用__set_state的返回值作为var_export的返回值
__construct 构造函数,实例化对象时被调用
__destruct 析构函数,当对象销毁时被调用
__call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
__get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
__set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set函数
__isset 检测一个对象的属性是否存在时被调用
__unset unset一个对象的属性时被调用
__clone 克隆对象时被调用
__autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用
相关题目:请写出php5的构造函数和析构函数
构造函数:__construct
析构函数:__destruct
双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("itcast");
class myclass{};
相关题目:如何声明一个名为“myclass”的没有方法和属性的类?
$obj= new myclass();
相关题目:如何实例化一个名为“myclass”的对象?
使用语句:$this->propertyName,例如:
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and
multiple PHP blocks.
答案: B
serialize() 和 unserialize()
A. tmp
B. Picachu
C. disName
D. Doraemon
E. 无输出
答案:D
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字 abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
接口是通过interface关键字来声明的,接口中的成员常量和方法都是public的,方法可以不写关键字public,
接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字const,例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用,即:类名:: 类常量名。
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
A. MVC
B. 代理模式
C. 状态模式
D. 抽象工厂模式
E. 单件模式
答案:E
A. 1个
B. 2个
C. 取决于系统资源
D. 3个
E. 想要几个有几个
答案:A
A. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类b继承自类a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用parent::__construct()来显示调用父类构造函数。
是的
单例模式,工厂模式
单例模式 实现代码 见 第二题
速度快,编译型,缓存技术,插件机制,强大的表现逻辑
safe_mode,php安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。
注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。
PHP 可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为 NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
核心思路:加锁
参考方案1:
参考方案2:
相关题目:使用五种以上方式获取一个文件的扩展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name)
创建类别表如下:
CREATE TABLE category(
cat_id smallint unsigned not null auto_increment primary key comment ‘类别ID‘,
cat_name VARCHAR(30) NOT NULL DEFAULT ‘‘ COMMENT ‘类别名称‘,
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ‘类别父ID‘
)engine=MyISAM charset=utf8;
编写一个函数,递归遍历,实现无限分类
mysql_fetch_row() 把数据库的一列储存在一个以零为基数的数组中,第一栏在数组的索引 0,第二栏在索引 1,依此类推。
mysql_fetch_assoc() 把数据库的一列储存在一个关联数组中,数组的索引就是字段名称,例如我的数据库查询送回“first_name”、“last_name”、 “email”三个字段,数组的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
方法1(对于PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
由模型(model),视图(view),控制器(controller)完成的应用程序,model层负责提供数据,和数据库有关的操作都交给模型层来处理,view层则提供交互的界面,并输出数据,而controller层则负责接收请求,并分发给相应的model来处理,然后调用view层来显示。
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。
A. fget();
B. file_open();
C. fopen();
D. open_file();
答案:C
fget() 这不是一个 PHP 函数,会引致执行错误。
file_open() 这不是一个 PHP 函数,会引致执行错误。
fopen()这是正确答案,fopen() 可以用来开启档案以便读写。
open_file() 这不是一个 PHP 函数,会引致执行错误。
smarty是一个模板引擎,使用smarty主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。 如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。
相关题目1:能够使HTML和PHP分离开使用的模板
smarty,phplib等
相关题目2:您是否用过模板引擎? 如果有您用的模板引擎的名字是?
Smarty
方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
header("Location: 网址"); //直接跳转
header("refresh:3;url=http://axgle.za.net"); //三秒后跳转
方法二:利用meta
echo "<meta http-equiv=refresh content=‘0; url=网址‘>";
可以
SVN 或者 CVS
相关题目:您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
TortoiseSVN-1.2.6
过滤javascript脚本参考:
方案一,使用PHP 内建函数 strip_tags() 除去 HTML 标签
方案二,自定义函数,如下:
preg_match(‘/^[\w\-\.]+@[\w\-]+(\.\w+)+$/‘, $email);
相关题目:请用正则表达式写一个函数,验证电子邮件的格式是否正确。 (鑫众人云)
主要区别有以下三种:
1) preg_replace()里面的正则可以写成型如:"/.xxx/"而ereg_replace()里面的正则需写成型如"xxx"
2) preg_replace()能操作数组,而ereg_replace()不可以
3) 在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
使用 Perl 兼容正则表达式语法的 preg_match() 函数通常是比 ereg() 更快的替代方案。
首先进入php安装目录
php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件
php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记
编写如下函数:
function getAttrValue($str, $tagName, $attrName){
$pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\‘\\\"]?)([^\\‘\\\"]*)
(\\2))*\\s+" . $attrName . "\\s*=\\s*([\\‘\\\"]?)([^\\‘\\\"]*)(\\5)
(\\s+\\w+\\s*=\\s*([\\‘\\\"]?)([^\\‘\\\"]*)(\\9))*\\s*>/i";
$arr = array();
$re = preg_match($pattern1, $str, $arr);
if($re){
echo "<br />\$arr[6]={$arr[6]}";
}
else{
echo "<br />没找到。";
}
}
测试:
$str1 = "<test attr=‘ddd‘>";
getAttrValue($str1,"test","attr"); //找test标签中attr属性的值,结果为ddd
$str2 = "<test2 attr=‘ddd‘ attr2=‘ddd2‘ t1=\"t1 value\" t2 = ‘t2 value‘>";
getAttrValue($str2,"test2","t1"); //找test2标签中t1属性的值,结果为t1 value
这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。
输出26/08/2003
答案:B
redir() 这不是一个 PHP 函数,会引致执行错误。
header() 这个是正确答案,header()函数发送头信息,可以用来使浏览器转向到另一个页面,例如:header("Location: http://www.search-this.com/")。
location() 这不是一个 PHP 函数,会引致执行错误。
redirect() 这不是一个 PHP 函数,会引致执行错误。
A. show_errors, enable
B. show_errors, show
C. register_globals, enhance
D. register_globals, inject
答案:C
allow_call_time_pass_reference
是否启用在函数调用时强制参数被按照引用传递
请注意:
4) 需要处理完整的 html 页面,即不光此 meta 语句
(2) 忽略大小写
11. ‘ 和 " 在此处是可以互换的
12. ‘Content-Type‘ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk‘ 两侧的不行
13. 注意处理多余空格
编写正则表达式如下:
$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*([‘\"]?)Content-Type(\\2)\\s*content\\s*=\\s*([‘\"])
text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";
使用 key() 可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。使用array_keys()则可以得到数组中所有的键名。使用foreach结构foreach($arr as $key=>$value) 可以通过$key 和 $value分别获取键名和值。
$data = array(
0 => array(‘id‘ => 8, ‘name‘ => ‘name1‘),
1 => array(‘id‘ => 10, ‘name‘ => ‘name2‘),
2 => array(‘id‘ => 15, ‘name‘ => ‘name3‘)
);
写出在模板页的代码?若用foreach语句又要怎样显示呢?
用section语句:
<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br />
name:<{$data[test].name}><br /><br />
<{sectionelse}>
数组为空
<{/section}>
用foreach语句:
<{foreach from=$data item=test}>
id:<{$test.id}><br />
name:<{$test.name}><br /><br />
<{foreachelse}>
数组为空
<{/foreach}>
A. ******xyz
B. *****_xyz1
C. ******xyz2
D. _*xyz
答案:C
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:B
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:C
匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串
可以,还可以在需要控制的子目录下创建.htaccess文件,写入访问控制。
从以下几个方面考虑:
1) 数据库中库和表都用utf8编码
2) php连接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);
3) php文件指定头部编码为utf-8 header(“content-type:text/html;charset=utf-8”);
4) 网站下所有文件的编码为utf8
5) html文件指定编码为utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
md5($str);
sha1($str);
htmlspecialchars 或者 htmlentities
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等
FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
上传文件的表单使用post方式,并且要在form中添加enctype=‘multipart/form-data‘。
一般可以加上隐藏域:<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) 自定义文件大小限制逻辑。即使服务器的限制是能自己决定,也会有需要个别考虑的情况。所以这个限制方式经常是必要的。
UBB代码是HTML的一个变种,通过程序自定义我们的标签,比如“[a]PHP中UBB的使用[/a]”这样的标签,其实质就是查找[a][/a]标签,将其替换成<a></a>的标准html,说白了,就是将标准的html标记通过技术手段使其简化,其输出出来的结果还是标准的 html。
明白了ubb的原理,那么再制作一个简单的 ubb 编辑器就不难了,和 fck 之类的编辑器比较起来,ubb 代码最大的优点就是代码简单,功能很少,简单的ubb只需要一个文件,而且 ubb 标签可以自己来定义,更改起来很方便,在 php 中就是利用替换函数就可以将 html 进行标签化,输出时进行标签的转化。
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名,这样就避免了重名。
中,用来判断错误是如何发生的。 (奇矩互动)
debug_print_backtrace()
1),array(‘id‘ => 2),……) id=>0-10000 ,怎么判断当id=>500,让输出的值在HTML里变为红色? (亿邮)
设数组分配过来的数组名为 $ids
{section name = temp loop = $ids}
{if $ids[temp].id == 500}
<span style = ‘color: #f00;’>{$ids[temp].id}</span>
{esle}
{$ids[temp].id}
{/if}
{/section}
使用{$smarty.now} 来获取当前时间,得到的是unix系统时间戳
使用变量调节器进行格式化,如下:
{$smarty.now | date_format : “%Y-%m-%d %H:%M:%S” }
$smarty.get.变量 #显示通过get方式传过来的指定变量的值
$smarty.post.变量 #显示通过post方式传过来的指定变量的值
$smarty.cookies.变量 #显示通过cookie中指定变量的值
$smarty.server.SERVER_NAME #显示server变量值,$_SERVER系列变量
$smarty.env.PATH #显示系统环境变量值,$_ENV系列变量
$smarty.session.变量 #显示session中指定变量的值
$smarty.request.变量 #显示通过post、get、cookie中指定变量的值
使用模板分隔符包含,传递参数则使用HTML属性的方式,例如:
{html_image file="pumpkin.jpg"}
mysql,gd,pdo,XML,zip,filesystem,mail等
utf8_to_gb2312 或者 utf8togb2312
<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处理。
D:\src\init.php:7) in D:\src\init.php on line10通常什么情况下php会报该警告信息?(卓望)
一般是在header、set_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息
可以,COOKIE和SESSION都是用来实现会话机制的,由于http协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的 状态,需要有这么一个机制----会话机制。
COOKIE:将会话信息的保存到浏览器端。
SESSION:将会话信息保存到服务器端。
SESSION默认情况下是基于COOKIE的,对于SESSION来说,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到cookie当中。
如果禁用了COOKIE,则基于COOKIE的SESSION不好使了,我们可以使用get,传递SID,或者直接开启透明的SID(此时需要关闭基于cookie的SESSION配置项)。
相关题目:SESSION与COOKIE的区别?
COOKIE保存在客户端,而SESSION则保存服务器端。
从安全性的角度来讲,SESSION的安全性要高。
从保存内容的类型的角度来讲,COOKIE只保存字符串(及能够自动转换成字符串),而session则可以保存所有的数据类型。
从保存内容的大小的角度来讲,COOKIE保存的内容是有限制的,比较小,而SESSION基本上没有这个限制。
从性能的角度来讲,用SESSION的话,对服务器的压力会更大一些。
用户名(username):温柔一刀
密码(pwd):&123=321&321=123&
个人简介(intro):Hello world!
且该http server需要以下cookie来进行简单的用户动作跟踪:
cur_query:you&me
last_tm:...(上次请求的unix时间戳,定为当前请求时间前10分钟)
cur_tm:...(当前请求的unix时间戳)
设置超时为10秒,发出请求后,将http server的响应内容输出 (腾讯)
参考代码:
if($fp = fsockopen(‘localhost‘, ‘80‘)) {
//连接成功
$request_data = "POST /2.php HTTP/1.1" . "\r\n"; //请求行
$request_data .= "Host: localhost" . "\r\n"; //host头信息
$request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host头信息
$request_content = "username=".urlencode(‘温柔一刀‘)."&pwd=".urlencode(‘&123=321&321=123&‘)."&intro=".urlencode("Hello world!");
$request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";
$request_data .= "Content-Length: " . strlen($request_content) . "\r\n";
$cur_query = urlencode("you&me");
$last_tm = time()-10*60;
$cur_tm = time();
$request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";
$request_data .= "\r\n"; //请求头信息结束时的空行
//请求主体数据部分
$request_data .= $request_content;
//利用建立好的通道,将数据发送过去
fwrite($fp, $request_data); //写入数据(发送数据)
//读取数据
while(!feof($fp)) { //判断是否没有到文件末尾
$resp_data = fgets($fp);
echo $resp_data . ‘<br>‘;
}
}
未经授权:访问由于凭据无效被拒绝
header("HTTP/1.0 404 Not Found")
要注意这里的生存时间指的是什么? 由于session默认是基于cookie的,也就是说使用session会话技术,首先是将session数据保存到服务器端,其次会将sessionID 保存到浏览器端,保存在服务器端的session文件生命周期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor来决定,而保存在客户端的sessionID由客户端cookie来决定,默认其生存周期直到浏览器关闭,它也可以通过php.ini中的设置session.cookie_lifetime 来控制,二者共同来决定session 的生存时间,二者中的其中任意一个失效了,就会造成session失效,要根据自己的需求来决定是要从哪方面来修改其生存时间。
参考1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
参考2:
$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
参考3:
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
最主要的两个选择是SESSION和COOKIE。使用SESSION的方法是在每一页的开始加session_start(),然后利用$_SESSION来存取 SESSION变量。至于 COOKIE你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函数设置COOKIE,使用 $_COOKIE 获取COOKIE变量。
6. PHP程序中如何设置当前页面的编码为utf-8?
header(“content-type:text/html;charset=utf-8”);
setcookie(‘username’,’jack’,time()+7*24*3600);
cookie的总数量没有限制,但是每个域名的COOKIE数量和每个COOKIE的大小是有限制的!
IE每个域名限制为50个。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/webkit貌似没有cookie限制。但是假如cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
不同浏览器间每个cookie文件大小也不同
Firefox和safari是4097个字节,包括名(name)、值(value)和等号。
Opera是4096个字节,包括:名(name)、值(value)和等号。
IE是4095个字节,包括:名(name)、值(value)和等号。
session_start()前面不能有任何输出,包括空行。
相关题目:使用setcookie函数前,需要注意什么?
前面不能有任何输出,包括空行。
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
11. 说说下面这些这些协议的全称和中文解释(提示:都是工作在应用层)SMTP、POP3、HTTP、FTP、DNS (小米)
SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议
POP3 (Post Office Protocol 3) 邮局协议第3版
HTTP (Hypertext Transfer Protocol) 超文本传输协议
FTP (File Transfer Protocol)文件传输协议
DNS (Domain Name System and Domain Name Service protocol) 域名系统(服务)协议
COOKIE和SESSION都是用于会话机制,COOKIE保存在客户端,而SESSION则保存在服务器端。在默认情况下,SESSION机制是基于COOKIE的,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到COOKIE当中,在下次请求的时候,由浏览器携带这个COOKIE。
要想多台web服务器共享SESSION,可以利用MySQL数据库存储SESSION数据。
200 OK 服务器成功处理了请求
301 Moved Permanently(重定向)请求的URL已移走
304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
403 Forbidden(禁止)请求被服务器拒绝了
404 Not Found 未找到资源
Internal Server Error(内部服务器错误) 服务器遇到一个错误,使其无法为请求提供服务
session机制是一种服务器端的机制,它将数据保存到服务器端。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识, 称为 sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 sessionid将被在本次响应中返回给客户端以cookie的形式保存。
session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,另外就是小文件的效率问题,一般我们的session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率肯定会很差,我们可以采用改写session存储机制,比如存放到数据库中。
6个,255.255.255.248换算成二进制就是11111111.11111111.11111111.11111000
后面的三位用来表示主机,前面的29位用来表示网络。
三位表示主机,就是可以用来表示2^3=8个,再减去网络地址和广播地址,就是6个了。
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
header函数
POST www.10086.cn HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost/a.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 25
Connection: Keep-Alive
username=abc&password=123
标签:reference 例子 tip 适合 perm viso forms on() 结束
原文地址:http://www.cnblogs.com/jp85201/p/7327068.html