PHP语言检测用户输入密码及调用Python脚本

  现在有一份计算流体力学N-S方程的Python脚本,想要在用户登录网站后可以可以运行该脚本,然后将脚本运行后绘制的图片显示在用户网页上。
建一个名为N_S.py的python脚本文件,这个脚本在生成图像后会自行关闭,随后将图片保存在指定的文件夹里:

import matplotlib.pyplot as plt  
import numpy as np  
from tqdm import tqdm  N_POINTS = 41  #网格点数
DOMAIN_SIZE = 1.0  #模拟区域大小
N_ITERATIONS = 500  #迭代次数  
TIME_STEP_LENGTH = 0.001  #时间步长
KINEMATIC_VISCOSITY = 0.1  #运动粘度 
DENSITY = 1.0  #密度
HORIZONTAL_VELOCITY_TOP = 1.0  #顶部水平速度 
N_PRESSURE_POISSON_ITERATIONS = 50  #Poisson迭代的次数  def initialize_fields():  element_length = DOMAIN_SIZE / (N_POINTS + 1)  x = np.linspace(0.0, DOMAIN_SIZE, N_POINTS)  y = np.linspace(0.0, DOMAIN_SIZE, N_POINTS)  X, Y = np.meshgrid(x, y)  u_prev = np.zeros_like(X)v_prev = np.zeros_like(X)p_prev = np.zeros_like(X)  return X, Y, u_prev, v_prev, p_prev, element_length  #element网格间距def central_difference(f, axis, element_length):    diff = np.zeros_like(f)    if axis == 'x':    diff[1:-1, 1:-1] = (f[1:-1, 2:] - f[1:-1, 0:-2]) / (2 * element_length)    elif axis == 'y':    diff[1:-1, 1:-1] = (f[2:, 1:-1] - f[0:-2, 1:-1]) / (2 * element_length)    return diff #计算拉稀拉丝算子
def laplace(f, element_length):    diff = np.zeros_like(f)    diff[1:-1, 1:-1] = (f[1:-1, 0:-2] + f[0:-2, 1:-1] - 4 * f[1:-1, 1:-1] + f[1:-1, 2:] + f[2:, 1:-1]) / (element_length**2)    return diff  def set_boundary_conditions(u, v, p):  #u=水平速度 v=垂直速度 p=压力u[0, :] = 0.0  #上部水平速度设为常数,其他全是0u[:, 0] = 0.0u[:, -1] = 0.0  u[-1, :] = HORIZONTAL_VELOCITY_TOP  v[0, :] = 0.0  v[:, 0] = 0.0  v[:, -1] = 0.0  v[-1, :] = 0.0  p[:, -1] = p[:, -2]  p[0, :] = p[1, :]  p[:, 0] = p[:, 1]  p[-1, :] = 0.0  def main():     X, Y, u_prev, v_prev, p_prev, element_length = initialize_fields()    for _ in tqdm(range(N_ITERATIONS)):    d_u_prev__d_x = central_difference(u_prev, 'x', element_length)    d_u_prev__d_y = central_difference(u_prev, 'y', element_length)    d_v_prev__d_x = central_difference(v_prev, 'x', element_length)    d_v_prev__d_y = central_difference(v_prev, 'y', element_length)    laplace__u_prev = laplace(u_prev, element_length)    laplace__v_prev = laplace(v_prev, element_length)    u_tent = u_prev + TIME_STEP_LENGTH * (-(u_prev * d_u_prev__d_x + v_prev * d_u_prev__d_y) + KINEMATIC_VISCOSITY * laplace__u_prev)  v_tent = v_prev + TIME_STEP_LENGTH * (-(u_prev * d_v_prev__d_x + v_prev * d_v_prev__d_y) + KINEMATIC_VISCOSITY * laplace__v_prev)set_boundary_conditions(u_tent, v_tent, p_prev)  d_u_tent__d_x = central_difference(u_tent, 'x',  element_length)  d_v_tent__d_y = central_difference(v_tent, 'y',  element_length)  rhs = (DENSITY / TIME_STEP_LENGTH) * (d_u_tent__d_x + d_v_tent__d_y)  for _ in range(N_PRESSURE_POISSON_ITERATIONS):  p_next = np.zeros_like(p_prev)  p_next[1:-1, 1:-1] = 0.25 * (p_prev[1:-1, 0:-2] + p_prev[0:-2, 1:-1] + p_prev[1:-1, 2:] + p_prev[2:, 1:-1] - element_length**2 * rhs[1:-1, 1:-1])  p_next[:, -1] = p_next[:, -2]  p_next[0, :] = p_next[1, :]  p_next[:, 0] = p_next[:, 1]  p_next[-1, :] = 0.0  p_prev = p_next  d_p_next__d_x = central_difference(p_next, 'x', element_length)  d_p_next__d_y = central_difference(p_next, 'y',  element_length)  u_next = u_tent - TIME_STEP_LENGTH / DENSITY * d_p_next__d_x  v_next = v_tent - TIME_STEP_LENGTH / DENSITY * d_p_next__d_y  set_boundary_conditions(u_next, v_next, p_next)  u_prev = u_next  v_prev = v_next  p_prev = p_next  speed = np.sqrt(u_next**2 + v_next**2)  plt.figure()  plt.contour(X, Y, p_next, cmap='coolwarm')  plt.colorbar()  plt.quiver(X, Y, u_next, v_next, color="black")  plt.quiver(X[::2, ::2], Y[::2, ::2], u_next[::2, ::2], v_next[::2, ::2], speed[::2, ::2], cmap='jet')  quiv_colorbar = plt.colorbar()  quiv_colorbar.set_label('Speed')save_path = 'GGboy/images/my_plot.png'  plt.savefig(save_path) plt.close() #显示图像换成plt.show()if __name__ == "__main__":  main()  

