私房课 http://www.sifangke.com 因为有冬天的寒冷,才会有对春天的期待。 Wed, 09 Sep 2015 03:18:57 +0000 zh-CN hourly 1 http://wordpress.org/?v=4.3.9 如何白手起家挣到一百万? http://www.sifangke.com/2015/09/money-lieft/ http://www.sifangke.com/2015/09/money-lieft/#comments Wed, 09 Sep 2015 03:18:57 +0000 http://www.sifangke.com/?p=662 有哪些多挣钱的兼职或者外快的,当然也可以自己创业,有什么项目和方法,注意我说的是个人白手起家每天努力赚钱,不依靠别人的帮助,不考虑雇人什么的,完全是想自己一个人实现一百万的目标。

补充1: 一开始只是贴个图写了几百个字,像所有上知乎的青年一样炫耀下自己的文笔和情怀,没想到招来一些网络上是英雄,生活中是狗熊的喷子,的确,经历是超出了他们的正常理解,只好展开细节来说说。

补充2: 补充如何在生活中发现机会

补充3: 补充发觉隐形机会商机

补充4: 15888赞后更新 第四阶段 竞争中如何生存和保持利润

嗯,这个话题我觉得我太有资格回答了

从高三毕业开始创业,至今已经有14年了,帅哥熬成了大叔,到21岁那一年第一次用了8个月赚到100万现金,那年是2005年, 那会的100多万含金量是很高的,那会南京河西的房子4000,现在3万,感触比较深的是家里人辛苦几十年还没我干两年收入高,当时很飘,相当的飘,后来栽了个大跟头,之后陆续做过好几个年盈利100-600万的项目,但一直停留在百万级别,没找到突破千万的方法。

今年33岁了(83年的),自己的公司一年利润在千万以上,目前在股市里的资产,一天的浮动都有百万以上。(有可能是亏损,也有可能是盈利,不过都是波动性盈亏)

题主的问题是如何白手起家靠一个人赚到100万,我觉得这个是可以做到的,但是要分阶段,不太可能从一个从无经商经验的人突然转变成一个人折腾点东西就能赚百万(多个人一起有可能)。我先把我个人的阶段拆解开来,给你一个直观的感受。

    • 第一阶段:打黑工,饭店服务生,送PIZZA (读书时兼职工作)
      时间: 18岁-19岁
      年收入:<10万
      人数: 1个人
      项目初始投入:时间

 

  • 第二阶段:做二手汽车买卖,做华人碟片生意
    时间: 20岁-21岁
    年收入: 几十万
    人数: 1个人
    项目初始投入:5万人民币不到
  • 第三阶段:做电子商务贸易
    时间: 22岁-23岁
    年收入: 100万+
    人数: 2个人(其中1个老婆,一家人就当一个人吧)
    项目初始投入:5-8万 具体忘记了
  • 第四阶段:拓展电子商务生意
    时间: 23-29岁
    年收入: 300-500万左右
    人数:5-7人
    项目投入:延续第三阶段,所以无投入
  • 第五阶段: 股票投资
    时间: 26岁左右
    年收入:200万 (后来亏损还倒贴500万)
    人数:1人
    项目初始投入:150-200万
  • 第六阶段: 网赚Affiliate
    时间: 28岁左右
    年收入:250万
    人数: 1人
    项目初始投入:不到1万
    备注:兼职搞的,抓住了一个好机会,只写了几篇文章,挂了个链接而已,累计花的时间都不超过30小时,也算是所有做过生意里投入最小,最省力,最不可思议的一笔,有兴趣以后可以写点细节,不过这个生意只做了1年多,后面网赚的广告主停了
  • 第七阶段:互联网行业
    时间:29岁左右
    年收入1000万+ (具体数字不透露了)
    人数: 团队36人
    初始投入:7-10万左右
  • 第八阶段:股市投资
    时间: 31岁
    年收入:1000万
    人数: 1人
    初始投入:900万

这九个阶段不是严格按时间顺序来列的,其中第六阶段不能算‘阶段’,但为了满足题主的问题,暂且把它列为一个阶段。

你可以发现,在第三,第五,第六,第八阶段都是只通过个人的努力完成的百万收入,第三阶段是第一次真正意义的收入过百万,我印象很深刻,当时在第三阶段之前我很困惑,为什么做了各种小生意都无法突破100万收入,同样的困惑还出现在第四阶段末期,生意长期停留在数百万,完全看不到突破1000万利润的可能性。但最终这两次困惑都解开了,我总结为‘积累’,在你完成一个重要的Milestone之前,充分的生意积累是很重要的,当你做到一个极致点的时候,你会‘顿悟’一下,就这么‘破冰’了。

赚钱并不困难,前提是你要找到对的门路和对赚钱的理解。赚100万有赚100万的门道,赚1000万有1000万的门道,赚1亿有赚1亿的门道;不同的门道需要不同的钥匙,找到钥匙(思维)是达到目标的敲门砖。(但这个最难培养,个性,性格,视野)

而且我可以告诉你,赚100万和赚1000万要的对本金的要求可以做到几乎没有区别(股票投资除外),美国有一个站长,做了一个网站叫plenty of fish,一个人从2003年运营到2007年,每年从Google Adsens广告上拿到1000万加币,约合人民币5000多万的收入,而且这厮每天只工作两个多小时,(和我阶段6的性质差不多,人家规模化了)可见赚钱多少和投入资金,员工数量,甚至时间可以没有直接关系,而对‘商业模式’和‘时机’有着极高的要求,我个人的经历也是同样如此,你可以看到我九个阶段的初始投资都没有超过10万,当然初始投资不代表累计投资,比如说我目前的生意,光员工工资和其他开销一月就大几十万,是初始投入的几倍,更不用说其他费用了。这里说的初始投资是指当初我投入了多少钱让这个生意运转起来,这里面所有的生意后续的投资都是通过初始投资盈利回来的。所以我觉得我有足够的经验和资格告诉你如何赚100万。

赚100万的门道我可以告诉你,你要想赚到100万,就必须找到市场的一个‘需求’,请默念这句话100遍。什么是需求?需求不是你凭大脑想出来的,是一个真正的市场需求,我看现在很多创业者的项目就是扯蛋,根本没有找到市场的真正需求!找到需求是第一步,第二步就是你需要做一个满足市场需求的‘与众不同’的产品,也就是说你要在’差异化‘上做文章!你要真理解我说的这两点和执行下去,我不相信你赚不到100万,赚100万太容易了。

