PHP笔记

文章目录

    • PHP
      • 一、什么是PHP
      • 二、PHP集成环境的安装
      • 三、WampServer
      • 四、PHP基础
        • PHP标准格式
        • php注释
        • 变量的定义
        • 传值替换
        • 变量的作用域
        • 变量的检测与删除
        • static静态变量
        • 进制转换
        • 响应头
        • 字符串边界定位符
        • 字符串函数
        • 常量的定义
        • 三元表达式
      • 五、基础
        • 文件引入
        • 点函数
        • 参数类型约束以及严格模式
      • 数组
        • 自定义
        • array_walk_recursive()递归改变值传递
        • var_export合法转换为字符串
        • 序列化与反序列化(serialize and unserialize)
        • 使用序列化操作文件的读取与存入
      • 时区
        • 时间戳
        • 获取时间戳
        • 使用技巧计算时间差
      • 数学函数
        • 使用数学函数获取随机验证码
      • 正则
      • 文件读写
        • 使用数学函数获取随机验证码
      • 正则
      • 文件读写

PHP

一、什么是PHP

PHP(Hypertext Preprocessor)即超文本预处理器,是在服务器中执行的脚本语言,WEB开发可以并入HTML,主要作用帮助开发人员快速开发动态网页。

二、PHP集成环境的安装

WampServer作为已经配置完成的PHP集成环境

安装可百度安装

下载地址:https://www.wampserver.com/

三、WampServer

右击language 选择中文

其中,可以访问的页面在www文件夹中,默认执行index.php文件

启动时可能会遇见的问题

因为wampserver的默认启动服务器是80,并且若本机上下载sql server 数据库时,这两个将会冲突

所以,出现冲突时,需要修改wampserver的端口号

具体如下,

找到根目录/l\wamp\bin\apache\apache2.4.9\conf环境下的httpd.conf文件

修改里面的参数 listen 和ServerName的端口号(默认80)改为所需的(默认8080)

在这里插入图片描述

在这里插入图片描述

启动~测试

在这里插入图片描述

出现此页面即可表示成功

四、PHP基础

PHP标准格式
<?php
    //php代码块
    ?>
php注释
//  单行注释
# 单行注释
/*
多行注释
*/

php执行符 ;

变量的定义

格式

$name='abc';
<?php
    $name ="abc";
    echo $name;
?>

!在这里插入图片描述

关于变量的定义,可以使用数字字母下划线(不能以数字开头)

$_ ="abc";  //可以使用
传值替换

第一种情况

<?php
    $a=1;
    $b=$a;
    echo $a;
    echo $b;
?>

结果打印11

第二种情况

<?php
    $a=1;
    $b=&$a;
    echo $a;
    echo $b;
?>

结果打印11

在第一种情况下 将b值在等于a后再赋值

<?php
    $a=1;
    $b=$a;
    $b=3;
    echo $a;
    echo $b;
?>

结果打印13

在第二种情况下 将b值在等于a后再赋值

<?php
    $a=1;
    $b=&$a;
    $b=3;
    echo $a;
    echo $b;
?>

结果打印33

分析

在这里插入图片描述

第一种情况,分别指向各自的内存地址,所以当改变b的值时a不会改变

第二种情况,两条共同指向a的内存地址,所以当改变b的值时全部都会改变

变量的作用域

变量嵌套使用

<?php
    $name="hello";
    $$name="world";
    echo $hello;
?>

打印输出

在这里插入图片描述

$ n a m e = name = name=hello

变量定义域

<?php
   $name="hello World";
   function hs(){
       echo $name;
   }
   hs();
?>

在这里插入图片描述

外部变量不能被内部方法访问

这个时候就需要global关键字,这个关键字用来获取全局变量

<?php
   $name="hello World";
   function hs(){
       echo $GLOBALS["name"];
   }
   hs();
?>

打印结果成功获取

<?php
   $name="hello World";
   function hs(){
       global $name;
       echo $name;
   }
   hs();
?>
变量的检测与删除

判断一个变量是否存在

issetunset
是否存在删除元素
<?php
   $name="hello World";
  var_dump(isset($name));
?>

在这里插入图片描述

<?php
   $name="hello World";
  var_dump(isset($names));
?>

在这里插入图片描述

删除元素

<?php
   $name="hello World";
   unset($name);
  var_dump(isset($name));
?>

