THinkPHP中文件下载
THinkPHP1.5中文件的下载 用到的系统类库文件是Http.class.php,位于ThinkPHP\Lib\ORG\Net目录下,类名Http,其中有静态方法static function download ($filename, $showname=”,$content=”,$expire=180);/ @param string $filename 下载文件名(完整路径加文件的保存名字)* @param string $showname 下载显示的文件名(想要显示的名字或者从数据库中读出的原来带中文的名字);* @param string $content 下载的内容(默认为空,此时下载的文件就是原文件)。* @param integer $expire 下载内容浏览器缓存时间 ,默认为空时为180秒。*/因为PHP保存文件名不支持中文,所以通常中文文件名保存到服务器上时换成成英文名或者生成随机名字。下载时可以利用此方法回复原文件名。应用举例:下载时显示文件原名/* 假设数据库里文件信息存储表为file(id,truename,savenane,user,size).文件存在于网站项目目录下的uploads文件夹里,本网站项目名为bm,其绝对路径为:H:\AppServ\www\bm\uploads\( H:\AppServ\www\为文档根目录)此时该目录下有一文件123456789.doc,(savename),原文件名为“读后感.doc”,即truename,大小为2MB.那么要下载时服务器端得程序为:class FileAction extends Action{public function download(){$uploadpath=’H:\AppServ\www\bm\uploads\’;//设置文件上传路径,服务器上的绝对路径$id=$_GET['id'];//GET方式传到此方法中的参数id,即文件在数据库里的保存id.根据之查找文件信息。if($id==”) //如果id为空而出错时,程序跳转到项目的Index/index页面。或可做其他处理。{$this->redirect(‘index’,'Index’,”,APP_NAME,”,1);}$file=D(‘File’);//利用与表file对应的数据模型类FileModel来建立数据对象。$result= $file->find($id);//根据id查询到文件信息if($result==false) //如果查询不到文件信息而出错时,程序跳转到项目的Index/index页面。或可做其他处理{$this->redirect(‘index’,'Index’,”,APP_NAME,”,1);}$savename=$file->savename;//文件保存名$showname=$file->truename;//文件原名$filename=$uploadpath.$savename;//完整文件名(路径加名字)import(‘ORG.Net.Http’);Http::download($filename,$showname);}}然后在该文件下载的HTML模板里要下载该文件的地方加一个下载链接,调用File模块的download方法即可。记得传参数id .如本例中:<table><tr><td>读后感.doc</td><td>sunmoon</td><td><a href=’__APP__/File/download/id/{$id}’>下载</a></td><!–其中{$id}是模板变量,代表要下载的文件在数据库中的保存id.–></tr></table> 注:IE浏览器的下载文件名编码只有gb2312才能显示,若是不然,要不就是文件名乱码,要不就是找不到文件而无法下载。针对此种情况,我对原来的download()方法进行了一些调整,经过测试发现IE、傲游、firefox均可正常下载。 /** +---------------------- * 下载文件 * 可以指定下载显示的文件名,并自动发送相应的Header信息 * 如果指定了content参数,则下载该参数的内容 +---------------------- * @static * @access public +---------------------- * @param string $filename 下载文件名 * @param string $showname 下载显示的文件名 * @param string $content 下载的内容 * @param integer $expire 下载内容浏览器缓存时间 +---------------------- * @return void +---------------------- * @throws ThinkExecption +---------------------- */ static public function download ($filename, $showname='',$content='',$expire=180) { if(file_exists($filename)){ $length = filesize($filename); }elseif(is_file(UPLOAD_PATH.$filename)){ $filename = UPLOAD_PATH.$filename; $length = filesize($filename); }elseif($content != ''){ $length = strlen($content); }else { throw_exception($filename.L('下载文件不存在!')); } if(empty($showname)){ $showname = $filename; } $showname = basename($showname); if(empty($filename)){ $type = mime_content_type($filename); }else{ $type = "application/octet-stream"; } //发送Http Header信息 开始下载 header("content-type:text/html; charset=utf-8"); header("Pragma: public"); header("Cache-control: max-age=".$expire); //header('Cache-Control: no-store, no-cache, must-revalidate'); header("Expires: " . gmdate("D, d M Y H:i:s",time()+$expire) . "GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s",time()) . "GMT"); //下面一行就是改动的地方,即用iconv("UTF-8","GB2312//TRANSLIT",$showname)系统函数转换编码为gb2312 header("Content-Disposition: attachment; filename=". iconv("UTF-8","GB2312",$showname)); header("Content-Length: ".$length); header("Content-type: ".$type); header('Content-Encoding: none'); header("Content-Transfer-Encoding: binary" ); if($content == '' ) { readfile($filename); } else { echo($content); } exit(); }注:iconv为php系统函数库,但需要安装。若是服务器还没有这个模块安装,则需将iconv.dll下载下来后复制到windows/system32/下面,同时在php安装文件夹得ext文件夹里也复制一份。然后在php.ini文件中将extension=php_iconv.dll前的”;”去掉,没有的话就加上extension=php_iconv.dll。然后重启服务器即可。
?

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInacookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionwwithSession_start()和stordoredAtain $ _session.2)

在PHP中,遍历会话数据可以通过以下步骤实现:1.使用session_start()启动会话。2.通过foreach循环遍历$_SESSION数组中的所有键值对。3.处理复杂数据结构时,使用is_array()或is_object()函数,并用print_r()输出详细信息。4.优化遍历时,可采用分页处理,避免一次性处理大量数据。这将帮助你在实际项目中更有效地管理和使用PHP会话数据。

会话通过服务器端的状态管理机制实现用户认证。1)会话创建并生成唯一ID,2)ID通过cookies传递,3)服务器存储并通过ID访问会话数据,4)实现用户认证和状态管理,提升应用安全性和用户体验。

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版
推荐:为Win版本,支持代码提示!