如何在PHP中开启GD库支持详解

 更新时间:2016年11月25日 15:03  点击:2154
开启GD库是php中一个重要的参数,常用来处理图像,像图片的任何处理都需要GD库的支持,下面我来介绍各种系统中GD库的开启方法与命令,大家可参考。

 

Windows下开启PHP的GD库支持

找到php.ini,打开内容,找到:

;extension=php_gd2.dll

把最前面的分号“;”去掉,再保存即可,如果本来就没有分号,那就是已经开启了。

Linux下开启PHP的GD库支持

#开启GD库支持有以下几种方法
##检测GD库是否安装命令
 php5 -m | grep -i gd
 或者
 php -i | grep -i --color gd
##如未安装GD库,则为服务器安装,方法如下
### 如果是源码安装,则加入参数
 --with-gd
### 如果是debian系的linux系统,用apt-get安装,如下
 apt-get install php5-gd
### 如果是CentOS系的系统,用yum安装,如下
 yum install php-gd
### 如果是suse系的linux系统,用yast安装,如下
 yast -i php5_gd
### 如果嫌这个世界不够蛋疼呢,可以在原先编译PHP不支持GD的情况下附加
 先下zlib源码,libpng源码,gd源码
 解压后到源码目录
 zlib目录
 ./configure --prefix=/usr/local/zlib
 make ; make install
 make clean
 libpng目录
 cp scripts/makefile.linux ./makefile
 ./configure --prefix=/usr/local/libpng
 make ; make install
 make clean
 gd目录
 ./configure --prefix=/usr/local/libgd --with-png=/usr/local/libpng
 make ; make install
 make clean
 最后在php.ini中,搜到[gd]后,在下面加一行
 extension=/usr/local/libgdgd.so
 然后重启php服务,如果不行,试试reboot

 好了,不过最后提醒一下,要知道这个世界很多意外的,源码安装,只添加gd库这一个情况下,PHP版本和库的版本各异

,所以:
 - 不保证这么付出了这么多后有回报
 - 不保证能够成功加载gd.so
 - 不保证不怀孕

 所以如果是源码安装,最好还是在编译PHP的时候加参数--with-gd


GD库函数

GetImageSize
作用:取得图片的大小[即长与宽]  用法:array GetImageSize(string filename, array [imageinfo]);

 ImageArc
作用:画弧线 用法:int ImageArc(int im, int cx, int cy, int w, int h, int s, int e, int col);

 ImageChar
作用:写出横向字符 用法:int ImageChar(int im, int font, int x, int y, string c, int col);

 ImageCharUp
作用:写出竖式字符  用法:int ImageCharup(int im, int font, int x, int y, string c, int col);

ImageColorAllocate
作用:匹配颜色 用法:int ImageColorAllocate(int im, int red, int green, int blue);
 
ImageColorTransparent
作用:指定透明背景色  用法:int ImageColorTransparent(int im, int [col]);
 
ImageCopyResized
作用:复制新图并调整大小 用法:int ImageCopyResized(int dst_im, int src_im, int dstX, int dstY, int srcX,

int srcY, int dstW, int dstH, int srcW, int srcH);
 
ImageCreate
作用:建立新图  用法:int ImageCreate(int x_size, int y_size);
 
ImageDashedLine
作用:绘虚线 用法:int ImageDashedLine(int im, int x1, int y1, int x2, int y2, int col);
 ImageDestroy 作用:结束图形 用法解释:int ImageDestroy(int im);
 
ImageFill
作用:图形着色  用法:int ImageFill(int im, int x, int y, int col);

ImageFilledPolygon作用:多边形区域着色  用法:int ImageFilledPolygon(int im, array points, int num_points,

int col);
 
ImageFilledRectangle作用:矩形区域着色 用法:int ImageFilledRectangle(int im, int x1, int y1, int x2, int

y2, int col);
 
ImageFillToBorder作用:指定颜色区域内着色  用法:int ImageFillToBorder(int im, int x, int y, int border,

int col);
 
ImageFontHeight
作用:取得字型的高度  用法:int ImageFontHeight(int font);
 
ImageFontWidth作用:取得字型的宽度  用法:int ImageFontWidth(int font);
 
ImageInterlace作用:使用交错式显示与否  用法:int ImageInterlace(int im, int [interlace]);
 
ImageLine作用:绘实线  用法:int ImageLine(int im, int x1, int y1, int x2, int y2, int col);
 
ImageLoadFont作用:载入点阵字型  用法:int ImageLoadFont(string file);
 
ImagePolygon作用:绘多边形  用法:int ImagePolygon(int im, array points, int num_points, int col);
 
 ImageRectangle作用:绘矩形  用法:int ImageRectangle(int im, int x1, int y1, int x2, int y2, int col);
 
ImageSetPixel作用:绘点  用法:int ImageSetPixel(int im, int x, int y, int col); ImageString 作用:绘横式

字符串  用法:int ImageString(int im, int font, int x, int y, string s, int col);
 
ImageStringUp作用:绘直式字符串  用法:int ImageStringUp(int im, int font, int x, int y, string s, int

col);
 
ImageSX
作用:取得图片的宽度 用法:int ImageSX(int im);
 
ImageSY
作用:取得图片的高度  用法:int ImageSY(int im);
 
ImageTTFBBox
作用:计算 TTF 文字所占区域  用法:array ImageTTFBBox(int size, int angle, string fontfile, string text);
 
ImageTTFText作用:写 TTF 文字到图中  用法:array ImageTTFText(int im, int size, int angle, int x, int y,

int col, string fontfile, string text); ImageColorAt 作用:取得图中指定点颜色的索引值  用法:int

ImageColorAt(int im, int x, int y);
 
ImageColorClosest
作用:计算色表中与指定颜色最接近者  用法:int ImageColorClosest(int im, int red, int green, int blue);
 
ImageColorExact
作用:计算色表上指定颜色索引值  用法:int ImageColorExact(int im, int red, int green, int blue);
 
ImageColorResolve
作用:计算色表上指定或最接近颜色的索引值  用法:int ImageColorResolve(int im, int red, int green, int

blue);

ImageColorSet
作用:设定色表上指定索引的颜色  用法:boolean ImageColorSet(int im, int index, int red, int green, int

blue);  ImageColorsForIndex 作用:取得色表上指定索引的颜色  用法:array ImageColorsForIndex(int im, int

index);
 
ImageColorsTotal
作用:计算图的颜色数  用法:int ImageColorsTotal(int im); ImagePSLoadFont 作用:载入 PostScript 字型  用法

:int ImagePSLoadFont(string filename);
 
ImagePSFreeFont
作用:卸下 PostScript 字型  用法:void ImagePSFreeFont(int fontindex);
 
ImagePSEncodeFont
作用:PostScript 字型转成向量字  用法:int ImagePSEncodeFont(string encodingfile);
 
 ImagePSText作用:写 PostScript 文字到图中  用法:array ImagePSText(int image, string text, int font, int

size, int foreground, int background, int x, int y, int space, int tightness, float angle, int

antialias_steps);
 
 ImagePSBBox作用:计算 PostScript 文字所占区域  用法: array ImagePSBBox(string text, int font, int size,

int space, int width, float angle);
 
ImageCreateFromPNG作用:取出 PNG 图型  用法:int ImageCreateFromPng(string filename);
 
 ImagePNG作用:建立 PNG 图型  用法:int ImagePng(int im, string [filename]);
 
ImageCreateFromGIF作用:取出 GIF 图型  用法:int ImageCreateFromGif(string filename);
 
 ImageGIF作用:建立 GIF 图型 用法:int ImageGif(int im, string [filename]);

在php中遍历数组有很多方法,foreach、each、list、for等等遍历数组语句,但是在这几种中foreach遍历数组性能最好,所以我也常用,下面我来介绍入门者foreach遍历数组实例。


语法

foreach ( array_expression as $key => $value ) statement

实例1:

 代码如下 复制代码

<?php
 $color=array('white' => '白色' ,
       'black' => '黑色' ,
       'red' => '红色' ,
       'green' => '绿色',
       'yellow' => '黄色');
 foreach( $color as $c) echo $c ."<br>";   
?>

通过foreach不仅可以获得元素的值也可以获得键名,结构形式:

 代码如下 复制代码

 

foreach( $color as $c) echo $c ."<br>";

foreach( $color as $key => $c) echo $key.$c ."<br>";


这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以 是下标值,也可以是字符串。比如book[0]=1中的"0",book[id]="001"中的"id".

下面来仔细探讨下foreach使用中的一些问题。

普通情况下,foreach($arr as $value)中的$arr和$value是拷贝,不受外部影响的,即

 代码如下 复制代码