在这里插入图片描述

小案例

<?php
    $name ="a123";
    function hs(){
        var_dump(isset($name));
    }
    hs();
?>

打印结果不存在

<?php
    $name ="a123";
    function hs(){
        global $name;
        var_dump(isset($name));
        unset($name);
    }
    hs();
    var_dump(isset($name));
?>

结果打印两个true

说明再方法内删除不了全局变量

static静态变量

static关键字可以将变量保存在内存当中

<?php
   function hs(){
        $sum=1;
       $sum+=1;
       return $sum.'<hr>';
   }
   echo hs();
   echo hs();
?>

在这里插入图片描述

<?php
    function hs(){
        static $sum=1;
        $sum+=1;
        return $sum.'<hr>';
    }
    echo hs();
    echo hs();
?>

在这里插入图片描述

使用了static关键字,就自动将被static修饰的变量储存起来

等待下一次调用的时候不执行,仅仅执行第一次

进制转换

1.八进制转化为10进制

  echo octdec(144);   //8进制转换为10进制-结果100

2.十六进制转换为10进制

    echo hexdec(144);   //16进制转换为10进制-结果324
响应头

响应头,用来解决汉字编码问题

未添加响应头时

<?php
   echo "PHP天下第一";
?>

此时页面显示

在这里插入图片描述

添加响应头

<?php
header("Content-type:text/html;charset=UTF-8");
   echo "PHP天下第一";
?>

此时打印

在这里插入图片描述

正常显示

字符串边界定位符
<?php
    $str="<h1 style="color:red">PHP</h1>"
?>

比较常见的问题,双引号两两配对,导致出现问题

在这里插入图片描述

常见的解决方法

1.字符转义

<?php
    $str="<h1 style=\"color:red\">PHP</h1>";
	echo $str;
?>

在这里插入图片描述

2.边角定位

格式<<<php php;

<?php
 $sst=<<<sst
    <h1>web</h1>
    <h2 style="color:green;">PHP</h2>
sst;
 echo $sst;
?>

适用于多文本行输出

其中值得注意的是

在这里插入图片描述

两个标记符之间不能有空格,进一步说明

第一个sst标记符后面不能存在空格

第二个sst标记符前面不能存在空格

还有标识符号可以取除了关键字以外的所有字符,但必须保证上下标记符保持一致;

字符串函数

1、变量名长度

(strlen)=>strlen(字符串)

<?php 
    $str ="abcdefg";
    echo strlen($str);
?>

打印结果为7;

打印汉字个数-(mb_strlen);

首先使用strlen函数

    $str ="发大财干大饭";
    echo strlen($str);

结果打印为18;因为汉字一个汉字三个字节;

所以我们需要实现个数时,就需要使用mb_strlen这个函数

<?php 
header("Content-type:text/html;charset=UTF-8;");

    $str ="发大财干大饭";
    echo mb_strlen($str,"utf-8");
?>

结果打印为6;正好为汉字个数;

2.筛选去除函数

trim(变量名,待筛选去除字符(默认空格));

<?php 
    $str =" www.haojiahuo.com ";
    echo strlen($str);
    echo "<hr>";
    echo strlen(trim($str));
?>

打印结果:

在这里插入图片描述

延伸函数,右去除和左去除

右侧去除左侧去除
rtrim()ltrim()

3.首字母大写

第一个首字母大写=》 ucfirst(string)

<?php 
  $stt="hello world";
  echo ucfirst($stt);
?>

将首字母大写 结果打印Hello world

将所有单词首字母大写=》ucwords(string);

<?php 
  $stt="hello world";
  echo ucwords($stt);
?>

结果打印 Hello World

4.分隔符

explode();根据字符分割返回数组

<?php 
    $str ="haojiahuo.com";
    print_r(explode(".",$str));
?>

结果打印

在这里插入图片描述

分割成两个数组

implode(); 连接字符

<?php 
 $str =array("www","haojiahuo","com");
 echo implode(".",$str);
?>

使用自定义连接符连接数组

结果打印 www.haojiahuo.com;

6.分割

substr();

<?php 
    $str ="php.web";
    echo substr($str,0,3);
    
?>

结果打印php

打印汉字个数

mb_substr();

<?php
    header("Content-type:text/html;charset=UTF-8;");
    $str ="耗子尾汁";
    echo mb_substr($str,0,2,"UTF-8");
