0

0

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

php中文网

php中文网

发布时间:2016-06-07 17:11:00

|

847人浏览过

|

来源于php中文网

原创

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,前台

立即学习PHP免费学习笔记(深入)”;

EasySite
EasySite

零代码AI网站开发工具

下载
<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速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极致CMS零基础建站教学视频
极致CMS零基础建站教学视频

共62课时 | 5.8万人学习

前端基础进阶-移动Web
前端基础进阶-移动Web

共187课时 | 23万人学习

韩顺平 2016年 最新PHP基础视频教程
韩顺平 2016年 最新PHP基础视频教程

共47课时 | 10.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号