当然这是赚100万的功夫,赚1000万的功夫就又不一样了,今天先不写了,大家热情要高,我就考虑抖抖底!完全看心情,没赞美的也不写,哼!

最后任何一个项目别人能做成功,即便告诉你,不代表你可以复制。我觉得这最重要的还是思维,你必须培养和锻炼你的赚钱思维。有了这个思维,项目只是随之而来的产物。

补充1 :什么是真正的市场需求
——————————————————————————————————-
前面写到赚100万很容易,只要抓住‘市场需求’和做出一个‘差异化产品’就可以,很多人没听懂,评论里有人问快餐外卖不就是一个市场需求吗?如何做出差异化产品呢。

我来给大家仔细说说什么是赚100万的‘市场需求’ ,提到快餐的朋友说的是一个‘显性市场需求’,什么叫显性市场需求?我每天要吃饭吧,所以开个饭店满足就是显性市场需求;我每天要上网吧,那卖台电脑给我就是显性市场需求,明白了吧?而要赚100万就必须找市场的隐性需求!(想赚100万的,务必默念100遍)这就是我说的赚100万的第一步 ‘找到市场需求’的真正涵义。那什么是隐性的市场需求?我用自身的案例来说吧。

我读大一的时候,在新西兰,那会是2003年,有大量的中国人去国外留学,新西兰,澳洲都是热门的留学圣地,虽然说能出国的人家里条件都不差,但坦白的说当时我算出国里条件比较差的,所以一到国外没两个月就去了一家泰国饭店打黑工了,我一直在找任何可以赚钱的机会,也不放过任何一个机会。当时的我显然不可能从理论的角度说清楚什么是‘显性市场需求’,什么是‘隐性市场需求’。但我凭直觉做了很多‘隐形市场需求’的生意。

我发现很多中国留学生非常的无聊,在新西兰商场8点就关门,周1-5酒吧都没什么人,8点后街道上车都很少,很多刚去的小留学生大多都窝在家里上上网,可以说是无聊之极,他们也不知道能干些什么。

我发现了大家有’打发时间‘的显性市场需求,但做什么产品可以满足这个需求呢?可以开一个华人聚会的奶茶社(有马来西亚人开的,生意异常火爆,名字叫嬷嬷茶),但是成本过高,对于一个还拿着5刀/小时黑工,连打工都比正常人少一半的刚进入这个社会游戏的级数为0的超级屌丝来说,这些需要‘本金投入’的生意都不靠谱,那怎么办?刚才的么么茶只满足了无聊人士愿意出门找乐子的需求,还有大部分人不愿意出门,赖在家里的宅男宅女,我要给他们提供娱乐项目。

我发现当时新西兰的网络条件非常差,还是使用256M ADSL拨号,每月流量限制5-10G,你没看错,当时上网是有流量限制的,而大部分华人都是4,5个人合租一个房子,分摊到每个人头上,一个月上网流量只有2.5G不到,还不如今天我4G手机一个月套餐多呢。这种情况下,所有人只能上上网页,看看新闻,聊聊QQ,但却没法看视频娱乐,我说的视频是诸如TVB,国产连续剧,动画片之类的。

那么我只要能提供这些影视剧给他们看不就可以从中获利了吗?好,写到这已经完成了对‘市场隐性需求’的挖掘!虽然当初的我并不知道这个词汇,也没有理论支持自己的商业行为, 但直觉告诉我这个可以做,而且市场上没人在做。

找到了真正的市场需求之后,请跟我默念赚到100万的第二步,做出一个‘与众不同’的产品!当时我只做了三件事,用图文吧!

第一步 在我老家南京的西祠社区发了个帖子征集碟片,当时新西兰仅有的租赁VCD的都是80年代移民过来的老广州,他们片源很少,且多为粤语,加上价格也贵。所以我计划用录制的CD盘取代。这样在运输上我只需要邮寄移动硬盘即可,不需要运输大量的VCD。等移动硬盘到了新西兰,再刻录到碟片上

(追加:有几个特别特别特别细心,也特别特别希望这一切不是真实的,因为这点破事就超出他们理解范围的网友说,你这截图2003年怎么还有微博分享。。不会是P的吧,这不拿出铁证出来还真洗不清了。。。来,华哥只好把原帖连接PO出来了 xici.net/d13046907.htm ,原因也很简单,XICI添加社交分享后对老帖也是生效的。你说你们把这专研的心用在自己生意上早发达了,我目前写的这些鸡毛蒜皮的事儿你们都觉得不可思议了?我能想象出生活中的你们。。。。唉,不说了,feel sorry for you)

第二步,我花了一个多月自学dreamwaver 做了一个网站,没错!在2003年哥们我就用起了电子商务!我给他起名‘非常碟屋’,网址 nzvery.com 这在当时绝对算得上是新潮的,但这都不重要,重要的是方便,你可以上我的网站就可以看到我有的所有碟片目录和价格,而那些广东老移民还在通过电话咨询有什么碟片来做生意,今天看似简单的事情,在当时却大大方便了用户。你一定要用2003年人类的眼光去看待这件事。

瞎折腾的一个LOGO,现在看有点丑,哈哈。

网站早已经荒废了,域名好像也被个搞服装的买走了,还好可以通过网站时光机器 De Nieuwe Realist – 查到当初的样子,其实网站2003年10月就上线了。你可以看到那会我的导航还是用图片做的,没时间细学CSS样式了,第一时间上线要紧,要不今天就可以看到导航里内容了。

第三步就是定价,作为世界级的奸商,我肯定要想着办法多盈利,所以我想出了定价单张光盘的价格,如上图网站上所示,连续剧是3新币/张,1张只放4集,也就是说一套40集的连续剧,要10张碟子,合计30新币,约等于人民币150元。一般客户一次下单都是几部连续剧和几部电影, 电影这种就更暴力了,自己想想为什么吧

结果不用说了,我的碟屋在基督城当时就串红了,留学的孩子都有钱,很多人都是几百几百在我这里消费,我服务还好,都开车送货上门,每天晚上7点,10点,有时候12点都要出去送货,一条路线送N家(之前有送PIZZA的底子,所以是认路高手)和我合住的朋友都兼职天天帮我刻录碟片,就这样,我这个碟物生意红火了一年多。每天收入几百刀,生意特别旺的时候单日1000刀。

当然这个生意并没有给我赚到第一个100万,我举这个列子是为了说明‘市场需求’这个概念。今天回头看卖碟片这种二道贩子的生意的确是拿不上台面,甚至违背了知识版权,但对当时20岁不到的小毛孩子来说,在异国他乡多赚点钱为家里减轻负担是我唯一考虑的。