$arr = array(0,1,2,3,4,5);

foreach($arr as $value){
 $arr = array();
 echo $value;
}

// 12345

但如果$arr是引用的话,情况则不同了,我们用代码来说明问题

 代码如下 复制代码

$arr = array(0,1,2,3,4,5);
$arr = &$arr;

foreach($arr as $value){
 $arr = array();
 echo $value;
}

// 0

这是因为循环用的$arr是直接指向原数据的,而不是copy了一份。

如果$value是引用,而$arr不是引用,其结果是一样的,同样$value是指向原数据的而不是copy。

 代码如下 复制代码


$arr = array(0,1,2,3,4,5);

foreach($arr as &$value){
 $arr = array();
 echo $value;
}

// 结果是: 0

还有一种情况比较特殊,即是如果定义了$arr为全局变量的话,$arr也会变成引用:

 代码如下 复制代码

global $arr;
$arr = array(0,1,2,3,4,5);

foreach($arr as $value){
 $arr = array();
 echo $value;
}

// 结果是: 0

如果两次循环一个数组,一定不能这样写

 代码如下 复制代码

foreach($arr as &$value){}
foreach($arr as $value){}

这会导致第二次的循环的结果不正确(可能是php的bug吧)。可以用以下几种来代替

 代码如下 复制代码

//solution 1
foreach($arr as &$value){}
unset($value);
foreach($arr as $value){}
//solution 2
foreach($arr as &$value){}
foreach($arr as &$value){}
//solution 3
foreach($arr as &$value){}
$arr2 = $arr;
foreach($arr2 as $value){}

防止foreach出现未定义情况,尽量这样来写foreach

 代码如下 复制代码

foreach((array)$arr as $value) {}