?>

结果打印 耗子;

常量的定义

常量的定义有两种方法

1.define()

2.const

define(“变量名称”,“变量值”,区分大小写(true or false))

    define("NAME","PHP");
    echo NAME;

const

    const SEX= "男";
    echo SEX;

其中变量名一般都应为大写,

判断一个常量是否被定义

defined

    echo defined("SEX");

结果打印为1,说明已经存在,符合

var_dump(defined("SEX_s"));

结果打印false;不存在

三元表达式
echo  true? 1:2;

真=》输出1

假=》输出2

@符可以表示忽略警告

@(20/0);

这样输出会出现警告,当加上@符时,系统自动屏蔽警告

五、基础

文件引入

include引入与require引入

在这里插入图片描述

<?php 
    include 'decc.html';
?>

2.require引入

require("decc.html");

两者区别

使用include引入时,当引入出现错误的可以继续向下加载,反知使用require引入时,必须完全加载成功才可以向下运行;一般建议以require进行引入;

include_once 和 require_once 控制一次加载

例如

function.php

<?php
function show(){
    echo "php";
}
?>

1.php

<?php
include 'function.php';
echo show();
?>

test.php

<?php
include '1.php';
include 'function.php';
echo show();
?>

每一次引入,相当于一次复制 ,假如test需要两个php文件的引入,但是两个文件有相同的方法,这样就会造成重复创建函数,导致错误

这样就需要include_once 来约定只能加载一次

同理require_once 也是只有一次;

点函数

这需要php版本大于5.60

    function sum(...$number){
        return array_sum($number);
    }

    echo sum(1,2,3,4,5);
参数类型约束以及严格模式

declare(strict_types=1);

数组

自定义

数组改变键以及值的大小写

<?php
return [
    'HOST'=> 'localhost',
    'poRt'=>3306,
    'uSEr'=>'root',
    'CAche'=>[
        'hoST'=>'12.13.14.156',
        'USer'=>'localname',
    ],
];
?>

递归变为大写

<?php
$database=include '1.php';
    //转换为大写
    function hd_array_change_value_case(array $data,$type){
        foreach($data as $key=>$value):
            $action=$type==CASE_UPPER?'strtoupper' : 'strtolower';
            unset($data[$key]);     //相当于返回再后面追加,所以要去除原有的k  暂时蒙
            $data[$action($key)]=is_array($value)?hd_array_change_value_case($value,CASE_UPPER):$value;
            endforeach;
            return $data;
        
    }
    print_r(hd_array_change_value_case($database,CASE_UPPER));
?>

递归变为小写

<?php
 $database=include '1s.php';
//转变为小写
function hd_array_change_value_case(array $data,$type){
    foreach($data as $key=>$value):
    $action=$type==CASE_UPPER?'strtoupper':'strtolower';
    $data[$key]=is_array($value)?hd_array_change_value_case($value,$type):$action($value);
    endforeach;
    return $data;
}
print_r(hd_array_change_value_case($database,CASE_LOWER));
?>
array_walk_recursive()递归改变值传递

array_walk_recursive方法进入下一层,相当于遍历下一个数组

array_walk_recursive(array,callback,custom)

<?php
    $database =include '1s.php';

    function hd_change_value(array $data,$type){
        array_walk_recursive($data,function(&$value,$key){
            $value=strtoupper($value);
        });
        return $data;
    };
    print_r(hd_change_value($database,CASE_LOWER));
?>

进一步使用自定义函数

<?php
    $database=include '1s.php';

    function hd_change_value(array $data,$type){
        array_walk_recursive($data,function(&$value,$key,$type){
            $action =$type==CASE_LOWER?'strtoupper':'strtolower';
            $value=$action($value);
        },$type);
        return $data;
    }

    print_r(hd_change_value($database,CASE_UPPER));
?>
var_export合法转换为字符串
<?php
    //使用serialize序列化储存以及var_export()转为php合法字符
    $database=include '1s.php';
    print_r($database);
    var_export($database);

?>

区别:上:print_r或者var_export()

在这里插入图片描述

序列化与反序列化(serialize and unserialize)
<?php
    //serialize序列化
    $database=include '1s.php';

    $data=serialize($database);
    echo $data;
    echo "<br>";
    $dataser=unserialize($data);
    print_r($dataser);
?>

在这里插入图片描述

