php拍賣系統
❶ 夢幻掙錢
WZ接劇情不錯.本文章寫給沒有注意過拍賣會的人,以改變少數人壟斷市場的局面,也希望WY會改善一下,如改為和真的拍賣會一樣,那樣會更激烈。也許我的想法很幼稚,希望能給一些玩家帶來好處。
拍賣會,一個人氣極少的系統(只有少數有錢人關注),曾有人說拍賣會能吞玩家錢(我沒遇見過)。它一度遠離我的生活,被我認為是一個雞肋系統,但最近因為幾件裝備一直賣不出去而接觸到拍賣會,讓我發現了利用拍賣會賺錢的方法。用拍賣會賺錢的方法很簡單,而且例如在100%以上,可以說是一本萬利 。下面轉入正題!
利用拍賣會賺錢的前提:一塊准確的手錶(最最重要的)、充足的點卡、自由的時間(下面會解釋到)、良好的網速、足夠的資金、足夠的BB倉庫後一個變異BB店。
先了解一下拍賣系統的基本設置:
每周六早10點至周日晚上22點(共計36個小時)會在游戲中定期舉行拍賣會,玩家可以在此期間參加拍 賣會進行競拍或拍賣物品和召喚獸。拍賣會開放時,系統將投放部分變異召喚獸和物品,以供挑選,而此時間內每次挖出怪物幼兒園時,也是有可能為拍賣會增加拍賣物品或召喚獸。參與條件:玩家等級≥50級
拍賣NPC
拍賣使者,位於長安城(205,13),只存在拍賣會開放時
拍賣保管員,位於長安城(214,13),一直存在,拍賣所有的物品流動都存於拍賣保管員
先來解釋一下,拍賣會中的部分物品和大部分變異BB有系統投放,在拍賣會舉行的期間,每當有人挖超級寶圖挖塌幼兒園時系統將投放一個變異BB,其中不乏JP(但當資金不是很多是不要去竟價買他)。
用拍賣會賺錢分三個階段,我注重於變異BB競買,因為此物品很稀少,就算是垃圾的也可賣給開店的和跑BB環的(自己有點例外)。
1 觀察時期。
竟價每一個系統投放的變異BB,這樣做的好處有兩個.①將每人要的BB歸為己有,如白班一般每人去動它,那就便宜我們了。②找出搶手的變異BB,基本不去動它了。
2 觀望時期。
觀察和觀望絕對不同,觀望是要盡量保證變異BB的價格壓在最低,一般6W-7W最為理想,為最後的階段做准備。另外一點,看看有沒有和你搶商品的人,如果有那你要提高警惕了,最後下手要快,而且要把握好時機。
3 競拍階段
時間為周日21:50到22:00,具體時間根據自己的技術、滑鼠的好壞和是否有人做你的對手決定。沒時間就競拍不了了。這時你可要注意了,成敗就在這幾分鍾內,看好手錶。在最後時期,將自己說想要的商品一一競價,爭取做到讓你的對手沒有繼續競價的時間(22:00拍賣會就會結束),這你要掌握好,否則丟了自己的商品會把腸子悔青的。插一句,如果時間夠,又有非常便宜的獸訣(如下圖),你也要去競價,這樣就算賣主反悔,你也可以收到10%的金額賠償。 (後期會漲的)
我的收獲,轉手賣掉會賺一筆的。
寫了這個帖子後,拍賣會也許會更熱鬧,搶BB的人日子不好過了(罵人的請自覺),還希望WY更改改善一下拍賣系統,讓他更熱鬧更實用。
原帖地址:http://xyq.netease.com/viewthread.php?tid=634680&extra=page%3D4&page=1
(也可通過手機訪問wap.nie.163.com及時了解以上內容。)
相關新聞:
《夢幻西遊》是以神話題材《西遊記》為背景,採用最流行的Q版風格打造出來的浪漫型網游,整個游戲都滲透著青春活力的氣息。嶄新的畫風、風趣的對白、精密的門派平衡、引人入勝的劇情任務、優良的系統設計,全都貫穿於整個游戲之中,網易出色的研發力量,更加懂得把握玩家心理的設計理念,使得《夢幻西遊》成為目前國內同時在線人數最多的超人氣MMORPG網路游戲,目前注冊人數超過1.8億,最高同時在線人數突破208萬,一共開設收費伺服器達472組。
❷ 求助php競拍功能實現的思路
摘要:前面我給了一個分頁顯示mysql記錄的類,卻沒給出使用的例子,現在,我整理了我剛寫的一個在線競拍系統框架程序,來說明這個類的使用方法,而且也就在線競拍的實現方法與大家一起來討論一下。首先聲明,我不是高手,也不是行家,只是一個fans,所以這個程序肯定有不少漏...
轉載請註明來源:在線競拍系統的PHP實現框架(一)
前面我給了一個分頁顯示mysql記錄的類,卻沒給出使用的例子,現在,我整理了我剛寫的一個在線競拍系統框架程序,來說明這個類的使用方法,而且也就在線競拍的實現方法與大家一起來討論一下。
首先聲明,我不是高手,也不是行家,只是一個fans,所以這個程序肯定有不少漏洞,但我之所以敢拿出來,是因為我很希望能自由地與大家分享PHP帶給我們的快樂。(其實是想多加點分好弄個支持mysql的空間^_^)
我覺得競拍系統與一般的供求信息發布系統相比,最大的不同有兩點,一點是出價者開的新價要及時地反映在商品的價格上,另一點是有時間的限制,在競標結束後,就要停止出價。並且給出最後中標者。
其它的我還沒想到呢,有行家給點介紹吧。
所以,我想把一個供求信息發布系統做成一個競拍系統應是不困難的事吧。
下面先把新版的TViewPage類和資料庫結構給出來吧。
<?php
/*********************************************
TViewPagev 1.2
分頁顯示Mysql資料庫記錄的類
作者:sharetop
E-mail:[email protected]
時間:2000-8-31
[2000-9-6] 1.2
修正了readlist()的一個bug,將驗證offset放入類中。
增加add() delete() modify()三個基本操作函數。
本類沒有提供連接資料庫的功能,所以需在外部打開相應的資料庫。
本類也沒有提供顯示記錄的功能,只是分頁讀取記錄至 Result二維數組中。
需在外部自定義數據顯示格式。
***********************************************/
class TViewPage {
var $Table; //表名
var $MaxLine; //每頁顯示行數
var $Offset; //記錄偏移量
var $Total; //記錄總數
var $Number; //本頁讀取的記錄數
var $Result; //讀出的結果
var $TPages; //總頁數
var $CPages; //當前頁數
var $Condition; //顯示條件 如:where id='$id' order by id desc
var $PageQuery; //分頁顯示要傳遞的參數
//******構造函數*************
//參數:表名、最大行數、偏移量
function TViewPage($TB,$ML){
global $offset;
$this->Table=$TB;
$this->MaxLine=$ML;
if(isset($offset)) $this->Offset=$offset;
else $this->Offset=0;
$this->Condition="";
}
//********設置顯示條件*********
//如:where id='$id' order by id desc
//要求是字串,符合SQL語法(本字串將加在SQL語句後)
function SetCondition($s){
$this->Condition=$s;
}
//******設置傳遞參數************
// key參數名 value參數值
// 如:setpagequery("id",$id);如有多個參數要傳遞,可多次調用本函數。
function SetPageQuery($key,$value){
$tmp[key]=$key; $tmp[value]=$value;
$this->PageQuery[]=$tmp;
}
//********讀取記錄***************
//主要工作函數,根據所給的條件從表中讀取相應的記錄
//返回值是一個二維數組,Result[記錄號][欄位名]
function ReadList() {
$SQL="SELECT Count(*) AS total FROM ".$this->Table." ".$this->Condition;
$result=mysql_query($SQL) or die(mysql_error());
$row=mysql_fetch_Array($result);
$this->Total=$row[total];
if($this->Total>0) { //根據條件 Condition
$SQL="SELECT * FROM ".$this->Table." ".$this->Condition.
" LIMIT ".$this->Offset." , ".$this->MaxLine;
$result=mysql_query($SQL) or die(mysql_error());
$this->Number=mysql_num_rows($result);
$i=0;
while($row=mysql_fetch_Array($result)){
$this->Result[$i]=$row;
$i ;
}
}
return $this->Result;
}
//*******加入新記錄**********
//$str為加入的值,如 "'$id','$name','$class'"等
function Add($str){
$SQL="INSERT INTO ".$this->Table." VALUES(".$str.")";
mysql_query($SQL) or die(mysql_error());
}
//*********刪除記錄**********
//先調用SetCondition()來確定條件。
function Delete(){
$SQL="DELETE FROM ".$this->Table." ".$this->Condition;
mysql_query($SQL) or die(mysql_error());
}
//********修改記錄************
//$field 欄位名$value新值
//如要修改多個欄位可重復調用來函數。
function Modify($field,$value){
$SQL="UPDATE FROM ".$this->Table." SET ".$field."=".$value." ".$this->Condition;
mysql_query($SQL) or die(mysql_error());
}
//**********顯示頁數*************
//顯示當前頁及總頁數
function ThePage() {
$this->TPages=ceil($this->Total/$this->MaxLine);
$this->CPages=$this->Offset/$this->MaxLine 1;
echo "第".$this->CPages."頁/共".$this->TPages."頁";
}
//**********顯示翻頁按鈕*************
//此函數要在ThePage()函數之後調用!!!
//顯示首頁、下頁、上頁、未頁,並加上要傳遞的參數
function Page() {
$first=0;
$next=$this->Offset $this->MaxLine;
$prev=$this->Offset-$this->MaxLine;
$last=($this->TPages-1)*$this->MaxLine;
$k=count($this->PageQuery);
$strQuery=""; //生成一個要傳遞參數字串
for($i=0;$i<$k;$i ){
$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];
}
if($this->Offset>=$this->MaxLine)
echo "<A href="http://www.php1.cn/"> if($prev>=0)
echo "<A href="http://www.php1.cn/"> if($next<$this->Total)
echo "<A href="http://www.php1.cn/"> if($this->TPages!=0 && $this->CPages<$this->TPages)
echo "<A href="http://www.php1.cn/"> }
//******end class
}
?>
//************************
ebid.sql文件(我是用phpmyadmin導出的)
# phpMyAdmin MySQL-Dump
# http://www.htmlwizard.net/phpMyAdmin/
#
# Host: localhost Database : ebid
# --------------------------------------------------------
# Table structure for table 'reply'
# id,商品id,出價人,出價人的email,出價。
CREATE TABLE reply (
id varchar(16) NOT NULL,
parentid varchar(16) NOT NULL,
buyer varchar(12) NOT NULL,
email varchar(32) NOT NULL,
price float(10,2) DEFAULT '0.00' NOT NULL,
PRIMARY KEY (id, price)
);
# --------------------------------------------------------
# Table structure for table 'shop'
#id,商品名,介紹,原始價,加價單位,結束時間,競標數,當前價,是否有照片
CREATE TABLE shop (
id varchar(16) NOT NULL,
name varchar(50) NOT NULL,
description text,
price float(10,2) DEFAULT '0.00' NOT NULL,
unit tinyint(2) unsigned NOT NULL,
endtime varchar(16) DEFAULT '0000-00-00 00:00' NOT NULL,
reply int(4) unsigned NOT NULL,
curprice float(10,2) DEFAULT '0.00' NOT NULL,
photo tinyint(1) unsigned NOT NULL,
PRIMARY KEY (id),
KEY kreply (reply)
);
配置文件如下:
//**************
//config.inc.php
<?php
$HOST="localhost"; //主機名
$DATABASE="ebid"; //資料庫名
$WARE_TABLE="shop"; //商品表
$BID_TABLE="reply"; //回應表
$USER="root"; //用戶
$PASSWD="9999"; //密碼
$PAGE_MAX_LINE=20; //每頁顯示行數
//打開資料庫
$LinkID=mysql_connect($HOST,$USER,$PASSWD);
mysql_select_db($DATABASE,$LinkID) or die(mysql_error());
?>
以下是顯示商品及TOP10商品的函數
//*****************
//
<?php
include "config.inc.php";
include "tview.class.php"; //類文件
//*****顯示商品列表********
function PrintList(){
global $view;
$ct=time();
//設置條件的句子!要滿足SQL語法哦。只顯示沒有結束競標的商品
$view->SetCondition("where endtime>'$ct' order by id desc");
//調用成員函數來讀記錄
//結果$result[記錄號][欄位名]是二維數組。
$result=$view->ReadList();
if($view->Number==0) {echo "<tr><td colspan=4> </td></tr>"; return;}
for($i=0;$i<$view->Number;$i ){
if(ceil($i/2)*2==$i) $bgc="#ffffff";
else $bgc="#f3f3f3";
echo "<tr bgcolor=$bgc><td width=60% >";
echo "<a href="http://www.php1.cn/"> echo "</td><td width=15% >";
echo date("Y-m-j 24:00:00",$result[$i][endtime]);
echo "</td><td width=15% align=right>¥";
echo $result[$i][curprice];
echo "</td><td width=10% align=right>";
echo $result[$i][reply];
echo "</td></tr>";
}
}
//*********顯示最熱的10條記錄**********
function ListTopHot(){
global $view;
//同樣先設置條件
$view->SetCondition("order by reply desc");
//讀記錄
$result=$view->ReadList();
$k=(count($result)>10)? '10':(count($result));
for($i=0;$i<$k;$i ){
echo "<tr><td>";
echo "<a href="http://www.php1.cn/"> echo "</td></tr>";
}
}
//*********顯示最新10條記錄***********
function ListTopNew(){
global $view;
$view->SetCondition("order by id desc");
$result=$view->ReadList();
$k=(count($result)>10)? '10':(count($result));
for($i=0;$i<$k;$i ){
echo "<tr><td>";
echo "<a href="http://www.php1.cn/"> echo "</td></tr>";
}
}
//**********<結束函數定義,主程序體*************
//構造這個viewpage類,給出商品表及每頁顯示行數
$view=new TViewPage($WARE_TABLE,$PAGE_MAX_LINE);
?>
下面給出用到的一個js函數吧,很簡單,就是打開一個新窗口:
<script>
function showdetail(str){
window.open(str,"newwin","top=20,left=20,width=600,height=400,
location=no,toolbar=no,status=no,resizable=no,scrollbars=yes");
}
</script>
❸ 用c# winform做在線拍賣系統
EeSs:用c# winform做在線拍賣系統
為獲取幫助,你需要留下合法的Email地址*
您還可以依靠Baihi聯系我們或QQ:六伍柒幺伍六幺伍 ('幺'讀 yao 一聲)
根據此題目
我們可以提供一份與要求相匹配的代碼
ES:\
EeSs:用c# winform做在線拍賣系統
交易提醒:預付訂金是陷阱
❹ 在做一個商城,到訂單的時候發現拍賣這塊不知道如何下手 - PHP進階討論
建議使用linux自己的crontab功能。否則,如果網站流量大的話,在首頁上加個檢查代碼也不錯。做個任務計劃表,首頁每次被訪問時都檢查一下任務計劃表中是否有任務可以執行了通過這個方法就可以「定時」地執行任務。
❺ PHP+oracle這個架構是否常用 這種架構有什麼不好地方呢
淘寶架構框架
一、個人網站
2003 年 4 月 7 日,馬雲,在杭州,成立了一個神秘的組織。他叫來十位員工,要他們簽了一份協議,這份協議要求他們立刻離開阿里巴巴,去做一個神秘的項目。這個項目要求絕 對保密,老馬戲稱「連說夢話被老婆聽到都不行,誰要是透漏出去,我將追殺到天涯海角」。這份協議是英文版的,匆忙之間,大多數人根本來不及看懂,但出於對 老馬的信任,都捲起鋪蓋離開了阿里巴巴。
他們去了一個神秘的據點 —— 湖畔花園小區的一套未裝修的房子里,房子的主人是馬雲。這伙人剛進去的時候,馬雲給他們布置了一個任務,就是在最短的時間內做出一個個人對個人(C2C) 的商品交易的網站。現在出一個問題考考讀者,看你適不適合做淘寶的創業團隊。親,要是讓你來做,你怎麼做?
在說出這個答案之前,容我先賣個關子,介紹一下這個創業團隊的成員:三個開發工程師(虛竹、三豐、多隆)、一個UED(二當家)、三個運營(小寶、阿 珂、破天)、一個經理(財神)、還有就是馬雲和他的秘書。當時對整個項目組來說壓力最大的就是時間,怎麼在最短的時間內把一個從來就沒有的網站從零開始建 立起來?了解淘寶歷史的人知道淘寶是在 2003 年 5 月 10 日上線的,這之間只有一個月。要是你在這個團隊里,你怎麼做?我們的答案就是:買一個來。
買一個網站顯然比做一個網站要省事一些,但是他們的夢想可不是做一個小網站而已,要做大,就不是隨便買個就行的,要有比較低的維護成本,要能夠方便的擴 展和二次開發。那接下來就是第二個問題:買一個什麼樣的網站?答案是:輕量一點的,簡單一點的,於是買了這樣一個架構的網 站:LAMP(Linux+Apache+MySQL+PHP)。這個直到現在還是一個很常用的網站架構模型。這種架構的優點是:無需編譯,發布快 速,PHP功能強大,能做從頁面渲染到數據訪問所有的事情,而且用到的技術都是開源的,免費。
當時我們是從一個美國人那裡買來的一個網站系統,這個系統的名字叫做 PHPAuction(他們的官方網站http://www.phpauction.net,這個名字很直白,一眼就看出來這個系統是用什麼語言做的、 是干什麼用的),PHPAuction有好幾個版本,我們買的是最高版的,功能比較多,而且最重要的是對方提供了源代碼。最高版比較貴,花了我們 2000 美金(貌似現在降價了,只要 946 美元)。買來之後不是直接就能用的,需要很多本地化的修改,例如頁面模板改的漂亮一點,頁頭頁腳加上自己的站點簡介等,其中最有技術含量的是對資料庫進行 了一個修改。原來是從一個資料庫進行所有的讀寫操作,拿過來之後多隆把它給拆分成一個主庫、兩個從庫,讀寫分離。這么做的好處有幾點:存儲容量增加了,有 了備份,使得安全性增加了,讀寫分離使得讀寫效率提升了。這樣整個系統的架構就如下圖所示:
淘寶架構框架
其中 Pear DB 是一個 PHP 模塊,負責數據訪問層。另外也用開源的論壇系統 PHPBB(http://www.phpbbchina.com )搭建了一個小的論壇社區,虛竹負責機器采購、配置、架設等,三豐和多隆負責編碼,他 們把交易系統和論壇系統的用戶信息打通,給運營人員開發出後台管理(admin系統)的功能,把交易類型從只有拍賣這一種增加為拍賣、一口價、求購商品、 海報商品(意思是還沒推出的商品,先掛個海報出來)這四種。(PHPAuction 只有拍賣的交易,Auction 即拍賣的意思。@_行癲在微博中提到:今天 eBay 所有交易中拍賣交易仍然佔了 40%,而在中國,此種模式在淘寶幾乎從一開始就未能占據優勢,如今在主流的交易中幾乎可以忽略不計。背後的原因一直令人費解。我大致可以給出其中一種解 釋,eBay 基本在發達國家展開業務,製造業外包後,電子商務的基本群體大多隻能表現為零散的個體間交易。)
在經歷了另外一些有趣的事情之後(這些有趣的事情包括「淘寶」這個名字的由來,員工花名的由來等等,由於本書主要描述技術方面的故事,對這些有興趣的可以去網上找),網站開始上線運行了。
淘寶架構框架
在接下來的大半年時間里,這個網站迅速顯示出了它的生機。這里有必要提一下當時的市場環境,非典(SARS)的肆虐使得大家都不敢出門,尤其是去商場之 類人多的地方。另外在神州大地上最早出現的 C2C 網站易趣也正忙的不亦樂乎,2002 年 3 月,eBay 以 3000 萬美元收購了易趣公司 33% 的股份,2003 年 6 月以 1.5 億美元收購了易趣公司剩餘 67% 的股份。當時淘寶網允許買賣雙方留下聯系方式,允許同城交易,整個操作過程簡單輕松。而 eBay 為了收取交易傭金,是禁止這么做的,這必然增加了交易過程的難度。而且 eBay 為了全球統一,把易趣原來的系統替換成了美國 eBay 的系統,用戶體驗一下子全變了,操作起來非常麻煩,這等於是把積累的用戶拱手送給了淘寶。為了不引起 eBay 的注意,淘寶網在 2003 年裡一直聲稱自己是一個「個人網站」。由於這個創業團隊強大的市場開拓和運營能力,淘寶網發展的非常迅猛,2003 年底就吸引了注冊用戶XXX,最高每日 31 萬PV,從 5 月到年底成交額 4000 萬。這沒有引起 eBay 的注意,卻引起了阿里巴巴內部很多員工的注意,他們覺得這個網站以後會成為阿里巴巴強勁的對手。甚至有人在內網發帖,忠告管理層要警惕這個剛剛起步的網 站,但管理層似乎無動於衷。(這個團隊的保密工作做的真好)
在市場和運營的後方,淘寶網的技術團隊也在快速的做著系統的改進和創新。這里還有個有趣的故事,eBay 和易趣早期都有員工在論壇上響應用戶的需求,eBay 的論壇用粉紅色背景來區分員工的發言,易趣的員工在論壇上昵稱都選各種豆豆,例如黃豆豆、蠶豆豆等。淘寶在討論運營策略的時候提到這個問題,要求所有的員 工都去論壇上回答用戶的問題。最早回答問題的任務落在小寶頭上,那我們用什麼名字好呢?「淘淘」?「寶寶」?小寶都不滿意,太女性化了。討論了很久之後, 小寶靈光乍現,乾脆取個名字叫「小寶」吧,小寶帶七個老婆來開店,迎接各位客官,很有故事性。於是很多武俠小說中的人物開始在論壇中行俠仗義,這些昵稱下 面標志著「淘寶店小二」,他們回答著各種各樣的問題,快速響應著用戶的各種需求。如果是技術上能解決的,幾個人商量一下,馬上就開發、測試、發布上線。反 過來對比一下,易趣被 eBay 收購之後,系統更換成了全球通用的版本,響應用戶的一個需求需要層層審批,反應速度自然慢了下來。
當時淘寶第一個版本的系統裡面已經包含了商品發布、管理、搜索、商品詳情、出價購買、評價投訴、我的淘寶這些功能(現在主流程中也是這些模塊。在 2003 年 10 月增加了一個功能節點:「安全交易」,這個是支付寶的雛形)。隨著用戶需求和流量的不斷增長,系統上面做了很多的日常改進,伺服器由最初的一台變成了三 台,一台負責發送 email、一台負責運行資料庫、一台負責運行 Web App。過一段時間之後,商品搜索的功能佔用資料庫資源太大了(用like搜索的,很慢),又從阿里巴巴中文站搬過來他們的搜索引擎 iSearch,起初 iSearch 索引的文件放在硬碟上,隨著數據量的增長,又采購了 NetApp 伺服器放置 iSearch。
如此快節奏的工作,其實大家都累得不行,有人就提議大家隨時隨地的鍛煉身體,可是外面 SARS 橫行,在一個一百多方的房子里,怎麼鍛煉呢?高挑美女阿珂提議大家練習提臀操,這個建議遭到男士的一致反對,後來虛竹就教大家練習倒立,這個大家都能接 受。於是這個倒立的傳統一直延續至今,和花名文化、武俠文化一並傳承了下來。
隨著訪問量和數據量的飛速上漲,問題很快就出來了,第一個問題出現在資料庫上。MySQL 當時是第 4 版的,我們用的是默認的存儲引擎 MyISAM,這種類型讀數據的時候會把表鎖住(我們知道 Oracle 在寫數據的時候會有行鎖,讀數據的時候是沒有的),尤其是主庫往從庫上面寫數據的時候,會對主庫產生大量的讀操作,使得主庫性能急劇下降。這樣在高訪問量 的時候,資料庫撐不住了。另外,當年的 MySQL 不比如今的 MySQL,在數據的容量和安全性方面也有很多先天的不足(和 Oracle 相比)。
二、Oracle/支付寶/旺旺
淘寶網作為個人網站發展的時間其實並不長,由於它太引人注目了,馬雲在 2003 年 7 月就宣布了這個是阿里巴巴旗下的網站,隨後在市場上展開了很成功的運作。最著名的就是利用中小網站來做廣告,突圍 eBay 在門戶網站上對淘寶的廣告封鎖。上網比較早的人應該還記得那些在右下角的彈窗和網站腰封上一閃一閃的廣告。市場部那位到處花錢買廣告的傢伙,太能花錢了, 一出手就是幾百萬,他被我們稱為「大少爺」。
「大少爺」們做的廣告,帶來的就是迅速上漲的流量和交易量。在 2003 年底,MySQL 已經撐不住了,技術的替代方案非常簡單,就是換成 Oracle。換 Oracle 的原因除了它容量大、穩定、安全、性能高之外,還有人才方面的原因。在 2003 年的時候,阿里巴巴已經有一支很強大的 DBA 團隊了,有馮春培、汪海(七公)這樣的人物,後來還有馮大輝(@fenng)、陳吉平(拖雷)。這樣的人物牛到什麼程度呢?Oracle 給全球的技術專家頒發一些頭銜,其中最高級別的叫 ACE(就是撲克牌的「尖兒」,夠大的吧),被授予這個頭銜的人目前全球也只有 300 多名(名單在這里: http://apex.oracle.com/pls/otn/f?p=19297:3 ),當年全球只有十幾名。有如此強大的技術後盾,把 MySQL 換成 Oracle 是順理成章的事情。
但更換資料庫不是只換個庫就可以的,訪問方式,SQL 語法都要跟著變,最重要的一點是,Oracle 並發訪問能力之所以如此強大,有一個關鍵性的設計 —— 連接池。但對於 PHP 語言來說它是放在 Apache 上的,每一個請求都會對資料庫產生一個連接,它沒有連接池這種功能(Java 語言有 Servlet 容器,可以存放連接池)。那如何是好呢?這幫人打探到 eBay 在 PHP 下面用了一個連接池的工具,是 BEA 賣給他們的。我們知道 BEA 的東西都很貴,我們買不起,於是多隆在網上尋尋覓覓,找到一個開源的連接池代理服務 SQLRelay(http://sourceforge.jp/projects/freshmeat_sqlrelay ),這個東西能夠提供連接池的功能,多隆對它進行了一些功能改進之後就拿來用了。這樣系統的架構就變成了如下的樣子:
淘寶架構框架
數據一開始是放在本地的,DBA 們對 Oracle 做調優的工作,也對 SQL 進行調優。後來數據量變大了,本地存儲不行了。買了 NAS(Network Attached Storage:網路附屬存儲),NetApp 的 NAS 存儲作為了資料庫的存儲設備,加上 Oracle RAC(Real Application Clusters,實時應用集群)來實現負載均衡。七公說這實際上是走了一段彎路,NAS 的 NFS(Network File System)協議傳輸的延遲很嚴重,但那時侯不懂。後來采購了 Dell 和 EMC 合作的 SAN 低端存儲,性能一下子提升了 10 幾倍,這才比較穩定了。再往後來數據量更大了,存儲的節點一拆二、二拆四,RAC 又出問題了。這才踏上了購買小型機的道路。在那段不穩定的時間里,七公曾經在機房住了 5 天 5 夜。
替換完資料庫,時間到了 2004 年春天,俗話說「春宵一刻值千金」,但這些人的春宵卻不太好過了。他們在把數據的連接放在 SQLRelay 之後就噩夢不斷,這個代理服務經常會死鎖,如同之前的 MySQL 死鎖一樣。雖然多隆做了很多修改,但當時那個版本內部處理的邏輯不對,問題很多,唯一解決的辦法就是「重啟」它的服務。這在白天還好,連接上機房的服務 器,把進程殺掉,然後開啟就可以了,但是最痛苦的是它在晚上也要死掉,於是工程師們不得不 24 小時開著手機,一旦收到「 SQLRelay 進程掛起」的簡訊,就從春夢中醒來,打開電腦,連上機房,重啟服務。後來乾脆每天睡覺之前先重啟一下。做這事最多的據說是三豐,他現在是淘寶網的總裁。現 在我們知道,任何牛B的人物,都有一段苦B的經歷。
微博上有人說「好的架構是進化來的,不是設計來的」。的確如此,其實還可以再加上一句「好的功能也是進化來的,不是設計來的」。在架構的進化過程中,業 務的進化也非常迅猛。最早的時候,買家打錢給賣家都是通過銀行轉賬匯款,有些騙子收了錢卻不發貨,這是一個很嚴重的問題。然後這伙人研究了 PayPal 的支付方式,發現也不能解決問題。後來這幾個聰明的腦袋又想到了「擔保交易」這種第三方託管資金的辦法。於是在 2003 年 10 月,淘寶網上面上線了一個功能,叫做「安全交易」,賣家選擇支持這種功能的話,買家會把錢交給淘寶網,等他收到貨之後,淘寶網再把錢給賣家。這就是現在的 支付寶,在前兩天(2012.2.21)年會上,支付寶公布 2011 年的交易筆數已經是 PayPal 的兩倍。這個劃時代的創新,其實就是在不斷的思索過程中的一個靈光乍現。
當時開發「安全交易」功能的是茅十八和他的徒弟苗人鳳(茅十八開發到一半去上海讀 MBA 去了,苗人鳳現在是支付寶的首席業務架構師),開發跟銀行網關對接的功能的是多隆。當時多數銀行的網站已經支持在線支付了,但多隆告訴我,他們的網關五花 八門,用什麼技術的都有,必須一家一家去接。而且他們不保證用戶付錢了就一定扣款成功、不保證扣款成功了就一定通知淘寶、不保證通知淘寶了就一定能通知 到、不保證通知到了就不重復通知。這害苦了苗人鳳,他必須每天手工核對賬單,對不齊的話就一定是有人的錢找不到地方了,少一分錢都睡不著覺。另外他為了測 試這些功能,去杭州所有的銀行都辦理了一張銀行卡。一堆銀行卡擺在桌子上,不知道的人還以為這個傢伙一定很有錢,其實裡面都只是十塊八塊的。現在我們再一 次知道,任何牛B的人物,都必須有一段苦B的經歷。
有人說淘寶打敗易趣(eBay 中國)是靠免費,其實這只是原因之一。如果說和易趣過招第一招是免費的話,這讓用戶沒有門檻就願意來,那第二招就是「安全支付」,這讓用戶放心付款,不必 擔心被騙。在武俠小說中真正的高手飛花摘葉即可傷人,他們不會局限於一招兩招,一旦出手,連綿不絕。而淘寶的第三招就是「旺旺」,讓用戶在線溝通。其實淘 寶旺旺也不是自己生出來的,是從阿里巴巴的「貿易通」復制過來的。從 2004 年 3 月開始,「叮咚、叮咚」這個經典的聲音就回盪在所有淘寶買家和賣家的耳邊,「親,包郵不?」,「親,把零頭去掉行不?」,這親切的砍價聲造就了後來的「淘 寶體」。有人說中國人就是愛砍價,雖然筆者體會不到砍價成功後有多少成就感,但每次我去菜市場,看到大媽們砍價砍得天昏地暗,那滿足的勁頭堪比撿到了錢, 我就深刻的理解了淘寶旺旺在交易過程中的價值。我猜 eBay 也體會不到砍價的樂趣,他們一直不允許買賣雙方在線聊天,收購了 skype 之後也沒有用到電子商務中去。
旺旺在推出來沒多久,就惹了一個法律方面的麻煩。有個做雪餅的廠家找上門來,說我們侵權了,他們家的雪餅很好吃,牛奶也做得不錯,我們都很喜歡。然後我 們就在旺旺的前面加了兩個字,叫做「淘寶旺旺」。在那個野蠻生長的階段,其實很多產品都是想到什麼就做什麼,例如我們還搭建過一個聊天室,但似乎淘寶網不 是一個閑聊的地方,這個聊天室門可羅雀,一段時間後就關閉掉了。
SQLRelay 的問題搞得三豐他們很難睡個囫圇覺,那一年開半年會的時候,公司特地給三豐頒了一個獎項,對他表示深切的安慰。但不能總這樣啊,於是,2004 年的上半年開始,整個網站就開始了一個脫胎換骨的手術。
三、淘寶技術發展(Java時代:脫胎換骨)
我的師父黃裳@岳旭強曾經說過,「好的架構圖充滿美感」,一個架構好不好,從審美的角度就能看得出來。後來我看了很多系統的架構,發現這個言論基本成立。那麼反觀淘寶前面的兩個版本的架構,你看哪個比較美?
淘寶架構框架
淘寶架構框架
顯然第一個比較好看,後面那個顯得頭重腳輕,這也註定了它不是一個穩定的版本,只存活了不到半年的時間。2004 年初,SQL Relay 的問題解決不了,資料庫必須要用 Oracle,那從哪裡動刀?只有換開發語言了。換什麼語言好呢?Java。Java 是當時最成熟的網站開發語言,它有比較良好的企業開發框架,被世界上主流的大規模網站普遍採用,另外有 Java 開發經驗的人才也比較多,後續維護成本會比較低。
到 2004 年上半年,淘寶網已經運行了一年的時間,這一年積累了大量的用戶,也快速的開發了很多功能,當時這個網站已經很龐大了,而且新的需求還在源源不斷的過來。 把一個龐大的網站的開發語言換掉,無異於脫胎換骨,在換的過程中還不能拖慢業務的發展,這無異於邊換邊跑,對時間和技術能力的要求都非常高。做這樣的手 術,需要請第一流的專家來主刀。現在再考一下讀者,如果你在這個創業團隊裡面,請什麼樣的人來做這事?我們的答案是請 Sun 的人。沒錯,就是創造 Java 語言的那家公司,世界上沒有比他們更懂 Java 的了。除此之外,還有一個不為人知的原因,……(此處和諧掉 200 字,完整版見 aliway)
這幫 Sun 的工程師的確很強大,在筆者 2004 年底來淘寶的時候,他們還在,有幸跟他們共事了幾個月。現在擺在他們面前的問題是用什麼辦法把一個龐大的網站從 PHP 語言遷移到 Java?而且要求在遷移的過程中,不停止服務,原來系統的 bugfix 和功能改進不受影響。親,你要是架構師,你怎麼做?有人的答案是寫一個翻譯器,如同把中文翻譯成英文一樣,自動翻譯。我只能說你這個想法太超前了,換個說 法就是「too simple, sometimes naive」。當時沒有,現在也沒有人能做到。他們的大致方案是給業務分模塊,一個模塊一個模塊的替換。如用戶模塊,老的 member.taobao.com 繼續維護,不添加新功能,新的功能先在新的模塊上開發,跟老的共用一個資料庫,開發完畢之後放到不同的應用集群上,另開個域名 member1.taobao.com,同時替換老的功能,替換一個,把老的模塊上的功能關閉一個,逐漸的把用戶引導到 member1.taobao.com,等所有功能都替換完畢之後,關閉 member.taobao.com。後來很長時間裡面都是在用 member1 這樣奇怪的域名,兩年後有另外一家互聯網公司開始做電子商務了,我們發現他們的域名也叫 member1.xx.com、auction1.xx.com……
說了開發模式,再說說用到的 Java MVC 框架,當時的 Struts 1.x 是用的比較多的框架,但是用過 WebWork 和 Struts 2 的同學可能知道,Struts 1.x 在多人協作方面有很多致命的弱點,由於沒有一個輕量框架作為基礎,因此很難擴展,這樣架構師對於基礎功能和全局功能的控制就很難做到。而阿里巴巴的 18 個創始人之中,有個架構師,在 Jakarta Turbine 的基礎上,做了很多擴展,打造了一個阿里巴巴自己用的 MVC 框架 WebX (http://www.openwebx.org/docs/Webx3_Guide_Book.html), 這個框架易於擴展,方便組件化開發,它的頁面模板支持 JSP 和 Velocity 等、持久層支持 iBATIS 和 Hibernate 等、控制層可以用 EJB 和 Spring(Spring 是後來才有的)。項目組選擇了這個強大的框架,這個框架如果當時開源了,也許就沒有 WebWork 和 Struts 2 什麼事了。另外,當時 Sun 在全世界大力推廣他們的 EJB,雖然淘寶的架構師認為這個東東用不到,但他們還是極力堅持。在經歷了很多次的技術討論、爭論和爭吵之後,這個系統的架構就變成了下圖的樣子:
淘寶架構框架
Java 應用伺服器是 Weblogic,MVC 框架是 WebX、控制層用了 EJB、持久層是 iBATIS,另外為了緩解資料庫的壓力,商品查詢和店鋪查詢放在搜索引擎上面。這個架構圖是不是好看了一點了,親?
這幫 Sun 的工程師開發完淘寶的網站之後,又做了一個很牛的網站,叫「支付寶」。
其實在任何時候,開發語言本身都不是系統的瓶頸,業務帶來的壓力更多的是壓到了數據和存儲上。上面一篇也說到,MySQL 撐不住了之後換 Oracle,Oracle 的存儲一開始在本機上,後來在 NAS 上,NAS 撐不住了用 EMC 的 SAN 存儲,再然後 Oracle 的 RAC 撐不住了,數據的存儲方面就不得不考慮使用小型機了。在 2004 年的夏天,DBA 七公、測試工程師郭芙和架構師行癲,踏上了去北京測試小型機的道路。他們帶著小型機回來的時候,我們像歡迎領袖一樣的歡迎他們,因為那個是我們最值錢的設 備了,價格表上的數字嚇死人。小型機買回來之後我們爭相合影,然後 Oracle 就跑在了小型機上,存儲方面從 EMC 低端 cx 存儲到 Sun oem hds 高端存儲,再到 EMC dmx 高端存儲,一級一級的往上跳。
到現在為止,我們已經用上了 IBM 的小型機、Oracle 的資料庫、EMC 的存儲,這些東西都是很貴的,那些年可以說是花錢如流水啊。有人說過「錢能解決的問題,就不是問題」,但隨著淘寶網的發展,在不久以後,錢已經解決不了我 們的問題了。花錢買豪華的配置,也許能支持 1 億 PV 的網站,但淘寶網的發展實在是太快了,到了 10 億怎麼辦?到了百億怎麼辦?在 N 年以後,我們不得不創造技術,解決這些只有世界頂尖的網站才會遇到的問題。後來我們在開源軟體的基礎上進行自主研發,一步一步的把 IOE(IBM 小型機、Oracle、EMC 存儲)這幾個「神器」都去掉了。這就如同在《西遊記》裡面,妖怪們拿到神仙的兵器會非常厲害,連猴子都能夠打敗,但最牛的神仙是不用這些神器的,他們揮一 揮衣袖、翻一下手掌就威力無比。去 IOE 這一部分會在最後一個章節裡面講,這里先埋個千里伏筆。
欲知後事如何,且聽下回分解。
❻ ecshop mysql 資料庫存放在哪
資料庫的文件在includes/cls_mysql.php
ECShop其他的目錄:
┣ activity.php 活動列表
┣ affiche.php 廣告處理文件
┣ affiliate.php 生成商品列表
┣ article.php 文章內容
┣ article_cat.php文章分類
┣ auction.php 拍賣前台文件
┣ brand.php 品牌列表
┣ captcha.php 生成驗證碼
┣ catalog.php 列出所以分類及品牌
┣ category.php 商品分類
┣ comment.php 提交用戶評論
┣ compare.php 商品比較程序
┣ cycle_image.php 輪播圖片程序
┣ feed.php RSS Feed 生成程序
┣ flow.php 購物流程
┣ gallery.php 商品相冊
┣ goods.php 商品詳情
┣ goods_script.php 生成商品列表
┣ group_buy.php 團購商品前台文件
┣ index.php 首頁文件
┣ myship.php 支付配送DEMO
┣ pick_out.php 選購中心
┣ receive.php 處理收回確認的頁面
┣ region.php 地區切換程序
┣ respond.php 支付響應頁面
┣ robots.txt
┣ search.php 搜索程序
┣ sitemaps.php google sitemap 文件
┣ snatch.php 奪寶奇兵前台頁面
┣ tag_cloud.php 標簽雲
┣ topic.php 專題前台
┣ user.php 會員中心
┣ vote.php 調查程序
┣ wholesale.php 批發前台文件
┣ admin文件夾
┃ ┣ account_log.php 管理中心帳戶變動記錄
┃ ┣ admin_logs.php 記錄管理員操作日誌
┃ ┣ ads.php 廣告管理程序
┃ ┣ adsense.php 站外JS投放的統計程序
┃ ┣ ad_position.php廣告位置管理程序
┃ ┣ affiliate.php 程序說明
┃ ┣ affiliate_ck.php 程序說明
┃ ┣ agency.php 管理中心辦事處管理
┃ ┣ area_manage.php 地區列表管理文件
┃ ┣ article.php 管理中心文章處理程序文件
┃ ┣ articlecat.php 文章分類管理程序
┃ ┣ article_auto.php
┃ ┣ attention_list.php
┃ ┣ attribute.php 屬性規格管理
┃ ┣ auction.php 管理中心拍賣活動管理
┃ ┣ bonus.php 紅包類型的處理
┃ ┣ brand.php管理中心品牌管理
┃ ┣ captcha_manage.php
┃ ┣ card.php 賀卡管理程序
┃ ┣ category.php 商品分類管理程序
┃ ┣ check_file_priv.php 系統文件檢測
┃ ┣ comment_manage.php 用戶評論管理程序
┃ ┣ convert.php 轉換程序
┃ ┣ cron.php 計劃任務
┃ ┣ database.php 資料庫管理
┃ ┣ ebao_commend.php 易寶推薦
┃ ┣ edit_languages.php 管理中心語言項編輯(前台語言項)
┃ ┣ email_list.php 郵件列表管理
┃ ┣ favourable.php 管理中心優惠活動管理
┃ ┣ flashplay.php
┃ ┣ flow_stats.php 綜合流量統計
┃ ┣ friend_link.php 友情鏈接管理
┃ ┣ gen_goods_script.php 生成顯示商品的js代碼
┃ ┣ get_password.php 找回管理員密碼
┃ ┣ goods.php 商品管理程序
┃ ┣ goods_auto.php
┃ ┣ goods_batch.php 商品批量上傳、修改
┃ ┣ goods_booking.php 缺貨處理管理程序
┃ ┣ goods_export.php
┃ ┣ goods_type.php 商品類型管理程序
┃ ┣ group_buy.php 管理中心團購商品管理
┃ ┣ guest_stats.php 客戶統計
┃ ┣ index.php 控制台首頁
┃ ┣ integrate.php 第三方程序會員數據整合插件管理程序
┃ ┣ magazine_list.php
┃ ┣ mail_template.php 管理中心模版管理程序
┃ ┣ message.php 管理中心管理員留言程序
┃ ┣ navigator.php
┃ ┣ order.php 訂單管理
┃ ┣ order_stats.php 訂單統計
┃ ┣ pack.php 包裝管理程序
┃ ┣ payment.php 支付方式管理程序
┃ ┣ picture_batch.php 圖片批量處理程序
┃ ┣ privilege.php 管理員信息以及許可權管理程序
┃ ┣ sale_general.php 銷售概況
┃ ┣ sale_list.php 銷售明細列表程序
┃ ┣ sale_order.php 商品銷售排行
┃ ┣ searchengine_stats.php 搜索引擎關鍵字統計
┃ ┣ search_log.php
┃ ┣ shipping.php 配送方式管理程序
┃ ┣ shipping_area.php 配送區域管理程序
┃ ┣ shophelp.php 幫助信息管理程序
┃ ┣ shopinfo.php 網店信息管理頁面
┃ ┣ shop_config.php 管理中心商店設置
┃ ┣ sitemap.php 站點地圖生成程序
┃ ┣ sms.php 簡訊模塊 之 控制器
┃ ┣ snatch.php 奪寶奇兵管理程序
┃ ┣ sql.php sql管理程序
┃ ┣ tag_manage.php 後台標簽管理
┃ ┣ template.php 管理中心模版管理程序
┃ ┣ topic.php 專題管理
┃ ┣ users.php 會員管理程序
┃ ┣ users_order.php 會員排行統計程序
┃ ┣ user_account.php 會員帳目管理(包括預付款,余額)
┃ ┣ user_msg.php 客戶留言
┃ ┣ user_rank.php 會員等級管理程序
┃ ┣ view_sendlist.php
┃ ┣ virtual_card.php 虛擬卡商品管理程序
┃ ┣ visit_sold.php 訪問購買比例
┃ ┣ vote.php 調查管理程序
┃ ┣ wholesale.php 管理中心批發管理
┃ ┣ help 的目錄 後台操作幫助文件
┃ ┣ images 的目錄
┃ ┣ includes 的目錄
┃ ┃ ┣ cls_exchange.php 後台自動操作資料庫的類文件
┃ ┃ ┣ cls_google_sitemap.php Google sitemap 類
┃ ┃ ┣ cls_phpzip.php ZIP 處理類
┃ ┃ ┣ cls_sql_mp.php 資料庫導出類
┃ ┃ ┣ inc_menu.php 管理中心菜單數組
┃ ┃ ┣ init.php 管理中心公用文件
┃ ┃ ┣ lib_goods.php 管理中心商品相關函數
┃ ┃ ┣ lib_main.php 管理中心公用函數庫
┃ ┃ ┗ lib_template.php 管理中心模版相關公用函數庫
┃ ┣ styles 的目錄
┃ ┣ templates 的目錄
┃ ┗ js 的目錄
┃ ┣ colorselector.js
┃ ┣ common.js
┃ ┣ listtable.js
┃ ┣ md5.js
┃ ┣ selectzone.js
┃ ┣ tab.js
┃ ┣ todolist.js
┃ ┣ topbar.js
┃ ┗ validator.js 表單驗證類
┣ api 的目錄
┃ ┣ checkorder.php 檢查訂單 API
┃ ┣ cron.php
┃ ┗ init.php API 公用初始化文件
┣ cert 的目錄
┣ data 的目錄
┃ ┣ ffiliate.html
┃ ┣ goods_script.html
┃ ┣ order_print.html
┃ ┣ afficheimg 的目錄
┃ ┣ brandlogo 的目錄
┃ ┣ captcha 的目錄 驗證碼背景圖片存放位置
┃ ┣ cardimg 的目錄
┃ ┣ feedbackimg 的目錄
┃ ┣ images 的目錄
┃ ┣ packimg 的目錄
┃ ┗ sqldata 的目錄
┣ images 的目錄
┃ ┗ upload 的目錄
┃ ┣ File 文件上傳存放處
┃ ┣ Flash flash上傳存放處
┃ ┣ Image 圖片上傳存放處
┃ ┗ Media 視頻上傳存放處
❼ 急,求助ECshop拍賣
ecshop本身自己就有競拍功能後台找一下,然後進行二次開發能滿足條件
❽ php 網上競拍,怎樣在網頁上做一個按鈕,提交要競拍的價格, 然後網頁就能實時更新,不需要刷新網頁!
使用 ajax,jquery很容易的,點擊調用這個js
function a(){
var price=$('#price').val();
$.ajax({
type: 'get',
datatype: 'html',
url: '這是處理php文件的url,可以加個參數如&t=new,方便php頁面接收&price='+price ,
success: function (data) {
$('#b').html(data);//b是顯示區域的id
}
});
}
php 頁面裡面
if($_REQUEST['t']=='new'){
$price=$_REQUEST['price'];
此處更新資料庫,更新成功後,echo $price;die();
}
❾ PHP 添加黑名單
用戶啦黑名單,在用戶數據表增加 一個欄位名,比如"status",1:正常,2:VIP,3.....9:黑名單
就這么簡單
如果沒有會員,那就把IP拉入黑名單, 創建一個黑名單數據表, 網上有獲取IP地址的封裝函數