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),如果字符串中不包含變量的時(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),并且使用空格把代碼對(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)的使用樣式如下所示:
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; ?>
因?yàn)?else if 和 if|elseif 代碼塊的冒號(hào)語(yǔ)法不兼容,因此條件語(yǔ)句中使用 elseif。
使用長(zhǎng)數(shù)組語(yǔ)法 ( array( 1, 2, 3 ) ) 聲明數(shù)組通常比短數(shù)組語(yǔ)法 ( [ 1, 2, 3 ] ) 更具有可讀性,對(duì)于初學(xué)者,也更有描述性。
所以數(shù)組聲明必須使用長(zhǎng)數(shù)組語(yǔ)法。
在一些的情況下(比如回調(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ù)雜了。
將一個(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á)式應(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)移:\' 和 \。
在 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 }
重要:永遠(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ǔ)句時(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ù)可以獲取你需要的數(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è)名為 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 { [...] }
調(diào)用函數(shù)時(shí)使用字符串值而不是 true 和 false:
// 錯(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' ) );
出于可讀性和可發(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)算符很好,但是盡量讓他們先測(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);
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 中刪除,所以都不能使用。
引用 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() 是一個(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
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。