PHP手写的图片上传类

 更新时间:2016年11月25日 15:39  点击:1815
图片上传网上只要你愿意搜索多了去了,但有几个站长会是自己写的无非就是抄来抄去了,下面我来给大家抄一个比较好用的,自己也测试过的图片上传代码了,希望这个类对各位会带来帮助。

一个新手写的 PHP 图片上传类,基本的功能已经满足,可以返回客户端文件名,文件大小,临时文件夹路径,允许上传的文件类型,文件后缀,新路径,新文件名,图片宽度,图片高度,自定义上传成功消息,显示上传的状态。。是否上传成功的信息等等,外加构造函数,对于新手学习来说,已经足够了,值得研究学习。。

在使用时,和其它PHP类一样,先要进行初始化对象,在前台调用函数方法即可,这里不再详细说明,这个类的研究价值主要在于代码的规范与实用,并没有大量繁琐的代码,都是一些简单的上传函数整合成的一个PHP图片上传类,下面是详细的类代码:

 代码如下 复制代码

class upload {
private $file_name = ‘null’; #客户端文件名
private $file_size = 0; #文件大小
private $file_tmpName = ”; #临时文件夹路径
private $upload_type = array(‘jpg’,'jpeg’,'gif’,'png’); #允许上传的文件类型
private $upload_Ext = ‘null’; #文件后缀
private $upload_dir = ‘null’; #新路径
private $upload_name = ‘null’; #新文件名
private $upload_width = 0; #图片宽度
private $upload_height = 0; #图片高度
private $upload_msg = ”; #上传消息
private $upload_mode; #上传状态
/**
* 构造函数,自动上传
* @access public
* @param string $control 文件域控件名
* @param string $filePath 保存路径
* @param string $fileName 新文件名,不带后缀
* @param array $fileType 允许上传的文件后缀
* @param int $size 允许上传的文件大小,以字节为单位
*/
public function __construct($control=”,$filePath=”,$fileName=”,$fileType=”,$size=0) {
$this->upload_mode = true;
if($control==”)
$this->error(‘上传的文件域控件名不能为空’);
else{
$this->file_name=$_FILES[$control]['name'];
$this->file_size=$_FILES[$control]['size'];
$this->file_tmpName=$_FILES[$control]['tmp_name'];
if($fileType!=”)
$this->upload_type = $fileType;
if($filePath==”)
$this->upload_dir=’./’;
else
$this->upload_dir=$filePath;
if(!is_uploaded_file($this->file_tmpName))
$this->error(‘没有文件被上传’);
else{
if($size!=0&&$this->file_size>$size)
$this->error(‘上传的图片文件不能大于’.$this->getSize($size));
if(!$this->typeDetect($this->file_name))
$this->error(‘不支持上传此类型的文件’);
else{
if(!$this->fileDetect($this->file_tmpName))
$this->error(‘上传的图片文件无效或已经损坏’);
}
if($fileName==”)
$this->upload_name=$this->file_name;
else
$this->upload_name=$fileName.’.’.$this->upload_Ext;
}
}
//开始保存文件
if($this->mode)
$this->saveFile();
}
/**
* 获取属性
* @access public
* @param string 属性名
* @return 属性值
*/
public function __get($name){
switch($name){
case ‘path’:
return $this->upload_dir;
break;
case ‘name’:
return $this->upload_name;
break;
case ‘ext’:
return $this->upload_Ext;
break;
case ‘size’:
return $this->getSize($this->file_size);
case ‘width’:
return $this->upload_width;
break;
case ‘height’:
return $this->upload_height;
break;
case ‘mode’:
return $this->upload_mode;
break;
case ‘msg’:
return $this->upload_msg;
break;
}
}
/**
* 检测文件后缀名
* @access public
* @return bool
*/
private function typeDetect($OldFile){
$tempArr = explode(“.”, $OldFile);
$fileExt = array_pop($tempArr);
$fileExt = trim($fileExt);
$fileExt = strtolower($fileExt);
if(in_array($fileExt,$this->upload_type)){
$this->upload_Ext=$fileExt;
return true;
}
else
return false;
}
/**
* 检测上传文件是否是有效图片格式
* @access private
* @return bool
*/
private function fileDetect($tmpName){
$arr = getimagesize($tmpName);
if(!$arr){
return false;
}else{
$this->upload_width = $arr[0];
$this->upload_height = $arr[1];
return true;
}
}
/**
* 保存文件
* @access private
*/
private function saveFile(){
if(!is_dir($this->upload_dir)){
mkdir($this->upload_dir, 0777);
chmod($this->upload_dir, 0777);
}
$save_file = move_uploaded_file($this->file_tmpName,$this->upload_dir.$this->upload_name);
if(!$save_file)
$this->error(‘文件写入失败’);
else
$this->upload_msg=’文件上传成功’;
}
/**
* 获取文件大小
* @return string 返回B,KB,MB单位
*/
private function getSize($tmpSize){
$value = ‘B’;
if($tmpSize>1024){
$tmpSize = floor($tmpSize/1024);
$value = ‘KB’;
}
if($tmpSize>1024){
$tmpSize = round($tmpSize/1024,2);
$value = ‘MB’;
}
return $tmpSize.$value;
}
/**
* 错误提示
* @access private
* @param string $msg 错误信息
*/
private function error($msg=”){
$this->upload_msg .= $msg;
$this->upload_mode = false;
}
}

PHP定时执行程序脚本我写过不少文章不过都被那些大站采集过去了,结果百度算法有问题大站有排名我的没有,下面我今天再来给各位整理一些不错的定时执行程序的php代码

今天分享一个超简单直接的PHP定时执行的小代码,关掉浏览器,PHP脚本也能后继续执行!

用web浏览器定时刷新今天想到用sleep函数来实现php 自动定时执行。只要php能运行即可。

由于代码少,这里给个例子直接解释:

