PHP 基础

摘要:
HTTP协议中发送请求的两种方法是什么?HTTP是一种基于TCP/IP的协议,它描述了数据在万维网中的通信方式——查询字符串是在GET请求的URL中发送的POST——将要处理的数据提交到指定的资源——查询字符串就是在POST请求的HTTP消息体中发送的长字符串。对于GET请求,浏览器将同时发送httpheader和数据,服务器将响应200;对于POST,浏览器首先发送标头,服务器用100continue进行响应。浏览器再次发送数据,服务器响应200ok。因为POST需要两个步骤,并且消耗更多的时间,所以GET似乎比POST更有效。

1.POST GET区别

POST 和GET是什么?HTTP协议中的两种发送请求的方法 HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接

GET - 从指定的资源请求数据。 ---查询字符串(名称/值对)是在 GET 请求的 URL 中发送的

POST - 向指定的资源提交要被处理的数据 ---查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的

长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

 也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

 因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4#rd

GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有 Cache-Control Header的约束),GET方法的报文主体没有任何语义。

POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。

2。HTML BASE含义

<base> 标签为页面上的所有链接规定默认地址或默认目标。base其实就是定义一个默认的地址和默认目标。在其后的链接元素都将起作用。



3.魔术方法

__construct() 类的构造函数
__desctruct() 类的析构函数
__get() 获得一个类的成员变量时调用
__set() 设置一个类的成员变量时调用
__isset() 当对不可访问属性调用isset()或empty()时调用
__unset() 当对不可访问属性调用unset()时被调用。
__toString() 类被当成字符串时的回应方法
__clone() 当对象复制完成时调用
__sleep() 执行serialize()时,先会调用这个函数
__call() 在对象中调用一个不可访问方法时调用
__invoke() 调用函数的方式调用一个对象时的回应方法
__autoload() 尝试加载未定义的类

4。PHP正则表达式 验证电子邮件地址

$email_address = $_POST["email_address"];
$pattern = "/^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/i";
if ( preg_match( $pattern, $email_address ) )

解释:

1.这头尾两个斜杠/是正则表达式的限定符,这是Perl正则的标准,而php支持的正则表达式就是Perl正则的规范。表示两个斜杠之间就是正则内容,在结尾斜杠后面可以开启匹配的模式

2.后面的 i 就是忽略大小写匹配

3.^表示行开始 $表示行结尾

5.strrev — 反转字符串

函数实现
    
    function getRev($str,$encoding='utf-8'){
        $result = '';
        $len = mb_strlen($str);
        for($i=$len-1; $i>=0; $i--){
            $result .= mb_substr($str,$i,1,$encoding);
        }
        return $result;
    }
    $string = 'OK你是正确的Ole';
    echo getRev($string);

 6。

$path_parts pathinfo($path);      //pathinfo — 返回文件路径的信息
 
echo '分割出来的扩展名:'.$path_parts['extension'].'<br><br>';
其他

$file = ‘需要进行获取扩展名的文件.php’;

//第一种,根据.拆分,获取最后一个元素的值
function getExt1{
return end(explode(".",$file);)
}
//第二种,获取最后一个点的位置,截取
function getExt2{
return substr($file,strrpos($file,'.')+1);
}
//第三种,根据.拆分,获取最后一个元素的值
function getExt3($file) {
return array_pop(explode(‘.’,$file)); 
}

//第四种,pathinfo 
function getExt5($file) {
$arr = pathinfo($file);
return $arr['extension'];
//或者这样return pathinfo($file,PATHINFO_EXTENSION);
}

//第五种,正则,子模式
function getExt6$file){
preg_match("/(gif | jpg | png)$/",$file,$match);
$match=$match[0];

//第六种,正则反向引用
function getExt7($file){
$match=preg_replace("/.*.(w+)/" , "\1" ,$file );
echo $match;
}

echo print print_r 区别

共同点:首先echo 和 print 都不是严格意义上的函数,他们都是 语言结构;他们都只能输出 字符串,整型跟int型浮点型数据。不能打印复合型和资源型数据;

而区别是:echo 可以连续输出多个变量,而print只能一次输出一个变量。print打印的值能直接复制给一个变量,如 $a = print “123”;

而echo 不可以,它没有像函数的行为,所以不能用于函数的上下文。在使用时,echo() 函数比 print()速度稍快。

print_r() 只能打印一些易于理解的信息,且print_r()在打印数组时,会将把数组的指针移到最后边,使用 reset() 可让指针回到开始处。 

免责声明:文章转载自《PHP 基础》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#和C++实现强制结束进程的两种实现方式Linux下Rtmp流通过FFmpeg保存视频方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php批量上传图片并把图片名放入数据库

第一步肯定是首先把图片上传到对应的图片目录下,直接用框架中已经有的上传类: try{ $upload=newUpload(); $upload->set_ext(array('zip')); $path='目录名'; if( ! Io::mkdir($path)) // 创建目录 { thrownewException("无...

post传参部分数据丢失

tomcat获取post传的参数,只接收到前半部分参数,后半部分参数没有接收到 可能的原因是: tomcat中maxParameterCount是用来限制请求中的最大参数量,默认是10000,如果超过这个数值,会默认把多出的参数截取掉 (将被容器自动解析的最大数量的参数和值对(GET加上POST)。参数值对超出此限制将被忽略。值小于0表示没有限制。如果没有...

PHP手动搭建环境

php手动搭建环境有好多种组合,版本号不一致,会导致搭建失败。 我搭建的组合是: php5.6+MySQL5.6+Apache2.4的组合。 一、PHP语言包下载 首先从官网上下载php5.6 http://windows.php.net/download#php-5.6  选择完整版下载: 二、 Apache服务器下载 首先从官网上下载Apache2....

PHP 当Swoole 遇上 ThinkPHP5

本文假设你已经有了 Linux 操作系统的 PHP 环境,强烈推荐使用 Vagrant 来搭建开发环境安装 Swoole PECL 拓展可以通过 pecl 命令或者通过源码包编译安装,本文采用 pecl 命令来安装 Swoole在命令行输入 $ > pecl install swoole 安装 Swoole PECL 拓展,执行命令后通过php -m...

(PHP)redis String(字符串)操作

/** * * String操作 * 字符串操作 * */ //设置键值:成功返回true,否则返回false,键值不存在则新建,否则覆盖 $redis->set('string', 'hello world!'); //从左往右第五个字符开始替换为另一指定字符串,成功返回替换后新字符串的长度。 $redis->setRan...

C:php-7.4.5-nts-Win32-vc15-x64php-cgi.exe

win10两台电脑,一台装了vs2019 iis 正常,另一台没装iisphp环境出现些故障,深查原因,出现如下警告,现代码部分 PHP Warning:  'vcruntime140.dll' 14.0 is not compatible with this PHP build linked with 14.16 in Unk 访问IIS 站点报错: H...