一年后,我意识到这个生意很快要走下坡路了,正好有人要买我碟屋(好歹也算个品牌当时)于是把碟屋卖给了别人,果然后来很多人发现我这个生意赚钱,在年底回国的时候都筹划着做同样的生意,第二年,竞争对手就多了很多家,他们为了获取生意,价格从2刀/张降到1刀/张,到最后的10刀随便拷。这是我第一次意识到一个即便赚钱的生意,如果没有足够的壁垒和竞争门槛的话,利润是不可持续的。

补充2 – 如何在生活中发现机会

上面一个碟屋的案例说的是如何找到市场的隐性需求,下面接着说一个如何在生活中找到商业机会,我们每个人生活中接触的都是不同的环境,行业,人群,这里面都孕育着机会,你只需要带着一个奸商的心去挖掘就可以了,没有奸商的心怎么办?慢慢培养!

我记得我小学三年级的时候就开始集邮,那会父母一周给我10元零用钱,一开始都用来买相声磁带听了,后来偶然的机会去了当时南京大方巷的邮票市场,就开始集邮,一开始不懂,买的都是寄信邮票,后来发现里面的门道,开始研究什么邮票容易升值,原来发行量越小,越有题材,市场存量又不多(很多都寄信用掉了)的邮票升幅最快!(和现在股市里散户喜欢炒作市值较小的题材股一个道理)发现门道后,我凑了自己的零用钱,压岁钱,还有和父母沟通打扫卫生可以多点零花钱等各种方法,赚取了‘本金’几百块。于是我就用这几百元本金在邮票市场里买进,卖出。我四年级的第一台‘GAME BOY’游戏机,大概400元左右。就是我卖了一套徐悲鸿的《奔马》邮票赚来的。那会我母亲在一个百货商店当营业员,我就喜欢在家意淫如果我是百货商店老板,我怎么重新布置商城里的柜台,我还煞有其事的拿出纸和笔在乱画。。。。当然那会想法一定很幼稚,但时刻准备着做老板这点很重要嘛!

呀的,扯远了。。。我是想表达培养在生活中发现机会的习惯的重要性!

那在我刚去新西兰还在第一阶段打黑工的时候发现了另外一个机会,那会我工作的饭店在10点关门,而回家的班车也是10点最后一班,平时一直蹭一起打工的朋友的车,但是他也只能送我到离我家有1KM多的地方,我还得步行回去。那怎么办呢?必须买一辆车呀。新西兰的汽车非常便宜,主要原因是二手车市场很活跃。当时打黑工辛苦赚了千把块钱,能省一块是一块,于是找车的时候尤其小心,基督城有一份报纸叫Buy Sell and Exchange,上面都是租房卖车的信息,我翻遍了上面所有的卖车信息,约见几乎可以约见的所有在1000新币左右的车(约人民币5000元)我发现一个现象,同样车况的车价格有比较大的差异,就拿我买的第一辆车20万公里的85年Toyota Corolla来说,差不多公里数,年份的这款车有人卖800,有人卖12000,还有人卖1800….. 为了发现这里面的门道,我仔细对比了这些车,发现除了1800的里外干净点之外,其他没什么地方比要价1000的好呀。那也就是说把车打扫干净,就值800刀!这生意可以干!

说干就干,我买来的第一辆车还没开几天,我就把卖车信息放在了学校图书馆里的信息栏,标价2200可小刀,后来这车我赚了1500刀,原因很狗血,在试车的时候一个80岁的老太把我车门装坏了,她担心走保险以后保险公司不给她保了,就私下赔了我1000刀,那个试车的人怕麻烦也给了我200刀,然后我这被撞坏一点门的车又1300左右卖给另外一个台湾人,一来一回就1500,如果没撞车,这车1800肯定能卖掉。总之这次交易给了我足够的信心。于是我的疯狂买车,卖车之路就这么开始了,上面的做碟屋的生意也是在卖车过程中才发现华人都很无聊这个隐性需求。

就用这个简单的方法买卖了一段时间车之后,我又升级了‘玩法’,我发现年轻点的老外和华人都喜欢bling bling的车,于是我自己DIY开始给车做一些简单的处理,我去买一些二手的车载VCD,自己学着安装,后来我发现很多那些稍微有钱点的玩车人都喜欢给车室内安装真皮包裹,但是那些没钱又想玩的怎么弄呢?没关系,哥哥我发现可以用喷漆来取代车内真皮包裹,一瓶漆的价格在8刀左右,买个10几瓶,再买2瓶保护漆就可以完成室内局部喷漆。

下图是我低价购入的一台很脏很乱的89年Honda CRX, 我在家里车库门口花了一天的时间完成了喷漆,蓝白相间,今天看我都觉得酷毙了。这辆车价格直接涨了50%,广告一放就卖掉了,其实卖便宜了。

有了各种玩法之后,也通过买卖1000-3000元价位的车赚到了钱之后,我开始Move on to ‘高端市场’,在新西兰2-3万刀的车就高端市场了,基本可以买到很多非常棒的日本跑车,而日本跑车是当时最受欢迎的车型。后来我买的车还有上过杂志的, 下图几个车分别为Subaru Wrx Sti V7, Toyota Siliver S15 Spec R, Toyota Siliver S13, Toyota MRS, Nissan Skyline GTT….

上NZ performance car (NZPC) 当地汽车杂志的车:

就这样我从一个在饭店做服务生黑工的,开着20万公里85年老车的屌丝,一转身到在华人圈子里做着生意,开着跑车,载着美女,当然如果当时第一次和我认识一定会和今天知乎上个别一看你混得比它好就是富二代,小开的人已经拉开了差距,但差距还不明显,直到我误打误撞进入电子商务之后才是真正质的差距。

我的卖车记录是全胜,经手的车超过百辆,最疯狂的时候家门口,大学停车场里都有我的库存,同样是卖车,我为什么卖的比别人好?甚至比那些华人车行都要好的多。我的方法很简单:

  • 带着现金和过户表去交易,带着这两样东西去议价,车主信你,有很多二货去看车不停的压价,车主答应又要再考虑,我带现金去表示诚意,压价成功率极高。
  • 尽量买要回国,出国,离婚,缺钱,赌博等类型人的车,他们不在乎价格,要的就是快速套现
  • 车买来后快速do up升级,改造,超额利润都从这里来。