脚本运行后生成的图片

 

PHP调用Python脚本可以使用exec()函数,运行该脚本后再将脚本生成并保存的图片反馈给用户。

先建立一个名为的login.html的HTML文件,在HTML页面中建立用于读取用户输入密码的文本框,将用户输入的密码传递给处理密码的PHP脚本。

<!-- 不完整代码 -->
<!DOCTYPE html>    
<html lang="zh">    
<head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>这是标题</title>       
</head>    
<body>     <form action="/文件保存路径/脚本.php" method="post">  <label for="password">请输入密码:</label> <!-- 传递至PHP脚本  --><input type="password" id="password" name="password">  <input type="submit" value="提交">  </form>  </body>    
</html>

再建立一个名为GGBond.php的PHP文件,用来识别用户输入的密码是否正确:

//不完整代码
<?php  
if ($_SERVER["REQUEST_METHOD"] == "POST") {   $password = $_POST["password"];  if ($password == "ggboy") {  echo "密码正确";  } else {  echo "密码错误!";  }  
}  

这时应该优化功能,使PHP脚本能更安全地获取和处理 POST 数据,还能清理无用的缓存和防止注入攻击,顺便优化一下HTML页面 ,这时建立3个文件夹,一个用来存放CSS代码,一个用来存放JavaScript代码,一个用来存放页面图片总体结构如下:

先实现基本功能,使PHP代码调用Python脚本,先将GGBond.php的代码补全,把登录密码设置为ggboy

<?php  
if ($_SERVER["REQUEST_METHOD"] == "POST") {   $password = $_POST["password"];  // 密码是ggboyif ($password == "ggboy") {  // exce函数调用pythonexec("python N_S.py");  $imagePath = "/GGboy/images/my_plot.png";  echo "<img src='$imagePath' alt='Generated Image'>";  } else {  echo "密码错误!";  }  
}  

现在以下都是完整版代码,我先写的CSS代码,因为通过人力GPU运算的方式,我已设计好页面布局,有一个用来供用户护眼的滑动小猫,四张ins风格图型作为背景 ,再增加一组王者风的<h1>标题,确认好布局后开始CSS优化:

/* 让小猫划来划去 */
#sliding-image {  position: relative;  animation: slide 5s infinite;  
}  @keyframes slide {  0% {  transform: translateX(0);  }  100% {  /* 可以改成transform: translateX(calc(100vw - 500px)); 让小猫少划一点 */transform: translateX(calc(1000vw - 500px)); }  
}  /* 酷炫的闪耀标题 */
.shining-title {  font-size: 3em;  text-align: center;  margin: 20px;  animation: color-change 2s infinite;  
}  @keyframes color-change {  0% { color: red; text-shadow: 0 0 10px red, 0 0 20px red, 0 0 30px red; }  33% { color: yellow; text-shadow: 0 0 10px yellow, 0 0 20px yellow, 0 0 30px yellow; }  66% { color: blue; text-shadow: 0 0 10px blue, 0 0 20px blue, 0 0 30px blue; }  100% { color: red; text-shadow: 0 0 10px red, 0 0 20px red, 0 0 30px red; }  
}/* 四个角放置四个GGBond靓照 */
body {  margin: 0;  padding: 0;  display: flex;  justify-content: center;  align-items: center;  height: 100vh;  background-color: #f0f0f0;  position: relative;  
}  .container {  text-align: center;  
}  .form-center {  display: flex;  flex-direction: column;  
}  .password-input {  padding: 10px;  margin-bottom: 10px;  border-radius: 5px;  border: 1px solid #ccc;  
}  .submit-btn {  padding: 10px 20px;  border-radius: 5px;  background-color: #4CAF50;  color: white;  cursor: pointer;  border: none;  
}  .submit-btn:hover {  background-color: #45a049;  
}  .background-image {  position: absolute;  width: 300px;  height: 300px;  background-size: cover;  background-repeat: no-repeat;  
}  .top-left {  top: 0;  left: 0;  background-image: url('/GGboy/images/22.jpg'); 
}  .top-right {  top: 0;  right: 0;  background-image: url('/GGboy/images/33.jpg'); 
}  .bottom-left {  bottom: 0;  left: 0;  background-image: url('/GGboy/images/44.jpg'); 
}  .bottom-right {  bottom: 0;  right: 0;  background-image: url('/GGboy/images/55.jpg'); 
}