序列化将数组转为php可以识别的合法格式。

反序列化是将上述转变回来

使用序列化操作文件的读取与存入
<?php
    //文件存储与获取
    //存 file_put_content()

    function cache($name,$data=null){
        $file='cache'.'/'.md5($name).'.php';
        if($data==null){
            //取出数据
            $contents=is_file($file)?:null;
           return unserialize($contents);
        }else{
            //存入数据
            return file_put_contents($file,serialize($data));
        }
    }

    $database =include '1s.php';
    cache('database',$database);
?>

运行之后,在cache文件夹下就会出现

在这里插入图片描述

取数据操作

<?php
    //文件存储与获取
    //存 file_put_contents()
    //取 file_get_contents()

    function cache($name,$data=null){
        $file='cache'.'/'.md5($name).'.php';
        if($data==null){
            //取出数据
            $contents=is_file($file)?file_get_contents($file):null;
           return unserialize($contents);
        }else{
            //存入数据
            return file_put_contents($file,serialize($data));
        }
    }

    $database =include '1s.php';
   print_r(cache('database'));
?>

在这里插入图片描述

时区

date_default_timezone_set(‘PRC’); //设置时区

date_default_timezone_get(); //获取时区

PRC中国国内时区

echo date(‘Y-m-d H-i-s’); 年月日 时分秒

时间戳

指从1970年1月1日到现在的秒数

<?php
    //记录脚本执行时间。

    //设置时区
    date_default_timezone_set('PRC');

    //封装函数
    function runtime($starttime=null,$endtime=null){
        static $cache=[];
        if(is_null($starttime)){
            return $cache;
        }elseif(is_null($endtime)){// 说明我要设置值
            return $cache[$starttime]=microtime(true);
        }else{
            $endtime=$cache[$endtime]?:microtime(true);
            print_r($cache);
            return $endtime-$cache[$starttime];
        }
    }

    runtime('start');
    for($i=0;$i>200000000;$i++){
        $i++;
    }
    runtime('end');
    echo runtime('start','end');
    sleep(2);
    runtime("s1");
    $a=0;
    while($a>200000){
        $a++;
    }
    runtime('s2');
    echo "<hr>",runtime('s1',"s2");
    echo "<hr>",runtime('start',"s2");
?>

在这里插入图片描述

一般计时(time()) 微妙=》microtime();

其中在microtime中,microtime(true)则开启小数点,例如上图结果。

获取时间戳
<?php
date_default_timezone_set("PRC");
//获取时间戳
echo strtotime('2021-04-18 19:19:19');

echo "<hr>";

echo date("Y-m-d H:i:s",strtotime("+1 year"));

?>
使用技巧计算时间差
<?php
    header('Content-type:text/html;charset=utf-8');
    date_default_timezone_set("PRC");

    $time1=new DateTime();
    $time2=new DateTime("2020-08-18 12:15:20");
    $time=$time1->diff($time2);

    // $format='距离你的幸运日还有%a天';
    $format='距离你的幸运日还有%m月%d天%H时%M分%s秒,一共%a天';
    echo $time->format($format);
?>

在这里插入图片描述

->diff()差值

描述
%Y
%m
%d
%H小时
%M分钟
%s秒数
%a总天数

add增加值

<?php
    $time1= new DateTime();
    $time2= new DateInterval('P2DT3H2M');
    echo $time1->format('Y-m-d H:i:s');
    echo '<hr>';
    $time1->add($time2);
    echo $time1->format('Y-m-d H:i:s');
?>

在这里插入图片描述

数学函数

函数描述
ceil()向上取整,列如10.2->11
floor()向下取整,例如10.2->10
max(value1,value2)最大值
min(value1,value2)最小值
round()四舍五入
mt_rand(min,max)取得在范围内值
使用数学函数获取随机验证码
<?php

    function code($str){
        $randcode='1234567890abcdefghigklmnopqrstuvwxyz';
        $code='';
        for($i=0;$i<$str;$i++){
            $index=mt_rand(0,strlen($randcode)-1);
            $code.=strtoupper($randcode[$index]);
        }
        return $code;
    }
    echo code(5);
?>

验证码随机生成

正则

preg_match(‘/\d/’,‘a1234’);

文件读写

