新开传奇网站180合击国际摄影网站

news/2025/9/25 16:41:56/文章来源:
新开传奇网站180合击,国际摄影网站,wordpress首页404,东莞公司网站策划为什么xml_rpc服务端读取数据都是通过file_get_contents(‘php://input, ‘r)。而不是从$_POST中读取#xff0c;正是因为xml_rpc数据规格是xml#xff0c;它的Content-Type是text/xml。php://input碰到了multipart/form-data在使用xml-rpc的时候#xff0c;server端获取cli… 为什么xml_rpc服务端读取数据都是通过file_get_contents(‘php://input, ‘r)。而不是从$_POST中读取正是因为xml_rpc数据规格是xml它的Content-Type是text/xml。php://input碰到了multipart/form-data在使用xml-rpc的时候server端获取client数据主要是通过php输入流input而不是$_POST数组。所以这里主要探讨php输入流php://input对一php://input介绍PHP官方手册文档有一段话对它进行了很明确地概述。“php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype”multipart/form-data”.翻译过来是这样“php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言它给内存带来的压力较小并且不需要特殊的php.ini设置。php://input不能用于enctypemultipart/form-data”我们应该怎么去理解这段概述呢?!我把它划分为三部分逐步去理解。读取POST数据不能用于multipart/form-data类型php://input VS $HTTP_RAW_POST_DATA读取POST数据PHPer 们一定很熟悉$_POST这个内置变量。$_POST与 php://input存在哪些关联与区别呢?另外客户端向服务端交互数据最常用的方法除了POST之外还有GET。既然php://input作为PHP输入流它能读取GET数据吗这二个问题正是我们这节需要探讨的主要内容。经验告诉我们从测试与观察中总结会是一个很凑效的方法。这里我写了几个脚本来帮助我们测试。file 192.168.0.6:/phpinput_server.php 打印出接收到的数据file 192.168.0.8:/phpinput_post.php 模拟以POST方法提交表单数据file 192.168.0.8:/phpinput_xmlrpc.php 模拟以POST方法发出xmlrpc请求.file 192.168.0.8:/phpinput_get.php 模拟以GET方法提交表单表数phpinput_server.php与phpinput_post.php   php //file phpinput_server.php$raw_post_data file_get_contents(php://input, r);echo -------\$_POST------------------\n;echo var_dump($_POST) . \n;echo -------php://input-------------\n;echo $raw_post_data . \n;php   //file phpinput_post.php$http_entity_body n . urldecode(perfgeeks) . p . urldecode(7788);$http_entity_type application/x-www-form-urlencoded;$http_entity_length strlen($http_entity_body);$host 192.168.0.6;$port 80;$path /phpinput_server.php;$fp fsockopen($host, $port, $error_no, $error_desc, 30);if ($fp) {fputs($fp, POST {$path} HTTP/1.1\r\n);fputs($fp, Host: {$host}\r\n);fputs($fp, Content-Type: {$http_entity_type}\r\n);fputs($fp, Content-Length: {$http_entity_length}\r\n);fputs($fp, Connection: close\r\n\r\n);fputs($fp, $http_entity_body . \r\n\r\n);while (!feof($fp)) {$d . fgets($fp, 4096);}fclose($fp);echo $d;}    我们可以通过使用工具ngrep抓取http请求包因为我们需要探知的是php://input所以我们这里只抓取http Request数据包。我们来执行测试脚本phpinput_post.phpphp /phpinput_post.phpHTTP/1.1 200 OKDate: Thu, 08 Apr 2010 03:23:36 GMTServer: Apache/2.2.3 (CentOS)X-Powered-By: PHP/5.1.6Content-Length: 160Connection: closeContent-Type: text/html; charsetUTF-8-------$_POST------------------array(2) {[n] string(9) perfgeeks[p] string(4) 7788}-------php://input-------------nperfgeeksp7788通过ngrep抓到的http请求包如下:T 192.168.0.8:57846 - 192.168.0.6:80 [AP]POST /phpinput_server.php HTTP/1.1..Host: 192.168.0.6..Content-Type: application/x-www-form-urlencoded..Content-Length: 18..Connection: close....nperfgeeksp7788....仔细观察我们不难发现1$_POST数据,php://input 数据与httpd entity body数据是“一致”的2http请求中的Content-Type是application/x-www-form-urlencoded 它表示http请求body中的数据是使用http的post方法提交的表单数据并且进行了urlencode()处理。(注:注意加粗部分内容下文不再提示).我们再来看看脚本phpinput_xmlrpc.php的原文件内容它模拟了一个POST方法提交的xml-rpc请求。 php//file phpinput_xmlrpc.php$http_entity_body \n\n jt_userinfo\n;$http_entity_type text/html;$http_entity_length strlen($http_entity_body);$host 192.168.0.6;$port 80;$path /phpinput_server.php;$fp fsockopen($host, $port, $error_no, $error_desc, 30);if ($fp) {fputs($fp, POST {$path} HTTP/1.1\r\n);fputs($fp, Host: {$host}\r\n);fputs($fp, Content-Type: {$http_entity_type}\r\n);fputs($fp, Content-Length: {$http_entity_length}\r\n);fputs($fp, Connection: close\r\n\r\n);fputs($fp, $http_entity_body . \r\n\r\n);while (!feof($fp)) {$d . fgets($fp, 4096);} fclose($fp);echo $d;}同样地让我们来执行这个测试脚本 php /phpinput_xmlrcp.phpHTTP/1.1 200 OKDate: Thu, 08 Apr 2010 03:47:18 GMTServer: Apache/2.2.3 (CentOS)X-Powered-By: PHP/5.1.6Content-Length: 154Connection: closeContent-Type: text/html; charsetUTF-8 -------$_POST------------------array(0) {} -------php://input-------------xml version1.0jt_userinfo执行这个脚本的时候我们通过ngrep抓取的http请求数据包如下 T 192.168.0.8:45570 - 192.168.0.6:80 [AP]POST /phpinput_server.php HTTP/1.1..Host: 192.168.0.6..Content-Type: text/html..Content-Length: 75..Connection: close....xml version1.0.. jt_userinfoBR/name.....同样我样也可以很容易地发现:1http请求中的Content-Type是text/xml。它表示http请求中的body数据是xml数据格式。2服务端$_POST打印出来的是一个空数组即与http entity body不一致了。这跟上个例子不一样了这里的Content-Type是text/xml,而不是application/x-www-form-urlencoded3而php://input数据还是跟http entity body数据一致。也就是php://input数据和$_POST数据不一致了。 我们再来看看通过GET方法提交表单数据的情况php://input能不能读取到GET方法的表单数据在这里我们稍加改动一下phpinput_server.php文件将$_POST改成$_GET。 复制代码 代码如下: php//file phpinput_server.php$raw_post_data file_get_contents(php://input, r);echo -------\$_GET------------------\n;echo var_dump($_GET) . \n;echo -------php://input-------------\n;echo $raw_post_data . \n;php//file phpinput_get.php$query_path n . urldecode(perfgeeks) . p . urldecode(7788);$host 192.168.0.6;$port 80;$path /phpinput_server.php;$d ;$fp fsockopen($host, $port, $error_no, $error_desc, 30);if ($fp) {fputs($fp, GET {$path}?{$query_path} HTTP/1.1\r\n);fputs($fp, Host: {$host}\r\n);fputs($fp, Connection: close\r\n\r\n); while (!feof($fp)) {$d . fgets($fp, 4096);}fclose($fp);echo $d;} 同样我们执行下一phpinput_get.php测试脚本它模拟了一个通常情况下的GET方法提交表单数据。 php /phpinput_get.phpHTTP/1.1 200 OKDate: Thu, 08 Apr 2010 07:38:15 GMTServer: Apache/2.2.3 (CentOS)X-Powered-By: PHP/5.1.6Content-Length: 141Connection: closeContent-Type: text/html; charsetUTF-8 -------$_GET------------------array(2) {[n]string(9) perfgeeks[p]string(4) 7788} -------php://input-------------在这个时候使用ngrep工具捕获的相应的http请求数据包如下 T 192.168.0.8:36775 - 192.168.0.6:80 [AP]GET /phpinput_server.php?nperfgeeksp7788 HTTP/1.1..Host: 192.168.0.6..Connection: close....比较POST方法提交的http请求通常GET方法提交的请求中entity body为空。同时不会指定Content-Type和Content-Length。但是如果强硬数据http entity body并指明正确地Content-Type和Content-Length,那么php://input还可是读取得到http entity body数据但不是$_GET数据。 所根据上面几个探测我们可以作出以下总结:1Content- Type取值为application/x-www-form-urlencoded时php会将http请求body相应数据会填入到数组$_POST填入到$_POST数组中的数据是进行urldecode()解析的结果。其实除了该Content-Type还有 multipart/form-data表示数据是表单数据稍后我们介绍2php://input数据只要Content-Type不为 multipart/form-data(该条件限制稍后会介绍)。那么php://input数据与http entity body部分数据是一致的。该部分相一致的数据的长度由Content-Length指定。3仅当Content-Type为application/x-www-form-urlencoded且提交方法是POST方法时$_POST数据与php://input数据才是”一致”打上引号表示它们格式不一致内容一致的。其它情况它们都不一致。4php://input读取不到$_GET数据。是因为$_GET数据作为query_path写在http请求头部(header)的PATH字段而不是写在http请求的body部分。 这也帮助我们理解了为什么xml_rpc服务端读取数据都是通过file_get_contents(‘php://input, ‘r)。而不是从$_POST中读取正是因为xml_rpc数据规格是xml它的Content-Type是text/xml。php://input碰到了multipart/form-data   上传文件的时候表单的写法是这样的 复制代码 代码如下:   form enctypemultipart/form-data actionphpinput_server.php methodPOST   input typetext namen /  input typefile namef /  input typesubmit valueupload now /  /form 那么enctypemultipart/form-data这里的意义就是将该次http请求头部(head)中的Content-Type设置为 multipart/form-data。请查阅RFC1867对它的描述。multipart/form-data也表示以POST方法提交表单数据它还伴随了文件上传所以会跟application/x- www-form-urlencoded数据格式不一样。它会以一更种更合理的更高效的数据格式传递给服务端。我们提交该表单数据并且打印出响应结果如下: -------$_POST------------------array(1) { [n] string(9) perfgeeks }-------php://input-------------同时我们通过ngrep抓取的相应的http请求数据包如下: ########T 192.168.0.8:3981 - 192.168.0.6:80 [AP]POST /phpinput_server.php HTTP/1.1..Host: 192.168.0.6..Connection: keep-alive..User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2..Referer: http://192.168.0.6/phpinput_server.php..Content-Length: 306..Cache-Control: max-age0..Origin: http://192.168.0.6..Content-Type: multipart/form-data; boundary----WebKitFormBoundarybLQwkp4opIEZn1fA..Accept: application/xml,application/xhtmlxml,text/html;q0.9,text/plain;q0.8,image/png,*/*;q0.5..Accept-Encoding: gzip,deflate,sdch..Accept-Language: zh-CN,zh;q0.8..Accept-Charset: GBK,utf-8;q0.7,*;q0.3..Cookie: SESS3b0e658f87cf58240de13ab43a399df6lju6o5bg8u04lv1ojugm2ccic6....##T 192.168.0.8:3981 - 192.168.0.6:80 [AP]------WebKitFormBoundarybLQwkp4opIEZn1fA..Content-Disposition: form-data; namen....perfgeeks..------WebKitFormBoundarybLQwkp4opIEZn1fA..Content-Disposition: form-data; namef; filenametest.txt..Content-Type: text/plain....i am file..multipart/form-data..------WebKitFormBoundarybLQwkp4opIEZn1fA--..##从响应输出来比对$_POST数据跟请求提交数据相符即$_POST array(‘n ‘perfgeeks)。这也跟http请求body中的数据相呼应同时说明PHP把相应的数据填入$_POST全局变量。而php://input 输出为空没有输出任何东西尽管http请求数据包中body不为空。这表示当Content-Type为multipart/form-data的时候即便http请求body中存在数据php://input也为空PHP此时不会把数据填入php://input流。所以可以确定: php://input不能用于读取enctypemultipart/form-data数据。 我们再比较这次通过ngrep抓取的http请求数据包我们会发现最大不同的一点是Content-Type后面跟了boundary定义了数据的分界符bounday是随机生成的。另外一个大不一样的就是http entity body中的数据组织结构不一样了。 上一节我们概述了当Content-Type为application/x- www-form-urlencoded时php://input和$_POST数据是“一致”的为其它Content-Type的时候php: //input和$_POST数据数据是不一致的。因为只有在Content-Type为application/x-www-form- urlencoded或者为multipart/form-data的时候PHP才会将http请求数据包中的body相应部分数据填入$_POST全局变量中,其它情况PHP都忽略。而php://input除了在数据类型为multipart/form-data之外为空外其它情况都可能不为空。通过这一节我们更加明白了php://input与$_POST的区别与联系。所以再次确认php://input无法读取 enctypemultipart/form-data数据当php://input遇到它时永远为空即便http entity body有数据。php://input VS $http_raw_post_data 相信大家对php://input 已经有一定深度地了解了。那么$http_raw_post_data是什么呢$http_raw_post_data是PHP内置的一个全局变量。它用于PHP在无法识别的 Content-Type的情况下将POST过来的数据原样地填入变量$http_raw_post_data。它同样无法读取Content- Type为multipart/form-data的POST数据。需要设置php.ini中的 always_populate_raw_post_data值为OnPHP才会总把POST数据填入变量$http_raw_post_data。把脚本phpinput_server.php改变一下可以验证上述内容 复制代码 代码如下: php$raw_post_data file_get_contents(php://input, r);$rtn ($raw_post_data $HTTP_RAW_POST_DATA) ? 1 : 0;echo $rtn; 执行测试脚本 php phpinput_post.phpphp phpinput_get.phpphp phpinput_xmlrpc.php 得出的结果输出都是一样的即都为1表示php://input和$HTTP_RAW_POST_DATA是相同的。至于对内存的压力我们这里就不做细致地测试了。有兴趣的可以通过xhprof进行测试和观察。 以此我们这节可以总结如下:1, php://input 可以读取http entity body中指定长度的值,由Content-Length指定长度,不管是POST方式或者GET方法提交过来的数据。但是一般GET方法提交数据 时http request entity body部分都为空。2,php://input 与$HTTP_RAW_POST_DATA读取的数据是一样的都只读取Content-Type不为multipart/form-data的数据。学习笔记 1Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下PHP才会将http请求数据包中相应的数据填入全局变量$_POST2PHP不能识别的Content-Type类型的时候会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA3, 只有Coentent-Type不为multipart/form-data的时候PHP不会将http请求数据包中的相应数据填入php://input否则其它情况都会。填入的长度由Coentent-Length指定。4只有Content-Type为application/x-www-data-urlencoded时php://input数据才跟$_POST数据相一致。5php://input数据总是跟$HTTP_RAW_POST_DATA相同但是php://input比$HTTP_RAW_POST_DATA更凑效且不需要特殊设置php.ini6PHP会将PATH字段的query_path部分填入全局变量$_GET。通常情况下GET方法提交的http请求body为空。     PHP 使用 file_get_contents 接收 POST 的資料 一般接收 POST 資料都是使用 $_POST 這個變數但 $_POST 只能取得 Content-type 為 application/x-www-form-urlencoded 或 multipart/form-data 的資料。當 Content-type 為 text/xml 等其他類型的資料$_POST便無法取得。若有接收其他類型 Content-type 的需求可以使用 php://inputphp://input 可以讀取 request body 的資料所以可以取得 HTTP POST 的資料但有一個限制就是當 Content-type 為 multipart/form-data php://input 會取得空值無法使用。下面範例 php://input 搭配 file_get_contents 使用和 $_POST 比較在 Content-type 分別為 multipart/form-data、application/x-www-form-urlencoded、text/xml 時兩者接收資料的情況接收資料的程式後面範例用來 request 的網址http://127.0.0.1/test/test.php  1 2 3 $postdata file_get_contents(php://input,r); var_dump($postdata); // php://input var_dump($_POST); 範例 1(multipart/form-data)使用 curl 模擬 HTTP POSTContent-type 為 multipart/form-data(CURLOPT_POSTFIELDS 資料為陣列時會以 multipart/form-data 方式傳送) 1 2 3 4 5 6 7 8 $ch curl_init(); $data array(aa123, bb456); curl_setopt($ch, CURLOPT_URL, http://127.0.0.1/test/test.php); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_HEADER,0); curl_exec($ch); curl_close($ch); 輸出結果file_get_contents(php://input,r) 取不到 multipart/form-data 的值$postdatastring(0) $_POST (OK)array(2) { [aa] string(3) 123 [bb] string(3) 456 } 範例 2(application/x-www-form-urlencoded)使用 curl 模擬 HTTP POSTContent-type 為 application/x-www-form-urlencoded 1 2 3 4 5 6 7 8 9 $ch curl_init(); $data aa123bb456; curl_setopt($ch, CURLOPT_URL, http://127.0.0.1/test/test.php); curl_setopt($ch, CURLOPT_HTTPHEADER, array(Content-type: application/x-www-form-urlencoded)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_HEADER,0); curl_exec($ch); curl_close($ch); 輸出結果file_get_contents(php://input,r) 和 $_POST 的資料一樣但 $_POST 已轉成陣列$postdata (OK)string(13) aa123bb456$_POST (OK)array(2) { [aa] string(3) 123 [bb] string(3) 456 }範例 3(text/xml)使用 curl 模擬 HTTP POSTContent-type 為 text/xml 1 2 3 4 5 6 7 8 9 $ch curl_init(); $data ?xml version1.0 encodingutf-8?rootaa123/aabb456/bb/root; curl_setopt($ch, CURLOPT_URL, http://127.0.0.1/test/test.php); curl_setopt($ch, CURLOPT_HTTPHEADER, array(Content-type: text/xml;charset\utf-8\)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_HEADER,0); curl_exec($ch); curl_close($ch); 輸出結果file_get_contents(php://input,r) 可以讀取 POST 過來的 XML 資料$_POST 無法讀取$postdata (OK)string(36) ?xml version1.0 encodingutf-8?rootaa123/aabb456/bb/root$_POSTarray(0) {}結論 所以如果有一 PHP 程式用來接收其它地方 POST 過來的資料例如是 XML 的資料應該就可以利用 file_get_contents(php://input,r) 來取得 POST 過來的內容。參考http://php.net/manual/en/function.file-get-contents.php (file_get_contents)http://www.php.net/manual/en/wrappers.php.php (php://)http://www.php.net/manual/en/wrappers.php (Supported Protocols and Wrappers)http://php.net/manual/en/reserved.variables.post.php ($_POST) 转载于:https://www.cnblogs.com/clphp/p/7872224.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站开发软硬件配置大丰区住房和城乡建设局网站

距离春节还有不到一个月你准备好给家人的春节礼物了吗?疫情下,为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日,人人都可免费领会员!助你提前实现CSDN会员卡自由!奖品多多,不仅有CSDN月卡会…

用 SeaTunnel 同步 MySQL 到 Doris:全量增量 + SQL 过滤

Apache SeaTunnel 能够实现 MySQL 到 Doris 的全量和增量数据同步,同时也支持 SQL 级别的数据过滤。Apache SeaTunnel 能够实现 MySQL 到 Doris 的全量和增量数据同步,同时也支持 SQL 级别的数据过滤。以下是具体实现…

在CodeBolcks下wxSmith的C++编程教程——使用自定义绘制和鼠标处理创建项目

0.前言欢迎来到 wxSmith 教程页面!wxSmith 与 Code::Blocks、wxWidgets 和 C++ 编译器相结合,为您提供一种所见即所得的方式来创建具有图形用户界面 (GUI) 的应用程序。该组合形成了一个用于快速应用程序开发 (RA…

trae 配置mysql_mcp

trae 配置mysql_mcpMySQL MCP 安装配置完整指南 🎉 成功案例 版本: @benborla29/mcp-server-mysql@2.0.2 状态: ✅ 安装成功 环境: Windows + Trae.ai 📋 安装步骤 1. 安装稳定版本 npm install -g @benborla29/mc…

Apache NiFi 1.28.1 集群 + Kerberos 认证 + 多租户模式部署

Apache NiFi 1.28.1 集群 + Kerberos 认证 + 多租户模式部署1. 系统要求Java 8 或 Java 112. 物料包准备包名 下载地址 说明nifi-1.28.1-bin.zip https://archive.apache.org/dist/nifi/1.28.1/nifi-1.28.1-bin.zip Ni…

【cv】cycleGAN代码解析:train.py

【cv】cycleGAN代码解析:train.pyPosted on 2025-09-25 16:37 SaTsuki26681534 阅读(0) 评论(0) 收藏 举报import time # 计时:统计每轮/每次迭代耗时 from options.train_o…

做移动网站优化网站建设过程中要怎么打开速度

这次我们将学着怎么从一个深度图里面导出边界。我们对3种不同种类的点很感兴趣:物体的边框的点,阴影边框点,和面纱点(在障碍物边界和阴影边界),这是一个很典型的现象在通过雷达获取的3D深度。 下面是代码 /* \author Bastian Steder */#incl…

注册 网站开发 公司重庆招聘网

作者 | 轩辕之风O来源 | 编程技术宇宙相信大家这两天应该被这么一条新闻刷屏了:这个漏洞到底是怎么回事?核弹级,真的有那么厉害吗?怎么利用这个漏洞呢?我看了很多技术分析文章,都太过专业,很多非…

创建网站怎么创电子商务网站有哪些类型

项目介绍: 使用javaspringbootmysql开发的法律咨询网(文书),系统包含管理员、用户角色,功能如下: 管理员:登录系统;用户管理;文章管理(法律知识&#xff09…

网站建设公司业务在哪里来百度网站的总结

I老师就职于双非二本院校,希望通过出国研修以提升科研背景,在公派访学和申请导师出资的博士后之间,其选择了后者。最终我们落实了美国耶鲁大学的职位,头衔为Associate Research Scientist(副研究科学家)&am…

企业网站 联系我们电商培训机构有哪些?哪家比较好

常用示例 入门 Hello CMake CMake 是一个用于配置跨平台源代码项目应该如何配置的工具建立在给定的平台上。 ├── CMakeLists.txt # 希望运行的 CMake命令 ├── main.cpp # 带有main 的源文件 ├── include # 头文件目录 │ └── header.h └── src # 源代码目录 ├…

深入解析:李宏毅2023机器学习作业 HW01实操

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于Java+SpringBoot+SSM,Flask福聚苑社区团购体系(源码+LW+调试文档+讲解等)/福聚苑社区/团购系统/社区团购/福聚苑/团购/社区/环境/福聚苑小区/在线团购/社区购物

基于Java+SpringBoot+SSM,Flask福聚苑社区团购体系(源码+LW+调试文档+讲解等)/福聚苑社区/团购系统/社区团购/福聚苑/团购/社区/环境/福聚苑小区/在线团购/社区购物pre { white-space: pre !important; word-wrap: nor…

按需引入echarts

--// echarts-config.js // ECharts按需引入配置文件 import * as echarts from echarts/core; import {BarChart,LineChart,PieChart,ScatterChart,RadarChart } from echarts/charts; import {TitleComponent,Toolti…

软件构造的用户交互设计 4章

交互设计的原则 1.尽量保持一致 2.满足普遍可用性 3.提供信息反馈 4.设计对话框以产生结束信息 5.预防并成立错误 6.允许撤销操作 7.支持内部控制点 8.减轻短时记忆负担 交互设计的基本过程 标识和建立用户需求 提出满…

自定义制作docker容器自动自愈容器镜像

包括:完整的 autoheal.sh(支持每分钟检查一次、连续 5 次 unhealthy 才重启) Dockerfile docker-compose.yml 详细文档,包含参数说明、用法1️⃣ autoheal.sh #!/usr/bin/env sh set -e set -o pipefailDOCKER_SOC…

阀门公司网站建设广州动漫制作公司

1 mpl_toolkits.mplot3d 功能介绍 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介&am…

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据? 一、引言 在数据驱动时代,开发者与研究者越来越依…

第一次编码器测试

共1055圈 平均2047.974408 平均每张丢失距离 0.00001132 mm可以忽略 不丢帧

04-FreeRTOS的概述及编程规范

概述 本文对FreeRTOS源码进行概述,包括其核心文件作用,及其编程规范,有助于阅读rtos的内核源码,更好的帮助理解。 一、FreeRTOS 源码核心结构概述 FreeRTOS 是轻量级实时操作系统,核心功能围绕 “任务调度” 和 “…