php判断图片格式各种方法总结

 更新时间:2016年11月25日 15:45  点击:2121
在php文件上传时我们都会要用到判断文件类型,下面我来介绍几种常用见判断文件类型格式的实例。

php中如何判断图片格式,下面给出一种较为简便的方法:

第一种思想方法就是把图片路径当作字符串来处理,那么判断图片格式的也就是变成了查找.号的字符串

 代码如下 复制代码

$file= "test.jpg";

$filetype= strtolower(strrchr($file,"."));

$arrtype = array(".jpeg",".bmp",".gif",".jpg");

if(!in_array($filetype,$arrtype))
{
echo '不符合格式';

exit;

}

getimagesize获取图片大小格式的方式,这个不是gd类库函数这个方法很经典,不仅可以用来判断图片格式还可以获得图片长宽信息

一个示例如下:

 代码如下 复制代码
$array = getimagesize(“images/flower_1.jpg”);
print_r($array);

该函数的返回值是一个数组,内容大致如下:

 代码如下 复制代码
Array
(
    [0] => 350
    [1] => 318
    [2] => 2
    [3] => width=”350″ height=”318″
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)
在php中数组排序一直是一个大家论证的话题,下面我来给各位朋友详细介绍关于在php中二维数组排序问题,有需要了解的数组排序的朋友可参考。

根据某个键值对二维数组进行排序是个常见问题,这里总结一个函数,可同时对两个键值分别排序,当然想要更多的话就自行解决吧。


但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了:


实例一,

 代码如下 复制代码


$arr = array(
array(
'sort' => 3,
'a' => 'a',
'b' => 'b'
),
array(
'sort' => 5,
'a' => 'a',
'b' => 'b'
),
array(
'sort' => 1,
'a' => 'a',
'b' => 'b'
)
);


这样array_multisort()不不能生效了,

我们可以对函数进行升级一下,根据指定键值进行排序

 代码如下 复制代码

function array_sort($arr,$key1,$sort1='asc',$key2='',$sort2='asc'){
    if (!is_array($arr)){
        return $arr;
    }
    foreach($arr AS $key => $row){
        $temp[$key] = $row[$key1];
    }
    $sort1 = $sort1 == 'asc' ? SORT_ASC : SORT_DESC;
    if(!$key2){
        array_multisort($temp, $sort1,$arr);
    } else {
        foreach($arr AS $key => $row){
            $temp2[$key] = $row[$key2];
        }
        $sort2 = $sort2 == 'asc' ? SORT_ASC : SORT_DESC;
        array_multisort($temp, $sort1,$temp2,$sort2,$arr);
    }
    return $arr;
}


实例二

 代码如下 复制代码


function array_sort($arr,$keys,$type='asc'){
 $keysvalue = $new_array = array();
 foreach ($arr as $k=>$v){
  $keysvalue[$k] = $v[$keys];
 }
 if($type == 'asc'){
  asort($keysvalue);
 }else{
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach ($keysvalue as $k=>$v){
  $new_array[$k] = $arr[$k];
 }
 return $new_array;
}

 

$array = array(
 array('name'=>'手机','brand'=>'诺基亚','price'=>1050),
 array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300),
 array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100),
 array('name'=>'跑步机','brand'=>'三和松石','price'=>4900),
 array('name'=>'手表','brand'=>'卡西欧','price'=>960),
 array('name'=>'液晶电视','brand'=>'索尼','price'=>6299),
 array('name'=>'激光打印机','brand'=>'惠普','price'=>1200)
);

$ShoppingList = array_sort($array,'price');
print_r($ShoppingList);

面是对$array这个二维数组按照'price'从低到高的排序。

本文章来给大家介绍一下在php中 ->与 ==>符号的用法与区别,有需要了解的朋友可尝试参考。

“->”(减号、右尖括号)

用于类中,访问类里的函数或对象,比如:

 代码如下 复制代码
<?php
class Test {
function do_test() { echo "Doing foo."; } }
$bar = new Test; $bar->do_test();
?>

"=>"(等号、右尖括号)

数组中给值赋值,比如:

 代码如下 复制代码
$arr=array("one" =>("1"=>10, "2"=>20), "two"=>2);

那么$arr["one"]["1"]=10;

‘->’与C++类似,用以指向对象内部结构或方法;
‘=>’是PHP数组带索引元素定义的一种方式。