 代码如下 复制代码

<?php

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行

set_time_limit(20);//程序超时时间,单位秒;通过set_time_limit(0)可以让程序无限制的执行下去;当用了set_time_limit()函数设置运行时间,sleep()函数在执行程序时的持续时间将会被忽略掉

$interval=5;//每隔多少秒运行,单位:秒

do{
//这里是你要执行的代码
$i = 1;
$num_file = "number.txt";
$fp = fopen($num_file,"r");
$buf = fread($fp,filesize($num_file));
fclose($fp);

$number = file_get_contents($num_file);
$number = $number+$i;
$fp = fopen($num_file,"w");
fwrite($fp,$number);
fclose($fp);
echo $number;

//等待执行的时间
sleep($interval);
}
while(true);

?>

上面方法如果关了浏览器好像就不行了,我们可以尝试使用平台的计划任务来处理

1、windows 的计划任务
2、linux的脚本程序

代码如下:
PHP

 代码如下 复制代码

<?php
 if($_GET['ac']=='stop')
 exit();
 sleep(5);
 $name=time();
 $fp=fopen("$name.txt",'w');
 fwrite($fp,time());
 fclose($fp);
 $fp = fsockopen('localhost', 80, $errno, $errmsg);
 fputs($fp, "GET /test/time.php\r\n\r\n");
 fclose($fp);
 ?>

在浏览器里执行一下http://localhost/test/time.php
则会在test 文件夹下每隔5秒自动创建一个以当前时间戳命名的txt文件,并写入当前时间戳
可以发现即使关闭了浏览器。这个脚本还是会每5秒执行一次。
这样就达到了定时执行的目的。
如果是要按时间点执行,比如每天 1点钟的时候执行。
那么也只需要小小修改一下也能够实现。
当然这只是一种解决思路,至于实际应用,还要再探索一番

还有一种实现方法:利用死循环,原理差不多

PHP

