面试2018

2、请写出php -l、php -m、php -r的作用。 

php -l : PHP 代码进行语法检查

php -m :打印出内置以及已加载的 PHP 及 Zend 模块

php -r :使用该参数可以在命令行运行 PHP 代码
3、写出你熟知的能够使HTML和PHP分离开使用的模板, 并简述其工作原理
  smarty是个模板引擎,最显著的地方就是有可以把模板缓存起来。
  一般模板来说,都是做一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,然后在PHP里打开这个模板文件,把分隔符里面的值替换掉,  然后输出来,你可以看下PHPLib 里面的template 部分。
  smarty 设定了缓存参数以后,第一运行时候会把模板打开,在php 替换里面值的时候把读取的htmlphp部分重新生成一个临时的php文件,这样就省去了每次打开都重新读取html 了。如果修改了模板,只要重新刷下就行了。

4、如何取得某个程序中, 第n 行到第m行之间的程序片段 的执行时间 microtime — 返回当前 Unix 时间戳和微秒数
5、如何实现字符串翻转?

strrev();
6 说明以下代表的含义:_LINE__FILE_ $_SERVER["REMOTE_ADDR"]$_SERVER["PHP_SELF"]

php魔术常量:

① __LINE__ 文件中的当前行号。

② __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

③ __DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =

④ __FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

⑤ __CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 __CLASS__ trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。

⑥ __TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

⑦ __METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

⑧ __NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)

1)     $_SERVER['HTTP_HOST']  请求头信息中的Host内容,获取当前域名。

2)     $_SERVER["SERVER_NAME"]  输出配置文件httpd.conf中的ServerName,一般情况下与HTTP_HOST值相同,但如果服务器端口不是默认的80端口,或者协议规范不是HTTP/1.1时,HTTP_HOST会包含这些信息,而SERVER_NAME不一定包含。(主要看配置文件的设置)。

3)     $_SERVER["HTTP_USER_AGENT"]  获取用户相关信息,包括用户浏览器、操作系统等信息。

4)     $_SERVER['HTTP_ACCEPT']  当前请求的ACCEPT头部信息。

5)     $_SERVER["HTTP_ACCEPT_LANGUAGE"]  这个值是由浏览器发送,表明用户默认的语言设置,后面的q值表示用户对该语言的喜好程度。

6)     $_SERVER["HTTP_ACCEPT_ENCODING"]  大部分的现代浏览器都支持gzip压缩,并会把这一信息报告给服务器。这时服务器就会压缩过的HTML发送给浏览器。这可以减少近80%的文件大小,以节省下载时间和带宽。

7)     $_SERVER["HTTP_COOKIE"]  浏览器的cookie信息。

8)     $_SERVER["HTTP_CONNECTION"]  当前请求的连接情况。

9)     $_SERVER["HTTP_UPGRADE_INSECURE_REQUESTS"]  表示浏览器可读懂服务器发过来的请求,

10)     $_SERVER["HTTP_CACHE_CONTROL"]  表示浏览器是否会缓存这个页面信息。

11)     $_SERVER["PATH"]  当前脚本所在文件系统。

12)     $_SERVER["SystemRoot"]  当前服务器的操作系统。

13)     $_SERVER["COMSPEC"]  指向cmd.exe的路径。

14)     $_SERVER["PATHEXT"]  环境变量设置。

15)     $_SERVER["WINDIR"]  脚本指向的系统目录。

16)     $_SERVER["SERVER_SIGNATURE"]  包含服务器版本和虚拟主机名的字符串。

17)     $_SERVER["SERVER_SOFTWARE"]  服务器软件配置信息。

18)     $_SERVER["SERVER_ADDR"]  当前运行脚本的服务器的ip地址。

19)     $_SERVER["SERVER_PORT"]  服务器端口。

20)     $_SERVER["REMOTE_ADDR"]  浏览网页的用户ip

21)     $_SERVER["DOCUMENT_ROOT"]  当前运行脚本所在的根目录。

22)     $_SERVER["REQUEST_SCHEME"]  服务器通信协议,是httphttps

23)     $_SERVER["CONTEXT_PREFIX"]  前缀。

24)     $_SERVER["CONTEXT_DOCUMENT_ROOT"]  当前脚本所在的文档根目录。

25)     $_SERVER["SERVER_ADMIN"]  服务器管理员信息。

26)     $_SERVER["SCRIPT_FILENAME"]  当前执行脚本的绝对路径。

27)     $_SERVER ["REMOTE_PORT"]  用户连接到服务器时所使用的端口。

28)     $_SERVER["GATEWAY_INTERFACE"]  服务器使用的CGI规范的版本。

29)     $_SERVER["SERVER_PROTOCOL"]  请求页面时通信协议的名称和版本。

30)     $_SERVER["REQUEST_METHOD"]  请求提交数据的方式。

31)     $_SERVER["QUERY_STRING"]  服务器请求时?后面的参数。

32)     $_SERVER["REQUEST_URI"]  当前脚本路径,根目录之后的目录。

33)     $_SERVER["SCRIPT_NAME"]  当前脚本的路径。这在页面需要指向自己时非常有用。

34)     $_SERVER["PHP_SELF"]  当前正在执行脚本的文件名。

35)     $_SERVER["REQUEST_TIME"]  得到请求开始时的时间戳。


7、如何提高数据库访问速度? 依据是什么?

http://www.jb51.net/article/74766.htm
8、假设您有数据库(dbname=TEST_DB )足够的权限,请为192.168.1.100 服务器上的testuser用户开放访问该数据库的所有权限并为其设置访问密码。

https://blog.csdn.net/piaocoder/article/details/53704126

grant all privileges on TEST_DB to testuser@192.168.1.100 identified by '1234';


9.什么情况下需要备份数据库? 如何备份数据库?

https://www.cnblogs.com/SQL888/p/5751631.html

保存数据的完整性,防止数据丢失,病毒感染
1、直接拷走数据库文件
2、使用命令mysqldump
3、使用工具进行备份

 

1、http中,状态码500含义是?如果返回找不到文件的提示,则可用header函数,语句为?

2开头 (请求成功)表示成功处理了请求的状态代码。