=> 键值对,左边是键,右边是值(类似 json 的 key:val )

本文章来给大家介绍在利用php统计天数或两天之间的数据时一些小问题,下面我来给大家详细举例说明。

按N天分隔时间, 求出每一个时间段的开始和结束. 例如按7天分隔里头, 求当前时间所处的区间的开始和结束. 要注意时区!

注意, 不要简单地对时间戳取模, 而是要对时间戳与开始时间(1970-01-01)的距离进行取模.

 代码如下 复制代码

<?
$step = 7;
$zerotime = strtotime('1970-01-01'); // 不一定是0!

$span = ($time - $zerotime) % ($step * 86400);
$stime = $time - $span;
$etime = $stime + ($step * 86400) - 1;

$sdate = date("Y-m-d H:i:s", $stime);
$edate = date("Y-m-d H:i:s", $etime);
?>

注意: Asia/Chongqing 时区, php 5.2.14

 

 代码如下 复制代码
strtotime('1980-5-1 01:00:00') - strtotime('1980-5-1 00:00:00'); // 输出 0!
在php中静态变量与其它变量 明确区别的,下面我来给各位介绍 static 静态变量和属性方法及静态变量的引用与静态函数的用法,各位有需要了解的同学可参考。

变量与其它变量 明确区别的,下面我来给各位介绍 static 静态变量和属性方法及静态变量的引用与静态函数的用法,各位有需要了解的同学可参考。

静态变量

变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:

例子 7-4. 演示需要静态变量的例子

 代码如下 复制代码
<?php
function Test ()
{
$a = 0;
echo $a;
$a++;
}
?> 
 

本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0"。将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:

例子 7-5. 使用静态变量的例子

 代码如下 复制代码
<?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
?> 

 

现在,每次调用 Test() 函数都会输出 $a 的值并加一。

静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:

例子 7-6. 静态变量与递归函数

 代码如下 复制代码

<?php
function Test()
{
static $count = 0;

$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count--;
}
?>

 
 

注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。

例子 7-7. 声明静态变量

 代码如下 复制代码

<?php
function foo(){
static $int = 0; // correct
static $int = 1+2; // wrong  (as it is an expression)
static $int = sqrt(121); // wrong  (as it is an expression too)

$int++;
echo $int;
}
?>

 
 

全局和静态变量的引用

在 Zend 引擎 1 代,驱动了 PHP4,对于变量的 static 和 global 定义是以 references 的方式实现的。例如,在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。这有可能导致预料之外的行为,如以下例子所演示的:

 代码如下 复制代码


<?php
function test_global_ref() {
global $obj;
$obj = &new stdclass;
}

function test_global_noref() {
global $obj;
$obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>
 

执行以上例子会导致如下输出:

 代码如下 复制代码

NULL
object(stdClass)(0) {
}

类似的行为也适用于 static 语句。引用并不是静态地存储的:

 

 代码如下 复制代码

<?php
function &get_instance_ref() {
static $obj;

echo "Static object: ";
var_dump($obj);
if (!isset($obj)) {
// 将一个引用赋值给静态变量
$obj = &new stdclass;
}
$obj->property++;
return $obj;
}

function &get_instance_noref() {
static $obj;

echo "Static object: ";
var_dump($obj);
if (!isset($obj)) {
// 将一个对象赋值给静态变量
$obj = new stdclass;
}
$obj->property++;
return $obj;
}

$obj1 = get_instance_ref();
$still_obj1 = get_instance_ref();
echo "n";
$obj2 = get_instance_noref();
$still_obj2 = get_instance_noref();
?>

 

执行以上例子会导致如下输出:

 代码如下 复制代码

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)(1) {
  ["property"]=>
  int(1)
}

上例演示了当把一个引用赋值给一个静态变量时,第二次调用 &get_instance_ref() 函数时其值并没有被记住。

注:
1.函数外部声明静态变量意义不大,函数内部声明静态变量受限于作用域,函数外部不能修改函数内部静态变量。
2.引用变量,也是变量,只不过它的值是变量的内存地址。

php保留字 global和static

 代码如下 复制代码
<?php
$i = $j = 8;
function global_var() {
   global $j, $b;
   $c = $j = $b = $i = 4;
}
global_var();
echo "i:$i, j:$j b:$b c:$c n"; //i:8, j:4 b:4 c:
?>