<?php
    //文件的r模式
    $filename='cache/abc.txt';
    
    $inclu=fopen($filename,'r');    //打开文件

    echo fread($inclu,filesize($filename)),'<br/>';

    echo fseek($inclu,4);   //光标移动到第5个

    echo fread($inclu,filesize($filename));
?>
方法描述
fopen($filename,操作)打开一个文件
fread(V1打开的文件,V2文件读取介绍位置)读取文件内容
fseek(V1打开的文件,V2光标移动位置)光标移动

() | 向下取整,例如10.2->10 |
| max(value1,value2) | 最大值 |
| min(value1,value2) | 最小值 |
| round() | 四舍五入 |
| mt_rand(min,max) | 取得在范围内值 |

使用数学函数获取随机验证码
<?php

    function code($str){
        $randcode='1234567890abcdefghigklmnopqrstuvwxyz';
        $code='';
        for($i=0;$i<$str;$i++){
            $index=mt_rand(0,strlen($randcode)-1);
            $code.=strtoupper($randcode[$index]);
        }
        return $code;
    }
    echo code(5);
?>

验证码随机生成

正则

preg_match(‘/\d/’,‘a1234’);

文件读写

<?php
    //文件的r模式
    $filename='cache/abc.txt';
    
    $inclu=fopen($filename,'r');    //打开文件

    echo fread($inclu,filesize($filename)),'<br/>';

    echo fseek($inclu,4);   //光标移动到第5个

    echo fread($inclu,filesize($filename));
?>
方法描述
fopen($filename,操作)打开一个文件
fread(V1打开的文件,V2文件读取介绍位置)读取文件内容
fseek(V1打开的文件,V2光标移动位置)光标移动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/263814.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI 官方 Prompt 工程指南:写好 Prompt 的六个策略

其实一直有很多人问我&#xff0c;Prompt 要怎么写效果才好&#xff0c;有没有模板。 我每次都会说&#xff0c;能清晰的表达你的想法&#xff0c;才是最重要的&#xff0c;各种技巧都是其次。但是&#xff0c;我还是希望发给他们一些靠谱的文档。 但是&#xff0c;网上各种所…

Postman接口测试之Post、Get请求方法

一、基础知识 1.HTTP的五种请求方法&#xff1a;GET&#xff0c; POST &#xff0c;HEAD&#xff0c;OPTIONS&#xff0c; PUT&#xff0c; DELETE&#xff0c; TRACE 和 CONNECT 方法。 GET请求&#xff1a;请求指定的页面信息&#xff0c;并返回实体主体。&#xff08;通常用…

“用户名不在 sudoers文件中,此事将被报告” 解决方法

原因 当普通用户需要安装文件时&#xff0c;无法用yum install ** -y直接安装时&#xff0c;采用sudo yum install **; 但是发现提示“用户名不在 sudoers文件中&#xff0c;此事将被报告” 解决方法。 这是因为该普通用户不在sudoers文件中&#xff0c;所以要找到该文件&am…

SpringIOC之BeanFactoryResolver

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

2024年软件测试工程师如何从功能测试转成自动化测试?

前言 接触了太多测试同行&#xff0c;由于多数同行之前一直做手工测试&#xff0c;现在很迫切希望做[<u>自动化测试</u>](javascript:;)&#xff0c;其中不乏工作5年以上的同行。 从事软件自动化测试已经近十年&#xff0c;接触过底层服务端、API 、Web、APP、H5…

Ethercat 读从站状态报文分析

涉及的从站寄存器&#xff1a;Register AL Status 0x0130:0x0131 。 1&#xff0c;发送报文 1&#xff09;IgH dmesg看到的报文 [18773.590655] geshifei ec_master_send_datagrams 1059: Adding datagram datagram->index0 [18773.590656] EtherCAT DEBUG 0: frame siz…

机器学习---推荐系统案例(二)

四、推荐系统---模型训练 1、模型训练代码 模型训练代码参照scala文件&#xff1a;Recommonder.scala 1.Logger.getLogger("org.apache.spark").setLevel(Level.ERROR) 2.val conf new SparkConf().setAppName("recommonder").setMaster("local[*…

《成才》期刊投稿方式发表要求

《成才》杂志是国家新闻出版总署批准&#xff0c;面向国内外公开发行的教育期刊&#xff0c;以“大教育视野、新理念成才”为办刊宗旨&#xff0c;全面贯彻党的教育方针&#xff0c;理论联系实际&#xff0c;开展教育科学研究和人才培养研究&#xff0c;交流科技成果&#xff0…

