使用PHP将文件上传到MySQL数据库

2022-10-11 21:04:08 167
魁首哥

您可能想知道为什么要将文件“放入”数据库,而不是仅仅放在文件系统上。那么大多数时候,你不会。

在您的PHP应用程序需要存储整个文件的情况下,首选方法是将文件保存到服务器的文件系统中,并将文件的物理位置存储在数据库中。这通常被认为是存储文件的最简单和最快捷的方式。

但是,您可能会发现自己处于需要将文件与数据库中其他数据保持一致的情况。这给你 – 或者说:MySQL – 完全控制文件数据,而不仅仅是文件在服务器上的位置。

这种方法有一些缺点,如:降低了性能,增加了PHP代码和数据库结构的复杂性。这是您在实际应用中使用之前应仔细考虑的内容。

话虽如此,本文演示了如何将文件从浏览器上传到 MySQL ,以及如何将文件发送回浏览器。

开始之前

要顺利完成,您应该熟悉以下内容:

  • PHP基础知识

  • MySQL基础知识

  • 在PHP中使用My sql (mysqli)

  • HTML表单以及如何在PHP中处理POST数据。

战斗计划

与所有计划一样,在我们开始撰写之前,我们需要稍微计划一点。所以我们知道我们在写作之前要写什么。

在开始该程序之前,我们需要设计数据库。这不是一个复杂的设计,因为我们不是在说创建一些复杂的文件系统。我们只需要一个单独的表格,其中包含一个用于我们文件的BLOB字段和各种其他字段来存储我们文件中的信息,如名称,大小,类型。

接着。该程序的第一阶段是将文件从我们的用户获取到我们的PHP可以与它进行交互的服务器上。这是该过程中最简单的部分,只需要一个基本的HTML表单。

第二阶段涉及阅读上传的文件,确保已成功上传并将其添加到数据库。这与上传文件到文件系统时使用的过程类似,但使用MySQL函数而不是文件系统函数。

第三阶段是列出已经上传并保存在数据库中的所有文件,并附上一个链接,以便下载。这里唯一的问题是文件不存在于服务器上,所以我们如何创建一个链接呢?这是第4阶段处理的一个问题,我们在阶段3中需要做的是创建一个链接,该链接将嵌入到URL中的文件的ID。

第四个也是最后一部分是对这个过程最令人困惑的部分。我们获取文件并将其发送到客户端浏览器的部分。

我们从使用MySQL函数和第3阶段发送的ID开始,从数据库中获取文件数据。然后我们设置几个标题,让浏览器知道预期的内容,最后发送文件的内容。

现在,以此摘要为指导,让我们开始编写我们的程序。

阶段0:构建数据库

数据库很简单。一个具有文件数据的BLOB字段的表和与文件相关的各种信息的几个字段:

如您所见,我们存储文件名,包括扩展名。

我们有mime类型,我们使用它来让浏览器知道我们正在处理什么样的文件。

文件的大小(以字节为单位)。

最后数据本身在一个MediumBlob字段中。

阶段1:上传文件