今天在国内有两类人其实用着同样的方法赚到了大钱。一类是深圳的一批楼市投资者,他们的买入,卖出策略可以说和我买卖车完全一样,买入凤姐楼盘,三房改造成五房,装修升级变冰冰,然后卖出。(这是赚取超额利润的方法),他们同样会找那些信息不对称的卖房者买房,比如法院拍卖,离婚房产,年底生意缺资金要卖房救公司的(这就是低于价值买入,高于价值卖出)这两块利润加一起是很可观的。我知道有不少个人投资者在深圳一年通过这个方法收入也在千万以上,这都很正常,千万别认为这个离我们很远,这都是身边的事,这些人也都是普通人,他们只不过比一般人更细心,更勤奋而已,千万别急着否定一切超过你认知范围的东西,因为一旦你否定了,你就把一个机会关上了大门。

另外一批人就是资本市场的价值投资者,我自己十几年前已经用到了价值投资的本质,却在投资上亏过大钱,直到这几年才对这些话有了新的认知 (投资方面以后有时间详细写吧)

碟屋和卖车这两个生意帮助我完成了最基本的原始积累,为下一阶段打牢了经济基础,而更重要的可能是建立了足够的信心。

5888赞后看心情待续。。。( 分到,今天心情90分,那就继续吧,边写边更新吧,争取今天写完一部分)

找‘市场隐形’需求这个事情相信大部分人都差不多理解,或者有感觉了。感觉很重要,因为上面所有的理论都是站在今天的理解去解释当初的行为,说白了,当初屁都不懂,靠的就是感觉直觉,初生牛犊不怕虎,就一个字‘干’。所以很多时候聪明的人不适合创业,想的太明白,看的太清楚,还没开始就遇见到后来可能出现的困难,比如说聪明人A可能还没开始就知道买卖二手车这个生意有一定风险,一不小心容易买到有问题的车,或者压在手上无法出手,汽车是贬值产品,库存影响等,说不准还要拿出MBA那套理论来做各种分析,总而言之结果就是这个生意不值得做。也许他的分析都是对的,但问题在于如果你不去做,你就发现不了市场的‘隐形机会’,尼玛,华帅,我刚消化完隐性需求,怎么又来一个‘隐形机会’,别急。。。这也很重要,很多商人都知道(感觉上),但都不知道怎么表达,聪明的MBA同学分析得了当前市场,却永远不可能分析出‘隐形机会’ 对了,那聪明人适合干什么?不能让我们这些有眼光的聪明人混得还不如你这个笨蛋吧,哈,大部分聪明人适合在企业度过创业初期后的阶段,自己体会下。

好,终于开始讲第三阶段的故事了,也是真正意义上的第一个100万来源(按照10年前的物价水平,其实可以理解为今天的500万)既然要讲,我就讲的透彻点,还原下当初的场景,而不是只讲赚了多少多少,那不是摆明炫耀吗。我的原则是在分享经验的基础上适当炫耀下,满足下马斯洛第四层需求,你们可以在奸商的基础上加一个‘臭不要脸’,连在一起就是臭不要脸的奸商华哥!我能接受。

每周我都会翻翻报纸看看卖车信息,也会上上网找找车源,有一天,我突然发现网上有一辆2000年左右的S15 SPEC R的黄色跑车(上图第一排最右那辆)居然售价只要2万刀(市场价为2.7左右),这是明显低于市场价格的。我大脑里小雷达开始狂叫,这很有可能符合我的收车原则中的 ‘离婚,赌博,回国,缺钱’中的一条,因为只有这样的人才会开出这种价格,甚至在我看来即便真的急用钱2.3万也能顺利出手,为什么卖2万?这没什么可以犹豫的,我电话过去确认了信息的真实性立刻买了机票飞往丹尼丁(和我不在一个城市,在新西兰最南端一个很小的城市)

