首頁 後端開發 php教程 PHP實作多圖上傳結合uploadify外掛思路分析

PHP實作多圖上傳結合uploadify外掛思路分析

May 30, 2018 am 10:04 AM
php 外掛

這篇文章主要介紹了PHP實現多圖上傳的方法,實例分析了php結合uploadify外掛實現多圖上傳的具體步驟與相關操作技巧,需要的朋友可以參考下

#具體如下:

1.已有圖片可以刪除
2.有一個新增的按鈕
3.點選新增按鈕,跳出frame框
4.在frame框中實現圖片異步上傳與及時效果
5.上傳成功後,調用回調函數
6.彈出框中的圖片可以進行刪除
7.frame彈出框點選儲存,把圖片透過js展示到頁面中
8.頁面點擊儲存,把圖片資料儲存到資料庫

<?php 
foreach($info[&#39;product_img&#39;] as $product_img)
{
?>
  <p style="width:100px; text-align:center; margin: 5px; display:inline-block;" class="goods_xc">
    <input type="hidden" value="<?php echo $product_img[&#39;img&#39;];?>" name="product_img[]">
    <a onclick="" href="<?php echo $product_img[&#39;img&#39;];?>" target="_blank"><img width="100" height="100" src="<?php echo $product_img[&#39;img&#39;];?>"></a>
    <br>
    <a href="javascript:void(0)" onclick="ClearPicArr2(this,&#39;<?php echo $product_img[&#39;img&#39;];?>&#39;)">删除</a>
  </p>
<?php
}
?>
<p class="goods_xc" style="width:100px; text-align:center; margin: 5px; display:inline-block;">
  <input type="hidden" name="product_img[]" />
  <a href="javascript:void(0);" onclick="GetUploadify(10,&#39;&#39;,&#39;product&#39;,&#39;call_back2&#39;);"><img src="<?php echo IMG_PATH?>add-button.jpg" width="100" height="100" /></a>
  <br/>
  <a href="javascript:void(0)">  </a>
</p>
登入後複製

點評:點選的時候,呼叫GetUploadify方法。

/*
 * 上传图片 后台专用
 * @access public
 * @null int 一次上传图片张图
 * @elementid string 上传成功后返回路径插入指定ID元素内
 * @path string 指定上传保存文件夹,默认存在Public/upload/temp/目录
 * @callback string 回调函数(单张图片返回保存路径字符串,多张则为路径数组 )
 */
function GetUploadify(num,elementid,path,callback)
{  
  var pc_hash = $(&#39;#pc_hash&#39;).val();
  var upurl =&#39;?m=admin&c=upload&a=upload&num=&#39;+num+&#39;&input=&#39;+elementid+&#39;&path=&#39;+path+&#39;&func=&#39;+callback+&#39;&pc_hash=&#39;+pc_hash;
  var iframe_str=&#39;<iframe frameborder="0" &#39;;
  iframe_str=iframe_str+&#39;id=uploadify &#39;;     
  iframe_str=iframe_str+&#39; src=&#39;+upurl;
  iframe_str=iframe_str+&#39; allowtransparency="true" class="uploadframe" scrolling="no"> &#39;;
  iframe_str=iframe_str+&#39;</iframe>&#39;;         
  $("body").append(iframe_str);  
  $("iframe.uploadframe").css("height",$(document).height()).css("width","100%").css("position","absolute").css("left","0px").css("top","0px").css("z-index","999999").show();
  $(window).resize(function(){
    $("iframe.uploadframe").css("height",$(document).height()).show();
  });
}
登入後複製

點評:產生一個iframe框。

public function upload(){
    $func = $_REQUEST[&#39;func&#39;];
    $path = $_REQUEST[&#39;path&#39;] ? $_REQUEST[&#39;path&#39;] :&#39;temp&#39;;
    $info = array(
      &#39;num&#39;=> $_REQUEST[&#39;num&#39;],
      &#39;title&#39; => &#39;&#39;,     
      &#39;upload&#39; =>&#39;?m=admin&c=upload&a=imageUp&savepath=&#39;.$path.&#39;&pictitle=banner&dir=images&pc_hash=&#39;.$_SESSION[&#39;pc_hash&#39;],
      &#39;size&#39; => &#39;4M&#39;,
      &#39;type&#39; =>&#39;jpg,png,gif,jpeg&#39;,
      &#39;input&#39; => $_REQUEST[&#39;input&#39;],
      &#39;func&#39; => empty($func) ? &#39;undefined&#39; : $func,
    );
    include $this->admin_tpl(&#39;upload_upload&#39;);
}
登入後複製

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Uploadify</title>
<link rel="stylesheet" type="text/css" href="<?php echo PLUGIN_STATICS_PATH?>uploadify/uploadify.css" />
</head>
<body>
<p class="W">
  <p class="Bg"></p>
  <p class="Wrap" id="Wrap">
    <p class="Title">
      <h3 class="MainTit" id="MainTit"><?php echo $info[&#39;title&#39;];?></h3>
      <a href="javascript:Close();" title="关闭" class="Close"></a>
    </p>
    <p class="Cont">
      <p class="Note">最多上传<strong><?php echo $info[&#39;num&#39;];?></strong>个附件,单文件最大<strong><?php echo $info[&#39;size&#39;];?></strong>,类型<strong><?php echo $info[&#39;type&#39;];?></strong></p>
      <p class="flashWrap">
        <input name="uploadify" id="uploadify" type="file" multiple="true" />
        <!-- <span><input type="checkbox" name="iswatermark" id="iswatermark" /><label>是否添加水印</label></span>-->
      </p>
      <p class="fileWarp">
        <fieldset>
          <legend>列表</legend>
          <ul>
          </ul>
          <p id="fileQueue">
          </p>
        </fieldset>
      </p>
      <p class="btnBox">
        <button class="btn" id="SaveBtn">保存</button>
         
        <button class="btn" id="CancelBtn">取消</button>
      </p>
    </p>
    <!--[if IE 6]>
    <iframe frameborder="0" style="width:100%;height:100px;background-color:transparent;position:absolute;top:0;left:0;z-index:-1;"></iframe>
    <![endif]-->
  </p>
</p>
<script src="<?php echo PLUGIN_STATICS_PATH?>uploadify/jquery.min.js" type="text/javascript"></script> 
<!--防止客户端缓存文件,造成uploadify.js不更新,而引起的“喔唷,崩溃啦”-->
<script>
document.write("<script type=&#39;text/javascript&#39; "+ "src=&#39;<?php echo PLUGIN_STATICS_PATH?>uploadify/jquery.uploadify.js?" + new Date()+ "&#39;></s" + "cript>");
</script>      
<script src="<?php echo PLUGIN_STATICS_PATH?>uploadify/uploadify-move.js" type="text/javascript"></script> 
<script type="text/javascript">
function Close(){
  $("iframe.uploadframe", window.parent.document).remove();
}
$("#CancelBtn").click(function(){
  $("iframe.uploadframe", window.parent.document).remove();
  //$(&#39;#uploadify&#39;).uploadifyClearQueue();
  //$(".fileWarp ul li").remove();
});
$(function() {
  $(&#39;#uploadify&#39;).uploadify({
      &#39;auto&#39;      : true,
      &#39;method&#39;     : &#39;post&#39;,
      &#39;multi&#39;      : true,
      &#39;swf&#39;       : &#39;<?php echo PLUGIN_STATICS_PATH?>uploadify/uploadify.swf&#39;,
      &#39;uploader&#39;    : &#39;<?php echo $info["upload"];?>&#39;,
      &#39;progressData&#39;  : &#39;all&#39;,
      &#39;queueSizeLimit&#39; : &#39;<?php echo $info["num"];?>&#39;,
      &#39;uploadLimit&#39;   : 5,
      &#39;fileSizeLimit&#39;  : &#39;20000KB&#39;,
      &#39;fileTypeDesc&#39;  : &#39;Image Files&#39;,
      &#39;fileTypeExts&#39;  : &#39;*.jpeg; *.jpg; *.png; *.gif&#39;,
      &#39;buttonImage&#39;   : &#39;<?php echo PLUGIN_STATICS_PATH?>uploadify/select.png&#39;,
      &#39;queueID&#39;     : &#39;fileQueue&#39;,
      &#39;onUploadStart&#39;  : function(file){
        $(&#39;#uploadify&#39;).uploadify(&#39;settings&#39;, &#39;formData&#39;, {&#39;iswatermark&#39;:$("#iswatermark").is(&#39;:checked&#39;)});        
      },
      &#39;onUploadSuccess&#39; : function(file, data, response){
        $(".fileWarp ul").append(SetImgContent(data));
        SetUploadFile();
      }
    });
});
function SetImgContent(data){  
  var obj=eval(&#39;(&#39;+data+&#39;)&#39;);
  if(obj.state == &#39;SUCCESS&#39;){
    var sLi = "";
    sLi += &#39;<li class="img">&#39;;
    sLi += &#39;<img src="&#39; + obj.url + &#39;" width="100" height="100" onerror="this.src=\&#39;<?php echo PLUGIN_STATICS_PATH?>uploadify/nopic.png\&#39;">&#39;;
    sLi += &#39;<input type="hidden" name="fileurl_tmp[]" value="&#39; + obj.url + &#39;">&#39;;
    sLi += &#39;<a href="javascript:void(0);">删除</a>&#39;;
    sLi += &#39;</li>&#39;;
    return sLi;
  }else{
    //window.parent.message(obj.text,8,2);
    alert(obj.msg);
    return;
  }
}
function SetUploadFile(){
  $("ul li").each(function(l_i){
    $(this).attr("id", "li_" + l_i);
  })
  $("ul li a").each(function(a_i){
    $(this).attr("rel", "li_" + a_i);
  }).click(function(){
    $.get(
      &#39;?m=admin&c=upload&a=delupload&pc_hash=<?php echo $_SESSION["pc_hash"];?>&#39;,{action:"del", filename:$(this).prev().val()},function(){}
    );
    $("#" + this.rel).remove();
  })
}
/*点击保存按钮时
 *判断允许上传数,检测是单一文件上传还是组文件上传
 *如果是单一文件,上传结束后将地址存入$input元素
 *如果是组文件上传,则创建input样式,添加到$input后面
 *隐藏父框架,清空列队,移除已上传文件样式*/
$("#SaveBtn").click(function(){ 
  var callback = "<?php echo $info[&#39;func&#39;];?>";
  var num = "<?php echo $info[&#39;num&#39;];?>";
  var fileurl_tmp = [];
  if(callback != "undefined"){  
    if(num > 1){  
       $("input[name^=&#39;fileurl_tmp&#39;]").each(function(index,dom){
        fileurl_tmp[index] = dom.value;
       });  
    }else{
      fileurl_tmp = $("input[name^=&#39;fileurl_tmp&#39;]").val();  
    }
    eval(&#39;window.parent.&#39;+callback+&#39;(fileurl_tmp)&#39;);
    $(window.parent.document).find("iframe.uploadframe").remove();
    return;
  }          
  if(num > 1){
      var fileurl_tmp = "";
      $("input[name^=&#39;fileurl_tmp&#39;]").each(function(){
        fileurl_tmp += &#39;<li rel="&#39;+ this.value +&#39;"><input class="input-text" type="text" name="{$info.input}[]" value="&#39;+ this.value +&#39;" /><a href="javascript:void(0);" onclick="ClearPicArr(\&#39;&#39;+ this.value +&#39;\&#39;,\&#39;\&#39;)">删除</a></li>&#39;; 
      });     
      $(window.parent.document).find("#{$info.input}").append(fileurl_tmp);
  }else{
      $(window.parent.document).find("#{$info.input}").val($("input[name^=&#39;fileurl_tmp&#39;]").val());
  }
  $(window.parent.document).find("iframe.uploadframe").remove();
});
</script>
</body>
</html>
登入後複製

#點評:呼叫uploadify外掛

##

$(function() {
  $(&#39;#uploadify&#39;).uploadify({
      &#39;auto&#39;      : true,
      &#39;method&#39;     : &#39;post&#39;,
      &#39;multi&#39;      : true,
      &#39;swf&#39;       : &#39;<?php echo PLUGIN_STATICS_PATH?>uploadify/uploadify.swf&#39;,
      &#39;uploader&#39;    : &#39;<?php echo $info["upload"];?>&#39;,
      &#39;progressData&#39;  : &#39;all&#39;,
      &#39;queueSizeLimit&#39; : &#39;<?php echo $info["num"];?>&#39;,
      &#39;uploadLimit&#39;   : 5,
      &#39;fileSizeLimit&#39;  : &#39;20000KB&#39;,
      &#39;fileTypeDesc&#39;  : &#39;Image Files&#39;,
      &#39;fileTypeExts&#39;  : &#39;*.jpeg; *.jpg; *.png; *.gif&#39;,
      &#39;buttonImage&#39;   : &#39;<?php echo PLUGIN_STATICS_PATH?>uploadify/select.png&#39;,
      &#39;queueID&#39;     : &#39;fileQueue&#39;,
      &#39;onUploadStart&#39;  : function(file){
        $(&#39;#uploadify&#39;).uploadify(&#39;settings&#39;, &#39;formData&#39;, {&#39;iswatermark&#39;:$("#iswatermark").is(&#39;:checked&#39;)});        
      },
      &#39;onUploadSuccess&#39; : function(file, data, response){
        $(".fileWarp ul").append(SetImgContent(data));
        SetUploadFile();
      }
    });
});
登入後複製

評論:表單提交圖片檔案到伺服器,成功後呼叫回調函數。

/**
* @function imageUp
*/
public function imageUp()
{  
    // 有文件传入,现在要做的就是把它保存起来
    // 处理上传并返回数据
    // 上传图片框中的描述表单名称,
    $title = htmlspecialchars($_REQUEST[&#39;pictitle&#39;], ENT_QUOTES);
    // $path = htmlspecialchars($_REQUEST[&#39;dir&#39;], ENT_QUOTES);
    $savepath = htmlspecialchars($_REQUEST[&#39;savepath&#39;], ENT_QUOTES);
    $up = new think_upload();
    $path = &#39;./uploadfile/&#39;.$savepath;
    //设置属性(上传的位置, 大小, 类型, 名是是否要随机生成)
    $up -> set("path", $path);
    $up -> set("maxsize", 2000000);
    $up -> set("allowtype", array("gif", "png", "jpg","jpeg"));
    $up -> set("israndname", true);
    //使用对象中的upload方法, 就可以上传文件, 方法需要传一个上传表单的名子 pic, 如果成功返回true, 失败返回false
    if($up -> upload("Filedata")) {
      $name = $up->getFileName();
      $return_data[&#39;url&#39;] = $path.&#39;/&#39;.$name;
      $return_data[&#39;title&#39;] = $title;
      $return_data[&#39;state&#39;] = &#39;SUCCESS&#39;;
      exit(json_encode($return_data));
    } else {
      $return_data[&#39;state&#39;] = &#39;FAILURE&#39;;
      $return_data[&#39;msg&#39;]  = $up->getErrorMsg();
      exit(json_encode($return_data));
    }
}
登入後複製

點評:後台處理圖片上傳表單請求,回傳圖片路徑

<?php
 /** 
  * file: fileupload.class.php 文件上传类FileUpload
  * 本类的实例对象用于处理上传文件,可以上传一个文件,也可同时处理多个文件上传
  */
 class think_upload { 
  private $path = "./uploadfile";     //上传文件保存的路径
  private $allowtype = array(&#39;jpg&#39;,&#39;gif&#39;,&#39;png&#39;); //设置限制上传文件的类型
  private $maxsize = 1000000;      //限制文件上传大小(字节)
  private $israndname = true;      //设置是否随机重命名文件, false不随机
  private $originName;       //源文件名
  private $tmpFileName;       //临时文件名
  private $fileType;        //文件类型(文件后缀)
  private $fileSize;        //文件大小
  private $newFileName;       //新文件名
  private $errorNum = 0;       //错误号
  private $errorMess="";       //错误报告消息
  /**
   * 用于设置成员属性($path, $allowtype,$maxsize, $israndname)
   * 可以通过连贯操作一次设置多个属性值
   *@param string $key 成员属性名(不区分大小写)
   *@param mixed $val 为成员属性设置的值
   *@return object   返回自己对象$this,可以用于连贯操作
   */
  function set($key, $val){
   $key = strtolower($key); 
   if( array_key_exists( $key, get_class_vars(get_class($this) ) ) ){
    $this->setOption($key, $val);
   }
   return $this;
  }
  /**
   * 调用该方法上传文件
   * @param string $fileFile 上传文件的表单名称 
   * @return bool    如果上传成功返回数true 
   */
  function upload($fileField) {
   $return = true;
   /* 检查文件路径是滞合法 */
   if( !$this->checkFilePath() ) {
    $this->errorMess = $this->getError();
    return false;
   }
   /* 将文件上传的信息取出赋给变量 */
   $name = $_FILES[$fileField][&#39;name&#39;];
   $tmp_name = $_FILES[$fileField][&#39;tmp_name&#39;];
   $size = $_FILES[$fileField][&#39;size&#39;];
   $error = $_FILES[$fileField][&#39;error&#39;];
   /* 如果是多个文件上传则$file["name"]会是一个数组 */
   if(is_Array($name)){  
    $errors=array();
    /*多个文件上传则循环处理 , 这个循环只有检查上传文件的作用,并没有真正上传 */
    for($i = 0; $i < count($name); $i++){ 
     /*设置文件信息 */
     if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {
      if(!$this->checkFileSize() || !$this->checkFileType()){
       $errors[] = $this->getError();
       $return=false; 
      }
     }else{
      $errors[] = $this->getError();
      $return=false;
     }
     /* 如果有问题,则重新初使化属性 */
     if(!$return)     
      $this->setFiles();
    }
    if($return){
     /* 存放所有上传后文件名的变量数组 */
     $fileNames = array();   
     /* 如果上传的多个文件都是合法的,则通过销魂循环向服务器上传文件 */
     for($i = 0; $i < count($name); $i++){ 
      if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i] )) {
       $this->setNewFileName(); 
       if(!$this->copyFile()){
        $errors[] = $this->getError();
        $return = false;
       }
       $fileNames[] = $this->newFileName; 
      }     
     }
     $this->newFileName = $fileNames;
    }
    $this->errorMess = $errors;
    return $return;
   /*上传单个文件处理方法*/
   } else {
    /* 设置文件信息 */
    if($this->setFiles($name,$tmp_name,$size,$error)) {
     /* 上传之前先检查一下大小和类型 */
     if($this->checkFileSize() && $this->checkFileType()){ 
      /* 为上传文件设置新文件名 */
      $this->setNewFileName(); 
      /* 上传文件 返回0为成功, 小于0都为错误 */
      if($this->copyFile()){ 
       return true;
      }else{
       $return=false;
      }
     }else{
      $return=false;
     }
    } else {
     $return=false; 
    }
    //如果$return为false, 则出错,将错误信息保存在属性errorMess中
    if(!$return)
     $this->errorMess=$this->getError(); 
    return $return;
   }
  }
  /** 
   * 获取上传后的文件名称
   * @param void  没有参数
   * @return string 上传后,新文件的名称, 如果是多文件上传返回数组
   */
  public function getFileName(){
   return $this->newFileName;
  }
  /**
   * 上传失败后,调用该方法则返回,上传出错信息
   * @param void  没有参数
   * @return string 返回上传文件出错的信息报告,如果是多文件上传返回数组
   */
  public function getErrorMsg(){
   return $this->errorMess;
  }
  /* 设置上传出错信息 */
  private function getError() {
   $str = "上传文件<font color=&#39;red&#39;>{$this->originName}</font>时出错 : ";
   switch ($this->errorNum) {
    case 4: $str .= "没有文件被上传"; break;
    case 3: $str .= "文件只有部分被上传"; break;
    case 2: $str .= "上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值"; break;
    case 1: $str .= "上传的文件超过了php.ini中upload_max_filesize选项限制的值"; break;
    case -1: $str .= "未允许类型"; break;
    case -2: $str .= "文件过大,上传的文件不能超过{$this->maxsize}个字节"; break;
    case -3: $str .= "上传失败"; break;
    case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break;
    case -5: $str .= "必须指定上传文件的路径"; break;
    default: $str .= "未知错误";
   }
   return $str.&#39;<br>&#39;;
  }
  /* 设置和$_FILES有关的内容 */
  private function setFiles($name="", $tmp_name="", $size=0, $error=0) {
   $this->setOption(&#39;errorNum&#39;, $error);
   if($error)
    return false;
   $this->setOption(&#39;originName&#39;, $name);
   $this->setOption(&#39;tmpFileName&#39;,$tmp_name);
   $aryStr = explode(".", $name);
   $this->setOption(&#39;fileType&#39;, strtolower($aryStr[count($aryStr)-1]));
   $this->setOption(&#39;fileSize&#39;, $size);
   return true;
  }
  /* 为单个成员属性设置值 */
  private function setOption($key, $val) {
   $this->$key = $val;
  }
  /* 设置上传后的文件名称 */
  private function setNewFileName() {
   if ($this->israndname) {
    $this->setOption(&#39;newFileName&#39;, $this->proRandName()); 
   } else{ 
    $this->setOption(&#39;newFileName&#39;, $this->originName);
   } 
  }
  /* 检查上传的文件是否是合法的类型 */
  private function checkFileType() {
   if (in_array(strtolower($this->fileType), $this->allowtype)) {
    return true;
   }else {
    $this->setOption(&#39;errorNum&#39;, -1);
    return false;
   }
  }
  /* 检查上传的文件是否是允许的大小 */
  private function checkFileSize() {
   if ($this->fileSize > $this->maxsize) {
    $this->setOption(&#39;errorNum&#39;, -2);
    return false;
   }else{
    return true;
   }
  }
  /* 检查是否有存放上传文件的目录 */
  private function checkFilePath() {
   if(empty($this->path)){
    $this->setOption(&#39;errorNum&#39;, -5);
    return false;
   }
   if (!file_exists($this->path) || !is_writable($this->path)) {
    if (!@mkdir($this->path, 0755)) {
     $this->setOption(&#39;errorNum&#39;, -4);
     return false;
    }
   }
   return true;
  }
  /* 设置随机文件名 */
  private function proRandName() {  
   $fileName = date(&#39;YmdHis&#39;)."_".rand(100,999);  
   return $fileName.&#39;.&#39;.$this->fileType; 
  }
  /* 复制上传文件到指定的位置 */
  private function copyFile() {
   if(!$this->errorNum) {
    $path = rtrim($this->path, &#39;/&#39;).&#39;/&#39;;
    $path .= $this->newFileName;
    if (@move_uploaded_file($this->tmpFileName, $path)) {
     return true;
    }else{
     $this->setOption(&#39;errorNum&#39;, -3);
     return false;
    }
   } else {
    return false;
   }
  }
}
登入後複製

點評:php檔案上傳類別。

然後處理好,圖片資料刪除對應的檔案上傳,減輕伺服器空間壓力。

public function delete() {
    $id = intval($_GET[&#39;id&#39;]);
    $this->db->delete(array(&#39;id&#39;=>$id));
    // 遍历删除原图片
    $product_img = $this->product_img_db->select(array(&#39;product_id&#39;=>$id));
    foreach ($product_img as $k => $v) {
      unlink($v[&#39;img&#39;]);
    }
    // 删除表数据
    $this->product_img_db->delete(array(&#39;product_id&#39;=>$id));
    exit("1");
}
登入後複製

以上就是本文的全部內容,希望對大家的學習有幫助。


相關推薦:

php使用PDO下exec()函數實作查詢執行後受影響行數的方法

php json相關函數的用法詳解

##php mysql_list_dbs()函數的用法詳解

以上是PHP實作多圖上傳結合uploadify外掛思路分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles