【Day23】几道值得研究注意的php相关问题(一)

来源:互联网 发布:网龙网络开发怎么样 编辑:程序博客网 时间:2024/06/04 18:31
1.nginx使用哪种网络协议? nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http fastcgi负责调度进程 
2. <? echo 'hello tusheng' ; ?> 没有输出结果, 可能是什么原因, 简述的解决此问题的过程(提示: 语法没有问题) 可能服务器上面没有开启短标签short_open_tag =设置为Off,,php.ini开启短标签控制参数: short_open_tag = On 
3. 简述下面程序的输出结果, 简要说明为什么, 如何解决这类问题? <?php $tmp = 0 == "a"? 1: 2; echo $tmp; ?> 结果 1 int和string类型强制转换造成的,0==="a" 0 == 0 肯定是true啊 PHP是弱类型。。 $tmp = 0 === "a"? 1: 2; echo $tmp; 这样就是2 
4. 已知一个字符串如下: $str = "1109063 milo 1"; 用一行代码将该字符串里面的1109063赋值给$uid, milo赋值给$user, 1赋值给$type 空格如下 list($uid, $user, $type) = explode(" ", $str); \t如下 list($uid, $user, $type) = explode("\t", $str); list($uid, $user, $type) = sscanf($str, "%d %s %d"); $n = sscanf($auth, "%d\t%s %s", $id, $first, $last); 
5. 分别列出如下类型的有符号和无符号范围 TINYINT SMALLINT MEDIUMINT INT TINYINT-2^7 - 2^7-10 ~ 2^8-1 SMALLINT-2^15 - 2^15-1 0 ~ 2^16-1 MEDIUMINT-2^23 - 2^23-1 0 ~ 2^24-1 INT-2^31 - 2^31-1 0 ~ 2^32-1 
6. 将下面的数组用一行拼装成一个字符串i am milo! day day up! <?php $arr = array( 'I', 'AM', 'MILO!', 'DAY', 'DAY', 'UP!' ); ?> $str = strtolower(implode(" ",$arr)); 
7. 调用如下函数获取函数并获取count的值 <?php function get_list($cnd = array(), &$count = false) { // 伪代码 处理$cnd 并赋值datas $datas = 'i am call back'; $count && $count = rand(1, 10000); return $datas; } ?> $count=1; $data = get_list($cnd,&$count); echo $count; 
8. 几种方式去取代session机制, 简单描述各自的优劣 mysql、memcache、cookie保持一种唯一状态标识码 
9. 下列HTTP状态码出现的可能原因, 如何处理 200, 301, 404, 502, 503 200   请求已成功,请求所希望的响应头或数据体将随此响应返回。 301   被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。   新的永久性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。   如果这不是一个 GET 或者 HEAD 请求,因此浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。   注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个301响应的话,接下来的重定向请求将会变成 GET 方式。 404   请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。 502   作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 503   由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个 Retry-After 头用以标明这个延迟时间。如果没有给出这个 Retry-After 信息,那么客户端应当以处理500响应的方式处理它。   注意:503状态码的存在并不意味着服务器在过载的时候必须使用它。某些服务器只不过是希望拒绝客户端的连接。 200 OK 一切正常,对GET和POST请求的应答文档跟在后面。 301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL 404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。 502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。 
10. 有如下数据库, 用原生态mysql扩展去连接并查询user表的前十行 host: 192.168.0.254 port: 3306 user: one pass: piece database: db_user table: user $link = mysql_connect("192.168.0.254:3306","one","piece") or die('Could not connect: '.mysql_error()); mysql_select_db('db_user',$link); $query = mysql_query("select * from user limit 10"); while($rs = mysql_fetch_array($query,MYSQL_ASSOC)) {} 
11. 用autoload($class) 实现Lib目录下的类的自动加载并可以兼容子目录 $request->action = lcfirst(implode(array_map( 'ucfirst', explode('-', strtolower($request->action)) ))); ------------------------------------------------------------ function __autoload($class) { $cls = strtolower(str_replace("_","/",$class)); if(file_exsits(LIB.$cls.'.php')) { include_once(LIB.$cls.'.php'); } else { die("not found {$class} class"); } } defined("LIB",'/data/wwwroot/www.xx.com/lib/'); $author = new Lib_Author(); ----------------------------------------------------------- function __authload($class) { $cls = explode("_",$class); if(@is_dir($cls[1])) { if(@is_file($cls[2])) { include_once("CON_PATH".$cls[1].'/'.$cls[2].".php"); } else { dir('error'); } } else if(@is_file($cls[1].".php")) { include_once("CON_PATH".$cls[1].".php"); } else { dir('error'); } } --------------------------------------- function __autoload($class) { $cls = explode("_",$class); $file = get_file($cls); if($file=='error') { die('error'); } include_once($file); } function get_file($dir) { if(is_array($dir)) { foreach($dir as $k=>$v) { $tmpdir .= $v.'/'; if(is_dir('CON_PATH'.$tmpdir)) { continue(); } else if(is_file('CON_PATH'.$tmpdir.".php")) { return 'CON_PATH'.$tmpdir.".php"; } else { return 'error'; } } return 'error'; } return 'error'; } defined("CON_PATH","/data/wwwroot/www.xx.com/app/cntroller/"); $sb = new controller_sb(); ------------------------------------ function __autoload_my_classes($classname) { # ... your logic to include classes here } spl_autoload_register('__autoload_my_classes'); ----------------------------------------------------------- 
12. 用set_error_handle 去捕获错误并输出, 级别自己定 set_error_handle(callback,level) function callback(int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] ){ } function dealErrorHandler($errno,$errstr,$errfile,$errline) { switch($errno){ case E_USER_ERROR: echo "error [$errno] $errstr fatal error on line $errline in file $errfile"; break; case E_USER_WARNING: echo "my warning [$errno] $errstr": break; case E_USER_NOTICE: echo "my notice[$errno] $errstr"; break; default: echo "unkonwn error type :[$errno] $errstr"; break; } } set_erro_handler(dealErrorHandler); trigger_error("notice", E_USER_NOTICE); trigger_error("warning", E_USER_WARNING); trigger_error("error", E_USER_ERROR); 
13. 简述两种屏蔽php程序的notice警告的方法 初始化变量,文件开始设置错误级别或者修改php.ini 设置error_reporting set_error_handler 和 @抑制错误 1.在程序中添加:error_reporting (E_ALL & ~E_NOTICE); 2.或者修改php.ini中的:error_reporting = E_ALL 改为:error_reporting = E_ALL & ~E_NOTICE 3.error_reporting(0);或者修改php.inidisplay_errors=Off 
14. instanceof的作用, 经常在什么设计模式中使用 单例模式,但是其他的模式也会用到 
15. 1023用二进制表示, 并简述计算过程 10-2 1023%2=1 511%2 =1 255%2 =1 127%2 =1 63%2 =1 31%2 =1 15%2 =1 7%2 =1 3%2 =1 1%2 =1 0 =0 ------------------------------------------- 1023 2^9=<N<2^10 511 k=9 10 9 8 7 6 5 4 3 2 1 1 1 1 1 1 1 1 1 1 1 ---------------------- 1023 1 1023-1/2=511 1 511-1/2=255 1 255-1/2=127 1 127-1/2=63 1 63-1/2=31 1 31-1/2=15 1 15-1/2=7 1 7-1/2=3 1 3-1/2=1 1 ----------------------------------------------- 2-10 只需用将二进制数的各个位上的数从最右边开始,最右边的第一个数乘以二的零次方,第二个数乘以二的一次方,第三个数乘以二的二次方,依次类推可得第n个数乘以二的(n-1)次方,然后把得到的结果相加即可例如:110011=1*2^0+1*2^1+0*2^2+0*2^3+1*2^4+1*2^5=51 这也可以算是一个公式就是An*2^(n-1) An表示二进制数最右边开始的第n个数, 将第一项第二项第三项一直到第n项用式子An*2^(n-1) 计算出来并加在一起即可 
16. 下面php程序输出的内容是什么? 为什么? <?php $str = "aa\tbb\tcc"; @list($a, $b, $c) = explode('\t', $str); echo $a,$b,$c; ?> aabbcc;//'\t'不会以\t切割字符串,explode之后申城一个array(0=>"aa\tbb\tcc")所以。。。,'\t'换成"\t"就被切割 
17. includerequire 分别返回什么错误级别 include会系统警告并继续执行,require会发出系统警告但是会引致致命错误令脚本终止运行 
0 0
原创粉丝点击