PHP被忽略的基础知识
持续更新,记录一些值得关注的问题。
下列PHP配置项中,哪一个和安全最不相关:()
A. open_basedir
B. register_globals
C. disable_functions
D. file_uploads
open_basedir 可将用户访问文件的活动范围限制在指定的区域 ,通常是其家目录的路径,也 可用符号 "." 来代表当前目录。注意用 open_basedir 指定的限制实际上是前缀 , 而不是目录名。 举例来说 : 若 "open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1" 都是 可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成 : "open_basedir = /dir/user/"
register_globals 的意思就是注册为全局变量 ,所以当 On 的时候,传递过来的值会被直接的注册为全局变量直接使用,而 Off 的时候,我们需要到特定的数组里去得到它。 1.PHP 4.2.0 版开始配置文件中 register_globals 的默认值从 on 改为 off 了,虽然你可以设置它为 On ,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用 Off 的风格开始编程。 2. 当 register_globals 打开以后,各种变量都被注入代码,例如来自 HTML 表单的请求变量。再加上 PHP 在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。 当打开时,人们使用变量时确实不知道变量是哪里来的,只能想当然。但是 register_globals 的关闭改变了这种代码内部变量和客户端发送的变量混杂在一起的糟糕情况。
disable_functions 限制程序使用一些可以直接执行系统命令的函数 ,如 system , exec , passthru , shell_exec , proc_open 等等。所以如果想保证服务器的安全,请将这个函数加到 disable_functions 里或者将安全模式打开吧
file_uploads , PHP 文件上传功能记录 file_uploads 指令决定是否启用,默认值: On 。
字符串比较函数
以下程序运行结果:( )
<?
$str = "LAMP";
$str1 = "LAMPBrother";
$strc = strcmp($str,$str1);
switch ($strc){
case 1:
echo "str > str1";
break;
case –1:
echo "str < str1";
break;
case 0:
echo "str = str1";
break;
default:
echo "str <> str1";
}
?>
A. str > str1
B. str < str1
c. str = str1
D. str <> str1
strmp(\(str1,\)str2)函数的意思,比较两个字符串的大小,比较时计算了两个字符串相差(不同)字符的个数一起作为返回。结果是-7。
格林时间
代码运行后的输出结果为( )
<?php
$d=mktime(9, 12, 31, 6, 10, 2015);
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
A. 创建日期是 2015-06-10 09:12:31am
B. 创建日期是 2015-10-06 09:12:31am
C. 创建日期是 2015-10-6 9:12:31am
D. 创建日期是 2015-10-06 09:12:31pm
mktime — 取得一个日期的 Unix 时间戳; 即:时,分,秒,月,日,年。
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int$month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
在PHP面向对象中,下面关于final修饰符描述错误的是( )
A. 使用final标识的类不能被继承
B. 在类中使用final标识的成员方法,在子类中不能被覆盖
C. 不能使用final标识成员属性
D. 使用final标识的成员属性,不能在子类中再次定义
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
Note: 属性不能被定义为 final,只有类和方法才能被定义为 final。
getdate()函数返回的值的数据类型是:( )
A. 整形 B. 浮点型 C. 数组 D. 字符串
调用getdate函数的返回值
Array ( [seconds] => 37 [minutes] => 34 [hours] => 15 [mday] => 19 [wday] => 3 [mon] => 8 [year] => 2015 [yday] => 230 [weekday] => Wednesday [month] => August [0] => 1439969677 )
关于mysql_pconnect说法正确的是?( )
A. 与数据库进行多连接 B. 与mysql_connect功能相同 C. 与@mysql_connect功能相同 D.与数据库建立持久连接
mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接。
mysql_pconnect() 和 mysql_connect() 非常相似,虽然只多了一个P, 但有两个主要区别:
当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以 后使用( mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)
请看代码,数据库关闭指令将关闭哪个连接标识?( )
<?php
$link1 =mysql_connect("localhost","root","");
$link2 = mysql_connect("localhost","root","");
mysql_close();
?>
A. $link1 B. $link2 C. 全部关闭 D. 报错
【就近原则】
mysql_close() 关闭指定的连接标识所关联的到 MySQL 服务器的非持久连接。
如果没有指定 link_identifier,则关闭上一个打开的连接。
bool mysql_close ([ resource $link_identifier = NULL ] )
值引用
阅读下面代码,解答输出。
<?php
$data = ['a','b','c'];
foreach ($data as $k => &$v){
//
}
var_dump($data);
foreach ($data as $k => $v){
//
}
var_dump($data);
第一次输出 ['a','b','c']
第二次输出 ['a','b','b']
第一次遍历运用引用 $v的地址指向数组最后一个位置,即c的位置;
第二次遍历将值赋给\(v,值a赋给\)v,指向c,此时a[2]=a;执行到第二个元素,b赋给\(v,赋给\)v指向地址a[2],此时数组a[2]=b;执行到第3个元素,此时a[2]=b,b赋给\(v,赋给\)v指向地址,此时数组a[2]=b
static、self
阅读代码,给出解答。
<?php
class A{
public static function who(){
echo __CLASS__;
}
public static function test(){
static::who();
}
public static function test2(){
self::who();
}
}
class B extends A{
public static function who(){
echo __CLASS__;
}
}
B::test(); //B static指向调用方B,用于后期静态绑定,也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。
B::test2(); //A self指向其定义所在类
自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。
当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分);当进行非静态方法调用时,即为该对象所属的类 ------摘自php.net
后期静态绑定本想通过引入一个新的关键字表示运行时最初调用的类来绕过限制。简单地说,这个关键字能够让你在上述例子中调用 test() 时引用的类是 B 而不是 A。
最终决定不引入新的关键字,而是使用已经预留的 static 关键字。 ------摘自php.net
static使用另外一种情况:
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // 后期静态绑定从这里开始
}
}
class B extends A {
}
?>
B::test(); // A 因为B类中没有who方法,所以不得不又调用A类中的who方法。
阅读代码,给出解答。
<?php
class A {
public static function who(){
echo __CLASS__;
}
}
class B extends A {
public static function who(){
echo __CLASS__;
}
}
class C extends B{
public function who(){
echo __CLASS__;
}
public static function test(){
A::who(); //A
parent::who(); //B
self::who(); //C
static::who(); //C
}
}
C::test();
static作用
<?php
$a = 0 == 'abc' ?5:1;
function test(){
static $a=1;
return $a++;
}
echo $a; //5
echo ++$a; //6
echo test(); //1
echo test(); //2
静态局部变量的特点:
- 不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值;
- 静态局部变量只会初始化一次;
- 静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
- 当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
usort 自定义排序
usort ( array &$array , callable $value_compare_func ) : bool
callback ( mixed $a, mixed $b ) : int
在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数
<?php
$data = [3, 2, 5, 6, 1];
usort($data,function($a,$b){
return $a<=>$b;
});
$data = [
['id' => 2, 'name'=> 'sun'],
['id' => 1, 'name'=> 'c'],
['id' => 9, 'name'=> 'b'],
['id' => 6, 'name'=> 'g'],
];
usort($data,function($a,$b){
return $a['id']<=>$b['id'];
});
var_dump($data);
glob
glob — 寻找与模式匹配的文件路径
glob ( string $pattern [, int $flags = 0 ] ) : array
<?php
glob('./*Ctroller.php'); //模糊匹配当前目录所有控制器文件
PHP被忽略的基础知识的更多相关文章
- 学习 shell脚本之前的基础知识
转载自:http://www.92csz.com/study/linux/12.htm 学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- Linux基础知识整理
一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...
- javascript中BOM部分基础知识总结
一.什么是BOM BOM(Browser Object Document)即浏览器对象模型. BOM提供了独立于内容 而与浏览器窗口进行交互的对象: 由于BOM主要用于管 ...
- Levenberg-Marquardt算法基础知识
Levenberg-Marquardt算法基础知识 (2013-01-07 16:56:17) 转载▼ 什么是最优化?Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各 ...
- HTML基础知识总结
经过这段时间的学习,对于html的一些基础知识有了一定的了解.所谓好记性不如烂笔头,唯有一点点累积,才能汇聚成知识的海洋.现在,我对这段时间的学习做一个总结. 一.HTML的定义 HTML,超文本标记 ...
- ReactiveCocoa基础知识内容
本文记录一些关于学习ReactiveCocoa基础知识内容,对于ReactiveCocoa相关的概念如果不了解可以网上搜索:RACSignal有很多方法可以来订阅不同的事件类型,ReactiveCoc ...
随机推荐
- Python socket 通信功能简介
常用的地址家族AF_UNIX:基于文件,实现同一主机不同进程之间的通信AF_INET:基于网络,适用于IPv4AF_INET6:基于网络,使用于IPv6 常见的连接类型SOCK_STREAM:即TCP ...
- 查看CPU占用工具
recording_5492_1.jfr jcmd 5942 JFR.start delay=1s duration=200s name=serverRecording filename=./reco ...
- BS4库详解
from bs4 import BeautifulSoup html = """ <html><head><title>This is ...
- git提交报错:Updates were rejected because the tip of your current branch is behind
提交代码push时报错:上网查询了一下解决办法有很多种,1.使用强制push的方法:(上网查询说这种会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候.) git push -u origin ...
- fingerprint for the ECDSA key
验证 fingerprint for the ECDSA key ssh-keygen -t ecdsa -f ssh_host_ecdsa_key 在B上ssh A ,得到A的fingerpr ...
- linux系统中如何查看acpi信息?
答: 进入/sys/firmware/acpi/tables, 然后输入tree命令即可查看acpi信息
- python清理docker-harbor的多余镜像
# coding: utf-8 from operator import itemgetter from urllib import parse import requests import date ...
- leetcode 361.Bomb Enemy(lintcode 553. Bomb Enemy)
dp 分别计算从左到右.从右到左.从上到下.从下到上4个方向可能的值,然后计算所有为‘0’的地方的4个方向的值的最大值 https://www.cnblogs.com/grandyang/p/5599 ...
- 八、postman的cookie支持
postman中可以直接添加cookie,查看响应中的cookie https://postman-echo.com/cookies/set?foo1=bar1&foo2=bar2 var r ...
- dart里面的时间处理:
原文地址:https://www.cnblogs.com/wyhlightstar/p/11059942.html 1.获取当前时间 var now = new DateTime.now(); pri ...