PHP基于yii框架实现生成ICO图标


Posted in PHP onNovember 13, 2015

1,phpthumb_ico 是生成ICO图标的类,源码如下

class phpthumb_ico {
 
  function phpthumb_ico() {
    return true;
  }
 
 
  function GD2ICOstring(&$gd_image_array) {
    foreach ($gd_image_array as $key => $gd_image) {
 
      $ImageWidths[$key] = ImageSX($gd_image);
      $ImageHeights[$key] = ImageSY($gd_image);
      $bpp[$key]     = ImageIsTrueColor($gd_image) ? 32 : 24;
      $totalcolors[$key] = ImageColorsTotal($gd_image);
 
      $icXOR[$key] = '';
      for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {
        for ($x = 0; $x < $ImageWidths[$key]; $x++) {
          $argb = $this->GetPixelColor($gd_image, $x, $y);
          $a = round(255 * ((127 - $argb['alpha']) / 127));
          $r = $argb['red'];
          $g = $argb['green'];
          $b = $argb['blue'];
 
          if ($bpp[$key] == 32) {
            $icXOR[$key] .= chr($b).chr($g).chr($r).chr($a);
          } elseif ($bpp[$key] == 24) {
            $icXOR[$key] .= chr($b).chr($g).chr($r);
          }
 
          if ($a < 128) {
            @$icANDmask[$key][$y] .= '1';
          } else {
            @$icANDmask[$key][$y] .= '0';
          }
        }
        // mask bits are 32-bit aligned per scanline
        while (strlen($icANDmask[$key][$y]) % 32) {
          $icANDmask[$key][$y] .= '0';
        }
      }
      $icAND[$key] = '';
      foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
        for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
          $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
        }
      }
 
    }
 
    foreach ($gd_image_array as $key => $gd_image) {
      $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
 
      // BITMAPINFOHEADER - 40 bytes
      $BitmapInfoHeader[$key] = '';
      $BitmapInfoHeader[$key] .= "\x28\x00\x00\x00";               // DWORD biSize;
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4);   // LONG  biWidth;
      // The biHeight member specifies the combined
      // height of the XOR and AND masks.
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG  biHeight;
      $BitmapInfoHeader[$key] .= "\x01\x00";                   // WORD  biPlanes;
        $BitmapInfoHeader[$key] .= chr($bpp[$key])."\x00";             // wBitCount;
      $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // DWORD biCompression;
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4);      // DWORD biSizeImage;
      $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // LONG  biXPelsPerMeter;
      $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // LONG  biYPelsPerMeter;
      $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // DWORD biClrUsed;
      $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // DWORD biClrImportant;
    }
 
 
    $icondata = "\x00\x00";                   // idReserved;  // Reserved (must be 0)
    $icondata .= "\x01\x00";                   // idType;    // Resource Type (1 for icons)
    $icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount;   // How many images?
 
    $dwImageOffset = 6 + (count($gd_image_array) * 16);
    foreach ($gd_image_array as $key => $gd_image) {
      // ICONDIRENTRY  idEntries[1]; // An entry for each image (idCount of 'em)
 
      $icondata .= chr($ImageWidths[$key]);           // bWidth;     // Width, in pixels, of the image
      $icondata .= chr($ImageHeights[$key]);          // bHeight;     // Height, in pixels, of the image
      $icondata .= chr($totalcolors[$key]);           // bColorCount;   // Number of colors in image (0 if >=8bpp)
      $icondata .= "\x00";                   // bReserved;    // Reserved ( must be 0)
 
      $icondata .= "\x01\x00";                 // wPlanes;     // Color Planes
      $icondata .= chr($bpp[$key])."\x00";           // wBitCount;    // Bits per pixel
 
      $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
      $icondata .= $this->LittleEndian2String($dwBytesInRes, 4);    // dwBytesInRes;  // How many bytes in this resource?
 
      $icondata .= $this->LittleEndian2String($dwImageOffset, 4);   // dwImageOffset;  // Where in the file is this image?
      $dwImageOffset += strlen($BitmapInfoHeader[$key]);
      $dwImageOffset += strlen($icXOR[$key]);
      $dwImageOffset += strlen($icAND[$key]);
    }
 
    foreach ($gd_image_array as $key => $gd_image) {
      $icondata .= $BitmapInfoHeader[$key];
      $icondata .= $icXOR[$key];
      $icondata .= $icAND[$key];
    }
 
    return $icondata;
  }
 
  function LittleEndian2String($number, $minbytes=1) {
    $intstring = '';
    while ($number > 0) {
      $intstring = $intstring.chr($number & 255);
      $number >>= 8;
    }
    return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
  }
 
  function GetPixelColor(&$img, $x, $y) {
    if (!is_resource($img)) {
      return false;
    }
    return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
  }
 
}