 代码如下 复制代码

<?php
ignore_user_abort(true);
set_time_limit(0);while(1){
$fp  = fopen('time_task.txt',"a+");
$str = date("Y-m-d h:i:s")."n";
fwrite($fp,$str);
fclose($fp);
sleep(1800);    //半小时执行一次
if(!file_exists('1.txt'))
     exit();          //在目录下建立一个文件1.txt,如果文件存在一直执行,如果文件不存在则退出
}
?>

补充这样也可以

<?php
ignore_user_abort();//关闭浏览器后,继续执行php代码
set_time_limit(0);//程序执行时间无限制
$sleep_time = 5;//多长时间执行一次
$switch = include 'switch.php';
while($switch){
$switch = include 'switch.php';
$fp = fopen('test.txt','a+');
fwrite($fp,"这是一个php博客:phpddt.com $switch \n");
fclose($fp);
sleep($sleep_time);
}
exit();

?>

php中获取cookie值非常的简单只要COOKIE[]中间是cookie id名就可以获取到了,下面来简单的给大家介绍下php中cookie的一个使用例子。

给cookie赋值

setcookie (name, value, expire, path, domain)

例如:

 代码如下 复制代码

<?php
setcookie(“user”, “Alex Porter”, time()+3600);
?>

如果我们要获取user值如何操作

 代码如下 复制代码

<?php
echo $_COOKIE["user"];
print_r($_COOKIE);
?>

如果我们没设置user cookie那么我们执行时会出错了,这样我们可以使用isset函数来加以判断。

 代码如下 复制代码

<?php
if(isset($_COOKIE["user"]))
echo"Welcome".$_COOKIE["user"]."!<br>";
else
echo"Welcomeguest!<br>";
?>

中文总是乱码

比如“小伟”获取后是“%u5C0F%u4F1F”

这个其实不是乱码,而是unicode的编码,在php中有一个内置函数叫unicode_encode可以将一个unicode字符串转变为你想要的编码方式,函数原型为:string unicode_encode ( unicode input, string encoding )
这里有一个例子可以参考一下:

 代码如下 复制代码

<?php
  header ('Content-Type: text/plain; charset=ISO-8859-2');
  $encoded = unicode_encode ('\u0150\u0179', 'ISO-8859-2');
  echo 'Unicode semantics: ', ini_get ('unicode_semantics'), PHP_EOL, 'The string itself: ';
  printf ($encoded . PHP_EOL, '%s');
  echo 'The length of the string: ', strlen ($encoded);
?>

例子 结合js+php实现页面浏览统计

 代码如下 复制代码

// 浏览页面次数
$visited = (int)$_COOKIE['pageVisits'] + 1;
setcookie( 'pageVisits',  // cookie名
$visited,  // cookie值
time()+7*24*60*60  // 过期时间
);


当运行这个页面时服务器端会写入个cookie值,用于保存你访问该页面的次数。这里应用到了php的setcookie方法。
输出这个值:
现在来看如何使用js获取和设置cookie