函数外和内都有变量$i,但是他们二个是完全不同的变量。函数外的$i是全局变量,该内存空间直到脚本运行结束后才会被释放。函数内的$i是局部变量,程序流经过函数的时候,初始化,退出函数的时候,内存被系统回收,再次调用函数,则再次分配内存空间和回收内存空间。二次分配的内存空间有可能是同一内存地址,也有可能不能同一内存地址。
与$i不同的是$j,通过关键字global将局部变量”转为”全局变量。当调用函数global_var()的时候,并不会重新给$j分配内存空间。同样的,可以在函数外打印$b,却不能打印$c是因为$b是全局变量,不会被销毁。而$c则不能打印,$c已经不存在了,在退出函数就给销毁了。

 代码如下 复制代码
<?php
$a = 2;
static $b = 2;
static $c = 3;
function global_var() {
    static $i, $c;
    global $j, $a;
    $c = $a = $b = $i = $j = 4;
}
global_var();
echo "a:$a b:$b c:$c i:$i j:$j"; //a:4 b:2 c:3 i: j:4
?>

首先,我们看函数外的$b和$c,即是全局变量又是static变量。这里static修饰没有太大的意义,因为他们都存放在数据段(data-segment),直到脚本运行完了之后才会被回收。然后,我们再看函数里面的$i和$c,函数调用后,$i和$c其实都没有被回收,但是$i输出是NULL和$c输出是3,这是因为他们的作用域是函数内部,不是函数外部,也就是说$i和$c在函数外是不可见的。函数内static变量的意义就在于此:仅函数内部可见且不会被销毁。也就是说,保证函退出函数,变量也不会被回收,但又不会被其它函数修改。(注:函数外和函数内的$c是二个不同的变量)

 代码如下 复制代码
<?php
function global_var() {
   static $i;
   ++$j;
   ++$i;
   echo "j:$j i:$i n";
}
global_var(); //j:1 i:1 
global_var();  //j:1 i:2
global_var();  //j:1 i:3
?>

上例中,变量$j一直都是1,而$i每调用一次就累加1。这是因为,局部变量存放在堆段,每次退出函数时都会被回收。而$i存放在存放在数据段(data-segment),直到程序执行完毕才会被回收。我们平常说的static变量,如果没有特别指明,都说的是函数内部的static变量。

引用函数与static变量

既然static变量要直到脚本执行结束,才会被销毁。那么,有没有办法访问该变量的值呢?我们来看看下面的示例:

 代码如下 复制代码
<?php
get_local_static_var();
$ptr = &get_local_static_var();
get_local_static_var();
++$ptr;
get_local_static_var();
what_i($ptr);
get_local_static_var();  //??
what_p($ptr);
get_local_static_var();  //??
 
function &get_local_static_var() {
    static $i;
    ++$i;
    echo "i:$i n";
    return $i;
}
 
function what_i($ptr) {
   $i = &get_local_static_var();
   ++$i;
   ++$ptr;
}
 
function what_p(&$ptr) {
   $i = &get_local_static_var();
   ++$i;
   ++$ptr;
}
?>

二个凝问号处,分别输出是8和12。这就说明了只要变量没有被销毁,还是可以被访问。我们可以通过引用函数将static变量的地址返回其它函数。其它函数则可通过static变量的地址访问并且修改它的值。
上例第一处??,为什么是8,而不是9。这是因为what_i($ptr)函数,要求参数是按值传递,即此处的$ptr实参值是5,且参数$ptr和全局变量$ptr是二个不同的变量。第二处??的值是12,为什么不是11的道理亦是如此。what_p(&$ptr)函数,要求参数是按引用传递,即此处的$ptr是指向static变量$i的地址,需要注意的是参数$ptr和全局变量$ptr也是二个不同的变量,只不过他们都指向同一个地方。

[!--infotagslink--]

相关文章

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

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • C#从数据库读取图片并保存的两种方法

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

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

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

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • JavaScript判断浏览器及其版本信息

    本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • Mysql select语句设置默认值的方法

    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
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • 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 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • 一个奇葩的最短的 IE 版本判断JS脚本

    使用 conditional comment 来判断 IE 的版本。嗯,是早早有人提出,但没有认真看代码。昨天刚好在看 CSS3 PIE 的时候看到,觉得是不是不靠谱。今天看到 Paul Irish 也提起,那么,推荐一下吧。这是作者博客上写的:复制代码 代码...2014-05-31