2,后台

引入类:

Yii::$enableIncludePath = false;
Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 );

解决生成黑色背景的问题

imagealphablending($resize_im, false);//不合并颜色,直接用$im图像颜色替换,包括透明色
imagesavealpha($resize_im, true);//不要丢了$resize_im图像的透明色
完整方法:

/**
   * icoMaker 在线生成ICO图标
   * @author flashalliance
   */
  public function actionIco() {
    $this->breadcrumbs=array_merge($this->breadcrumbs,array(
        'ICO图标制作'
    ));
    $output = "";
    $errors=array();
    if(isset($_GET['action'])&&$_GET['action'] == 'make'){
      if(isset($_FILES['upimage']['tmp_name']) && $_FILES['upimage']['tmp_name'] && is_uploaded_file($_FILES['upimage']['tmp_name'])){
        if($_FILES['upimage']['size']>204800){
          $errors[]="你上传的文件过大,最大不能超过200K。";
        }
        $fileext = array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png");
        if(!in_array($_FILES['upimage']['type'],$fileext)){
          $errors[]="你上传的文件格式不正确,仅支持 png, jpg, gif格式。";
        }
        if($im = @imagecreatefrompng($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromgif($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromjpeg($_FILES['upimage']['tmp_name'])){
          $imginfo = @getimagesize($_FILES['upimage']['tmp_name']);
          if(!is_array($imginfo)){
            $errors[]="图像格式错误!";
          }
          if(empty($errors)){
            switch($_POST['size']){
              case 1;
              $resize_im = @imagecreatetruecolor(16,16);
              $size = 16;
              break;
              case 2;
              $resize_im = @imagecreatetruecolor(32,32);
              $size = 32;
              break;
              case 3;
              $resize_im = @imagecreatetruecolor(48,48);
              $size = 48;
              break;
              default;
              $resize_im = @imagecreatetruecolor(32,32);
              $size = 32;
              break;
            }
 
            imagesavealpha($im, true);
            imagealphablending($resize_im, false);//不合并颜色,直接用$im图像颜色替换,包括透明色
            imagesavealpha($resize_im, true);//不要丢了$resize_im图像的透明色,解决生成黑色背景的问题
            imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]);
 
            Yii::$enableIncludePath = false;
            Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 );
            $icon = new phpthumb_ico();
            $gd_image_array = array($resize_im);
            $icon_data = $icon->GD2ICOstring($gd_image_array);
            $bas_path=dirname ( Yii::app ()->BasePath );
            $bas_new_path=$bas_path.'/upload/ico/';
            if(!is_dir($bas_new_path)){
              mkdir($bas_new_path, 0777, true);
            }
            $filePath=$bas_new_path. date("Ymdhis").uniqid(). rand(1,1000) . ".ico";
            if(file_put_contents($filePath, $icon_data)){
              $output = str_replace($bas_path,'',$filePath);
            }
          }
        }else{
          $errors[]="生成错误请重试!";
        }
      }
    }
    $this->render ( 'ico',array('output'=>$output,'errors'=>$errors));
  }

3,前台

<div class="col-md-12">
  <div class="form-horizontal panel panel-default margin-t-10 b-img">
    <div class="panel-heading">
      <div class="pull-left"><span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"></span>在线制作ICO图标</div>
      <div class="clearfix"></div>
    </div>
<?php
$form = $this->beginWidget ( 'CActiveForm', array (
    'id' => 'ico-form',
    'htmlOptions' => array (
        'id' => 'view_table',
        'class' => 'add-form padding-10',
        'enctype'=>'multipart/form-data'
    ),
    'action'=>'/tool/ico?action=make',
    'enableAjaxValidation' => false
) );
?>
    <div class="form-group">
        <label class="col-lg-2 control-label">上传文件</label>
        <div class="col-md-5">
          <div class="col-md-6">
            <input id="upimage" type="file" name="upimage" class="hidden">
            <input id="tmp_file" class="form-control" type="text">
          </div>
          <div class="col-md-6"><a class="btn btn-default" onclick="$('input[id=upimage]').click();">选择文件</a></div>
        </div>
    </div>
    <div class="form-group">
        <label class="col-lg-2 text-right">选择尺寸</label>
        <div class="col-lg-5 btn-group" data-toggle="buttons">
            <label class="btn btn-sm btn-default">
             <input type="radio" name="size" id="s1" value="1" checked="checked"> 16*16
            </label>
            <label class="btn btn-sm btn-default">
             <input type="radio" name="size" id="s2" value="2"> 32*32
            </label>
            <label class="btn btn-sm btn-default">
             <input type="radio" name="size" id="s3" value="3"> 48*48
            </label>
        </div>
    </div>
    <div class="form-group">
      <label class="col-lg-2 text-right">支持格式</label>
      <div class="col-lg-5">
       png,jpg,gif
      </div>
    </div>
    <div class="list_back">
      <input type="submit" value="生 成" class="btn btn-success">
    </div>
  </div>