在php中我们要获取浏览器信息可以直接使用$userAgent = strtolower($_SERVER[\"HTTP_USER_AGENT\"]);然后再判断一下就可以判断用户浏览器版本或型号了,希望下面的实例对大家有所帮助。

下面笔者为各位介绍一款如何判断用户浏览器是不是IE6的php函数,如果是返回“真”,否则返回“假”。

 代码如下 复制代码

function isIE6() {
       $userAgent = strtolower($_SERVER["HTTP_USER_AGENT"]);
       //从HTTP_USER_AGENT字段中获取用户浏览器信息
       if (ereg("msie 6", $userAgent) || ereg("msie 5", $userAgent)) {
               return true;
       }
       return false;
}

完整点的实例

 代码如下 复制代码

function userBrowser(){ 
       $user_OSagent = $_SERVER['HTTP_USER_AGENT'];  
    
        if(strpos($user_OSagent,"Maxthon") && strpos($user_OSagent,"MSIE")) {  
           $visitor_browser ="Maxthon(Microsoft IE)";  
       }elseif(strpos($user_OSagent,"Maxthon 2.0")) {  
            $visitor_browser ="Maxthon 2.0";  
       }elseif(strpos($user_OSagent,"Maxthon")) {  
           $visitor_browser ="Maxthon";  
        }elseif(strpos($user_OSagent,"MSIE 9.0")) {  
           $visitor_browser ="MSIE 9.0";  
       }elseif(strpos($user_OSagent,"MSIE 8.0")) {  
            $visitor_browser ="MSIE 8.0";  
       }elseif(strpos($user_OSagent,"MSIE 7.0")) {  
            $visitor_browser ="MSIE 7.0";  
        }elseif(strpos($user_OSagent,"MSIE 6.0")) {  
           $visitor_browser ="MSIE 6.0";  
        } elseif(strpos($user_OSagent,"MSIE 5.5")) {  
            $visitor_browser ="MSIE 5.5";  
        } elseif(strpos($user_OSagent,"MSIE 5.0")) {  
            $visitor_browser ="MSIE 5.0";  
        } elseif(strpos($user_OSagent,"MSIE 4.01")) {  
          $visitor_browser ="MSIE 4.01";  
        }elseif(strpos($user_OSagent,"MSIE")) {  
           $visitor_browser ="MSIE 较高版本";  
      }elseif(strpos($user_OSagent,"NetCaptor")) {  
            $visitor_browser ="NetCaptor";  
        } elseif(strpos($user_OSagent,"Netscape")) {  
           $visitor_browser ="Netscape";  
      }elseif(strpos($user_OSagent,"Chrome")) {  
           $visitor_browser ="Chrome";  
        } elseif(strpos($user_OSagent,"Lynx")) {  
          $visitor_browser ="Lynx";  
       } elseif(strpos($user_OSagent,"Opera")) {  
           $visitor_browser ="Opera";  
        } elseif(strpos($user_OSagent,"Konqueror")) {  
            $visitor_browser ="Konqueror";  
        } elseif(strpos($user_OSagent,"Mozilla/5.0")) {  
            $visitor_browser ="Mozilla";  
        } elseif(strpos($user_OSagent,"Firefox")) {  
           $visitor_browser ="Firefox";  
       }elseif(strpos($user_OSagent,"U")) {  
            $visitor_browser ="Firefox";  
       } else {  
           $visitor_browser ="其它";  
        }  
           return $visitor_browser;  
       } 

在php中我们要登录一般我们都是结合mysql session这两个结合实现的,下面我举一个例子来介绍php+mysql+session登录实例程序代码,有需要学习的朋友可参考。

实例

 代码如下 复制代码

<?php
// 为php和mysql剔除不安全html代码。
function safestrip($string){
   $string = strip_tags($string);
   $string = mysql_real_escape_string($string);
   return $string;
}
 
//登录信息显示函数
function messages() {
 $message = '';
 if($_SESSION['success'] != '') {
   $message = '<span id="message">'
   .$_SESSION['success'].'</span>';
   $_SESSION['success'] = '';
 }
 if($_SESSION['error'] != '') {
   $message = '<span id="message">'
   .$_SESSION['error'].'</span>';
   $_SESSION['error'] = '';
 }
 return $message;
}
 
// 用户登录函数
function login($username, $password){
 
//过滤用户输入的用户名和密码
$user = safestrip($username);
$pass = safestrip($password);
 
//将密码转换为md5格式
$pass = md5($pass);
 
 // 查询数据库中用户名和密码是否匹配
 $sql =
 mysql_query("SELECT * FROM user_table WHERE username = '$user'
 AND password = '$pass'")or die(mysql_error());
 
 //如果=1则表示认证成功
 if (mysql_num_rows($sql) == 1) {
 
             //开始记录在session中
             $_SESSION['authorized'] = true;
 
             // 重新加载页面
            $_SESSION['success'] = '登录成功';
            header('Location: ./index.php');
            exit;
 
 } else {
       // 登录失败记录在session中
       $_SESSION['error'] = '非常抱歉,您输入的用户名或密码有误';
 }
}
?>

原理很简单,用户提交用户名与密码然后我们经过安全处理,然后再到mysql去精确比较如果相同就登录成功了。

PHP 可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为 NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间

php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器+1;当变量引用撤掉后,计数器-1;当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

“引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露;

php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露。

 

php变量存在一个叫"zval"的变量容器中,"zval"变量容器包括含变量的类型和值,还包括额外的两个字节信息,分别是“is_ref”表示变量是否属于引用,“refcount”指向这个zval变量容器的变量个数。

如果你安装了xdebug,就可以用xdebug_debug_zval()显示“zval”的信息了。如下:

<?php
 $str = "www.111cn.net";
 xdebug_debug_zval('str');


结果:

str:

(refcount=1, is_ref=0),

string 'phpddt.com' (length=10)

只有当变量容器在”refcount“变成0时就被销毁.当你unset()一个变量时,想要的“zval”中refcount就会减1,再来说说前几天遇到的unset引用问题:

 

 代码如下 复制代码

<?php
 $a = "aaa";
 $b = & $a;
 unset($a);
 //echo $b; //这里依然会输出aaa,用xdebug_debug_zval打印你就知道为什么了
 xdebug_debug_zval("b");

 

结果:

b:

(refcount=1, is_ref=0),string 'aaa' (length=3)

继续说引用计数器问题,对于array和object符合类型情况又不一样了:

 

 代码如下 复制代码

<?php
 
 $arr = array( 'a' => 'aaa', 'b' => "bbb" );
 xdebug_debug_zval( 'arr' );
 $arr['aaa'] = $arr['a'];
 xdebug_debug_zval( 'arr' );
?>


结果:

arr:

(refcount=1, is_ref=0),

array

  'a' => (refcount=1, is_ref=0),string 'aaa' (length=3)

  'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)

arr:

(refcount=1, is_ref=0),

array

  'a' => (refcount=2, is_ref=0),string 'aaa' (length=3)

  'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)

  'aaa' => (refcount=2, is_ref=0),string 'aaa' (length=3)


可以看到看到原有的数组元素和新添加的数组元素关联到同一个"refcount"2的zval变量容器.这里我也只是起到抛砖引玉的作用。

上面我们只是简单的使用了unset,null,mysql_close,__destruct,xdebug_debug_zval 接着往下看


查看内存是否泄露

看是否有该释放的内存没有被释放,可以简单的通过 调用  memory_get_usage  函数查看内存使用情况来判断;memory_get_usage 函数返回的内存使用数据据说不是很准确,可以使用  php 的 xdebug 扩展来获得更准确翔实的内存使用情况。

 代码如下 复制代码

class A{
    private $b;
    function __construct(){
        $this->b = new B($this);
    }
    function __destruct(){
        //echo "A destructn";
    }
}

class B{
    private $a;
    function __construct($a){
        $this->a = $a;
    }
    function __destruct(){
        //echo "B descturctn";
    }
}

for($i=0;;$i++){
    $a = new A();
    if($i%1000 == 0){
        echo memory_get_usage()."n";
    }

}

}

上面就构造了一个会产生环状引用的例子;每次创建一个A对象的实例a,a就创建一个B对象的实例b,同时让b引用a ;这样,每个A对象永远被一个B引用,而每个B对象同时被一个对象A引用;引用环就这样产生了。

在php5.2的环境下执行这段代码,会发现内存使用在单调上涨,也没有A和B的析构函数被执行后输出的“A/B desctruct”信息;直到内存耗尽,输出“PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 40 bytes)”。

在php5.3的环境下执行这段代码,则发现内存使用在上跳下窜,但是永远没有超过一个限额;程序也会输出大量的“A/B desctruct”,这说明析构函数被调用了。

我的同事的程序中,就存在这种引用的环路,而他的脚本,实在php5.2.3下执行的。simple_html_dom工具中,有两个类,分别是simple_html_dom和simple_html_dom_node,前者中有一个数组成员变量nodes,数组中每个元素都是一个simple_html_dom_node对象;而每个simple_html_dom_node对象都有一个成员变量dom,该dom的值就是前面的simple_html_dom对象——这样就形成了一个漂亮的引用环,导致了内存泄露。解决的办法也很简单,就是simple_html_dom对象在使用完毕时,主动调用其clear函数,清空其成员变量nodes,环就被打破了,内存泄露也就不会发生了。

 


3.其他:

1)垃圾回收的时机