现在,我们需要从用户那里获取文件。我们设计的表不需要用户的任何其他信息,因此我们将简单地创建一个HTML表单,只有一个“文件”输入字段和提交按钮:

  1. <!DOCTYPE html>

  2. MySQL文件上传示例</ title> </p> </li> <li> <p> <meta http-equiv =“content-type”content =“text / html; charset = UTF-8”> </p> </li> <li> <p></ HEAD> </p> </li> <li> <p><BODY> </p> </li> <li> <p> <form action =“add_file.php”method =“post”enctype =“multipart / form-data”> </p> </li> <li> <p> <input type =“file”name =“uploaded_file”> <br> </p> </li> <li> <p> <input type =“submit”value =“Upload file”> </p> </li> <li> <p> </ FORM> </p> </li> <li> <p> <P> </p> </li> <li> <p> <a href=https://www.zhihuclub.com/%E2%80%9Dlist_files.php%E2%80%9D>查看所有文件</a> </p> </li> <li> <p> </ p> </p> </li> <li> <p></ BODY> </p> </li> <li> <p></ HTML> </p> </li> </ol> </blockquote> <p>注意<form>元素的第三个属性“enctype”。这告诉浏览器如何将表单数据发送到服务器。就这样,当发送文件时,必须设置为“multipart / form-data”。 </p> <p>如果设置任何其他方式,或者根本不设置,您的文件可能不会被正确传输。 </p> <p>在底部,我们将链接到我们将在阶段3中创建的列表。 </p> <p> <strong>阶段2:将文件添加到数据库 </strong> </p> <p>以我们在阶段1中构建的形式,我们将action属性设置为“add_file.php”。这是我们要在这个阶段进行构建的文件。 </p> <p>此文件需要检查文件是否已经上传,确保已经上传了没有错误,并将其添加到数据库中: </p> <blockquote> <ol class="list-paddingleft-2"> <li> <p><?PHP </p> </li> <li> <p>//检查文件是否已上传 </p> </li> <li> <p>if(isset($ _ FILES [‘uploaded_file’])){ </p> </li> <li> <p> //确保文件被发送没有错误 </p> </li> <li> <p> if($ _ FILES [‘uploaded_file’] [‘error’] == 0){ </p> </li> <li> <p> //连接到数据库 </p> </li> <li> <p> $ dbLink = new mysqli(’127.0.0.1’,’user’,’pwd’,’myTable’); </p> </li> <li> <p> if(mysqli_connect_errno()){ </p> </li> <li> <p> die(“MySQL连接失败:”mysqli_connect_error()); </p> </li> <li> <p> } </p> </li> <li> </li> <li> <p> //收集所有必需的数据 </p> </li> <li> <p> $ name = $ dbLink-> real_escape_string($ _ FILES [‘uploaded_file’] [‘name’]); </p> </li> <li> <p> $ mime = $ dbLink-> real_escape_string($ _ FILES [‘uploaded_file’] [‘type’]); </p> </li> <li> <p> $ data = $ dbLink-> real_escape_string(file_get_contents($ _ FILES [‘uploaded_file’] [‘tmp_name’])); </p> </li> <li> <p> $ size = intval($ _ FILES [‘uploaded_file’] [‘size’]); </p> </li> <li> </li> <li> <p> //创建SQL查询 </p> </li> <li> <p> $ query =“ </p> </li> <li> <p> INSERT INTO`file`( </p> </li> <li> <p> `name`,`mime`,`size`,`data`,““ </p> </li> <li> <p> ) </p> </li> <li> <p> 值( </p> </li> <li> <p> ‘{$ name}’,'{$ mime}’,{$ size},'{$ data}’,NOW() </p> </li> <li> <p> )“; </p> </li> <li> </li> <li> <p> //执行查询 </p> </li> <li> <p> $ result = $ dbLink-> query($ query); </p> </li> <li> </li> <li> <p> //检查是否成功 </p> </li> <li> <p> if($ result){ </p> </li> <li> <p> 回应“成功!您的文件已成功添加! </p> </li> <li> <p> } </p> </li> <li> <p> else { </p> </li> <li> <p> echo’错误!无法插入文件’ </p> </li> <li> <p> 。“<PRE> {$ dbLink->误差} </ PRE>”; </p> </li> <li> <p> } </p> </li> <li> <p> } </p> </li> <li> <p> else { </p> </li> <li> <p> echo’文件上传时出错。“ </p> </li> <li> <p> 。’错误代码: ‘。INTVAL($ _ FILES [ ‘uploaded_file’] [ ‘错误’]); </p> </li> <li> <p> } </p> </li> <li> </li> <li> <p> //关闭mysql连接 </p> </li> <li> <p> $ dbLink->接近(); </p> </li> <li> <p>} </p> </li> <li> <p>else { </p> </li> <li> <p> echo’错误!一个文件没有发送! </p> </li> <li> <p>} </p> </li> <li> </li> <li> <p>//回到主页面的链接 </p> </li> <li> <p>echo'<p>点击<a href=https://www.zhihuclub.com/%E2%80%9Dindex.html%E2%80%9D>此处</a>返回</ p>’; </p> </li> <li> <p>?> </p> </li> <li> </li> <li> </li> </ol> </blockquote> <p> <strong>阶段3:列出所有现有文件 </strong> </p> <p>所以,现在我们在我们的数据库中有几个文件,我们需要创建一个文件列表并将它们链接起来,以便它们可以被下载: </p> <blockquote> <ol class="list-paddingleft-2"> <li> <p><?PHP </p> </li> <li> <p>//连接到数据库 </p> </li> <li> <p>$ dbLink = new mysqli(’127.0.0.1’,’user’,’pwd’,’myTable’); </p> </li> <li> <p>if(mysqli_connect_errno()){ </p> </li> <li> <p> die(“MySQL连接失败:”mysqli_connect_error()); </p> </li> <li> <p>} </p> </li> <li> </li> <li> <p>//查询所有现有文件的列表 </p> </li> <li> <p>$ sql =’SELECT`id`,`name`,`mime`,`size`,`created` FROM`file`’; </p> </li> <li> <p>$ result = $ dbLink-> query($ sql); </p> </li> <li> </li> <li> <p>//检查是否成功 </p> </li> <li> <p>if($ result){ </p> </li> <li> <p> //确保在那里有一些文件 </p> </li> <li> <p> if($ result-> num_rows == 0){ </p> </li> <li> <p> echo'<p>数据库中没有文件</ p>’; </p> </li> <li> <p> } </p> </li> <li> <p> else { </p> </li> <li> <p> //打印表的顶部 </p> </li> <li> <p> echo'<table width =“100%”> </p> </li> <li> <p> <TR> </p> </li> <li> <p> < <span class="candidate-entity-word" data-gid="684585">td </span>> <B>名称</ B> </ TD> </p> </li> <li> <p> <TD> <B>默</ B> </ TD> </p> </li> <li> <p> <td> <b>大小(字节)</ b> </ td> </p> </li> <li> <p> <TD> <B>的创</ B> </ TD> </p> </li> <li> <p> <TD> <B>&NBSP; </ B> </ TD> </p> </li> <li> <p> </ TR>’; </p> </li> <li> </li> <li> <p> //打印每个文件 </p> </li> <li> <p> while($ row = $ result-> fetch_assoc()){ </p> </li> <li> <p> 回声“ </p> </li> <li> <p> <TR> </p> </li> <li> <p> <TD> {$行[ ‘名称’]} </ TD> </p> </li> <li> <p> <TD> {$行[ ‘MIME’]} </ TD> </p> </li> <li> <p> <TD> {$行[ ‘尺寸’]} </ TD> </p> </li> <li> <p> <TD> {$行[ ‘创造’]} </ TD> </p> </li> <li> <p> <td> <a href=https://www.zhihuclub.com/%E2%80%99get_file.php?id=%7B$row[%E2%80%98id%E2%80%99]%7D%E2%80%99>下载</a> </ td> </p> </li> <li> <p> </ TR>“; </p> </li> <li> <p> } </p> </li> <li> </li> <li> <p> //关闭表 </p> </li> <li> <p> echo'</ table>’; </p> </li> <li> <p> } </p> </li> <li> </li> <li> <p> //释放结果 </p> </li> <li> <p> $ result->免费(); </p> </li> <li> <p>} </p> </li> <li> <p>其他 </p> </li> <li> <p>{ </p> </li> <li> <p> echo’错误!SQL查询失败:’; </p> </li> <li> <p> echo“<pre> {$ dbLink-> error} </ pre>”; </p> </li> <li> <p>} </p> </li> <li> </li> <li> <p>//关闭mysql连接 </p> </li> <li> <p>$ dbLink->接近(); </p> </li> <li> <p>?> </p> </li> </ol> </blockquote> <p> <strong>阶段4:下载文件 </strong> </p> <p>这部分是通常导致最混乱的部分。 </p> <p>要真正了解如何工作,您必须了解浏览器如何下载文件。当浏览器从HTTP服务器请求文件时,服务器响应将包含关于它所包含的内容的信息。这些信息位称为标题。标题通常包括有关要发送的数据类型的信息,响应的大小以及文件的文件名称。 </p> <p>当然有很多其他的标题,我不会在这里覆盖,但值得研究! </p> <p>现在,这段代码。我们只需读取第3阶段链接发送的ID即可。如果ID有效,我们将获取我们收到的ID的文件信息,发送头文件,最后发送文件数据: </p> <blockquote> <ol class="list-paddingleft-2"> <li> <p><?PHP </p> </li> <li> <p>//确保已经通过了ID </p> </li> <li> <p>if(isset($ _ GET [‘id’])){ </p> </li> <li> <p>//获取ID </p> </li> <li> <p> $ id = intval($ _ GET [‘id’]); </p> </li> <li> </li> <li> <p> //确保该ID实际上是一个有效的ID </p> </li> <li> <p> if($ id <= 0){ </p> </li> <li> <p> 死(’该ID无效!); </p> </li> <li> <p> } </p> </li> <li> <p> else { </p> </li> <li> <p> //连接到数据库 </p> </li> <li> <p> $ dbLink = new mysqli(’127.0.0.1’,’user’,’pwd’,’myTable’); </p> </li> <li> <p> if(mysqli_connect_errno()){ </p> </li> <li> <p> die(“MySQL连接失败:”mysqli_connect_error()); </p> </li> <li> <p> } </p> </li> <li> </li> <li> <p> //获取文件信息 </p> </li> <li> <p> $ query =“ </p> </li> <li> <p> SELECT`mime`,`name`,`size`,`data` </p> </li> <li> <p> FROM`file` </p> </li> <li> <p> WHERE`id` = {$ id}“; </p> </li> <li> <p> $ result = $ dbLink-> query($ query); </p> </li> <li> </li> <li> <p> if($ result){ </p> </li> <li> <p> //确保结果有效 </p> </li> <li> <p> if($ result-> num_rows == 1){ </p> </li> <li> <p> //获取行 </p> </li> <li> <p> $ row = mysqli_fetch_assoc($ result); </p> </li> <li> </li> <li> <p> //打印头 </p> </li> <li> <p> <span class="candidate-entity-word" data-gid="12991428">header </span>(“Content-Type:”。$ row [‘mime’]); </p> </li> <li> <p> header(“Content-Length:”。$ row [‘size’]); </p> </li> <li> <p> header(“Content-Disposition:attachment; filename =”。$ row [‘name’]); </p> </li> <li> </li> <li> <p> //打印数据 </p> </li> <li> <p> echo $ row [‘data’]; </p> </li> <li> <p> } </p> </li> <li> <p> else { </p> </li> <li> <p> echo’错误!没有图像存在该ID。 </p> </li> <li> <p> } </p> </li> <li> </li> <li> <p> //释放mysqli资源 </p> </li> <li> <p> @mysqli_free_result($结果); </p> </li> <li> <p> } </p> </li> <li> <p> else { </p> </li> <li> <p> echo“错误!查询失败:<pre> {$ dbLink-> error} </ pre>”; </p> </li> <li> <p> } </p> </li> <li> <p> @mysqli_close($ DBLINK); </p> </li> <li> <p> } </p> </li> <li> <p>} </p> </li> <li> <p>else { </p> </li> <li> <p> echo’错误!没有身份证通过。 </p> </li> <li> <p>} </p> </li> <li> <p>?> </p> </li> </ol> </blockquote> <p>任何体面的浏览器都应该能够读取标题,并了解这是什么类型的文件,并且它是要下载的,而不是打开。 </p> <p> <strong>终点线 </strong> </p> <p>所以,正如你所看到的,这并不像人们想象的那么复杂。 </p> <p>这段代码当然只是为了演示的目的,我不会建议使用它,而不增加一点额外的安全性。未经编辑,此代码基本上允许任何人上传任何内容到您的服务器,这不是一个好主意! </p> </p> </div> <div class="zhi-con-tag"><a href="https://mip.qiaqa.com/tags/php.html">php</a><a href="https://mip.qiaqa.com/tags/%E6%95%B0%E6%8D%AE%E5%BA%93.html">数据库</a><a href="https://mip.qiaqa.com/tags/%E6%96%87%E4%BB%B6.html">文件</a></div> <div class="zhi-con-action"> <div class="zhi-con-action-item"> <div class="icon-button fenBtn"><i class="ri-share-circle-line"></i> 分享 <div class="fenxme"><span class="menu-arrow"></span> <ul> <li><a href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://mip.qiaqa.com/php/147332.html&title=%E4%BD%BF%E7%94%A8PHP%E5%B0%86%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%B0MySQL%E6%95%B0%E6%8D%AE%E5%BA%93&desc=%E6%82%A8%E5%8F%AF%E8%83%BD%E6%83%B3%E7%9F%A5%E9%81%93%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%B0%86%E6%96%87%E4%BB%B6%E2%80%9C%E6%94%BE%E5%85%A5%E2%80%9D%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E4%BB%85%E4%BB%85%E6%94%BE%E5%9C%A8%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E3%80%82%E9%82%A3%E4%B9%88%E5%A4%A7%E5%A4%9A%E6%95%B0%E6%97%B6%E5%80%99%EF%BC%8C%E4%BD%A0%E4%B8%8D%E4%BC%9A%E3%80%82%E5%9C%A8%E6%82%A8%E7%9A%84PHP%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E9%9C%80%E8%A6%81%E5%AD%98%E5%82%A8%E6%95%B4%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E9%A6%96%E9%80%89%E6%96%B9%E6%B3%95%E6%98%AF%E5%B0%86%E6%96%87%E4%BB%B6%E4%BF%9D%E5%AD%98%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%AD%EF%BC%8C%E5%B9%B6%E5%B0%86%E6%96%87...&summary=%E6%82%A8%E5%8F%AF%E8%83%BD%E6%83%B3%E7%9F%A5%E9%81%93%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%B0%86%E6%96%87%E4%BB%B6%E2%80%9C%E6%94%BE%E5%85%A5%E2%80%9D%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E4%BB%85%E4%BB%85%E6%94%BE%E5%9C%A8%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E3%80%82%E9%82%A3%E4%B9%88%E5%A4%A7%E5%A4%9A%E6%95%B0%E6%97%B6%E5%80%99%EF%BC%8C%E4%BD%A0%E4%B8%8D%E4%BC%9A%E3%80%82%E5%9C%A8%E6%82%A8%E7%9A%84PHP%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E9%9C%80%E8%A6%81%E5%AD%98%E5%82%A8%E6%95%B4%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E9%A6%96%E9%80%89%E6%96%B9%E6%B3%95%E6%98%AF%E5%B0%86%E6%96%87%E4%BB%B6%E4%BF%9D%E5%AD%98%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%AD%EF%BC%8C%E5%B9%B6%E5%B0%86%E6%96%87..." target="_blank" title="分享空间"><i class="ri-qq-fill"></i> 分享空间</a></li> <li><a class="weibo-share" href="https://service.weibo.com/share/share.php?url=https://mip.qiaqa.com/php/147332.html&title=%E4%BD%BF%E7%94%A8PHP%E5%B0%86%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%B0MySQL%E6%95%B0%E6%8D%AE%E5%BA%93&pic=&appkey=&searchPic=true" target="_blank" title="分享微博"><i class="ri-weibo-fill"></i> 分享微博</a></li> <li><span class="ewm"><img src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/function/api.php?act=poster&url=https://mip.qiaqa.com/php/147332.html" alt="https://mip.qiaqa.com/php/147332.html" /></span><span>手机扫一扫</span></li> </ul> </div> </div> <div class="action-hai"><span class="haibao" id="147332"><i class="ri-camera-lens-line"></i> 海报</span></div> <div class="action-eyes"><i class="ri-eye-line"></i> 167</div> </div> </div> <section class="zhi-prevnext"> <a href="https://mip.qiaqa.com/jingyan/148908.html" title="上一篇:四季豆能不能吃(烹饪四季豆时需注意的事项都有啥)">上一篇:四季豆能不能吃(烹饪四季豆时需注意的事项都有啥)</a> <a href="https://mip.qiaqa.com/php/147334.html" title="下一篇:二分查找(PHP)">下一篇:二分查找(PHP)</a> </section> </div> <div class="zhi-wd-xiang"> <h3>相关文章</h3> <ul> <li><a href="https://mip.qiaqa.com/a/338358.html" target="_blank">Linux中如何安装和使用 PHP 开发环境</a></li> <li><a href="https://mip.qiaqa.com/ask/198862.html" target="_blank">php字符串增加1如何实现</a></li> <li><a href="https://mip.qiaqa.com/ask/198861.html" target="_blank">php如何判断字符串是否有中文</a></li> <li><a href="https://mip.qiaqa.com/ask/198860.html" target="_blank">php如何实现字符串去掉头尾</a></li> <li><a href="https://mip.qiaqa.com/ask/198859.html" target="_blank">php字符串的组成是什么</a></li> <li><a href="https://mip.qiaqa.com/ask/198858.html" target="_blank">php如何让Swoole/Pool进程池实现Redis持久连接</a></li> <li><a href="https://mip.qiaqa.com/ask/198854.html" target="_blank">php字符串长度不一致如何解决</a></li> <li><a href="https://mip.qiaqa.com/ask/198850.html" target="_blank">php时区不正确如何解决</a></li> <li><a href="https://mip.qiaqa.com/ask/198846.html" target="_blank">php+fread()乱码如何解决</a></li> <li><a href="https://mip.qiaqa.com/ask/198845.html" target="_blank">php explode报错如何解决</a></li> </ul> </div> </div> </div> <div class="zhi-right"> <div class="side-box"> <div class="widget" id="divPrevious"> <h3>最近发表</h3> <ul> <li><a title="G41显卡是什么级别?能玩什么游戏?" href="https://mip.qiaqa.com/a/339411.html">G41显卡是什么级别?能玩什么游戏?</a></li> <li><a title="怎么关QQ空间?一步一步教你关闭QQ空间" href="https://mip.qiaqa.com/a/339410.html">怎么关QQ空间?一步一步教你关闭QQ空间</a></li> <li><a title="IE缓存组件异常怎么修复?详细修复步骤解析" href="https://mip.qiaqa.com/a/339409.html">IE缓存组件异常怎么修复?详细修复步骤解析</a></li> <li><a title="Drupal安装教程" href="https://mip.qiaqa.com/a/339408.html">Drupal安装教程</a></li> <li><a title="Juniper认证有哪些方向?Juniper认证怎么准备?" href="https://mip.qiaqa.com/a/339407.html">Juniper认证有哪些方向?Juniper认证怎么准备?</a></li> <li><a title="网站宕机是什么意思?网站宕机怎么办?" href="https://mip.qiaqa.com/a/339406.html">网站宕机是什么意思?网站宕机怎么办?</a></li> <li><a title="域名转向另一个域名怎么操作?" href="https://mip.qiaqa.com/a/339405.html">域名转向另一个域名怎么操作?</a></li> <li><a title="电脑出现实时调试怎么处理?怎么关闭?" href="https://mip.qiaqa.com/a/339404.html">电脑出现实时调试怎么处理?怎么关闭?</a></li> <li><a title="QQ不能复制粘贴怎么回事?怎么设置?" href="https://mip.qiaqa.com/a/339403.html">QQ不能复制粘贴怎么回事?怎么设置?</a></li> <li><a title="TBYJ文件用什么软件打开?" href="https://mip.qiaqa.com/a/339402.html">TBYJ文件用什么软件打开?</a></li> </ul> </div><div class="widget" id="divzhihotcon"> <h3>热评文章</h3> <ul> <li><a href="https://mip.qiaqa.com/java/679.html" title="11 个简单的 Java 性能调优技巧">11 个简单的 Java 性能调优技巧</a></li><li><a href="https://mip.qiaqa.com/java/726.html" title="在 Java 中运用动态挂载实现 Bug 的热修复">在 Java 中运用动态挂载实现 Bug 的热修复</a></li><li><a href="https://mip.qiaqa.com/java/798.html" title="降低Java垃圾回收开销的5条建议">降低Java垃圾回收开销的5条建议</a></li><li><a href="https://mip.qiaqa.com/web/1239.html" title="7 个顶级的 HTML5 Canvas 动画赏析">7 个顶级的 HTML5 Canvas 动画赏析</a></li><li><a href="https://mip.qiaqa.com/a/1495.html" title="ftp是什么?ftp的使用方法">ftp是什么?ftp的使用方法</a></li><li><a href="https://mip.qiaqa.com/a/1551.html" title="怎样不花钱优化网站?简单5招教你驱动网站流量">怎样不花钱优化网站?简单5招教你驱动网站流量</a></li><li><a href="https://mip.qiaqa.com/a/1634.html" title="网页搜索优化的8个要点">网页搜索优化的8个要点</a></li><li><a href="https://mip.qiaqa.com/web/1657.html" title="一道面试题引发的对 JavaScript 类型转换的思考">一道面试题引发的对 JavaScript 类型转换的思考</a></li> </ul> </div><div class="widget" id="divzhihotart"> <h3>热门文章</h3> <ul> <li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/a/338294.html" title="Linux怎样优化网络带宽使用"><img src="https://oss.xajjn.com/article/2025/04/20/0007112896.png" alt="Linux怎样优化网络带宽使用" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/a/338294.html" title="Linux怎样优化网络带宽使用">Linux怎样优化网络带宽使用</a></h4><p><i class="ri-time-line"></i> 2025-04-20</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/jingyan/338145.html" title="如何手工制作台历?简单步骤与创意设计指南"><img src="https://oss.xajjn.com/article/2025/04/19/0721062466.jpeg" alt="如何手工制作台历?简单步骤与创意设计指南" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/jingyan/338145.html" title="如何手工制作台历?简单步骤与创意设计指南">如何手工制作台历?简单步骤与创意设计指南</a></h4><p><i class="ri-time-line"></i> 2025-04-19</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/jingyan/338132.html" title="如何查询他人身份证号码?合法途径与注意事项解析"><img src="https://oss.xajjn.com/article/2025/04/19/0720312429.jpeg" alt="如何查询他人身份证号码?合法途径与注意事项解析" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/jingyan/338132.html" title="如何查询他人身份证号码?合法途径与注意事项解析">如何查询他人身份证号码?合法途径与注意事项解析</a></h4><p><i class="ri-time-line"></i> 2025-04-19</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/a/337687.html" title="Windows防火墙打不开怎么办?全面解决方法"><img src="https://oss.xajjn.com/article/2025/04/14/18155998.jpeg" alt="Windows防火墙打不开怎么办?全面解决方法" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/a/337687.html" title="Windows防火墙打不开怎么办?全面解决方法">Windows防火墙打不开怎么办?全面解决方法</a></h4><p><i class="ri-time-line"></i> 2025-04-14</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/a/337519.html" title="Linux设置环境变量的方法?linux设置环境变量的命令"><img src="https://oss.xajjn.com/article/2025/04/11/1327308.png" alt="Linux设置环境变量的方法?linux设置环境变量的命令" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/a/337519.html" title="Linux设置环境变量的方法?linux设置环境变量的命令">Linux设置环境变量的方法?linux设置环境变量的命令</a></h4><p><i class="ri-time-line"></i> 2025-04-11</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/a/336561.html" title="CentOS与Aliyun Linux有什么区别?如何选择最佳方案?"><img src="https://oss.xajjn.com/article/2025/03/24/2221322169.jpeg" alt="CentOS与Aliyun Linux有什么区别?如何选择最佳方案?" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/a/336561.html" title="CentOS与Aliyun Linux有什么区别?如何选择最佳方案?">CentOS与Aliyun Linux有什么区别?如何选择最佳方案?</a></h4><p><i class="ri-time-line"></i> 2025-03-24</p></div></li> </ul> </div> </div> </div> </div> <div class="zhi-user-modal"> <div class="zhi-user-modal-container"> <ul class="zhi-switcher"> <li><a href="javascript:void(0);">用户登录</a></li> <li><a href="javascript:void(0);">注册新用户</a></li> </ul> <div id="zhi-login"> <form method="post" action="#" class="zhi-form"> <p class="fieldset"> <label class="image-replace zhi-username" for="edtUserName">用户名</label> <input type="text" class="full-width has-padding has-border" placeholder="用户名" id="edtUserName" name="edtUserName" size="20" value="" tabindex="1" /> </p> <p class="fieldset"> <label class="image-replace zhi-password" for="edtPassWord">密码</label> <input type="password" class="full-width has-padding has-border" placeholder="密码" id="edtPassWord" name="edtPassWord" size="20" tabindex="2" /> </p> <p class="fieldset"> <input type="checkbox" name="chkRemember" id="chkRemember" tabindex="98" /> <label for="chkRemember">记住登录状态</label> <a class="fieldsetrig" href="https://mip.qiaqa.com/?user=repass">忘记密码?</a> </p> <p class="fieldset"> <input id="btnPost" name="btnPost" type="submit" value="登录" class="full-width" tabindex="99"/> <input type="hidden" name="username" id="username" value="" /> <input type="hidden" name="password" id="password" value="" /> <input type="hidden" name="savedate" id="savedate" value="1" /> </p> </form> </div> <div id="zhi-singup"> <form method="post" action="#" class="zhi-form" id="formsing"> <p class="zhi-singup-set"> <label class="image-replace zhi-username">用户名</label> <input class="full-width has-padding has-border" id="zhanghao" name="zhanghao" type="text" placeholder="输入用户名"> </p> <p class="zhi-singup-set"> <label class="image-replace zhi-email">邮箱</label> <input class="full-width has-padding has-border" id="email" name="email" type="text" placeholder="输入mail"> </p> <p class="zhi-singup-set"> <label class="image-replace zhi-password">密码</label> <input class="full-width has-padding has-border" id="zpassword" name="zpassword" type="password" placeholder="输入密码"> </p> <p class="zhi-singup-set"> <label class="image-replace zhi-password">确认密码</label> <input class="full-width has-padding has-border" id="repassword" name="repassword" type="password" placeholder="确认密码"> </p> <p class="zhi-singup-set"> <input name="code" type="text" maxlength="6" class="form-control" placeholder="图形验证码" autocomplete="off" required=""> <span class="fieldset-code" style="width:96px;"> <img src="https://mip.qiaqa.com/zb_system/script/c_validcode.php?id=singin" id="singin" onclick="javascript:this.src='https://mip.qiaqa.com/zb_system/script/c_validcode.php?id=singin&tm='+Math.random();" alt="图形验证码"/> </span> </p> <p class="zhi-singup-set"> <input type="checkbox" name="xieyi" id="xieyi" tabindex="98" /> <label for="xieyi">我已阅读并同意 <a href="">用户协议</a></label> </p> <p class="zhi-singup-set"> <input id="btnSin" class="full-width" type="submit" value="注册新用户"> </p> </form> </div> <a href="javascript:void(0);" class="zhi-close-form"></a> </div> </div> <div class="zhiback" id="zhiback"> <div class="askBox"> <div class="ask-group"> <form action="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/function/cmd.php?act=ask" method="POST" id="formask"> <div class="ask-item"> <div class="ask-item-img"> <img src="https://mip.qiaqa.com/zb_users/avatar/0.png?1745821178" alt="" /> </div> <input type="text" id="asktitle" name="asktitle" placeholder="请输入问题标题"> </div> <div class="ask-item"> <textarea name="askcon" id="askcon"> 请输入问题背景及详细信息... </textarea> </div> <div class="ask-footer"> <div class="ask-item-as"> <input type="hidden" name="csrfToken" value="94790afbbac151001ac6780712fd9aea"> <input type="submit" class="ask-item-btn" value="发布" /> </div> </div> </form> </div> <button aria-label="关闭" type="button" class="ask-close"><i class="ri-close-line"></i></button> </div> </div> <div id="backbox" class="backbox"> <div class="back genight"><i class="ri-sun-fill"></i></div> <div class="back" id="totop"><i class="ri-arrow-up-s-line"></i></div> </div> <div class="zhi-menu-m"> <button type="button" class="btn-close" aria-label="Close"><i class="ri-close-line"></i></button> <div class="logo"> <a href="https://mip.qiaqa.com/"><img src="https://mip.qiaqa.com/logo.png" alt="恰卡编程网"/></a> </div> <div class="zhi-menu-search"> <form name="search" method="post" action="https://mip.qiaqa.com/zb_system/cmd.php?act=search"> <input name="q" size="11" class="zhi-menu-search-input" type="text" placeholder="请输入关键词" autocomplete="off"> <button class="zhi-menu-search-submit" type="submit"><i class="ri-search-2-line"></i></button> </form> </div> <nav id="mnav"></nav> </div> <footer class="zhi-footer"> <div class="inner"> <div class="footer-center-info"> 恰卡编程网--程序员编程资料和编程经验分享平台,从入门到进阶,非常详细。学习Java级其他网络编程语言的人很多,借助本站教程,相信你能很快精通并出类拔萃。 </div> <div class="zhi-footer-bottom"> <p>Copyright © 2018-2022 恰卡网 qiaqa.com 版权所有 <a rel="nofollow" class="ico-ico" href="http://www.beian.gov.cn/portal/recordQuery?token=9c5a0517-c8ae-4a6b-b2c7-0dbf41cd45f0" target="_blank">苏ICP备18042295号</a> </p> </div> </div> </footer> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?a88faa5532b1e037da0ed2f1324c3674"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script src="https://mip.qiaqa.com/zb_system/script/jquery-2.2.4.min.js"></script> <script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/swiper.js"></script> <script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/copy.js"></script> <script src="https://mip.qiaqa.com/zb_users/plugin/UEditor/third-party/prism/prism.js"></script> <script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/html2canvas.min.js"></script> <script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/lightbox.js"></script> <script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/jquery.form.js"></script> <script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/zhimedia.js?v=1.3.6"></script> </body> </html><!-- 缓存生成时间: 2025-04-28 14:19:37 by ZBlogCache 0.03 ms , 0 query , 2056kb memory , 0 error -->