php中文件缓存实现程序代码
文件缓存原理
1.把需要缓存的数据通过serialize函数序列化后直接保存到文件。在需要使用缓存数据的时候,通过反序列化读入文件内容并复制给需要的变量,然后使用。不经常改动的数据可以写入缓存文件。
文件缓存实例
index.php
代码如下 | 复制代码 |
define('CACHE_ROOT','./'); cache.func.php文件 function arrayeval($array, $level = 0) { |
把要缓存的文件序列化下存放起来,当使用的时候反序列化回来使用。
使用对PHP模板数据进行缓存的工具smarty。smarty将HTML文件缓存成一个静态的HTML页,需要缓存的模板文件可以使用smarty。
例:
代码如下 | 复制代码 |
<?php |
1.Memcached缓存。
memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度。memcached 使用了“Key=>Value”方式组织数据。可以允许不同主机上的多个用户同时访问这个缓存系统,一般用于大型网站使用。memcached使用内存缓存数据,所以它是易失的,当服务器重启,或者memcached进程中止,数据便会丢失,所以 memcached不能用来持久保存数据。
过php_memcache的人都会觉得 PHP内存缓存是一个很复杂的东西,其实不然。
memcached 是高效、快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序。
这里介绍memcached在WIN32下的配置及其使用。
一、PHP内存缓存的配置(WIN32环境)
1、下载php_memcache.rar,请从附件下载。
解压压缩包:php_memcache.rar
php_memcache.rar压缩包里主包含的文件有:
/memcached-1.2.1-win32/memcached.exe
/php_memcache/php_memcache.dll
2、打开命令提示符,指向到memcached.exe所在路径,运行memcached.exe -d start。
3、将php_memcache.dll文件拷贝到PHP的动态文件库的文件夹下。
4、在php.ini文件中加入一行extension=php_memcache.dll。
5、重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!
例:
代码如下 | 复制代码 |
<?php |
内存缓存二
APC、EC、Zend加速器的比较
一、APC
APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。
主页是 http://pecl.php.net/package/apc
php帮助手册页面: http://cn.php.net/apc
APC是个优化器,自安装之日起,就默默地在后台为您的PHP应用服务了.您的所有PHP代码会被缓存起来. (针对php opcode)
另外,APC可提供一定的内存缓存功能.但是这个功能并不是十分完美,有报告说如果频繁使用APC缓存的写入功能,会导致不可预料的错误.如果想使用这个功能,可以看看apc_fetch,apc_store等几个与apc缓存相关的函数.
安装:
代码如下 | 复制代码 |
# pecl install APC |
配置:(/etc/php.inc)
代码如下 | 复制代码 |
extension=apc.so |
[apc]
代码如下 | 复制代码 |
apc.enabled = 1 apc.shm_segments = 1 apc.shm_size = 30 apc.optimization = 0 apc.ttl = 7200 apc.user_ttl = 7200 apc.num_files_hint = 1000 apc.mmap_file_mask = /tmp/apc.XXXXXX |
先来看一个调用第三方法网站的一个程序
主要使用curl实现,需要开启php对curl的支持.
如果你是windows系统在你的的php.ini文件的设置,找到php_curl.dll,并取消前面的分号注释就行了,如下所示:
//取消下在的注释
extension=php_curl.dll
如果您是在Linux下面,那么,您需要重新编译您的PHP了,编辑时,您需要打开编译参数,在configure命令上加上“–with-curl”参数。
然后重启apache
代码如下 | 复制代码 |
<?php |
实例二
这个实例利用了手机数据库,把文件保存在本地然后查找数据库再来差别,但是你得经常更新数据库才行哦。
代码如下 | 复制代码 |
<html> } ?>
index.php <html> function.php函数 <?php session_start(); function check(){ function getinfo(){ <div id="right"> <?php |
两个东东的下载地址分别为:
ckeditor: http://ckeditor.com/download/
ckfinder: http://ckfinder.com/download
项目目录结构为:
ckeditor
---ckeditor
--ckfinder
--test.php 用来测试的PHP文件
2、找到ckfinder目录下的config.php文件打开
1)定位到CheckAuthentication方法,默认此方法只有返回值false,这样是不允许上传文件到服务器的,需要将其进行修改,函数内已经用英文注明,不建议直接改为false,因为那样会不安全,什么都会上传了,所以用session来处理一下,就成了下面的样子
代码如下 | 复制代码 |
session_start(); function CheckAuthentication() { if(isset($_SESSION['UseEditor']))//这个随便命名就可以了 return true; else return false; } |
2) 配置上传文件位置,
默认ckfinder会把上传文件放到根目录下的ckfinder/userfiles/images文件夹下,我们可以修改成自己的项目目录下,在项目下建立upfiles文件夹,在config.php中找到baseUrl并且修改为:
代码如下 | 复制代码 |
$baseUrl = '/ckeditor/upfiles/'; |
这样上传文件会保存到upfiles下的images文件夹。当然,你也可以根据需要设置不同的上传文件夹,至于怎么传值给他以判断上传文件夹,当然是通过session了。
3、修改上传文件名,默认系统以原有名字命名,所以我们重新命名文件。方法为:打开ckfindercoreconnectorphpphp5CommandHandler下FileUpload.php文件
找到 $sUnsafeFileName 后面加上重命名代码,如下:
代码如下 | 复制代码 |
$sUnsafeFileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding(CKFinder_Connector_Utils_Misc::mbBasename($uploadedFile['name'])); //先获取原文件后缀 $sExtension=CKFinder_Connector_Utils_FileSystem::getExtension($sUnsafeFileName); //重新命名文件 $sUnsafeFileName=date('YmdHis').'.'.$sExtension; |
4、最后在test.php中使用ckfinder,代码如下:
代码如下 | 复制代码 |
session_start(); $_SESSION[‘UseEditor’]=’ok’;//一定别忘记这个哦,否则没法上传 include_once('ckeditor/ckeditor.php'); include_once('ckfinder/ckfinder.php'); $fc = new CKEditor(); CKFinder::SetupCKEditor($fc,'./ckfinder/'); $fc->editor("content", "<p>Initial value.</p>"); |
swfupload对于大文件上传等比较好用,下面以classic form demo为例,简单说明下用法
下载地址:http://code.google.com/p/swfupload/downloads/list
其中 SWFUpload_v250_beta_3_samples.zip 为实例代码,解压后重命名为swfupload,保存到本地主文件夹(nginx+php环境)下,便可以通过
http://localhost/swfupload/demos/ 访问
其中两个文件夹,demos 为客户端的实例,samples 提供了各语言的文件保存代码。
切换到 http://localhost/swfupload/demos/formsdemo/ 即普通表单模式
在/demos/formsdemo/下新建文件夹 uploads
将 /smaples/php/upload.php 中的代码拷贝到 /demos/formsdemo/upload.php 开头,即
// The Demos don't save files
这个注释下面。
修改其中的
代码如下 | 复制代码 |
view sourceprint?$upload_name = "filedata"; 为: view sourceprint?$upload_name = "resume_file"; |
(与/demos/formsdemo/index.php中的表单元素名称一致)
此时,可以使用表单正常上传文件,上传的文件保存在/demos/formsdemo/uploads/目录下
数据库处理部分,应修改下面的代码:
代码如下 | 复制代码 |
if (isset($_FILES["resume_file"]) && is_uploaded_file($_FILES["resume_file"]["tmp_name"]) && $_FILES["resume_file"]["error"] == 0) { echo rand(1000000, 9999999); // Create a pretend file id, this might have come from a database. } |
这段代码是原来demo中的upload,其作用时返回一个已经上传的文件的id并赋给表单的hidFileID标签(注意到,这个标签是一个hidden元素)
原demo是随机产生的一个数,在这要修改为数据库插入操作得到的一个数据库表的id值。即下面的做法:
去掉对$_FILES的if判断(这在上面的move_uploaded_file之后is_uploaded_file判断为false);进行数据库插入操作;直接echo得到的id(数字型)。
对于大文件上传,需要首先修改表单部分的,即
代码如下 | 复制代码 |
/demos/formsdemo/index.php中 view sourceprint?file_size_limit : "100 MB", |
修改为期待的尺寸(最大2G)
修改nginx.conf,/etc/init.d/nginx reload,若不添加下面的设置,则nginx会出现413 Request Entity Too Large错误
代码如下 | 复制代码 |
view sourceprint?http { ... client_max_body_size 128M ... } |
同时需要修改服务器配置 php.ini, /etc/init.d/php-cgi reload
代码如下 | 复制代码 |
view sourceprint?upload_max_filesize 100M post_max_size 100M memory_limit 128M |
注意到swfupload并不要求修改max_execution_time和max_input_time的配置。
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
js URLdecode()与urlencode方法支持中文解码
下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)
最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24- 今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- 这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
- 这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
ant design中upload组件上传大文件,显示进度条进度的实例
这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07