Php中,引用计数为0,则内存立刻释放;也就是说,不存在环状引用的变量,离开变量的作用域,内存被立刻释放。

环状引用检测则是在满足一定条件下触发,所以在上面的例子中,会看到使用的内存有大幅度的波动;也可以通过 gc_collect_cycles 函数来主动进行环状引用检测。

2) &符号的影响

显式引用一个变量,会增加该内存的引用计数:

$a = "something";

$b = &$a;

此时unset($a), 但是仍有$b指向该内存区域的引用,内存不会释放。

3)unset函数的影响

unset只是断开一个变量到一块内存区域的连接,同时将该内存区域的引用计数-1;在上面的例子中,循环体内部,$a=new A(); unset($a);并不会将$a的引用计数减到零;

4)= null 操作的影响;

$a = null 是直接将$a 指向的数据结构置空,同时将其引用计数归0。

5)脚本执行结束的影响

脚本执行结束,该脚本中使用的所有内存都会被释放,不论是否有引用环。

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • 如何开启mysql中的严格模式

    很多集成的PHP环境(PHPnow WAMP Appserv等)自带的MySQL貌似都没有开启MySQL的严格模式,何为MySQL的严格模式,简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数...2013-10-04
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • C#开启线程的四种示例

    这篇文章主要介绍了C#开启线程的四种方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-10-12
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • apache开启gzip详解教程

    今天在用百度工具检测时发,发现有个提示如下 原来可以开启gzip啊,因为我的是apache所以和iis不同,经过网站搜索开启方法如下 一,找到你的httpd.conf文件,打开找到如下 ...2016-01-28
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • 谈谈PHP中相对路径的问题与绝对路径的使用

    经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
  • php有序列表或数组中删除指定的值的实现代码

    这篇文章主要介绍了php有序列表或数组中删除指定的值的实现代码,删除给定的值之后,得到一个新的有序列表,长度-1,下面是具体的实现方法...2021-08-22