到了丹尼丁我检查了车发现没什么问题,就很好奇他为什么这么便宜卖车,他告诉我他下周就要回香港,所以要立刻出手。我说你可以提早卖啊就不用这么急亏这么多卖了,他说他要用车所以走前才卖。(那会我是无法理解他的行为的,因为对于屌丝的我来说怎么懂土豪的世界呢,人家其实就是不缺钱,用到要离开新西兰前三天才卖车,换我最少提前3周开始卖车了,所以我前面说过一句话 “千万别急着否定超出你认知的事情,一旦否定了,你就关上了一个机会” 这香港仔告诉我联系他的人也并不多,很明显那些觉得价格便宜的人一定认为这车有猫腻,哈哈,其实有些机会就是这么难以置信,你可千万千万别认为赚钱机会一定是不可告人的,难以寻找的,说到这又让我想起去年11月初我买入大量的5PE不到的国内银行股,和这车性质一样,便宜到你不敢相信,恩,这里面一定有猫腻,对,一定有,要不不会5PE卖我的,我还是去买200PE的创业板吧,那贵有贵的道理,哈哈,这就是中国股民的现状,哎呀,又扯远了。

超出认知的事情在生活中处处都有发生,向上和向下都有,向上来说,大家仔细想想是不是看过有一些特高档的地方/产品,自己消费不起的那种,心想这么高档肯定没人去,结果人家一开N年还生意越来越好;又或是一些很廉价的产品/地方,廉价到连屌丝都看不上的地方,你去了一次发誓打死都不会去的那种,但人家生意依旧很好。明朝有个皇帝得知老百姓穷的都没饭吃,问大臣,他们怎么不吃肉呢?洞悉了每个阶层的真实情况和内因之后,就更容易发现商业机会,一直活在自己那一层的人机会自然相对就少些。

好,那这香港人卖你个破车和你赚100万有什么关系,难道你102万把这车卖掉了?这车我开回基督城后没几周就以2.6万的价格卖给了个上海人,我说过这车值2.7左右,这是看的见的利润。那么这个香港仔给我的最大启示并不是赚得这6000刀,而是电子商务这个机会。

我尼玛,码了这么多字还没开始。。。我都有点不好意思了。。这不是交代背景吗,嫌字多的评论告诉我,下次我争取一段解决。

香港仔和电子商务到底又有什么关系呢?他能这么便宜卖我车,他不在乎钱的原因是什么?是脑残?是富二代?是做生意不在乎?当时我也是有很多不解,但我闲的蛋疼,也想尽可能搞清楚原因(哥哥人肉能力可能是当时积累的,日后我有一次给小屁货代做了份假B/L骗了我一票运费,虽然金额不大,但是我通过一条线索把他所有信心包括住址公司全挖出来了,吓的他立刻辞职,跑到外地避风了,后来找人找到他老家,他老母死活不信儿子会做这事,看在他老母的份上,放了他一马,又扯远了)

所以又去了那个网站仔细看了下他发的广告和其他的Listing,这一看不得了,原来这小子是个大卖家,我看他的Trademe账户上有几千个评价 (Trademe类似Ebay,Taobao平台,在新西兰没人用Ebay, Trademe占新西兰全国网站总流量的70%)当然,当年的Trademe还没有这么牛逼,华人里估计也就不到20%人会知道这个交易网站,而我原本也只是用这个网站来找找二手车信息,从没想过还可以在这上面卖东西。我扫了一圈他卖的产品,全是记忆卡,我也不知道这些牌子记忆卡值多少钱,于是去易趣(当年淘宝还不行,基本都上易趣)找找同类产品,一看居然有好几倍的差额,粗算下他大几千的好评岂不是盈利很高,难怪这么不在乎车那点差价呢,好了,逻辑关系终于理顺了,可以安心睡着觉了,我知道我很快也要赚大钱了,睡的很香。

第二天我就开始在易趣,淘宝上找产品,这个也不错,那个也不错,七七八八一口气买了5000多块的产品,而进来的这一大堆产品里多数都没有市场需求,老外根本不买账,什么看起来卡哇伊的手表,各种日韩创意产品,统统没戏,但是有两个产品脱颖而出,Pedometer计步器 和 MP3,我128M的MP3拍到了150刀,扣去成本这一个MP3就赚了800元人民币,而计步器7元人民币的成本卖到了160人民币左右,一个赚153快。。。。我估计所有做淘宝的人看到这个利润都可以吐血了。

后面怎么发展不用我废话了吧,大量的进货,而且我用了当时很少用的1元钱起拍模式,什么意思呢,就是如果你出价1元,其他没人出价的话,你就可以1元拿走,这样做的好处是所有人都期望能乘别人没关注时候下手买到便宜货,而实际上在早期根本没人可以买到便宜货,所以成交价都不相同,同样的产品可能100卖掉,可能130,150,甚至200都有可能,但无论如何大部分产品都有5倍以上的利润。 而1元起拍最大的好处是我可以控制周转率,我可以一天卖20台MP3,也可以一天卖50台,这完全取决于我发多少个产品上线。当然这个数字不可以无限扩大,因为市场需求和供应必须保持一个比例。而放一口价的卖家是控制不了他一天卖多少的。

8个月时间,扣去各种成本,做到了人生中第一个100万!

最早一个账户的Power Seller证书。

这就是我说的再厉害的MBA也无法计算出隐形机会,隐形机会是靠做出来的,我一直相信老天会眷顾那些非常用功的人,大多数时候我们没遇到机会是因为我们还不够用功。今天的我比起当年已经很懒了,还有时间在这里吹水,我都佩服当初自己的勤奋,比我写的要辛苦很多。

斜体治颈椎:

我们在创业的初期往往是因为有个好的想法,或者发现了一个好的市场机会,我称它为A,当我们做了一段时间后,我们会发现会有很多意想不到的新的商业机会出现,他会优化你最初的构想,演变成了B, 再当我们继续努力的做下去的时候,我们服务了一定的客户,积累了不少的人脉,我们的生意模式会演变成C,到了这个阶段我们应该已经赚了不少钱,但未必能让我们大富大贵,随着继续努力做下去,我们会成了行业的佼佼者,并且做强大了一件事情,这时我们会突然发现一个崭新的商业模式D, 而让企业做到强大的都是这个D! 此刻你再回头看一下,你最初的商业模式A和现在的D完全不是一回事,但是你不经过A,B,C就不可能有D,这也是为什么这么多浮躁的创业者看到别人成功后也直接想做D,结果必然都是失败告终。

任何的商学院分析都不可能从A分析到D,这也是创业的魅力所在。

好了,也算把如何一步步完成100万的过程全部写出来了,顺便强调下千万别被‘电子商务’这个概念迷惑了,电子商务的核心还是在‘商务’上,电子只是手段。很多人搞不清就去做电商能不死吗,作死啊!

—————— 补充4 ———————–

话题想好了

15888赞后适心情更新 竞争中如何生存和保持利润

嗯,我先去打LOL坑人去了。。诺克萨斯战区 ID:killerhua 先申明青铜级别水平,怕坑慎重,保留两天吧

]]>
http://www.sifangke.com/2015/09/money-lieft/feed/ 0
Session的生命周期 http://www.sifangke.com/2015/08/session-life-time/ http://www.sifangke.com/2015/08/session-life-time/#comments Fri, 21 Aug 2015 06:21:33 +0000 http://www.sifangke.com/?p=658 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的生命周期。

  Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

  Session什么时候失效?

  1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。

  2. 调用Session的invalidate方法。

  Session对浏览器的要求:

  虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

  该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。

  注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择”在新窗口中打开”时,子窗口便可以访问父窗口的Session。

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。

  URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

  注意:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。

]]>
http://www.sifangke.com/2015/08/session-life-time/feed/ 0
Yii中validator之scenario(即rulse中的on) http://www.sifangke.com/2014/03/yii-validator-scenario-rules/ http://www.sifangke.com/2014/03/yii-validator-scenario-rules/#comments Fri, 07 Mar 2014 09:02:46 +0000 http://www.sifangke.com/?p=644 Yii中有个场景的概念,我们用到场景的地方主要是在model中定义rules规则的时候,可以对不同的场景使用不同的校验规则,所以,自然而然会认为所谓的场景就是对应的action的名字。其实场景和action的名字是不同的概念来的,不能混为一谈。scenario则是M的一种属性,理论上,scenario是独立于action概念的,可以在没有action的场合下使用scenario。model的scenario是通过设置它的scenario属性设置的,它和使用model的action没有任何关系。

比如:

$model=new User;
$model->scenario = ‘create’;


$model=new User(‘create’);

都是设置了执行一个action的时候对model进行校验的场景

1
2
3
4
5
6
7
8
9
10
11
12
13
public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('username, email', 'required'),
            array('password, confirm_password', 'required', 'on'=>'create'),
            array('username', 'unique'),
            array('username, email', 'length', 'max'=>50),
            array('password, confirm_password', 'length', 'min'=>6, 'max'=>32),
            array('email', 'email'),
            array('confirm_password', 'compare', 'compareAttribute'=>'password', 'on'=>'create,update')
         );
}