200   (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 
201   (已创建)  请求成功并且服务器创建了新的资源。 
202   (已接受)  服务器已接受请求,但尚未处理。 
203   (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。 
204   (无内容)  服务器成功处理了请求,但没有返回任何内容。 
205   (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206   (部分内容)  服务器成功处理了部分 GET 请求。

3开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

300   (多种选择)  针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 
301   (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303   (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304   (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 
305   (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 
307   (临时重定向)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。

400   (错误请求) 服务器不理解请求的语法。 
401   (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 
403   (禁止) 服务器拒绝请求。
404   (未找到) 服务器找不到请求的网页。
405   (方法禁用) 禁用请求中指定的方法。 
406   (不接受) 无法使用请求的内容特性响应请求的网页。 
407   (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408   (请求超时)  服务器等候请求时发生超时。 
409   (冲突)  服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 
410   (已删除)  如果请求的资源已永久删除,服务器就会返回此响应。 
411   (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 
412   (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 
413   (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 
414   (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。 
415   (不支持的媒体类型) 请求的格式不受请求页面的支持。 
416   (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。 
417   (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

500   (服务器内部错误)  服务器遇到错误,无法完成请求。 
501   (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 
502   (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 
503   (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 
504   (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。 
505   (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

 

使用header(“HTTP/1.0 404 NOT FOUND”);herder(Location:XXX.php);

2、数组函数arsort含义,error_reporting(2047作用)?

arsort按照键值对关联数组进行降序排序:

asort — 对数组进行排序并保持索引关系

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

krsort — 对数组按照键名逆向排序

ksort() - 对数组按照键名排序

sort — 对数组排序

rsort — 对数组逆向排序

usort — 使用用户自定义的比较函数对数组中的值进行排序

uasort() - 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联

uksort — 使用用户自定义的比较函数对数组中的键名进行排序

natsort — 用“自然排序”算法对数组排序

natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序

  error_reporting(E_ERROR | E_WARNING | E_PARSE);//常见三个参数

1 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

2048 E _STRICT

6143E_ ALL

4096 E RECOVERABLE ERROR

8192 E DEPRECATED

16384 E USER DEPRECATED

似乎是E STRICT之前所有的累积啊

3、get_magic_quotes_gpc的作用是

get_magic_quotes_gpc — 获取当前 magic_quotes_gpc 的配置选项设置;

如果 magic_quotes_gpc 为关闭时返回 0,否则返回 1。在 PHP 5.4.O 起将始终返回 FALSE。

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

第三种表达字符串的方法是用 heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。

例如$bar = <<<EOT
bar
    EOT;

一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。

$str = <<<'EOD'
bar
EOD;

5、一个则表达式,把$string中的所有数字全部删除

preg_replace (正则表达式, 替换成, 字符串, 最大替换次数【默认-1,无数次】, 替换次数)

$string= preg_replace('/\d/','',$string); $string=str_replace(array(1,2,3,4,5,6,7,8,9,0),'',$string);

6、找出/data1/source 日录中> 100k 的文件并复制到~/tmp/35/下

#!/bin/bash 

 for file in `ls /data1/sourcet`

 do        

 if [ -f $file ]; then  

              if [ `ls -l $file|awk '{print $5}'` -gt 10000 ];  then  

                    mv $file /tmp/35 

              fi       

 fi 

done

 

7、perl -pi -e 's|ABCD|Linux|g' `find ./-tpye f`的含义是

将调用perl执行一条替换命令,把find命令找到的所有文件内容中的ABCD替换为Linux
如果不写最后的那个g,“s|ABCD|Linux| ”将只替换每一行开头的ABCD 

-type 是根据文件类型进行查找,f 代表一个普通格式的文件  

其他的还有:

 d :目录

 l :符号链接

 b :块设备

 c :字符设备

 p :管道文件

 s :Socket
9、10 2 * * */data0/apache/schedul/ussd/topnews/import_data.pl>/dev/null的含义是

* * * * *  command

minute hour day month week command

  星期  命令

Pl一般是Perl 脚本代码。
说明:是用Perl脚本写的编译和运行的文件,使用一个Perl解读器编辑;包含可变量的Perl程序代码,运行,职能,和评论;可能由于简短的Perl语言的语法和紧凑性导致难以阅读。
PL脚本通常用于创建程序,使用正则表达式解析文本,但他们也可以作为其他应用,包括服务器和Web服务器的CGI脚本用于各种脚本。

/dev/null :代表空设备文件
>:代表重定向到哪里
10、
rsync-avu 105903.zip 218.206.86.68::mmsres/resource/291/105的含义是

rsync目录同步

-a archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-u等同于 --update,在目标文件比源文件新的情况下不更新
-v显示同步的文件
编程题
1.设已知目录(data/somedir)写一个函数。遍历取得该目录下包含子目录所有后缀为txt的文件。

//递归方式

ini_set('max_execution_time', '1000000000000000');

ini_set('memory_limit', '100000M');

$path="E:/wnmp/liuyj/";

var_dump(getTxtFile($path));

function getTxtFile($path)

{

    $afile = array();

    if(!is_dir($path)){

        return false;

    }

    $h = opendir($path);

    if(!$h){

        return false;

    }

    while (($file=readdir($h)) !== false) {

        if($file == '.' || $file == '..'){

            continue;

        }

        if(is_dir($path.'/'.$file)){

            $afile[$file]=getTxtFile($path.'/'.$file);

        }else{

            // $afile[]=$path.'/'.$file;

            if(pathinfo($file,PATHINFO_EXTENSION) == 'txt'){

                $afile[]=$path.'/'.$file;

            }

        }

    }

    closedir($h);

    return $afile;

}  

//队列方式
  function read_dir_queue($dir ){
  $files=array( );
  $queue=array( $dir );
  while($data=each($queue) ){
  $path=$data['value' ];
  if(is_dir($path) && $handle=opendir($path)){
  while($file=readdir($handle)){
  if($file=='.' ||$file=='..') continue;$files[] = $real_path=$path.'/'.$file;
  if (is_dir($real_path)) $queue[] = $real_path;
  closedir($handle) ;}
  return $files;
  print_r(read_dir_queue( 'D: /webroot/suanfa/dir ') );exit ;


2、写一个函数, 算出两个文件的相对路径, 如a=‘/a/b/c/d/e.php′;

b= ‘/a/b/12/34/c.php’; 计算出b对于a 的相对路径 应该是../../c/d 将()添加上

$a='/a/b/c/d/e.php';

$b='/a/b/12/34/c.php';

var_dump(getRelative($a,$b));

function getRelative($file1,$file2)

{

    $afile1 = explode('/', dirname($file1));

    $afile2 = explode('/', dirname($file2));

    $fileLen = count($afile2);

    for ($i=0; $i < $fileLen; $i++) {

        if($afile1[$i] !== $afile2[$i]){

            break;

        }

    }

    $relativePath = array_fill(0, $fileLen-$i, '..');

    $file2Path = array_slice($afile2, $i);

    $result = implode('/', array_merge($relativePath,$file2Path));

    return $result;

}
3假设某论坛 url http://test.com/login.php 为注册用户入口地址, 请用程序实现摸拟注册用户的过程, 成功之后到http://test.com/thread.php?id=100的版面发一篇帖子, 考虑有图形验证码的情况

答:采用curl模拟登陆操作
第一:分析登陆字段
第二:登陆后保留COOKIE
第三:读取COOKIE并跳转到相关页
第四:抓取数据

 

参考:

https://blog.csdn.net/darkangel1228/article/details/55223796

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值