整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          WordPress 代碼要這么寫才規(guī)范,5000多字的編碼規(guī)范吐血整理

          ordPress 的 PHP 編碼標(biāo)準(zhǔn)對(duì)整個(gè) WordPress 社區(qū)都適用,但是對(duì)于 WordPress 核心代碼是強(qiáng)制要求的,而對(duì)于主題和插件,WordPress 則鼓勵(lì)使用,因?yàn)橹黝}和插件的作者可能會(huì)選擇遵循別的編碼風(fēng)格。

          但這個(gè)編碼規(guī)范不僅關(guān)于編碼風(fēng)格,還包括 WordPress 生態(tài)中互操作性、可翻譯性和安全性等方面的最佳實(shí)踐,因此即使使用其他的編碼風(fēng)格 ,還是建議開發(fā)者在最佳實(shí)踐方面仍然遵守 WordPress 編碼標(biāo)準(zhǔn)。

          目前也不是所有的核心代碼都完全符合這個(gè)規(guī)范,但所有新提交和/或更新的代碼則都要求完全遵守。

          對(duì)于開發(fā)者來(lái)說(shuō),如果想根據(jù)這個(gè)規(guī)范去自動(dòng)檢查自己的代碼,可以使用基于 PHP_CodeSniffer 開發(fā)的官方 WordPress 編碼規(guī)范工具。

          引號(hào)

          正確的使用單引號(hào)和雙引號(hào),如果字符串中不包含變量的時(shí)候,則使用單引號(hào),永遠(yuǎn)不要在字符串中轉(zhuǎn)移引號(hào),而是通過(guò)切換引號(hào)類型,比如:

          echo '<a href="/static/link" title="Yeah yeah!">Link name</a>';
          echo "<a href='$link' title='$linktitle'>$linkname</a>";

          HTML 或 XML 屬性中的文本應(yīng)該進(jìn)行轉(zhuǎn)義,以便單引號(hào)或者雙引號(hào)不會(huì)結(jié)束屬性使得 HTML 標(biāo)簽無(wú)效,甚至引起安全問(wèn)題,如何對(duì)屬性進(jìn)行轉(zhuǎn)義,我們會(huì)在以后的文章中詳細(xì)講解。

          縮進(jìn)

          首先使用制表符而不是空格進(jìn)行縮進(jìn),并且使用空格把代碼對(duì)齊,以便更易閱讀:

          [tab]$foo   = 'somevalue';
          [tab]$foo2  = 'somevalue2';
          [tab]$foo34 = 'somevalue3';
          [tab]$foo5  = 'somevalue4';

          對(duì)于關(guān)聯(lián)數(shù)組,如果數(shù)據(jù)含有多個(gè)元素的時(shí)候,每個(gè)元素都應(yīng)該新起一行:

          $query = new WP_Query( array( 'ID' => 123 ) );
          $args = array(
          [tab]'post_type'   => 'page',
          [tab]'post_author' => 123,
          [tab]'post_status' => 'publish',
          );
           
          $query = new WP_Query( $args );

          特別關(guān)注一下數(shù)組最后一個(gè)元素后面的逗號(hào),推薦都加上,因?yàn)檫@樣更容易調(diào)整數(shù)組的順序,并且更容易添加新的元素,因?yàn)椴挥藐P(guān)注之前最后一個(gè)是否有逗號(hào)。

          對(duì)于 switch 結(jié)構(gòu), case 語(yǔ)句應(yīng)該比 switch 語(yǔ)句多縮進(jìn)一個(gè)制表符, case 的內(nèi)容也要比 case 條件語(yǔ)句縮進(jìn)一個(gè) tab。

          switch ( $type ) {
          [tab]case 'foo':
          [tab][tab]some_function();
          [tab][tab]break;
          [tab]case 'bar':
          [tab][tab]some_function();
          [tab][tab]break;
          }

          經(jīng)驗(yàn)法則:行首縮進(jìn)使用制表符,行中對(duì)齊使用空格。

          大括號(hào)

          大括號(hào)的使用樣式如下所示:

          if ( condition ) {
              action1();
              action2();
          } elseif ( condition2 && condition3 ) {
              action3();
              action4();
          } else {
              defaultaction();
          }

          如果代碼塊非常長(zhǎng),那就要考慮將其分解成更多的較短的代碼塊,函數(shù)或者方法,以便降低復(fù)雜度,提高測(cè)試的便利性,當(dāng)然也增加了代碼的可讀性。

          不管是否必需,都要使用大括號(hào):

          if ( condition ) {
              action0();
          }
           
          if ( condition ) {
              action1();
          } elseif ( condition2 ) {
              action2a();
              action2b();
          }
           
          foreach ( $items as $item ) {
              process_item( $item );
          }

          特別注意,強(qiáng)制使用大括號(hào)意味著禁止單語(yǔ)句內(nèi)聯(lián)控制結(jié)構(gòu),但是可以使用控制結(jié)構(gòu)的替代語(yǔ)法(例如 if/endif, while/endwhile)——尤其是在 HTML 的模板中嵌入 PHP 代碼的時(shí)候 ,例如:

          <?php if ( have_posts() ) : ?>
              <div class="hfeed">
                  <?php while ( have_posts() ) : the_post(); ?>
                      <article id="post-<?php the_ID() ?>" class="<?php post_class() ?>">
                          <!-- ... -->
                      </article>
                  <?php endwhile; ?>
              </div>
          <?php endif; ?>

          使用 elseif 而不是 else if

          因?yàn)?else ifif|elseif 代碼塊的冒號(hào)語(yǔ)法不兼容,因此條件語(yǔ)句中使用 elseif

          數(shù)組聲明

          使用長(zhǎng)數(shù)組語(yǔ)法 ( array( 1, 2, 3 ) ) 聲明數(shù)組通常比短數(shù)組語(yǔ)法 ( [ 1, 2, 3 ] ) 更具有可讀性,對(duì)于初學(xué)者,也更有描述性。

          所以數(shù)組聲明必須使用長(zhǎng)數(shù)組語(yǔ)法。

          閉包(匿名函數(shù))

          在一些的情況下(比如回調(diào)函數(shù)只需要用一次),可以使用閉包而非重寫一個(gè)新函數(shù)來(lái)作為回調(diào)函數(shù)傳遞,比如:

          $caption = preg_replace_callback(
              '/<[a-zA-Z0-9]+(?: [^<>]+>)*/',
              function ( $matches ) {
                  return preg_replace( '/[\r\n\t]+/', ' ', $matches[0] );
              },
              $caption
          );

          但是不建議 filter 或 action 的回調(diào)函數(shù)使用閉包,因?yàn)橥ㄟ^(guò) remove_action() / remove_filter() 移除的時(shí)候,就變得復(fù)雜了。

          函數(shù)多行調(diào)用

          將一個(gè)函數(shù)調(diào)用拆分為多行時(shí),每個(gè)參數(shù)必須位于單獨(dú)的行上, 單行內(nèi)聯(lián)注釋可以單獨(dú)一行:

          每個(gè)參數(shù)不得超過(guò)一行,如果一個(gè)參數(shù)需要多行,那么可以先將其賦值給一個(gè)變量,然后再將該變量傳遞給函數(shù)調(diào)用。

          $bar = array(
              'use_this' => true,
              'meta_key' => 'field_name',
          );
          $baz = sprintf(
              /* translators: %s: Friend's name */
              esc_html__( 'Hello, %s!', 'yourtextdomain' ),
              $friend_name
          );
           
          $a = foo(
              $bar,
              $baz,
              /* translators: %s: cat */
              sprintf( __( 'The best pet is a %s.' ), 'cat' )
          );

          正則表達(dá)式

          正則表達(dá)式應(yīng)該使用 Perl 兼容的正則表達(dá)式(PCRE, preg_函數(shù)),另外永遠(yuǎn)不要使用 /e 開關(guān),而是使用 preg_replace_callback

          在正則表達(dá)式中使用單引號(hào)字符串是最簡(jiǎn)便的,因?yàn)橄啾入p引號(hào),單引號(hào)字符串只有兩個(gè)元序列需要轉(zhuǎn)移:\'\

          PHP 開始和結(jié)束標(biāo)記

          在 HTML 模板中如果要嵌入多行 PHP 代碼時(shí),PHP 開始和結(jié)束標(biāo)記都要自己?jiǎn)为?dú)一行。

          正確(多行):

          function foo() {
              ?>
              <div>
                  <?php
                  echo bar(
                      $baz,
                      $bat
                  );
                  ?>
              </div>
              <?php
          }

          正確(單行):

          <input name="<?php echo esc_attr( $name ); ?>" />

          錯(cuò)誤:

          if ( $a === $b ) { ?><some html><?php }

          不要使用簡(jiǎn)寫的 PHP 標(biāo)記

          重要:永遠(yuǎn)不要使用簡(jiǎn)寫的 PHP 標(biāo)記,使用完整版。

          正確:

          <?php ... ?>
          <?php echo $var; ?>

          錯(cuò)誤:

          <? ... ?>
          <?= $var ?>

          刪除行尾的空格

          刪除每行末尾的空格,最好在文件末尾省略 PHP 結(jié)束標(biāo)記,如果沒有省略,那就確保刪除 PHP 結(jié)束標(biāo)記后面的空格。

          空格的用法

          始終在逗號(hào)后放置空格,并在邏輯運(yùn)算符、比較運(yùn)算符、字符串連接符和賦值運(yùn)算符的兩側(cè)放置空格。

          x === 23
          foo && bar
          ! foo
          array( 1, 2, 3 )
          $baz . '-5'
          $term .= 'X'

          在控制語(yǔ)句中的左括號(hào)和右括號(hào)的兩側(cè)放置空格:

          foreach ( $foo as $bar ) { ...

          定義函數(shù)時(shí),這樣使用空格:

          function my_function( $param1 = 'foo', $param2 = 'bar' ) { ...
          function my_other_function() { ...

          調(diào)用函數(shù)時(shí):

          my_function( $param1, func_param( $param2 ) );
          my_other_function();

          當(dāng)執(zhí)行邏輯運(yùn)算時(shí):

          if ( ! $foo ) { ...

          類型轉(zhuǎn)換必須使用小寫的, 并且使用簡(jiǎn)短形式,(int) 而不是 (integer)(bool) 而不是 (boolean),對(duì)于浮點(diǎn)類型轉(zhuǎn)換,請(qǐng)使用 (float) 而不是 (real),因?yàn)?(real) 在 PHP 7.4 已被棄用,并在 PHP 8 被移除。

          foreach ( (array) $foo as $bar ) { ...
          $foo = (bool) $bar;

          當(dāng)涉及到數(shù)組元素的時(shí)候,僅當(dāng)元素的索引是變量的時(shí)候,在索引周圍包含空格,例如:

          $x = $foo['bar']; // 正確
          $x = $foo[ 'bar' ]; // 錯(cuò)誤
           
          $x = $foo[0]; // 正確
          $x = $foo[ 0 ]; // 錯(cuò)誤
           
          $x = $foo[ $bar ]; // 正確
          $x = $foo[$bar]; // 錯(cuò)誤

          switch 代碼中, case 提交和冒號(hào)之間不要有空格:

          switch ( $foo ) {
              case 'bar': // 正確
              case 'ba' : // 錯(cuò)誤
          }

          同樣,返回的類型聲明的冒號(hào)前不應(yīng)有空格:

          function sum( $a, $b ): float {
              return $a + $b;
          }

          除非另有說(shuō)明,括號(hào)內(nèi)應(yīng)有空格。

          if ( $foo && ( $bar || $baz ) ) { ...
          my_function( ( $x - 1 ) * 5, $y );

          格式化 SQL 語(yǔ)句

          在格式化 SQL 語(yǔ)句時(shí),如果 SQL 很復(fù)雜,可以將 SQL 語(yǔ)句分成幾行并縮進(jìn)。當(dāng)然大部分 SQL 語(yǔ)句一行就可以了。然后將 SQL 語(yǔ)句中的關(guān)鍵字(比如 UPDATE 或者 WHERE)大寫。

          需要更新數(shù)據(jù)庫(kù)的函數(shù)的參數(shù),傳遞來(lái)之前應(yīng)該沒有對(duì)數(shù)據(jù)進(jìn)行 SQL 斜杠轉(zhuǎn)義,轉(zhuǎn)義應(yīng)該盡可能接近查詢的時(shí)候執(zhí)行,并且最好使用 $wpdb->prepare() 進(jìn)行。

          $wpdb->prepare() 是一種處理 SQL 查詢的轉(zhuǎn)義、引用和整數(shù)轉(zhuǎn)換的方法。它使用 sprintf() 格式的子集。例子 :

          $wpdb->prepare() 是用來(lái)對(duì) SQL 查詢進(jìn)行轉(zhuǎn)義、引用和整數(shù)轉(zhuǎn)換等操作的方法,它 sprintf() 的一部分格式化方法,比如:

          $var = "dangerous'"; // 可能未轉(zhuǎn)義的原始數(shù)據(jù)
          $id = some_foo_number(); // 期待是整形的數(shù)據(jù),但是不能確定
           
          $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id ) );

          %s 用于字符串占位符,而 %d 用于整數(shù)占位符。注意他們沒有被引用,$wpdb->prepare() 會(huì)執(zhí)行轉(zhuǎn)義和引用的工作。

          數(shù)據(jù)庫(kù)查詢

          避免直接操作數(shù)據(jù)庫(kù),如果有定義的函數(shù)可以獲取你需要的數(shù)據(jù),則使用它。數(shù)據(jù)庫(kù)抽象(使用函數(shù)而不是查詢)有助于保持代碼向前兼容,并且在查詢結(jié)果被緩存到內(nèi)存中的時(shí)候,它可以快很多倍。

          命名約定

          在變量名,action/filter 的名稱和函數(shù)名使用小寫,不要使用駝峰式,通過(guò)下劃線分割單詞, 如非必需不要使用縮寫,讓代碼無(wú)歧義并能自我說(shuō)明:

          function some_name( $some_variable ) { [...] }

          類名必須首字母大寫,并用下劃線分割,首字母縮寫詞都應(yīng)全部大寫:

          class Walker_Category extends Walker { [...] }
          class WP_HTTP { [...] }

          常量必須全部大寫,并用下劃線分割

          define( 'DOING_AJAX', true );

          文件名應(yīng)使用小寫字母進(jìn)行描述性命名,使用連字符應(yīng)分隔:

          my-plugin-name.php

          類文件名應(yīng)該基于類名,然后在前面加上 class-,然后類名中的下劃線替換為連字符,例如 WP_Error 的文件名:

          class-wp-error.php

          wp-includes 目錄中含有函數(shù)模板標(biāo)簽函數(shù)的文件,都會(huì)在文件名稱末尾附加 -template 以便它們顯而易見。

          general-template.php

          每個(gè)文件只有一個(gè)對(duì)象結(jié)構(gòu)(類/接口/特征)

          比如,有個(gè)名為 class-example-class.php 的文件,它只包含一個(gè)類:

          // 錯(cuò)誤: 文件 class-example-class.php
          class Example_Class { [...] }
          class Example_Class_Extended { [...] }

          第二個(gè)類應(yīng)該在自己的名字為 class-example-class-extended.php 的文件中:

          // 正確:文件 class-example-class-extended.php.
          class Example_Class_Extended { [...] }
          // 正確:文件 class-example-class-extended.php.
          class Example_Class_Extended { [...] }

          函數(shù)參數(shù)的自解釋標(biāo)志值

          調(diào)用函數(shù)時(shí)使用字符串值而不是 truefalse

          // 錯(cuò)誤
          function eat( $what, $slowly = true ) {
          ...
          }
          eat( 'mushrooms' );
          eat( 'mushrooms', true ); // true 是什么意思呢?
          eat( 'dogfood', false ); // false 又是什么意思呢?false 的反面?

          PHP 直到 8.0 起,才支持命名參數(shù),但是,由于 WordPress 目前仍支持較舊的 PHP 版本,我們還不能使用這些版本。

          沒有命名參數(shù),標(biāo)志的值是沒有意義的,每次遇到像上面例子這樣的函數(shù)調(diào)用時(shí),我們都必須搜索函數(shù)定義才明白什么意思。通過(guò)使用描述性字符串值而不是布爾值,可以使代碼更具可讀性。

          // 正確
          function eat( $what, $speed = 'slowly' ) {
          ...
          }
          eat( 'mushrooms' );
          eat( 'mushrooms', 'slowly' );
          eat( 'dogfood', 'quickly' );

          當(dāng)需要使用更多詞匯來(lái)描述函數(shù)參數(shù)時(shí),$args 數(shù)組參數(shù)可能是更好的模式:

          // 更好
          function eat( $what, $args ) {
          ...
          }
          eat ( 'noodles', array( 'speed' => 'moderate' ) );

          動(dòng)態(tài) Hook 的插值命名

          出于可讀性和可發(fā)現(xiàn)性的目的,應(yīng)使用插值而不是串聯(lián)來(lái)命名動(dòng)態(tài) Hook。

          動(dòng)態(tài) Hook 是在其標(biāo)簽名中包含動(dòng)態(tài)值的 Hook,例如 {$new_status}_{$post->post_type}(publish_post)。

          HooK 標(biāo)簽中使用的變量應(yīng)該用大括號(hào) { 和 } 括起來(lái),完整的外部標(biāo)簽名稱用雙引號(hào)括起來(lái)。這是為了確保 PHP 可以正確解析內(nèi)插字符串中給定的變量。

          do_action( "{$new_status}_{$post->post_type}", $post->ID, $post );

          可能的話,標(biāo)簽名稱中的動(dòng)態(tài)值也應(yīng)盡可能簡(jiǎn)潔明了,比如 $user_id 就比 $this->id 更加清晰明了。

          三元運(yùn)算符

          使用三元運(yùn)算符很好,但是盡量讓他們先測(cè)試為真,而不是假,否則容易混淆(一個(gè)例外是使用 ! empty(), 因?yàn)檫@里為假反而更直觀)。

          // (if statement is true) ? (do this) : (else, do this);
          $musictype = ( 'jazz' === $music ) ? 'cool' : 'blah';
          // (if field is not empty ) ? (do this) : (else, do this);

          尤達(dá)表達(dá)式

          if ( true === $the_force ) {
              $victorious = you_will( $be );
          }

          涉及變量的邏輯比較時(shí),始終將變量放在右側(cè),將常量、文字或函數(shù)調(diào)用放在左側(cè)。如果雙方都不是變量,則順序并不重要。(在計(jì)算機(jī)科學(xué)術(shù)語(yǔ)中,在比較中總是嘗試將 l 值放在右側(cè),將 r 值放在左側(cè)。)

          在上面的例子中,如果省略了一個(gè)等號(hào)(承認(rèn)吧,即使是我們當(dāng)中最有經(jīng)驗(yàn)的人也會(huì)犯這種錯(cuò)誤),你會(huì)得到一個(gè)解析錯(cuò)誤,因?yàn)槟悴荒苜x值給一個(gè)像 true 這樣的常量,如果該語(yǔ)句是相反的( $the_force = true ),則賦值將完全有效,返回 1,導(dǎo)致 if 語(yǔ)句結(jié)果為 true,這種錯(cuò)誤可能讓你花費(fèi)很長(zhǎng)時(shí)間去 Debug。

          尤達(dá)表達(dá)式適用于 ==, !=, ===, 和 !==。而 <, >, <= 或者 >= 情況不會(huì)出現(xiàn)賦值的可能,并且不易閱讀,不建議使用。

          “聰明”的代碼

          一般來(lái)說(shuō),代碼的可讀性比聰明和簡(jiǎn)潔更重要:

          isset( $var) || $var= some_function();

          雖然上面的代碼很巧妙,但如果你不熟悉它,需要一段時(shí)間才能理解。所以還是這樣寫吧:

          if ( ! isset( $var ) ) {
              $var = some_function();
          }

          除非絕對(duì)的必要,否則不應(yīng)使用松散的比較,因?yàn)榭赡軙?huì)產(chǎn)生誤導(dǎo)。

          正確:

          if ( 0 === strpos( 'WordPress', 'foo' ) ) {
              echo __( 'Yay WordPress!' );
          }

          錯(cuò)誤:

          if ( 0 == strpos( 'WordPress', 'foo' ) ) {
              echo __( 'Yay WordPress!' );}
          
          
          
          

          賦值最好不要在條件表達(dá)式中:

          正確:

          $data = $wpdb->get_var( '...' );
          if ( $data ) {
          
          
              // Use $data
          }

          錯(cuò)誤:

          if ( $data = $wpdb->get_var( '...' ) ) {
              // Use $data
          }

          在 switch 語(yǔ)句中,可以將多個(gè)空的 case 放到一起。但是,如果一個(gè) case 包含代碼,然后直接進(jìn)入下一個(gè)代碼塊,則必須明確注釋。

          switch ( $foo ) {
              case 'bar':       // 正確,空的 case 無(wú)需注釋
              case 'baz':
                  echo $foo;    // 錯(cuò)誤, 含有代碼的 case 必須 break,return 或者含有注釋
              case 'cat':
                  echo 'mouse';
                  break;        // 正確,有 break 的 case 無(wú)需注釋
              case 'dog':
                  echo 'horse';
                  // no break   // 正確,含有注釋的 case 可以不要 break。
              case 'fish':
                  echo 'bird';
                  break;
          }

          goto 語(yǔ)句絕對(duì)不能用。

          eval() 是非常危險(xiǎn)并且無(wú)法確保安全。 create_function() 函數(shù),相當(dāng)于內(nèi)部執(zhí)行了內(nèi)部執(zhí)行 eval(),PHP 7.2 起已棄用,并已在 PHP 8.0 中刪除,所以都不能使用。

          錯(cuò)誤控制符 @

          引用 PHP 文檔:

          PHP 支持一種錯(cuò)誤控制運(yùn)算符:at 符號(hào) (@)。當(dāng)附加到 PHP 中的表達(dá)式時(shí),該表達(dá)式可能生成的任何診斷錯(cuò)誤都將被抑制。

          雖然在 WordPress 核心代碼中確實(shí)存在此運(yùn)算符,但它經(jīng)常被懶惰地使用,而不是進(jìn)行適當(dāng)?shù)腻e(cuò)誤檢查。強(qiáng)烈建議不要使用它,甚至 PHP 文檔也指出:

          警告:在 PHP 8.0.0 之前,@ 運(yùn)算符可以禁用將終止腳本執(zhí)行的嚴(yán)重錯(cuò)誤。例如,將 @ 附加到不存在的函數(shù)調(diào)用之前,由于不可用或輸入錯(cuò)誤,將導(dǎo)致腳本終止而沒有說(shuō)明原因。

          不要使用 extract()

          extract() 是一個(gè)非常糟糕的函數(shù),它使代碼更難調(diào)試和更難理解,我們應(yīng)該不應(yīng)該使用它,并刪除現(xiàn)有代碼中的所有使用。

          了美化網(wǎng)站,我在網(wǎng)站上面添加了一個(gè)HTML懸浮音樂(lè)播放器,先來(lái)看看一下效果圖。

          如何在自己的網(wǎng)站上添加HTML懸浮音樂(lè)播放器呢?今天和你們分享

          首先申明三點(diǎn):

          1、本播放器實(shí)際上是調(diào)用網(wǎng)易云音樂(lè)的音樂(lè)進(jìn)行播放,音樂(lè)版權(quán)歸網(wǎng)易云音樂(lè)所有,僅供個(gè)人學(xué)習(xí)研究,用于商用的后果自負(fù)!

          2、本播放器的演示效果可以在我的博客首頁(yè)看到,默認(rèn)支持所有Html和PHP環(huán)境的網(wǎng)站。

          3、本播放器可以使用電腦、手機(jī)、IPAD等設(shè)備訪問(wèn),自適應(yīng)。)


          具體的操作方法:

          在網(wǎng)站源文件中(如果有單獨(dú)的頁(yè)腳文件,也可以放在頁(yè)腳文件里面)添加這三行代碼:

          <!--音樂(lè)播放器-->

          <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.0/jquery.min.js"></script>

          <script src="https://myhkw.cn/player/js/player.js" id="myhk" key="demo" m="1"></script>


          然后保存發(fā)布,在瀏覽器刷新網(wǎng)頁(yè)就看到效果了

          TML+PHP超大視頻上傳實(shí)例,PHP批量上傳大文件技巧,PHP批量上傳大文件,PHP實(shí)現(xiàn)批量上傳圖片的技巧,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)分段,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)切片上傳,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)斷點(diǎn)續(xù)傳,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)大文件上傳,PHP結(jié)合UPLOADER插件實(shí)現(xiàn)分片上傳文件,PHP結(jié)合百度UPLOADER插件實(shí)現(xiàn)分片上傳文件,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)分片上傳文件,前端HTML5,JS,JQ,VUE2,VUE3,React,

          前端的話都有可能用到,VUE2,VUE3,HTML5,也不一定是VUE, 公司內(nèi)部有自己的產(chǎn)品,有些產(chǎn)品是之前開發(fā)的,沒有用VUE,而是用的普通的HTML模板,用的也還好。

          后端PHP5,PHP6,PHP7,PHP8,ThinkPHP,

          客戶是武漢這邊的一家企業(yè)。

          webuploader的組件公司研發(fā)部的同事也調(diào)研過(guò),研究過(guò)他的實(shí)現(xiàn),實(shí)際上他就是對(duì)Flash和HTML5進(jìn)行了一個(gè)封裝,本質(zhì)還是調(diào)的HTML5的API,兼容性不是特別好。可擴(kuò)展性也比較差,可維護(hù)性就更不用說(shuō)了,之前公司項(xiàng)目遇到過(guò)坑,到現(xiàn)在連webuploader開發(fā)人員都聯(lián)系不上。想找他們尋求一點(diǎn)技術(shù)支持的幫助,真的是想都不要想。公司這一塊也愿意付費(fèi),就是付費(fèi)尋求的技術(shù)支持,也不行。這一點(diǎn)真的讓哥幾個(gè)給整郁悶了。領(lǐng)導(dǎo)也不太滿意,所以還是找有技術(shù)支持的產(chǎn)品。研發(fā)部的同事稱這些項(xiàng)目是免費(fèi)坑人項(xiàng)目。

          服務(wù)器支持Linux,Windows,macOS,CentOS,中標(biāo)麒麟,銀河麒麟,統(tǒng)信,龍芯,華為鯤鵬,

          數(shù)據(jù)庫(kù)支持MySQL,達(dá)夢(mèng)數(shù)據(jù)庫(kù),人大金倉(cāng)

          需要提供前端源碼,后端源碼,控件源碼

          需要提供7*24小時(shí)技術(shù)支持,長(zhǎng)期技術(shù)支持,長(zhǎng)期維護(hù)服務(wù)

          需要提供手機(jī),QQ,微信,企業(yè)微信,電子郵箱等聯(lián)系方式

          需要支持包含IE在內(nèi)的全部瀏覽器

          終端需要支持Windows,macOS,Linux,信創(chuàng)國(guó)產(chǎn)化環(huán)境,中標(biāo)麒麟,銀河麒麟,統(tǒng)信UOS,龍芯,華為

          功能需要支持10G,50G,100G大文件上傳和斷點(diǎn)續(xù)傳,刷新續(xù)傳,重啟續(xù)傳

          支持超大文件分片,分段,分塊,分割上傳下載,斷點(diǎn)續(xù)傳

          支持文件夾上傳,下載斷點(diǎn)續(xù)傳,支持文件夾層級(jí)結(jié)構(gòu),層級(jí)結(jié)構(gòu)信息保存到數(shù)據(jù)庫(kù),下載的時(shí)候同樣保留層級(jí)結(jié)構(gòu)

          支持加密上傳,下載加密,端到端加密,國(guó)密SM4加密算法,數(shù)據(jù)加密傳輸,傳輸過(guò)程中要保證數(shù)據(jù)是加密的。

          版本:6.5.40

          代碼:https://gitee.com/xproer/up6-php/tree/6.5.40/

          安裝環(huán)境

          PHP:7.2.14

          調(diào)整塊大小

          NOSQL

          NOSQL不需要任何配置,可以直接訪問(wèn)測(cè)試

          SQL

          創(chuàng)建數(shù)據(jù)庫(kù)

          您可以直接復(fù)制腳本進(jìn)行創(chuàng)建

          配置數(shù)據(jù)庫(kù)連接

          6.安裝依賴

          訪問(wèn)頁(yè)面進(jìn)行測(cè)試

          數(shù)據(jù)表中的數(shù)據(jù)

          相關(guān)參考:

          文件保存位置

          php5教程,

          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報(bào)價(jià)單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl

          OEM版報(bào)價(jià)單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
          控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc


          主站蜘蛛池模板: 精品一区二区三区色花堂| 成人日韩熟女高清视频一区| 日韩一区二区在线观看| 久久久久一区二区三区| jizz免费一区二区三区| 无码人妻一区二区三区免费n鬼沢| 国产中文字幕一区| 无码一区二区波多野结衣播放搜索| 奇米精品一区二区三区在线观看| 狠狠做深爱婷婷久久综合一区| 国产美女在线一区二区三区| 久久一本一区二区三区| 久久精品人妻一区二区三区| 无码欧精品亚洲日韩一区夜夜嗨 | 无码av人妻一区二区三区四区| 精品久久国产一区二区三区香蕉 | 日本在线一区二区| 中文字幕在线播放一区| 国产成人精品无人区一区| 成人在线视频一区| 精品国产一区二区22| 中文字幕精品无码一区二区| 国产成人精品一区二三区在线观看| 国产成人精品一区二三区| 精品久久久久久中文字幕一区| 精品国产免费观看一区| 国产麻豆剧果冻传媒一区| 国产一区二区三区在线免费观看| 久热国产精品视频一区二区三区| 日本国产一区二区三区在线观看| 精品无码综合一区二区三区| 无码人妻一区二区三区兔费| 精品国产一区二区三区久久影院| 国产精品一区二区三区久久| 影院无码人妻精品一区二区| 中文字幕精品亚洲无线码一区| 无码欧精品亚洲日韩一区| 亚洲Av永久无码精品一区二区 | 色噜噜一区二区三区| 东京热无码av一区二区| 亚洲国产国产综合一区首页|