2.执行程序段将输出
<?php
//参考手册》语言参考》运算符》算术运算符》%为取模运算,输出0
echo 8%(-2)."<br />";
//取模 $a % $b 在 $a 为负值时的结果也是负值。输出-2
echo ((-8)%3)."<br />";
//输出2
echo (8%(-3))."<br />";
?>
3.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
<?php
function my_scandir($dir)
{
$files=array();
if(is_dir($dir))
{
if($handle=opendir($dir))
{
while(($file=readdir($handle))!==false)
{
if($file!="." && $file!="..")
{
if(is_dir($dir."/".$file))
{
$files[$file]=my_scandir($dir."/".$file);
}
else
{
$files[]=$dir."/".$file;
}
}
}
closedir($handle);
return $files;
}
}
}
print_r(my_scandir("D:Program FilesInternet ExplorerMUI"));
?>
6 .请举例说明在你的开发过程中用什么方法来加快页面的加载速度
答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具
7、HTTP Keep-Alive的作用
作用:Keep-Alive:使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。Web服务器,基本上都支持HTTP Keep-Alive。
缺点:对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,虽然为客户保留打开的连 接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。
解决:Keep-Alive: timeout=5, max=100timeout:过期时间5秒(对应httpd.conf里的参数是:KeepAliveTimeout),max是最多一百次请求,强制断掉连接。就是在timeout时间内又有新的连接过来,同时max会自动减1,直到为0,强制断掉。
其他
1.PHP中几个输出函数echo,print(),print_r(),sprintf()区别
printf:是函数,把文字格式化以后输出(参看C语言)
sprintf:是函数,跟printf相似,但不打印,而是返回格式化后的文字(该函数把格式化的字符串写写入一个变量中,而不是输出来),其 他的与printf一样。
例如:
1 $str = "Hello";
2 $number = 123;
3 $txt = sprintf("%s world. Day number %u",$str,$number);
4 //输出: Hello world. Day number 123
2.不用新变量直接交换现有两个变量的值
list($a, $b) = array($b, $a);
借助数组
$a = array($a,$b);
$b = $a[0];
$a = $a[1];
3.写个函数来解决多线程同时读写一个文件的问题。
<?php
$fp = fopen("/tmp/lock.txt","w+");
if(flock($fp, LOCK_EX)){// 进行排它型锁定
fwrite($fp,"Write something here
");
flock($fp, LOCK_UN);// 释放锁定
}else{
echo "Couldn't lock the file !";
}
fclose($fp);
?>
3.PHP缓存技术有哪些? tp是局部还是完全缓存?
全页面静态化缓存,也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程
页面部分缓存,将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示
数据缓存,通过一个id进行请求的数据,将数据缓存到一个php文件中,id和文件是对应的,下次通过这个id进行请求时 直接读php文件
查询缓存,和数据缓存差不多,根据查询语句进行缓存;
常用的缓存技术有:redis和memcache个人认为tp应该是全局缓存 因为:tp缓存实在本地生成一个php文件来存储数据库中
4.PHP猴子选大王---最优解决算法:一群猴子排成一圈,按1,2,…,n依次编号。
然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,
直到最后只剩下一只猴子为止,那只猴子就叫做大王。
要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
5.isset() 、empty()与is_null的区别
当变量未定义时,is_null() 和“参数本身”是不允许作为参数判断的,会报Notice警告错误;
empty , isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!
isset():仅当null和未定义,返回false;
empty():""、0、"0"、NULL、FALSE、array(),未定义,均返回true;
is_null():仅判断是否为null,未定义报警告;
6.现有一个多维数组,请编写一段代码按照数组当中age进行升序排序,重新组成一个新的数组。
$person = array(
array('name'=>'c','age'=>26),
array('name'=>'d','age'=>23),
array('name'=>'a','age'=>29),
array('name'=>'b','age'=>27),
);
答案:不唯一
方法之一(其一冒泡排序):
$count=count($person);
for($i=0;$i<$count;$i++){
for($j=0;$j<$count-1;$j++){
if($person[$j]['age']>$person[$j+1]['age']){
$tmp=$person[$j];
$person[$j]=$person[$j+1];
$person[$j+1]=$tmp;
}
}
}
4.下面代码的输出正确的是?()
$a=array(1=>5,5=>8,22,2=>'8',81);
echo $a[7];
echo $a[6];
echo $a[3];
A:空2281
B:空8122C
C:8122空
D:空空空
答案:C
8.写出下面代码的结果()
<?php
$count = 5;
function get_count(){
static $count = 0;
return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();
?>
答案:5 0 1
解析: php中的变量作用范围的另一个重要特性就是静态变量(static 变量)。
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。
因static $count,所以只在第一次调用get_count的时候对count赋值为0,第二次再进来这个函数,则不会第二次赋值。
6.http中几个常见的状态的状态码含义。
200 请求成功
404 找不到资源
403 没有权限
500 服务器错误
302 重定向
7.请写出自少三种截取文件名后缀的方法或函数(PHP 原生函数和自己实现函数均可)
echo substr(strrchr($file, '.'), 1);
echo substr($file, strrpos($file, '.')+1);
$arr=explode('.', $file);
echo $arr[count($arr)-1];
$arr=explode('.', $file);
echo end($arr);
echo strrev(explode('.', strrev($file))[0]);
echo pathinfo($file)['extension'];
echo pathinfo($file, PATHINFO_EXTENSION);
composer.json中的自动加载映射
目前PSR-0自动加载、PSR-4自动加载、classmap生成和files引入都是被支持的,PSR-4是首推的方法,因为它提供了更大的易用性。
## composer.json中的自动加载映射
目前PSR-0自动加载、PSR-4自动加载、classmap生成和files引入都是被支持的,PSR-4是首推的方法,因为它提供了更大的易用性。
- PSR-4
PSR-4规范了如何指定文件路径从而自动加载类,同时规范了自动加载文件的位置。乍一看这是和PSR-0重复了,实际上,在功能上确实有一部分重复。区别在于,PSR-4的规范比较干净,去除了兼容PHP5.3以前版本的内容。
PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用下划线是没有特殊含义的,而在PSR-0的规则中,下划线或被转化为目录分隔符
在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类如Foo\Bar\Baz时,命名空间Foo指向一个名为src/的目录意味着自动加载器将查找名为src/Bar/Baz.php文件并引用它。
命名空间的前缀必须以\结尾,以避免类似前缀之间的冲突。在安装和更新期间,PSR-4引用全部组合到一个key=>value数组中,该数组可以在生成的文件vendor/composer/autoload_psr4.php中找到。
例子:
{
"autoload": {
"psr-4": {
"App": "App/" // 命名空间App映射到目录App
}
}
}
- classmap
classmap引用的所有组合,都会在安装、更新的过程中生成并存储到`vendor/composer/autoload_classmap.php`文件中。
你可以使用classmap生成支持自定义加载的不遵循PSR-4规范的类库,要配置它指向的目录,以便能够准确的搜索到类文件
例子:
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
- Files
如果你想要明确指定,在每次请求时都要载入某些文件,那么你可以使用files字段加载。通常作为函数库的载入方式。
例子:
{
"autoload": {
"files": ["src/MyLibrary/functions"]
}
}