<?php $this->endWidget(); ?>
<?php if(!empty($errors) or !empty($output)):?>
  <div class="form-horizontal panel panel-default margin-t-10 b-img">
    <div class="panel-heading margin-b-10">
      <div class="pull-left"><span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"></span>生成结果</div>
      <div class="clearfix"></div>
    </div>
    <?php if(!empty($errors)):?>
    <div class="form-group">
      <label class="col-lg-2 text-right">生成失败</label>
      <div class="col-lg-5">
      <?php foreach ($errors as $e):?>
      <?php echo $e;?><br>
      <?php endforeach;?>
      </div>
    </div>
    <?php endif;?>
    <?PHP if (!empty($output)):?>
    <?php
    $form = $this->beginWidget ( 'CActiveForm', array (
        'id' => 'ico-form',
        'htmlOptions' => array (
            'id' => 'view_table',
            'class' => 'add-form padding-10',
        ),
        'action'=>'/tool/icoDownload',
        'enableAjaxValidation' => false
    ) );
    ?>
    <?php echo CHtml::hiddenField('filePath',$output);?>
    <div class="form-group">
      <label class="col-lg-2 text-right">成功生成</label>
      <div class="col-lg-5">
        <img alt="在线制作ICO图标_favicon.ico" src="<?php echo $output;?>" class="margin-r-10">
        <input type="submit" value="立即下载" class="btn btn-sm btn-success margin-l-10">
      </div>
    </div>
    <?php $this->endWidget(); ?>
    <?php endif;?>
  </div>
<?php endif;?>
</div>
<!-- form -->

再给大家分享一个独立的类

phpthumb.ico.php