TrustZone之示例用例——加密文件系统

移动设备如智能手机包含大量个人数据。如果设备丢失或被盗&#xff0c;用户会关心这些数据的机密性。这就是为什么大多数最新的设备支持文件系统加密的原因。TrustZone 可以作为保护这些数据的解决方案的一部分。 存储在外部闪存中的数据是加密的。在启动时&#xff0c;设备对用…

React学习计划-React16--React基础(二)组件与组件的3大核心属性state、props、ref和事件处理

1. 组件 函数式组件&#xff08;适用于【简单组件】的定义&#xff09; 示例&#xff1a; 执行了ReactDOM.render(<MyComponent/>, ...)之后执行了什么&#xff1f; React解析组件标签&#xff0c;找到了MyComponent组件发现组件是使用函数定义的&#xff0c;随后调用该…

Hive文件存储与压缩

压缩和存储 1、 Hadoop压缩配置 1) MR支持的压缩编码 压缩格式工具算法文件扩展名是否可切分DEFAULT无DEFAULT.deflate否GzipgzipDEFAULT.gz否bzip2bzip2bzip2.bz2是LZOlzopLZO.lzo否LZ4无LZ4.lz4否Snappy无Snappy.snappy否 为了支持多种压缩/解压缩算法&#xff0c;Hadoop…

数据结构 | 查漏补缺

目录 数据的基本单位 冒泡排序 DFS和BFS中文 Prim 比较 中序线索二叉树 顺序栈 链栈 时间复杂度 循环队列 求第K个结点的值 数据的基本单位 数据元素 循环队列sq中&#xff0c;用数组elem[0‥25]存放数据元素&#xff0c;设当前sq->front为20&#xff0c;sq-&g…

【C++11特性篇】模板的新一力将:可变参数模板 [全解析]

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》专…

循环神经网络中的梯度消失或梯度爆炸问题产生原因分析(二)

上一篇中讨论了一般性的原则&#xff0c;这里我们具体讨论通过时间反向传播&#xff08;backpropagation through time&#xff0c;BPTT&#xff09;的细节。我们将展示目标函数对于所有模型参数的梯度计算方法。 出于简单的目的&#xff0c;我们以一个没有偏置参数的循环神经…

华为鸿蒙开发应用工程师:连接未来,创造无限可能

1. 引言 随着智能设备的不断普及和发展&#xff0c;华为鸿蒙作为下一代全场景分布式操作系统&#xff0c;为开发者提供了全新的应用开发平台。作为一名鸿蒙开发应用工程师&#xff0c;您将扮演连接未来的重要角色&#xff0c;为智能生活创造无限可能。 2. 深度参与全场景应用…

modbus异常错误码说明

异常错误码说明 其中物理离散量输入和输入寄存器只能有I/O系统提供的数据类型&#xff0c;即只能是由I/O系统改变离散量输入和输入寄存器的数值&#xff0c;而上位机程序不能改变的数据类型&#xff0c;在数据读写上表现为只读&#xff0c;而内部比特或者物理线圈和内部寄存器或…

Profinet转485modbus网关解决传输距离及数据丢失问题

Profinet转485modbus网关&#xff08;XD-MDPN100/2000&#xff09;是一款能够解决传输距离及数据丢失问题的设备。在现场应用中&#xff0c;数据的传输距离和数据丢失最为常见的问题。 在现场添加Profinet转485modbus网关&#xff08;XD-MDPN100/2000&#xff09;即可解决传输距…

BDD - Python Behave 入门

BDD - Python Behave 入门 Behave 是什么Behave 的主要特点和组成部分Behave 实践安装 BehaveBehave 项目目录结构创建项目创建 Feature 文件创建步骤定义文件 执行用例执行全部用例执行部分用例 生成报告生成 Json report生成 HTML 报告生成 Junit report生成 Cucumber report…

Modbus-TCP数据帧

Modbus-TCP基于4种报文类型 MODBUS 请求是客户机在网络上发送用来启动事务处理的报文MODBUS 指示是服务端接收的请求报文MODBUS 响应是服务器发送的响应信息MODBUS 证实是在客户端接收的响应信息 Modbus-TCP报文: 报文头MBAP MBAP为报文头&#xff0c;长度为7字节&#xff0c…

postman和Jmeter的区别

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…