因为设计中加入了图片移动动作,所以再编写好JavaScript代码:
 

document.addEventListener('DOMContentLoaded', function() {    var img = document.getElementById('sliding-image');    if (!img) {  console.error('Image element not found');  return;  }  var maxSlide = window.innerWidth - img.offsetWidth;    setInterval(function() {    var randomSlide = Math.random() * maxSlide;    img.style.transform = 'translateX(' + randomSlide + 'px)';    // 哈基米的滑动时间间隔setTimeout(function() {    img.style.transform = 'translateX(0)';    }, 200);    }, 3000); });

最后完备好HTML:

<!DOCTYPE html>    
<html lang="zh">    
<head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>哎呦喂,您猜怎么着</title>    <link rel="stylesheet" href="/GGboy/Csgo/GGBond.css">    
</head>    
<body>    <h1 class="shining-title">学流体力学的爷就是爷</h1>  <div class="background-image top-left"></div>    <div class="background-image top-right"></div>    <div class="background-image bottom-left"></div>    <div class="background-image bottom-right"></div> <img id="sliding-image" src="/GGboy/images/66.jpg" alt="Moving Image">     <script src="/GGboy/jvav/AUV.js"></script> <form action="/GGboy/GGBond.php" method="post">  <label for="password">请输入密码:</label> <!-- 密码是ggboy  --><input type="password" id="password" name="password">  <input type="submit" value="提交">  </form>  </body>    
</html>

在VScode打开login.html文件中右键空白处,点击PHP Server:Server project试运行下:

 

 可以看到密码文本框这里效果很好 

 客户页面感觉不太妙啊,但是PHP和Python运行正常,我认为如果上线的话客户是不会投诉的
 


 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC 学习(三)之 @RequestMapping 注解

目录 1 RequestMapping 注解介绍 2 RequestMapping 注解的位置 3 RequestMapping 注解的 value 属性 4 RequestMapping 注解的 method 属性 5 RequestMapping 注解的 params 属性&#xff08;了解&#xff09; 6 RequestMapping 注解的 headers 属性&#xff08;了解&…

【Android】坐标系

Android 系统中有两种坐标系&#xff0c;分别为 Android 坐标系和 View 坐标系。了解这两种坐标系能够帮助我们实现 View 的各种操作&#xff0c;比如我们要实现 View 的滑动&#xff0c;你连这个 View 的位置都不知道&#xff0c;那如何去操作呢&#xff1f; 一、Android 坐标…

【Flink精讲】Flink 内存管理

面临的问题 目前&#xff0c; 大数据计算引擎主要用 Java 或是基于 JVM 的编程语言实现的&#xff0c;例如 Apache Hadoop、 Apache Spark、 Apache Drill、 Apache Flink 等。 Java 语言的好处在于程序员不需要太关注底层内存资源的管理&#xff0c;但同样会面临一个问题&…

【接口加密】接口加密的未来发展与应用场景

目录 3.1 接口加密与区块链技术的结合 3.1.1 区块链技术的安全特性与优势 3.1.2 接口加密在区块链中的应用案例 3.2 接口加密与物联网安全 3.2.1 物联网安全的挑战与需求 3.2.2 接口加密在物联网领域的实际应用 3.3 接口加密在金融与电子商务领域的应用 随着信息技术的不…

Java中的常量与变量:初探Java世界的基石

✨✨ 所属专栏&#xff1a; Java基石&#xff1a;深入探索Java核心基础✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 常量与变量的概念 常量 变量 总结 二. 常量的分类 1. 字面常量 2. 常量变量 3. 枚举常量…

8 buuctf解题

[BJDCTF2020]just_a_rar 1 下载&#xff0c;得到 发现有加密 使用ARCHPR设置四位数掩码爆破 得到口令2016&#xff0c;解压得到图片&#xff0c;flag在图片exif中 在备注里面看见了flag [HBNIS2018]excel破解 1 下载下来是attachment.xls 修改后缀为rar 使用010 Editor打开&a…

力扣技巧题:丢失的数字

先排后找可以让结果更简单 int cmp(const void* a, const void* b){return *(int*)a - *(int*)b; } int missingNumber(int* nums, int numsSize){qsort(nums, numsSize, 4, cmp);for(int i0; i<numsSize; i){if(nums[i] i){continue;}else{return i;}}return numsSize; }…

RandAugment(NeurIPS 2020)论文速读

paper&#xff1a;RandAugment: Practical automated data augmentation with a reduced search space third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/datasets/transforms/auto_augment.py 存在的问题 自动增强策…

k8s学习笔记-基础概念

&#xff08;作者&#xff1a;陈玓玏&#xff09; deployment特别的地方在于replica和selector&#xff0c;docker根据镜像起容器&#xff0c;pod控制容器&#xff0c;job、cronjob、deployment控制pod&#xff0c;job做离线任务&#xff0c;pod大多一次性的&#xff0c;cronj…

React 模态框的设计(一)拖动组件的设计

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…

UI设计中,2D、2.5D、3D、4D该如何辨别?教会你

hello&#xff0c;我是大千UI工场&#xff0c;从事UI设计8年之久&#xff0c;在日常工作中经常听到一些概念&#xff0c;现在将这些概念图文并茂的呈现给您&#xff0c;欢迎点赞评论&#xff0c;如有设计需求&#xff0c;可以私信我们。 在UI设计中&#xff0c;2D、2.5D、3D和4…

企业计算机服务器中了babyk勒索病毒怎么办?Babyk勒索病毒解密数据恢复

随着网络技术的应用与普及&#xff0c;越来越多的企业采用了数字化办公模式&#xff0c;数字化办公模式可以为企业提供强有力的数据支撑&#xff0c;可以为企业的发展方向与产品业务调整做好基础工作。但网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企…

Visual Studio 打开.edmx文件不显示表并报错:没有可用于.edmx的编辑器

打开.edmx文件时&#xff0c;呈现的是xml视图&#xff0c;不显示Diagram视图&#xff0c;且弹出报错“没有可用于.edmx的编辑器” 解决方案&#xff1a;在.edmx文件上右键&#xff0c;选择ado.net entity data model designer&#xff0c;即可正常显示表

EasyRecovery2024数据恢复软件深度评测与使用教程

一、EasyRecovery数据恢复软件是否好用&#xff1f; EasyRecovery是一款业界知名的数据恢复软件&#xff0c;具有强大的恢复能力和广泛的数据兼容性。它能帮助用户从各种存储设备中恢复丢失或删除的数据&#xff0c;包括硬盘、U盘、SD卡等。以下是关于EasyRecovery的详细分析&…

《C++面向对象程序设计》✍学习笔记

C的学习重点 C 这块&#xff0c;重点需要学习的就是一些关键字、面向对象以及 STL 容器的知识&#xff0c;特别是 STL&#xff0c;还得研究下他们的一些源码&#xff0c;下面是一些比较重要的知识&#xff1a; 指针与引用的区别&#xff0c;C 与 C 的区别&#xff0c;struct 与…

25-k8s集群中-RBAC用户角色资源权限

一、RBAC概述 1&#xff0c;k8s集群的交互逻辑&#xff08;简单了解&#xff09; 我们通过k8s各组件架构&#xff0c;知道各个组件之间是使用https进行数据加密及交互的&#xff0c;那么同理&#xff0c;我们作为“使用”k8s的各种资源的使用者&#xff0c;也是通过https进行数…

ARMv8-AArch64 的异常处理模型详解之异常向量表vector tables

目录 一&#xff0c;AArch64 异常向量表 二&#xff0c;栈指针以及SP寄存器的选择 三&#xff0c;从异常返回 一&#xff0c;AArch64 异常向量表 异常向量表&#xff08;vector tables&#xff09;是一组存放于普通内存&#xff08;normal memory&#xff09;空间的&#xf…

【智能车入门:pcb版】(蓝牙遥控、超声波避障、红外循迹)

实现最简单的蓝牙遥控、超声波避障、红外循迹&#xff09; 总览项目获取 本篇是对 上一篇博客的改进&#xff0c;上一篇博客使用面包板&#xff0c;看起来很乱&#xff0c;春节结束之后嘉立创免费打板恢复&#xff0c;板子到了之后进行焊接测试&#xff0c;相较于使用面包板&a…

【算法与数据结构】链表、哈希表、栈和队列、二叉树

目录 一、算法与数据结构 二、链表 三、哈希表 四、栈和队列 五、二叉树 一、算法与数据结构 算法和数据结构是计算机科学中两个非常重要的概念。 数据结构是组织和存储数据的方式&#xff0c;它定义了数据元素之间的关系和操作。数据结构可以分为线性结构&#xff08;如…

【前端素材】推荐优质后台管理系统Welly平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…