上面的校验规则说明了初始密码和确认密码在create场景中是required的,和密码确认的compare是在create和update场景中都必须校验的。主要在action中对默认制定了对应的场景属性,在提交表单做校验的时候就能达到rules中定义的规则了。

下面是引用yii官方论坛帖子中牛人关于场景的解释:

场景的概念来自 用例驱动的方法学

用银行操作来说 存款 取款 转账 就是用例(关于用例的概念自己查阅相关资料或者google 简单点说就是里程碑式的操作 是系统级的方法
可以认为是应用级别的事务) 在面向对象中 模型层的东西会参加多个用例(一个对象有若干个方法 并不是所有方法在一次操作中都被用到
某个用例操作中只会用到一个或几个) 你可以这样认为用例等价场景 还有就是一个用例中可能不止一个模型参与其中

对AR来说 其中的若干属性只会参与一个用例(插入insert 更新update 或者搜索search) 在某种高度对象的方法和属性是一个级别概念 所以某些属性/方法 可以用用例来归组 经常在一起使用的方法或属性可以归为一个用例(场景)之中

用例可以自己定义 根据应用特征 比如User 这个模型类 在登陆操作(场景/用例/应用事务)中只会用到用户名和密码
所有这两个组合可以归为一个场景 其他属性根据业务可以自定义归组 ; 在拿改密码来说你可能需要用户输入旧密码 和新密码
那么这两个就会归属同一个用例(可以随意起名 比如changePassword等)

场景名不是yii定死的 但insert update 和search 是默认的(惯例而已) 在actionCreate actionUpdate
actionAdmin中出现的$model 默认的scenario 就分别是insert,update,search 你可以打印出来
echo $model->scenario ;die(); //在render 之前 试着调试输出;

官方链接地址:关于场景的解释

]]>
http://www.sifangke.com/2014/03/yii-validator-scenario-rules/feed/ 0
php编译原理 http://www.sifangke.com/2014/02/php-bianyi-yuanli/ http://www.sifangke.com/2014/02/php-bianyi-yuanli/#comments Sat, 15 Feb 2014 08:04:22 +0000 http://www.sifangke.com/?p=639 刚看到一个不错的文章,关于php编译的,分享下(忘记了地址~~):

最近要给Yahoo的同事们做一个关于PHP和Apache处理请求的内部机制的讲座,刚好写了些关于Opcodes的文字,就发上来了,这个文章基于 Sara Golemon大师的《Understanding OPcode》

Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL,举个例子,比如你写下了如下的PHP代码:

1
2
3
4
5
<?php
   echo "Hello World";
   $a = 1 + 1;
   echo $a;
?>

PHP执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)

1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
2.Parsing, 将Tokens转换成简单而有意义的表达式
3.Compilation, 将表达式编译成Opocdes
4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。
题外话:现在有的Cache比如APC,可以使得PHP缓存住Opcodes,这样,每次有请求来临的时候,就不需要重复执行前面3步,从而能大幅的提高PHP的执行速度。

那什么是Lexing? 学过编译原理的同学都应该对编译原理中的词法分析步骤有所了解,Lex就是一个词法分析的依据表。 Zend/zend_language_scanner.c会根据Zend/zend_language_scanner.l(Lex文件),来输入的 PHP代码进行词法分析,从而得到一个一个的“词”,PHP4.2开始提供了一个函数叫token_get_all,这个函数就可以讲一段PHP代码 Scanning成Tokens;
如果用这个函数处理我们开头提到的PHP代码,将会得到如下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Array
(
    [0] => Array
        (
           [0] => 367
           [1] => Array
        (
            [0] => 316
            [1] => echo
        )
    [2] => Array
        (
            [0] => 370
            [1] =>
        )
    [3] => Array
        (
            [0] => 315
            [1] => "Hello World"
        )
    [4] => ;
    [5] => Array
        (
            [0] => 370
            [1] =>
        )
    [6] => =
    [7] => Array
        (
            [0] => 370
            [1] =>
        )
    [8] => Array
        (
            [0] => 305
            [1] => 1
        )
    [9] => Array
        (
            [0] => 370
            [1] =>
        )
    [10] => +
    [11] => Array
        (
            [0] => 370
            [1] =>
        )
    [12] => Array
        (
            [0] => 305
            [1] => 1
        )
    [13] => ;
    [14] => Array
        (
            [0] => 370
            [1] =>
        )
    [15] => Array
        (
            [0] => 316
            [1] => echo
        )
    [16] => Array
        (
            [0] => 370
            [1] =>
        )
    [17] => ;
)

分析这个返回结果我们可以发现,源码中的字符串,字符,空格,都会原样返回。每个源代码中的字符,都会出现在相应的顺序处。而,其他的比如标签,操作符,语句,都会被转换成一个包含俩部分的Array: Token ID (也就是在Zend内部的改Token的对应码,比如,T_ECHO,T_STRING),和源码中的原来的内容。
接下来,就是Parsing阶段了,Parsing首先会丢弃Tokens Array中的多于的空格,然后将剩余的Tokens转换成一个一个的简单的表达式

1.echo a constant string
2.add two numbers together
3.store the result of the prior expression to a variable
4.echo a variable

然后就改Compilation阶段了,它会把Tokens编译成一个个op_array, 每个op_arrayd包含如下5个部分:

1.Opcode数字的标识,指明了每个op_array的操作类型,比如add , echo
2.结果 存放Opcode结果
3.操作数1 给Opcode的操作数
4.操作数2
5.扩展值 1个整形用来区别被重载的操作符
比如,我们的PHP代码会被Parsing成:

* ZEND_ECHO ‘Hello World’
* ZEND_ADD ~0 1 1
* ZEND_ASSIGN !0 ~0
* ZEND_ECHO !0

呵呵,你可能会问了,我们的$a去那里了?
恩,这个要介绍操作数了,每个操作数都是由以下俩个部分组成:

a)op_type : 为IS_CONST, IS_TMP_VAR, IS_VAR, IS_UNUSED, or IS_CV

b)u,一个联合体,根据op_type的不同,分别用不同的类型保存了这个操作数的值(const)或者左值(var)
而对于var来说,每个var也不一样

IS_TMP_VAR, 顾名思义,这个是一个临时变量,保存一些op_array的结果,以便接下来的op_array使用,这种的操作数的u保存着一个指向变量表的一个句柄(整数),这种操作数一般用~开头,比如~0,表示变量表的0号未知的临时变量

