swfupload配置与使用方法
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的配置。
搞了半天终于把CKEditor搞了个明明白白,配合ckfinder实现了图片的上传,具体步骤给需要的同志们。 1、建立项目ckeditor,将ckeditor和ckfinder解压缩放到项目下两个东东的下载地址分别为:
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>"); |
linux下定时执行php脚本
执行PHP脚本
方法1
如果你想定时执行某一个PHP脚本 可以直接这样写:
*/1 * * * * root -q /bin/local/php /path/to/your/php/script.php (每一分钟执行一次script.php)
注意,这样写需要把PHP变成可执行的脚本文件。在命令行下,脚本所在目录
chmod +x script.php
crontab+php-cgi 定时执行PHP脚本
1. 在web根目录创建请求的脚本index.php
我的文件路径(根据安装路径不同有不同路径):/usr/local/webserver/htdosc/index.php
2. 创建crontab文件
2.1 crontab -e
2.2 * * * * * /usr/local/webserver/php/bin/php-cgi -q /usr/local/webserver/htdosc/index.php
#编辑crond计划,每分钟请求index.php
完成,以上步骤完成后,在我的电脑中能正常每分钟请求index.php
注意事项:
一. /usr/local/webserver/php/ 是我的php安装路径
二. php-cgi 是php解析器(我的理解是这样,总感觉我理解的不对,希望大虾们指正),有些资料是用./bin/php,我电脑上就不能,所以用php-cgi,可能安装的方式不对吧。
三. -q 是安静模式(某些资料中看到的)运行php脚本
四. 有些资料是 把在index.php的首行添加#! /usr/local/webserver/php/bin/php -q ,并对index.php添加执行权限。我没有这样做,也能正常请求index.php
最后介绍一个PHP定时执行任务的实现
用到的函数 ignore_user_abort(),set_time_limit(0),sleep($interval)
此代码只要运行一次后关闭浏览器即可。
代码如下 | 复制代码 |
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. |
代码如下 | 复制代码 |
<?php class create_html { private $template; //模版 private $file_name; //文件名 private $array; //数据数组 function __construct($file_name, $template, $array) { //构造类 $this->template = $this->read_file($template, "r"); //读取模板文件 $this->file_name = $file_name; $this->array = $array; //数据数据 $this->html(); //生成html } function html() { //生成html while (ereg ("{([0-9]+)}", $this->template, $regs)) { //循环模版中所能的{1}….. $num = $regs[1]; //得到1、2、3序列 $this->template = ereg_replace("{".$num."}", $this->array[$num], $this->template); //把数据替换成html内容 $this->write_file($this->file_name, $this->template, "w+"); //生成HTML文件 } } function read_file($file_url, $method = "r") { //读取文件 $fp = @fopen($file_url, $method); //打开文件 $file_data = fread($fp, filesize($file_url)); //读取文件信息 return $file_data; } function write_file($file_url, $data, $method) { //写入文件 $fp = @fopen($file_url, $method); //打开文件 @flock($fp, LOCK_EX); //锁定文件 $file_data = fwrite($fp, $data); //写入文件 fclose($fp); //关闭文件 return $file_data; } } #例子———————- #读取邮件回复模版———————————————————————————- $title = "标题"; $navigation = "浏览器"; $happy_origin = "作者"; $name = "test2.htm"; $template = "default_tmp.php"; //模版中用{1}{2}来替换 $daytype = array(1 => $title, 2 => $navigation, 3 => $happy_origin); $htm = new Restore_email($template, $daytype); echo $htm->pint(); ?> |
函数代码:仅删除指定目录下的文件,不删除目录文件夹。
代码如下 | 复制代码 |
class shanchu { 假设需要删除一个名叫”upload”目录下的所有文件(但无需删除目录文件夹),你可以通过以下代码完成: <?php |
php删除所有目录
代码如下 | 复制代码 |
|
PHP删除目录及目录下所有文件
代码如下 | 复制代码 |
<?php //假设需要删除一个名叫”upload”的同级目录即此目录下的所有文件,你可以通过以下代码完成: delDirAndFile( ‘upload’); |
相关文章
IntelliJ IDEA2021.1 配置大全(超详细教程)
这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下...2021-04-18- VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
- 这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。  ...2017-07-06
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- 许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21使用insertAfter()方法在现有元素后添加一个新元素
复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31