<?php 
////////////////////////////////////////////////////////////// 
/// phpThumb() by James Heinrich <info@silisoftware.com>  // 
//    available at http://phpthumb.sourceforge.net   /// 
////////////////////////////////////////////////////////////// 
///                             // 
// phpthumb.ico.php - .ICO output format functions     // 
//                             /// 
////////////////////////////////////////////////////////////// 
class phpthumb_ico { 
  function phpthumb_ico() { 
    return true; 
  } 
  function GD2ICOstring(&$gd_image_array) { 
    foreach ($gd_image_array as $key => $gd_image) { 
      $ImageWidths[$key] = ImageSX($gd_image); 
      $ImageHeights[$key] = ImageSY($gd_image); 
      $bpp[$key]     = ImageIsTrueColor($gd_image) ? 32 : 24; 
      $totalcolors[$key] = ImageColorsTotal($gd_image); 
      $icXOR[$key] = ''; 
      for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) { 
        for ($x = 0; $x < $ImageWidths[$key]; $x++) { 
          $argb = $this->GetPixelColor($gd_image, $x, $y); 
          $a = round(255 * ((127 - $argb['alpha']) / 127)); 
          $r = $argb['red']; 
          $g = $argb['green']; 
          $b = $argb['blue']; 
          if ($bpp[$key] == 32) { 
            $icXOR[$key] .= chr($b).chr($g).chr($r).chr($a); 
          } elseif ($bpp[$key] == 24) { 
            $icXOR[$key] .= chr($b).chr($g).chr($r); 
          } 
          if ($a < 128) { 
            @$icANDmask[$key][$y] .= '1'; 
          } else { 
            @$icANDmask[$key][$y] .= '0'; 
          } 
        } 
        // mask bits are 32-bit aligned per scanline 
        while (strlen($icANDmask[$key][$y]) % 32) { 
          $icANDmask[$key][$y] .= '0'; 
        } 
      } 
      $icAND[$key] = ''; 
      foreach ($icANDmask[$key] as $y => $scanlinemaskbits) { 
        for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) { 
          $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT))); 
        } 
      } 
    } 
    foreach ($gd_image_array as $key => $gd_image) { 
      $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8); 
      // BITMAPINFOHEADER - 40 bytes 
      $BitmapInfoHeader[$key] = ''; 
      $BitmapInfoHeader[$key] .= "/x28/x00/x00/x00";               // DWORD biSize; 
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4);   // LONG  biWidth; 
      // The biHeight member specifies the combined 
      // height of the XOR and AND masks. 
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG  biHeight; 
      $BitmapInfoHeader[$key] .= "/x01/x00";                   // WORD  biPlanes; 
        $BitmapInfoHeader[$key] .= chr($bpp[$key])."/x00";             // wBitCount; 
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biCompression; 
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4);      // DWORD biSizeImage; 
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // LONG  biXPelsPerMeter; 
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // LONG  biYPelsPerMeter; 
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biClrUsed; 
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biClrImportant; 
    } 
    $icondata = "/x00/x00";                   // idReserved;  // Reserved (must be 0) 
    $icondata .= "/x01/x00";                   // idType;    // Resource Type (1 for icons) 
    $icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount;   // How many images? 
    $dwImageOffset = 6 + (count($gd_image_array) * 16); 
    foreach ($gd_image_array as $key => $gd_image) { 
      // ICONDIRENTRY  idEntries[1]; // An entry for each image (idCount of 'em) 
      $icondata .= chr($ImageWidths[$key]);           // bWidth;     // Width, in pixels, of the image 
      $icondata .= chr($ImageHeights[$key]);          // bHeight;     // Height, in pixels, of the image 
      $icondata .= chr($totalcolors[$key]);           // bColorCount;   // Number of colors in image (0 if >=8bpp) 
      $icondata .= "/x00";                   // bReserved;    // Reserved ( must be 0) 
      $icondata .= "/x01/x00";                 // wPlanes;     // Color Planes 
      $icondata .= chr($bpp[$key])."/x00";           // wBitCount;    // Bits per pixel 
      $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]); 
      $icondata .= $this->LittleEndian2String($dwBytesInRes, 4);    // dwBytesInRes;  // How many bytes in this resource? 
      $icondata .= $this->LittleEndian2String($dwImageOffset, 4);   // dwImageOffset;  // Where in the file is this image? 
      $dwImageOffset += strlen($BitmapInfoHeader[$key]); 
      $dwImageOffset += strlen($icXOR[$key]); 
      $dwImageOffset += strlen($icAND[$key]); 
    } 
    foreach ($gd_image_array as $key => $gd_image) { 
      $icondata .= $BitmapInfoHeader[$key]; 
      $icondata .= $icXOR[$key]; 
      $icondata .= $icAND[$key]; 
    } 
    return $icondata; 
  } 
  function LittleEndian2String($number, $minbytes=1) { 
    $intstring = ''; 
    while ($number > 0) { 
      $intstring = $intstring.chr($number & 255); 
      $number >>= 8; 
    } 
    return str_pad($intstring, $minbytes, "/x00", STR_PAD_RIGHT); 
  } 
  function GetPixelColor(&$img, $x, $y) { 
    if (!is_resource($img)) { 
      return false; 
    } 
    return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y)); 
  } 
} 
?>

 index.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/1999/xhtml">
<head> 
<title>ico图标</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head> 
<body> 
 <div class="center">
		<?PHP 