IS_VAR 这种就是我们一般意义上的变量了,他们以$开头表示

IS_CV 表示ZE2.1/PHP5.1以后的编译器使用的一种cache机制,这种变量保存着被它引用的变量的地址,当一个变量第一次被引用的时候,就会被CV起来,以后对这个变量的引用就不需要再次去查找active符号表了,CV变量以!开头表示。

这么看来,我们的$a被优化成!0了。

]]>
http://www.sifangke.com/2014/02/php-bianyi-yuanli/feed/ 0
nginx下yii框架配置 http://www.sifangke.com/2013/10/nginx-yii-config/ http://www.sifangke.com/2013/10/nginx-yii-config/#comments Fri, 25 Oct 2013 08:44:36 +0000 http://www.sifangke.com/?p=635 yii 是一个流行的PHP框架,有了这个配置文件你就可以在nginx+php-fpm环境下运行yii了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
server {
    listen       80;
    server_name  youdomain.com;
    index index.html index.htm index.php;
    root  /home/wwwroot/htdocs/yii-1.1.8.r3324/demos/blog;
    #charset koi8-r;
 
    # 这里的main,是nginx默认的httpd段的一个日志格式定义
    access_log  /home/wwwlogs/localhost.access.log  main;
    #error_page  404              /404.html;
 
    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
 
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
 
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
 
    ################ Yii framework rule #################
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
 
    location ~ /(protected|framework|nbproject|themes/\w+/views|index-test\.php) {
        deny all;
        # for production
        internal;
        log_not_found off;
        access_log off;
    }
    ################ for Yii framework end #################
 
    location ~ \.php$ {
        fastcgi_pass   php;
        fastcgi_index  index.php;
        include fastcgi.conf;
    }
 
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /(\.svn|\.git|\.ht|\.DS) {
        deny all;
        internal;
    }
 
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
         expires max;
         log_not_found off;
    }
 
}
]]>
http://www.sifangke.com/2013/10/nginx-yii-config/feed/ 0
分享一个国内身份证号码验证程序 http://www.sifangke.com/2013/10/id-card-version/ http://www.sifangke.com/2013/10/id-card-version/#comments Mon, 21 Oct 2013 07:54:44 +0000 http://www.sifangke.com/?p=632 本程序主要用于国内身份证号码的验证,支持15位与最新的18位身份证号码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function is_idcard( $id )
{
    $id = strtoupper($id);
    $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
    $arr_split = array();
    if(!preg_match($regx, $id))
    {
        return FALSE;
    }
    if(15==strlen($id)) //检查15位
    {
        $regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
 
        @preg_match($regx, $id, $arr_split);
        //检查生日日期是否正确
        $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
        if(!strtotime($dtm_birth))
        {
            return FALSE;
        } else {
            return TRUE;
        }
    }
    else           //检查18位
    {
        $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
        @preg_match($regx, $id, $arr_split);
        $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
        if(!strtotime($dtm_birth))  //检查生日日期是否正确
        {
            return FALSE;
        }
        else
        {
            //检验18位身份证的校验码是否正确。
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
            $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            $sign = 0;
            for ( $i = 0; $i < 17; $i++ )
            {
                $b = (int) $id{$i};
                $w = $arr_int[$i];
                $sign += $b * $w;
            }
            $n  = $sign % 11;
            $val_num = $arr_ch[$n];
            if ($val_num != substr($id,17, 1))
            {
                return FALSE;
            }
            else
            {
                return TRUE;
            }
        }
    }
 
}
]]>
http://www.sifangke.com/2013/10/id-card-version/feed/ 0
新鲜出炉LNMP安装包,快来下载呀 http://www.sifangke.com/2013/10/%e6%96%b0%e9%b2%9c%e5%87%ba%e7%82%89lnmp%e5%ae%89%e8%a3%85%e5%8c%85%ef%bc%8c%e5%bf%ab%e6%9d%a5%e4%b8%8b%e8%bd%bd%e5%91%80/ http://www.sifangke.com/2013/10/%e6%96%b0%e9%b2%9c%e5%87%ba%e7%82%89lnmp%e5%ae%89%e8%a3%85%e5%8c%85%ef%bc%8c%e5%bf%ab%e6%9d%a5%e4%b8%8b%e8%bd%bd%e5%91%80/#comments Fri, 18 Oct 2013 07:26:37 +0000 http://www.sifangke.com/?p=630 DebianLNMP是一个用Linux Shell编写的可以为Debian/Ubuntu VPS(VDS)或独立主机安装LNMP(Nginx、MySQL、PHP、phpMyAdmin)生产环境的Shell程序。
DebianLNMP 是以 Debian + Linux + Nginx + MySQL + PHP 的安装顺序命名;
DebianLNMP一键安装包是很不错的安装脚本,用在低配置VPS上最合适不过啦,安装方便快捷,轻轻松松全自动安装LNMP(Nginx、MySQL、PHP、phpMyAdmin)可直接用再生产环境。

1
2
root@DebianLNMP-Jimmyli:~# wget http://sourceforge.net/projects/debian-lnmp/files/DebianLNMP/DebianLNMP-Jimmyli.sh
root@DebianLNMP-Jimmyli:~# sh DebianLNMP-Jimmyli.sh

下载地址:
http://sourceforge.net/projects/debian-lnmp/files/DebianLNMP/

]]>
http://www.sifangke.com/2013/10/%e6%96%b0%e9%b2%9c%e5%87%ba%e7%82%89lnmp%e5%ae%89%e8%a3%85%e5%8c%85%ef%bc%8c%e5%bf%ab%e6%9d%a5%e4%b8%8b%e8%bd%bd%e5%91%80/feed/ 0
nginx常参数及带参数的301重定向 http://www.sifangke.com/2013/10/nginx-301-redirect/ http://www.sifangke.com/2013/10/nginx-301-redirect/#comments Tue, 15 Oct 2013 12:49:21 +0000 http://www.sifangke.com/?p=626 nginx 各参数翻译,作用

$arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。

$args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;

$binary_remote_addr #二进制的客户地址。

$body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。

$content_length #请求头中的Content-length字段。

$content_type #请求头中的Content-Type字段。

$cookie_COOKIE #cookie COOKIE变量的值

$document_root #当前请求在root指令中指定的值。

$document_uri #与$uri相同。

$host #请求主机头字段,否则为服务器名称。

$hostname #Set to the machine’s hostname as returned by gethostname

$http_HEADER

$is_args #如果有$args参数,这个变量等于”?”,否则等于””,空值。