 代码如下 复制代码

var cookie = $.cookie(‘demoCookie’);
if(cookie) $(‘.jq-text’).text(cookie).show();
$(‘.fields a’).click(function(e){
var text = $(‘#inputBox’).val();
// 设置cookie的值
$.cookie(‘demoCookie’,text,{expires: 7});
$(‘.jq-text’).text(text).slideDown(‘slow’);
e.preventDefault();
});
$(‘#form1′).submit(function(e){ e.preventDefault(); })

var cookie = $.cookie(‘demoCookie’);
获取键名demoCookie的值(如果不存在返回的是null)。

$.cookie(‘demoCookie’,text,{expires: 7});

当点击保存链接的时候,将输入框的值写入cookie。

今天看到这篇文章想我想到了几年前帮助一个客户做一个网站,那种要求里面就有一个宽度不足够时需要自动给图片生成白边了,下面我看到一个不错的例子整理一下给各位。

网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160×120。但是如果上传的图片比例和缩略图不一致,直接缩放的话就会导致图片变形,这样体验肯定就不好了。于是笔者想了一个折中的办法,就是缩小后添加白边的方法。

源图,尺寸是600×366:

php生成缩略图源图

最终生成的缩略图

最终生成的缩略图
代码相对比较长些,下面简单说下思路:

先将源图按比例生成缩略图,并且宽不大于160、高不大于120。例如上图会先生成160×98的缩略图。
新建一个160×120的白色背景图片,将上一步生成的缩略图居中放置到这张图片上就OK了。

 代码如下 复制代码

//源图的路径,可以是本地文件,也可以是远程图片
$src_path = '1.jpg';
//最终保存图片的宽
$width = 160;
//最终保存图片的高
$height = 120;
 
//源图对象
$src_image = imagecreatefromstring(file_get_contents($src_path));
$src_width = imagesx($src_image);
$src_height = imagesy($src_image);
 
//生成等比例的缩略图
$tmp_image_width = 0;
$tmp_image_height = 0;
if ($src_width / $src_height >= $width / $height) {
    $tmp_image_width = $width;
    $tmp_image_height = round($tmp_image_width * $src_height / $src_width);
} else {
    $tmp_image_height = $height;
    $tmp_image_width = round($tmp_image_height * $src_width / $src_height);
}
 
$tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);
imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);
 
//添加白边
$final_image = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($final_image, 255, 255, 255);
imagefill($final_image, 0, 0, $color);
 
$x = round(($width - $tmp_image_width) / 2);
$y = round(($height - $tmp_image_height) / 2);
 
imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);
 
//输出图片
header('Content-Type: image/jpeg');
imagejpeg($final_image);

hessian php可以以http的方式和其他的语言交换数据了,下面我我们一起来看看hessian php安装配置与使用方法,希望对各位有帮助。

下载HessianPHP_v2.0.3.zip
下载地址:http://sourceforge.net/projects/hessianphp/
(不要使用HessianPHP-1.0.5-RC2.zip, 2006年后没有更新了,不支持php5.2以后,及最新hessian协议.
注意:需要注意服务器端发布的hessian协议版本,客户端要与之对应.)
 
使用例子在:HessianPHP_v2.0.3.zipquickstart.txt
http://localhost/mathService.php  ——–>访问该url时才在服务器端发布hessian.
http://localhost/mathClient.php  ———>客户端
其中,涉及三个文件:
Math.php

 代码如下 复制代码
<?php
class Math{
 function add($n1,$n2) {      
   return $n1+$n2;  
 }  
 function sub($n1,$n2) {      
   return $n1-$n2;  
 }  
 function mul($n1,$n2) {      
   return $n1*$n2;  
 }  
 function div($n1,$n2) {      
   return $n1/$n2;  
 }
}
==========================
mathService.php
<?php
include_once ‘Math.php’;
include_once ‘hessianphp/HessianService.php’;
$service = new HessianService(new Math());
$service->handle();
==========================
mathClient.php
<?php
include_once ‘hessianphp/HessianClient.php’;
$testurl = ‘http://localhost/yii/testdrive/mathService.php’;
$proxy = new HessianClient($testurl);
try{
   echo $proxy->div(2,5);
} catch (Exception $ex){
  // …handle error
  echo $ex->getMessage();
}

另外,在运行的时候,需要打开php的CURL扩展:C:xamppphpphp.ini
extension=php_curl.dll

ssl安全验证


修改hessianphp包中的HessianTransport.php文件中的51行$curlOptions数组,增加CURLOPT_USERPWD => “SSL验证的用户名:密码”和CURLOPT_SSL_VERIFYPEER =>FALSE,CURLOPT_SSL_VERIFYHOST=>FALSE三项。

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • Photoshop枪战电影海报图片制作教程

    Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
  • js实现上传图片及时预览

    这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23
  • python opencv通过4坐标剪裁图片

    图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
  • 使用PHP下载CSS文件中的图片的代码

    共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
  • DWVA上传漏洞挖掘的测试例子

    DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞...2016-11-25
  • PHP swfupload图片上传的实例代码

    PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • C#中图片旋转和翻转(RotateFlipType)用法分析

    这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25