$output = ""; 
if(isset($_GET['action'])&&$_GET['action'] == 'make'){ 
  if(isset($_FILES['upimage']['tmp_name']) && $_FILES['upimage']['tmp_name'] && is_uploaded_file($_FILES['upimage']['tmp_name'])){ 
    if($_FILES['upimage']['type']>210000){ 
      echo "你上传的文件体积超过了限制 最大不能超过200K"; 
      exit(); 
    } 
    $fileext = array("image/pjpeg","image/gif","image/x-png","image/png","image/jpeg","image/jpg"); 
    if(!in_array($_FILES['upimage']['type'],$fileext)){ 
      echo "你上传的文件格式不正确 仅支持 jpg,gif,png"; 
      exit(); 
    } 
    if($im = @imagecreatefrompng($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromgif($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromjpeg($_FILES['upimage']['tmp_name'])){ 
      $imginfo = @getimagesize($_FILES['upimage']['tmp_name']); 
      if(!is_array($imginfo)){ 
        echo "图形格式错误!"; 
      } 
      switch($_POST['size']){ 
        case 1; 
          $resize_im = @imagecreatetruecolor(16,16); 
          $size = 16; 
          break; 
        case 2; 
          $resize_im = @imagecreatetruecolor(32,32); 
          $size = 32; 
          break; 
        case 3; 
          $resize_im = @imagecreatetruecolor(48,48); 
          $size = 48; 
          break; 
        default; 
          $resize_im = @imagecreatetruecolor(32,32); 
          $size = 32; 
          break; 
      } 
      imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]); 
      include "phpthumb.ico.php"; 
      $icon = new phpthumb_ico(); 
      $gd_image_array = array($resize_im); 
      $icon_data = $icon->GD2ICOstring($gd_image_array); 
      $filename = "temp/".date("Ymdhis").rand(1,1000).".ico"; 
      if(file_put_contents($filename, $icon_data)){ 
        $output = "生成成功!请点右键->另存为 保存到本地<br><a href="/" mce_href="/""".$filename."/" target=/"_blank/">点击下载</a>"; 
      } 
    }else{ 
      echo "生成错误请重试!"; 
    } 
  }   
} 
?> 
		<form action="index.php?action=make" method="post" enctype='multipart/form-data'> 
		<table width="90%" align="center"> 
			<tr> 
			 <td height="40"><h3>请上传你要转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>的图片</h3>
			 支持格式 png、jpg、gif在线转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>图标。如何你想制作更丰富的.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>图标请<a href="#ico" mce_href="#ico">下载ICO制作软件</a></td> 
			</tr> 
			<tr> 
			 <td height="40"><input type="file" name="upimage" size="30">目标尺寸: 
				<input type="radio" name="size" value="1" id="s1"><label for="s1">16*16</label> 
				<input type="radio" name="size" value="2" id="s2" checked><label for="s2">32*32</label> 
				<input type="radio" name="size" value="3" id="s3"><label for="s3">48*48</label> 
			 </td> 
			</tr> 
			 
			<tr> 
			 <td height="40" align="center"><input type="submit" style="width:150px; height:30px;" value="在线生成favicon.ico图标"></td> 
			</tr> 
			<?PHP 
			if($output){ 
				echo "<tr><td><div style="/" mce_style="/""border:1px solid #D8D8B2;background-color:#FFFFDD;padding:10px/">".$output."</div></td></tr>"; 
			} 
			?> 
		</table> 
		<div style="display:none" mce_style="display:none">
<?php 
 $doc = new DOMDocument(); 
 $doc->load( 'http://link.qim.net.cn/xml.xml' ); 
  
 $links = $doc->getElementsByTagName( "link" ); 
 foreach( $links as $link ) 
 { 
 $publishers = $link->getElementsByTagName( "homepage" ); 
 $homepage = $publishers->item(0)->nodeValue; 
  
 $titles = $link->getElementsByTagName( "title" ); 
 $title = $titles->item(0)->nodeValue; 
  
 $contents = $link->getElementsByTagName( "content" ); 
 $content = $contents->item(0)->nodeValue; 
  
 echo "<a href="$homepage" mce_href="$homepage" title='$content' target='_blank' ></a>$title</a><br>"; 
 } 
 ?> 
</div>
		</form> 
			
</body> 
</html>
PHP 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
PHP $_FILES函数详解
Mar 09 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
PHP生成压缩文件实例
Feb 07 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
php根据生日计算年龄的方法
Jul 13 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
joomla组件开发入门教程
May 04 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
解决Laravel5.5下的toArray问题
Oct 15 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 PHP
php中session定期自动清理的方法
Nov 12 #PHP
详解php设置session(过期、失效、有效期)
Nov 12 #PHP
php表单提交实例讲解
Nov 12 #PHP
php用户注册信息验证正则表达式
Nov 12 #PHP
php验证码的制作思路和实现方法
Nov 12 #PHP
两款万能的php分页类
Nov 12 #PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 #PHP
You might like
example1.php
2006/10/09 PHP
我常用的几个类
2006/10/09 PHP
flash用php连接数据库的代码
2011/04/21 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
PHP中“=&gt;
2019/03/01 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
Vue动态创建注册component的实例代码
2019/06/14 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python splitlines使用技巧
2008/09/06 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
结束运行python的方法
2020/06/16 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
英国电器零售商:PRC Direct
2018/06/21 全球购物
安全事故检讨书
2014/01/18 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
通知格式
2015/04/27 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
python基础之错误和异常处理
2021/10/24 Python
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
Elasticsearch 批量操作
2022/04/19 Python