$http_user_agent #客户端agent信息

$http_cookie #客户端cookie信息

$limit_rate #这个变量可以限制连接速率。

$query_string #与$args相同。

$request_body_file #客户端请求主体信息的临时文件名。

$request_method #客户端请求的动作,通常为GET或POST。

$remote_addr #客户端的IP地址。

$remote_port #客户端的端口。

$remote_user #已经经过Auth Basic Module验证的用户名。

$request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。

$request_method #GET或POST

$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。

$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。

$scheme #HTTP方法(如http,https)。

$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。

$server_name #服务器名称。

$server_port #请求到达服务器的端口号。

$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。该值有可能和$request_uri 不一致。$request_uri是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。

今天在给某网站写rewrite重定向规则时,碰到了这个关于重定向的参数处理问题。默认的情况下,Nginx在进行rewrite后都会自动添加上旧地址中的参数部分,而这对于重定向到的新地址来说可能是多余。虽然这也不会对重定向的结果造成多少影响,但当你注意到新地址中包含有多余的“?xxx=xxx”时,心里总还是会觉得不爽。那么该如何来处理这部分的内容呢?看了下面两个简单的例子你就会明白了。
例如:
把http://example.com/test.php?para=xxx 重定向到 http://example.com/new
若按照默认的写法:rewrite ^/test.php(.*) /new permanent;
重定向后的结果是:http://example.com/new?para=xxx
如果改写成:rewrite ^/test.php(.*) /new? permanent;
那结果就是:http://example.com/new
所以,关键点就在于“?”这个尾缀。假如又想保留某个特定的参数,那又该如何呢?可以利用Nginx本身就带有的$arg_PARAMETER参数来实现。
例如:
把http://example.com/test.php?para=xxx&p=xx 重写向到 http://example.com/new?p=xx
可以写成:rewrite ^/test.php /new?p=$arg_p? permanent;
只求结果的朋友可以直接忽略前面的内容,看这里:
rewrite ^/test.php /new permanent; //重写向带参数的地址
rewrite ^/test.php /new? permanent; //重定向后不带参数
rewrite ^/test.php /new?id=$arg_id? permanent; //重定向后带指定的参数

permanent是永久重定向参数,根据需要去掉也可以,不过最好是带有。
参考301重定向与302重定向的区别

]]>
http://www.sifangke.com/2013/10/nginx-301-redirect/feed/ 0
php常见的几种排序算法 http://www.sifangke.com/2013/10/php-sort/ http://www.sifangke.com/2013/10/php-sort/#comments Thu, 10 Oct 2013 13:30:59 +0000 http://www.sifangke.com/?p=614 以下是应用示例,在这几种算法中,我分别对3000个数组元素做排序操作,其中插入排序、选择排序、冒泡排序花费的时间大约在60秒左右(应不同电脑配置而定),而快速排序相对要快得多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
//插入排序(一维数组)
function insert_sort($arr){
    $count = count($arr);
    for($i=1; $i<$count; $i++){
        $tmp = $arr[$i];
        $j = $i - 1;
        while($arr[$j] > $tmp){
            $arr[$j+1] = $arr[$j];
            $arr[$j] = $tmp;
            $j--;
        }
    }
    return $arr;
}


//选择排序(一维数组)
function select_sort($arr){
    $count = count($arr);
    for($i=0; $i<$count; $i++){
        $k = $i;
        for($j=$i+1; $j<$count; $j++){
            if ($arr[$k] > $arr[$j])
                $k = $j;
            if ($k != $i){
                $tmp = $arr[$i];
                $arr[$i] = $arr[$k];
                $arr[$k] = $tmp;
            }
        }
    }
    return $arr;
}

//冒泡排序(一维数组) 
function bubble_sort($array){ 
    $count = count($array); 
    if ($count <= 0) return false; 
    
    for($i=0; $i<$count; $i++){ 
        for($j=$count-1; $j>$i; $j--){ 
            if ($array[$j] < $array[$j-1]){ 
                $tmp = $array[$j]; 
                $array[$j] = $array[$j-1]; 
                $array[$j-1] = $tmp; 
            } 
        } 
    } 
    return $array; 
} 

//快速排序(一维数组) 
function quick_sort($array){ 
    if (count($array) <= 1) return $array; 

    $key = $array[0]; 
    $left_arr = array(); 
    $right_arr = array(); 
    for ($i=1; $i<count($array); $i++) {
        if($array[$i] <= $key) {
            $left_arr[] = $array[$i]; 
        } else {
            $right_arr[] = $array[$i];
        }
    }
    $left_arr = quick_sort($left_arr); 
    $right_arr = quick_sort($right_arr); 
    
    return array_merge($left_arr, array($key), $right_arr); 
} 

?>
]]>
http://www.sifangke.com/2013/10/php-sort/feed/ 0
网络在线学习新坐标 http://www.sifangke.com/2013/08/gaixue-com/ http://www.sifangke.com/2013/08/gaixue-com/#comments Sat, 24 Aug 2013 02:09:42 +0000 http://www.sifangke.com/?p=606 随着现代信息爆炸的不断升级和网络普及到千家万户,传统的课堂学习已经不能满足人们的需要,网络在线教育成为一种高效便捷的学习方式。
网络在线教育不同于传统的远程教育,它是一种更为灵活多样的双向学习平台,该学网所开创的在线互动学习模式,就是这一崭新的教育方式变革的突出代表。进入该学网首页(http://www.gaixue.com),简洁的页面中有体验课程与创建课程两个选项,在此,你不仅可以在学习广场中发现自己所需要的课程,有针对性地获取实用的知识,还能完全自主地创建课程,上传自己的知识资源与网友分享,或者将课程向大众推广。
人人可学知识、人人可为老师,该学网在线学习平台让知识不再是耗费万金的奢侈品,解决了学生名师难求的困扰,让学生随时随地学习知识成为可能。老师们也可以摆脱以往的“班式”教育模式,将新鲜的知识传播给更多学生。
更为难能可贵的是,该学网不仅突破了教育资源的时间、地域限制,还汇集了大量优质高效的教育素材,覆盖了从从婴幼儿教育到职业技能培训再到公开课等一系列热门知识,不仅图文并茂、简单易学,还具有很强的实用性,对每个学习者的综合素质提升有很大帮助。
学知识,找名师,该学网让这一切不再遥远,给网络在线学习开拓了一片新的沃土,树立了一个新的坐标。

]]>
http://www.sifangke.com/2013/08/gaixue-com/feed/ 0