泡沫破灭十一年后 美国硅谷:互联网热潮再来

泡沫破灭十一年后 美国硅谷:互联网热潮再来(组图)

Local Access打往中国电话卡1.3¢/分种

文章来源: 新闻晨报 于 2011-05-13 17:25:11
敬请注意:新闻取自各大新闻媒体,新闻内容并不代表本网立场!
 

  
左图:刚获得800万美元风投的Picplz,是一家提供图片分享的公司。

  

  
上图:特拉维斯・卡兰尼克创办的“Uber”公司,获得了1200万美元注资。

  本周二,微软宣布,以85亿美元收购全球互联网电话服务公司Skype。这是微软历史上金额最大的一笔收购。很多业内人士并不看好这次收购,主要认为去年还在亏损中的Skype不值这么高的价格。Skype此前预计上市时的估值起码比现在低一半。但微软显然并不这么认为,其首席执行官鲍尔默说,通过 Skype,微软会赚到更多的钱。

  像Skype如此幸运地获得高估值的新一代互联网公司在美国还有很多。看看最有名的几家公司吧。

  已经拥有5亿多用户的社交网站Facebook,虽然还没有上市,但市场对其的估值已经超过700亿美元,足以与百年老店福特汽车和金融巨子 Visa的市值媲美。开发了《开心农场》游戏的社交游戏网站Zynga,仅仅诞生4年多,其估值已经达90亿美元,超过了1982年成立的行业巨头美国 EA公司。微博Twitter至今还没有盈利,但不影响市场对它的追捧,它的估值是70亿美元。团购网Groupon刚刚拒绝了来自谷歌的60亿美元收购方案,并计划在近期提交首次公开募股(IPO)申请,市场对它的估值是150亿美元。受到资金追捧的不仅这几家“传奇”企业。其实,“在硅谷,投资者在激烈争夺着每一家有活力的互联网创业公司,而创业公司则是从多个资金充实的投资者当中任意挑选。华尔街投行、富豪炒客和资深风投人士,甚至会为达成某笔交易而争得面红耳赤”,《商业周刊》说。

  泡沫破灭十一年后,全球资本市场重新躁动起来,互联网的发源地――美国硅谷再次迎来新一轮互联网热潮。

  带着资金奔向“硅谷”

  34岁的特拉维斯・卡兰尼克创办了一家名叫“Uber”的新公司。Uber主要的业务是方便用户打车。好几家知名的风险投资公司都争着要投资“Uber”。

  当卡兰尼克在美国知名风险投资机构标杆资本的会议室里,介绍自己的商业计划时,他不得不中途停下来接听来自另外三家投资公司的电话。他此举无形中传递出这样的信息:要想得到“Uber”,标杆资本你得赶快行动。

  标杆资本合伙人比尔・格利不愿意放过这笔生意。他对卡兰尼克说,不用跟那些人谈了,我们就在这里搞定交易。经过两天的谈判,最终标杆资本出资近 1200万美元购买了“Uber”20%的股份,这使“Uber”整个公司的估值达到6000万美元。

  这只是硅谷新一轮网络热潮中的一幕。

  美国专业软件提供商CEO克莱拉・施也有类似的经历。她已经融资300万美元。“说实话,我们并没有考虑融资,但现在既然主动送上门来,我们可以敞开大门。”

  数据或许更能说明这股热潮有多“热”――

  全美风险投资协会的数据显示,2010年美国风险投资从2009年的12年低点183亿美元增至218亿美元,出现三年以来的首次增加。而2011年第一季度,美国风投基金募资规模超过70亿美元,较2010年同期增长76%。

  对科技公司非公开发行股票的需求也在急增。活跃型二级市场SharesPost Inc.的创始人兼总裁格雷格・布勒格说,去年第一季度里,这个市场处理了涉及五家公司约20笔交易。而在刚刚过去的第一季度中,它经手的交易超过300 桩,涉及公司约40家。在二级市场如此繁荣的情况下,科技业投资者正在越来越多地延长持股期限,而不是敦促公司创始人通过的方式让企业上市。

  华尔街投行已经等不及IPO时才挣钱,现在就纷纷入场。高盛在1月份时出手,向Facebook注资4.5亿美元。一个月后,摩根大通成立“数字成长基金”,专门用于投资高科技行业。

  “大批投资者带着资金正涌向硅谷,因为那里是全球互联网业最发达的地方,没有人愿意错过下一个潮流。”《华尔街日报》说,毫无疑问,互联网热潮又回来了。

  社交“移动中”的商机

  风投的资金流向总是走在时代的前端,流向全球高科技产业最发达的美国硅谷的风投资金,更起着风向标的作用。它们现在流向哪里?《商业周刊》说,风投资金正大量涌入社交移动网络公司,这是硅谷互联网热潮的最新标志。

  “Facebook、Twitter等社交网络固然吸引人,但有没有想过将社交网络从个人电脑的束缚中解脱出来,我们的目标是手机用户。”成立仅7个月的手机社交网络公司Color Labs,最近受到媒体关注。Color已从红杉资本和贝恩资本等风投公司手中获得了4100万美元投资。让媒体惊叹的是,那些顶级风投向Color砸下巨资时,Color连应用程序都没有拿出来给他们看过。那些风投只是看到了几页关于Color理念的PPT,就判断其会有远大的“钱景”。

  Color的理念是,你可以发现你身边的一切,你想知道一个人身边的事情,并不需要认识这个人。Color是一个移动照片应用程序。你用手机拍摄快照,这些快照就会出现在你手机的照片集里面。而Color的美妙之处在于,它鼓励用户与陌生人分享照片建立社交网络,而不是仅仅与自己的熟人分享。举例来说,假如你与4个朋友走进一个餐馆吃饭,如果你这时候启动Color,并拍下照片,对任何距离拍照地点100英尺范围内的人来说,这张照片都是公开的。因此,如果这个餐馆里有别人打开了Color,他将能够看到你刚刚拍到的照片。

  Color没有让它的投资者失望。在完整应用程式上线后24小时内,其下载量一跃成为iTunes里排名第二的社交网络应用,仅次于Facebook。

  Color只是受到资金关注的社交移动网络企业之一。在硅谷,几乎每个星期,都有类似的初创公司获得投资的消息――

  Group Me是一个手机传讯应用的新技术公司,已经募集了1060万美元。Path是一家使用iPhone应用程序只限于 50人分享的社交照片网络,它已经收到了 850万美元的投入,此前它还拒绝了谷歌出资1亿美元的收购方案。Path的竞争对手是一家叫Picplz的公司,它得到800万美元投资。另一家进行照片分享服务的Instagram获得了700万美元投资,据说有近40家投资公司曾向Instagram表达投资意向。

  一些大企业也看到其中的商机。社交网络行业“大佬”Facebook想在“移动中”赚钱。日前,Facebook收购了手机软件公司 Snaptu,更早些时候,Facebook并购 了 群 组 聊 天 室 服 务 商 Ebluga。Facebook还曾参与到收购互联网电话服务公司Skype,不过Skype本周二被微软成功收购。

  是泡沫,还是金矿

  硅谷现在够热闹了。其实,“在这里,投资者在激烈争夺着每一家有活力的互联网创业公司,而创业公司则是从多个资金充实的投资者当中任意挑选。华尔街投行、富豪炒客和资深风投人士,甚至会为达成某笔交易而争得面红耳赤”,《商业周刊》说。

  这不禁让人联想起2000年互联网泡沫破灭前硅谷的情景――大批风险投资家以及大企业争先恐后地向创业公司投入重金,被垂青的公司甚至包括那些业务理念极不成熟的公司。

  如今这股硅谷网络热潮,会是当年网络泡沫的重现吗?这是如今很多投资人和初创公司都在思考的问题。大家既怕失去机会,又怕像当年那样血本无归。

  经济学家认为,在这一波硅谷网络热潮中,虽然有泡沫的成分,但前景还是乐观的。

  第一,与十一年前很多企业没有明确的盈利模式相比,当今有更多的创业企业在盈利,或是处于更为明确的盈利道路上,而云计算也帮助他们大幅降低了运营成本。第二,十一年前,网络泡沫由纳斯达克上市的几大高科技股被大量抛售开始,投资者、基金和机构纷纷开始清盘。而现在由于私募股权融资渠道的充裕、新上市公司面临的大量监管以及私有公司股票交易渠道的增多等因素,硅谷很多互联网公司选择推迟企业上市。第三,更重要的是,今天的互联网环境与十一年前相比已经有了本质的区别。十一年前,无论是互联网广告、物流、宽带等,都处于发展极不完善的阶段,缺乏可盈利的商业模式。而今天,游戏、广告和电子商务已经成为互联网公司稳定的收入来源。

mysql dump command

1.用mysqldump对MySQL数据库进行数据备份与恢复
   下面假设要备份tm这个数据库:
  Shell>mysqldump -uroot –p123456 tm > tm_050519.sql
  这时可以利用gzip压缩数据,命令如下:
  Shell>mysqldump -uroot -p123456 tm | gzip > tm_050519.sql.gz
  恢复数据:
  Shell>mysql -uroot -p123456 tm < tm_050519.sql   从压缩文件直接恢复   Shell>gzip < tm_050519.sql.gz | mysql -uroot -p123456 tm

use mysqldump to create a simple backup of your database

You can use mysqldump to create a simple backup of your database using the following syntax.

mysqldump -u [username] -p [password] [databasename] > [backupfile.sql]

[username] – this is your database username
[password] – this is the password for your database
[databasename] – the name of your database
[backupfile.sql] – the file to which the backup should be written.

restore the database MySQL by command

If you are moving your data to a new server, or you have removed the old database completely you can restore it using the code below. This will only work if the database does not already exist:
mysql – u user_name -p your_password database_name < file_name.sql Or using our example from the previous page: mysql - u bobbyjoe -p happy234 BobsData < BobBackup.sql If your database already exists and you are just restoring it, try this line instead: mysqlimport -u user_name -p your_password database_name file_name.sql Or using our example again: mysqlimport -u bobbyjoe -p happy234 BobsData BobBackup.sql

WordPress multilanguage solution – qTransalte

qTranslate

Adds userfriendly multilingual content management and translation support into WordPress.

Description Installation FAQ Screenshots Stats
Writing multilingual content is already hard enough, why make using a plugin even more complicated? I created qTranslate to let WordPress have an easy to use interface for managing a fully multilingual web site.

qTranslate makes creation of multilingual content as easy as working with a single language. Here are some features:

qTranslate Services – Professional human and automated machine translation with two clicks
One-Click-Switching between the languages – Change the language as easy as switching between Visual and HTML
Language customizations without changing the .mo files – Use Quick-Tags instead for easy localization
Multilingual dates out of the box – Translates dates and time for you
Comes with a lot of languages already builtin! – English, German, Simplified Chinese and a lot of others
No more juggling with .mo-files! – qTranslate will download them automatically for you
Choose one of 3 Modes to make your URLs pretty and SEO-friendly. – The everywhere compatible ?lang=en, simple and beautiful /en/foo/ or nice and neat en.yoursite.com
One language for each URL – Users and SEO will thank you for not mixing multilingual content
qTranslate supports infinite languages, which can be easily added/modified/deleted via the comfortable Configuration Page. All you need to do is activate the plugin and start writing the content!

For more Information visit the Plugin Homepage

Flags in flags directory are made by Luc Balemans and downloaded from FOTW Flags Of The World website at http://flagspot.net/flags/

Author: chineseleper
Tags: admin, bilingual, human, i18n, l10n, language, multilanguage, multilingual, professional, service, switcher, TinyMCE, translation, widget

500 Internal Server Error for wordpress

.htaccess got problem, here is the solution, copy below and replace the one in the .htaccess and it will work

=======================
AddType x-mapp-php5 .php
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress
===================

Image protection

Protecting Images – Put plain and simple: the only way to protect your images from being downloaded or stolen off a web page is to not put them online in the first place. While I put this fact out there as blunt as possible, there are several techniques we can use to make website downloads and image theft much harder. Of course, image theft can be defined in a number of ways, and its definition – and hence measures (if any) taken to prevent it – will depend upon the individual.

There are many ways to protect images from being downloaded, ranging from modifying the image itself (tips 1-3), to preventing webpages downloads (tips 4-8), to being pro-active in finding unauthorized usage of images online (tips 9-10). And while I discuss many common types of image protection, there are many others that I do not mention. A few of the techniques mentioned in this article are directed more towards web designers (these tips are marked with an *), but several can be used on photo sharing website’s such as smugmug, flickr, pbase, and webshots.

What is image theft? Image theft is the unauthorized use of an image, photograph, drawing, or illustration. Well duh. Is it really that simple? Of course not. The hard part is that many people differ in the definition of ‘unauthorized use’. Where one person may not care whether their photograph is downloaded from a web page and placed on another website without their knowledge, there are some that find this to be blatant copyright infringement.

  • Can I download an image? If you are interested in knowing whether unauthorized downloading and use is illegal: many websites will have an image use statement, and it is best and safest to ALWAYS ask the artist for permission. Ultimately, the default for image downloading and usage should ALWAYS be "All Rights Reserved" (eg don’t use without permission).
  • Can I protect an image? If you are an artist interested in protecting your images: it is best to first define for yourself what your policy on image theft is, then define the measures you need to protect your images (even if this means not putting your images online in the first place). It is important to publicly display your policy on image use in an image use statement on your website.

“Protect images and pictures from theft by using watermarks.

1) Image Protection with a Watermark: The most common, and possibly strongest, image protection technique is to place a visual copyright watermark on the image. Image watermarks come in a range of styles: from a full copyright symbol across the image to simply small text in the corner of an image containing the copyright symbol, date, and name of the copyright holder. There is a trade off with watermark size: the larger the watermark the less likely one is to download or steal the image, but the larger the watermark the more of a visual distraction it becomes.

Image watermarks are easy to create in Photoshop: make a new layer with the desired text, adjusting its size and location to best suit your needs. To type the copyright symbol © in text, you can type option+g (mac) or Ctrl+Alt+C (PC). Changing the blending mode and opacity for this layer can create a more artistic and less obstructive watermark: for example ‘soft light’ layer blending can create a nice opaque blend. It is possible to further customize the watermark by using layer blending options such as a dropped shadow and/or beveling. Digimarc, a technology that can be integrated as a Photoshop plug-in, can also produce a digital watermark through the use of digital noise that is read by software. Despite the presence of a watermark however, its survival through image manipulations is not definite, and the lack of a visual symbol may not prevent image theft – only act as proof of copyright owner in case of theft.

Note: Of course an image watermark specifies a copyright directly in the image, but a copyright can also be clearly indicated in text near the image; including the date of copyright, the copyright holder’s name, and your rights management (eg all rights reserved or a creative commons type license). For those that manage their own webpage, a copyright notice deserves special attention on its own webpage, indicating the copyright and your policy on image downloads, usage, and theft (see tip 10).

2) Image Protection Using Low Resolution: Low resolution images should almost always be used on the internet to protect them against theft. A 550 pixel (in its longest dimension) image saved at 72dpi is a good size for internet use, and will not give downloaders much image to work with: other than internet use, images of this size look quite horrible in just about any other application imaginable. On a photosharing site like flickr, images are resized down to 500 pixels (longest dimension) for basic viewing, thus you can upload images 500 pixels wide and not change how most view the photo.

3) A Note on Color Profiles: Much of the internet currently lacks color management (for more information see my article on Soft Proofing and Color Management for the internet). Uploading images without a color profile will not protect an image from being downloaded, but could potentially prevent it from being used: those wishing to use the image in a color managed, internet independent application may be at a loss if they see a drastic shift in colors and contrast and do not know how (or care to) to rectify it. For those that are worried about image quality due to a missing color profile, the consequences are small: the minority of viewers using color managed browsers will see exactly what those using non-color managed browsers see (if you ultimately wish viewers to see as close to what you see in photoshop, I recommend Soft Proofing your images for the web).

*4) Prevent Downloads Using Tables: ‘Right clicking’ images is a fast shortcut to find, copy, and/or download images. For those that have their own website it is possible to prevent this action by placing images as a background to tables. The code is fairly simple in CSS, using the "background-image:url" style:

<table style="background-image:url(‘image.jpg’);width:Wpx;height:Hpx"><tr><td></td></tr></table>

The same image displayed using different image protection techniques. From left to right: the image displayed using the <img> tag, displaying the image as a background image to a table, and displaying the image as a background image to a table with an overlayed transparent gif.

The use of table backgrounds is demonstrated above. An additional modification, shown on the far right above, is to create a transparent .gif file and place this within the table data (<td>) cell itself – the result being right click downloads are still functional but the downloaded, copied, or viewed file is a transparent .gif.

Although time consuming, another method to protect images using tables is to section them, creating multiple images pasted together using an html table. To quarter an image in Photoshop create vertical and horizontal guides using View->New Guide. Each quarter can be copied (the View->Snap To->Guides should be checked to make selections easier) into new files. These images can the be re-assembled within a table without cellpadding or cellspacing (the ‘vertical-align:bottom’ style should be applied to the images). The result is a seamless image which takes a good deal of effort to re-assemble. Of course, this can be extremely time consuming (although the process can be simplified and automated using a short php script) and does not prevent print screen downloads. Further, small differences in browsers may ultimately result in small differences in how the table and image(s) are displayed.

*5) Javascript Right Click Disable: Another measure to prevent right clicks on images is to use Javascript. These short scripts over-ride browser right clicks. Rather than recreate a script that has been widely published in various forms over the internet, I will leave it to the reader to search google for Javascript Disable Right Click. I will however mention that Javascript is client-side, and scripts such as these can not only effect the usability of a website, but can also readily be disabled by turning Javascript off.

*6) Hiding Images: It is possible to look for an image by scouring the source code of a webpage in search of a link to the image. These links however, can be hidden in a number of ways by a web designer. First, they can be hidden within the code by url encoding: converting the html code of the image to ascii (hexadecimal). For example:

/dir/yourimage.jpg

~ versus ~

/%64%69%72/%79%6f%75%72%69%6d%61%67%65%2e%6a%70%67

Second, you can hide links to images in another file, making it harder to find with a simple "Show Page Source" command. For example, suppose an image is the background to table element (see tip 4). The "background-image" style can be defined in a class within an external CSS file and referenced in the table style. This makes finding the link to the image hard to find, especially if you have multiple CSS files linked through an html document. Further, for those experienced with server side scripting the CSS file can be written dynamically – overcoming the problem of having to write a CSS file per image, and making it once again harder to find as this file will usually not be named with a .css extension. Although it is possible to use a similar technique with Javascript, this approach can lead to unpredictable behavior because Javascript is client-side.

*7) Preventing Bandwidth Theft: Bandwidth theft, also known as hotlinking, is the process by which people use images from your server to display in their own webpages. The end result is that the image is still on your server but linked to and displayed by a remote website. It is incredible how easy this is to do and how often this occurs, and startling how many images found in image searches on google are hotlinked images. So why prevent hotlinking? There are a variety of reasons. As the name implies, other websites are stealing your bandwidth: in most cases the bandwidth is negligable, in a few cases it can add up. Further, when hotlinking occurs it is unknown in what context the image is being used. Lastly, the link to your website could be on a website that performs "black hat" or malicious activity.

Hotlinking is easily prevented however. Many hosting services provide a protocol by which to do this through their service control panel. Alternatively, the following lines can be placed in a website root directory ‘.htaccess’ file. If you are unfamiliar ‘.htaccess’ files, they are plain text files that allow you to make some powerful configuration changes on an apache server: I recommend reading the ‘.htaccess’ tutorial at Apache, and being VERY careful when making changes to or overwriting them1.

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomainname\.com [NC]

RewriteRule \.(jpe?g|gif|bmp|png)$ – [F]

Of course, replace mydomainname with your domain name. If you wish to allow certain sites to hotlink to your images, for example website forums or search engines, you can add the following line before the RewriteRule line above, replacing ‘externalsite’ with the name of the website:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?externalsite.com [NC]

When hotlinking is blocked, external links to images will turn into the dreaded image not found icon. This however can be changed to an image of choice by replacing the rewrite rule with the following:

RewriteRule \.(jpe?g|gif|bmp|png)$ http://www.yourdomain.com/dontlinktomyimage.jpg [NC,R,L]

-A note on hotlinking: when hotlinking is disabled using the above code, a 404 Not Found is recorded by your server each time the culprit webpage is loaded. On many servers these 404’s can be accessed using webmaster tools. Alternatively, this information can be actively recorded using a custom 404 Not Found webpage that collects, through server side scripts, the information for you. Why collect this information? On many occasions, if the image cannot be hotlinked the culprit can simply find the image and host it themselves. Collecting this information gives you the ability to actively pursue potential image theft.

*8) Prevent Search Engine Indexing: Protecting images from search engine indexing can be accomplished in two ways. First, a META tag can prevent images from getting indexed, but allow the rest of the page to be found in searches:

<meta name="robots" content="noimageindex"></meta>

This meta information prevents search engine spyders (eg. robots) from indexing images only: this is in contrast to using the “noindex” or “nofollow” contents tags which are general commands that effect the entire webpage. The second method is to use a robot.txt file. This file, which should be a plain text file created with a simple text editor and placed in the root directory of a website, is inspected by search engine spyders the moment they arrive and is a method to tell spyders which directories or files on a website to NOT visit and NOT index. If you have a directory that contains all images for a website, this can be added to the file:

User-Agent:*

Disallow:/images/

Disallow:/image.jpg

The above example tells spyders or ‘bots’, designated by the asterisk, to disregard the directory /images/ and disregard the file /image.jpg. It should be noted that not all search engines honor these methods, and while major search engines such as google, yahoo, and msn honor them there will be other search engines that will not. Note: In the case of online photo sharing websites, flickr allows you to remove images from public searches: this is done within the Privacy and Permissions section of your account.

One of my images that has been widely downloaded and placed on websites without my permission.

9) Finding Your Images: In the instance someone uses your image(s) without permission, you may usually never know. For online usage however, it is possible to be pro-active in finding unauthorized usage by simply searching for your images; the greatest tools being image search engines powered by google, yahoo, and MSN. Although this may seem like finding a needle in a haystack, at times it can be a very useful tool.

A very new tool on the scene of internet image search is a website tool called TinEye, designed by Idèe. Tineye is an image search engine using images rather than keywords to search the internet. Currently in beta testing, their search algorithm is quite impressive. However, their current index is far from complete and it is unknown whether their service will become freely available to everyone, or whether their services will come at a price.

In the case you end up finding unauthorized use of an image online and you wish to do something about it3, it is usually best to contact the webmaster(s) directly. If contact information is not provided on the webpage itself, resources such as WHOIS can be used to find technical contacts as well as hosting service contacts. Usually a simple email to the webmaster – stating the unauthorized use of your work and politely asking them to remove the image from their server – will do the trick. In certain situations a Cease and Desist letter may be necessary, specifying an infringement of copyright has been made as well as specifying your demands. Sometimes webmasters will be extremely cooperative. Other times not. In the event the webmaster does not comply with your demands, there are actions you can take, including a) Notifying their Advertisers b) Contacting the Hosting Service (found through a WHOIS) c) contact websites that link to the offending website asking for the removal of links2 d) send requests to search engines that the website contents be removed from their indexes. For a thorough discussion on stolen content and actions that can be taken, I highly recommend reading the following article: Stolen Content – How to Act.

Offline copyright infringement is a lot more difficult to detect. In either case, if you feel compensation is justified for copyright infringement, I suggest contacting a copyright attorney to discuss your options3.

10) Copyright Images3: A copyright is a form of protection provided by law that prevents the use of a piece of work, and the copyright owner the person who originally created that work (please visit the United States Copyright Office for more information). In almost every case, if you push the shutter button you hold the copyright. However, it is always advisable to register a copyright of your images with the United States Library of Congress or a similar entity in the country where you reside. While this will not prevent images from being downloaded and/or stolen, it will give you proof that you are the copyright owner. Registering is easy, cheap, and can be done in batch (eg you can register several images, such as "Photographic Works of – First Quarter, 2008").

There is no international copyright law which provides immediate protection for an artist against unauthorized usage: however most countries have copyright laws that pertain in that country. Protection is also provided internationally through the Berne Union for the Protection of Literary and Artistic Property (Berne Convention) and the Universal Copyright Convention (UCC). For more information on international copyright laws, the US Copyright Office has a circulation article available as a PDF on International Copyright policies.

Image Protection – Conclusions

Every image protection technique will have its pros and cons. A watermark can detour image theft but can also be considered unsightly. A low resolution image can prevent theft because of the quality – but because of the quality effect what the image portrays. Preventing right click can prevent direct downloads but does not prevent ‘screen dumps’. However, the combination of techniques can become powerful in discouraging unauthorized image usage.

Will there ever be a solution to online image theft? In a naive sense we all would like to think so, but in all honesty doubt it. Watermarks can be edited, and regardless of how well the URL to an image is hidden, people always have the ‘print screen’ option. However, in my experiences in having my images used without my permission (at least those that I am aware of), many of the people doing so had little knowledge that they were guilty of copyright infringement – so perhaps education about copyright infringement and image theft is part of the solution.

What I do: Finally, you may be wondering what I do for image protection. All my images are registered with the Library of Congress, I prevent hotlinking, my images lack color profiles, are low resolution, and a few may have various copyright watermarks. Occasionally, whether out of curiosity or paranoia, I will do an image search for my images. That being said over the course of time I have used almost every one of the preventative steps above during various stages of paranoia. While some of the techniques have stuck, others have not. I have found many of my images placed on other websites, and have sent out a fair share of letters to webmasters. So what measures should you take for image protection? Ultimately it comes down to doing what you feel appropriate to protect your images, even if that means not putting them online in the first place.

CentOS+基本服务安装程序

CentOS+基本服务安装程序

1 安装 CentOS 作业系统

  1. CentOS 4.7 ServerCD 安装 ← 后面将透过 yum update 升级至 CentOS 4 的最新版
  2. Language Selection : Chinese(Traditional) 繁体中文
  3. 键盘设定 : 美式英文
  4. 安装类型 : 伺服器(S)
  5. 选择磁碟分割方式 : 自动分割磁碟(A)
  6. 网路设定 :
    1. 开机时立即啟动 [v]
    2. 指定 IP/netmask
    3. 指定 Gateway / DNS
  7. 防火墙设定 :
    1. 啟用防火墙(E)

      [v] 远端登入(SSH)

      [v] 网页伺服器 (HTTP, HTTPS)

    2. 啟用 SELinux

      警告(安装之后如果要更改 SELinux 的设定, 可编辑 /etc/selinux/config 然后 reboot 让设定生效)

  8. 时区选择 : 亚洲/台北
  9. 选择最小化安装
  10. 安装完成后会自动退出 CD, 然后重新啟动进入 CentOS
啟用 SELinux : 警告 并非预设值, 所以常常会出现这部份没设正确的状况!!!

1.1 确认 CentOS 安装完成

  1. 建立备援 root 帐号(Exp. misadm)
  2. 建立登入帐号 (Exp. jonathan)
  3. 网路可否正常运作 (ssh 到外部主机, 然后再 ssh 回来)

1.2 更新 CentOS 版本作业

  1. 使用 root 身分登入主机
  2. 安装 yum 更新套件
  3. 使用 yum 更新到最新版本
  4. 重新啟动电脑让新版的 kernel 生效

实际执行语法

如果之后要直接升级成 CentOS 5 记得先将 yum-plugin-fastestmirror 移除

rpm -e yum-plugin-fastestmirror
如果安装 32bit 版本, 虽然主机记忆体安装超过 4G, 实际抓到记忆体会出现大概 3G 多..

所以必须安装 kernel-PAE 的 Kernel 版本 (就是之前的 kernel-hugemem)

yum install kernel-PAE

安装之后, 再更改 /etc/grub.conf 内的开机预设版本 default 值. Exp.

:
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-53.1.14.el5PAE)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.1.14.el5PAE ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.18-53.1.14.el5PAE.img
title CentOS (2.6.18-53.1.14.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.1.14.el5 ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.18-53.1.14.el5.img
title CentOS (2.6.18-53.el5)
:

1.3 安装 rpmforge 程序

CentOS5

  • 64 bits 环境 :
    rpm -Uvh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
  • 32 bits 环境 :

    rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

CentOS4

  • 64 bits 环境 :
    rpm -Uvh http://apt.sw.be/redhat/el4/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm
  • 32 bits 环境 :

    rpm -Uvh http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpm

1.4 安装其餘系统管理套件

yum install -y iptraf sysstat net-snmp mrtg


2 设定 snmp agent

su - root
cd /etc/snmp
vi snmpd.conf

编辑 snmpd.conf

com2sec notConfigUser  default       public
 
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
 
view    systemview    included   .1.3.6.1.2.1.2
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    systemview    included   .1.3.6.1.2.1.2.2.1
 
access  notConfigGroup ""      any       noauth    exact  systemview none none
 
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
 
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

啟动 snmpd 并设定开机可自动啟动

3 安装与设定 ntpd

su - root
yum -y install ntp
cd /etc
vi ntp.conf

编辑 ntp.conf

第一次网路校时

啟动 ntpd



4 安装与设定 apache

su - root
yum -y install httpd mod_ssl

依据实际状况设定 httpd.conf 参数档

啟动 httpd

设定每次开机自动啟动 httpd

5 安装与设定 MySQL

su - root
yum -y install mysql-server mysql-devel
  • 第一次啟动 MySQL 并设定自动啟动
service mysqld start
chkconfig mysqld on
chkconfig --list | grep mysqld
  • 设定与确认 MySQL 内的 root 密码
/usr/bin/mysqladmin -u root password 'newpassword'
mysql -u root -p

6 安装与设定 PostgreSQL

如果是安装 CentOS5 x86_64, 可以直接使用 yum 来下载安装 8.1.xx 的版本

yum install postgresql-server postgresql-devel.x86_64

6.1 确认是否有安装之前版本

确认是否有安装之前版本, 如果有的话要移除

rpm -qa | grep postgresql

结果讯息

postgresql-libs-7.4.13-2.RHEL4.1 因為有其他 rpm 相依性, 所以不能移除. 

结果讯息

6.2 下载 PostgreSQL 最新 RPM 版本

要依照目前安装的 CentOS 是 32 或 64 版本来决定下载哪个版本

su - root
mkdir pgsql
cd pgsql

64 Bit 版本

32 Bit 版本

6.3 安装最新版的 PostgreSQL

yum install -y tcl
rpm -ivh postgresql*
升级处理方式

  1. 下载最新版的 PostgreSQL
    网址 : ftp://ftp3.tw.postgresql.org/pub/Unix/Database/postgresql/binary/
  2. 直接下 rpm -Uvh 会出现 php-pgsql-xxx 相依性问题, 所以要改下

    rpm --nodeps -Uvh postgresql-*
  3. 升级后原本 CentOS 附的 postgresql-libs-7 就不见了, 所以还要下载安装回去

    wget http://ftp.isu.edu.tw/pub/Linux/CentOS/4.5/updates/i386/RPMS/postgresql-libs-7.4.17-1.RHEL4.1.i386.rpm
    rpm --force -ivh postgresql-libs-7.*

6.4 设定 PostgreSQL

  1. 第一次建立 PostgreSQL 资料目录|
    service postgresql initdb
  2. 检查 PostgreSQL 参数档是否已產生

    cd /var/lib/pgsql/data
    ls -lt

    看结果内容

    [root@tryboxap07 data]# ls -lt
    total 116
    drwx------  5 postgres postgres  4096 Jan 25 03:29 base
    drwx------  2 postgres postgres  4096 Jan 25 03:29 global
    drwx------  2 postgres postgres  4096 Jan 25 03:29 pg_log
    drwx------  2 postgres postgres  4096 Jan 25 03:29 pg_clog
    -rw-------  1 postgres postgres  3200 Jan 25 03:29 pg_hba.conf
    -rw-------  1 postgres postgres  1460 Jan 25 03:29 pg_ident.conf
    drwx------  2 postgres postgres  4096 Jan 25 03:29 pg_subtrans
    drwx------  3 postgres postgres  4096 Jan 25 03:29 pg_xlog
    -rw-------  1 postgres postgres 15201 Jan 25 03:29 postgresql.conf
    drwx------  4 postgres postgres  4096 Jan 25 03:29 pg_multixact
    drwx------  2 postgres postgres  4096 Jan 25 03:29 pg_tblspc
    drwx------  2 postgres postgres  4096 Jan 25 03:29 pg_twophase
    -rw-------  1 postgres postgres     4 Jan 25 03:29 PG_VERSION
  3. 设定 PostgreSQL 参数档 postgresql.conf 内容

    vi postgresql.conf

    :
    listen_addresses = '*'
    port = 5432
    max_connections = 750
    :
    shared_buffers = 24MB
    :
    stats_start_collector = on
    stats_command_string = on
    stats_block_level = on
    stats_row_level = on
    :
    autovacuum = on
    :
  4. 依据实际需要来修改 postgresql 登入权限档 pg_hba.conf

    vi pg_hba.conf

    # IPv4 local connections:
    local    all         all                             ident sameuser
    host    all         all         127.0.0.1/32          md5
  5. 啟动 PostgreSQL

    service postgresql start

    如果无法成功啟动, 可能需要调整 Kernel 的参数

    vi /etc/sysctl.conf

    kernel.shmmax = 536870912
    kernel.shmmni = 4096
    kernel.shmall = 2097152
    # semaphores: semmsl, semmns, semopm, semmni
    kernel.sem = 250 32000 100 128
    fs.file-max = 65536
    net.ipv4.ip_local_port_range = 1024 65000
    net.core.rmem_default=262144
    net.core.rmem_max=262144
    net.core.wmem_default=262144
    net.core.wmem_max=262144
    /sbin/sysctl -p
  6. 设定每次开机自动啟动 postgresql

    su - root
    chkconfig postgresql on
    chkconfig --list | grep postgresql

    看结果内容

    [root@trybox-03 data]#  chkconfig --list | grep postgresql
    postgresql      0:off   1:off   2:on    3:on    4:on    5:on    6:off
    [root@trybox-03 data]# 

7 安装 php

如果之前未安装 postgresql-libs-7.4.xx, 就必须依照以下方式强制安装上去.

强制安装 postgresql-libs-7.4.xx 程序

  1. 安装 php 与 php-mysql / php-pgsql 模组

    yum install -y php php-mbstring php-mysql php-pgsql
  2. 设定 php

    原则上 php 已经随 apache 安装上去, 所以只要验证是否没问题

    cd /var/www/html/
    vi php.php

    php.php

    <?php
    phpinfo();
    ?>
    service httpd restart
  3. 然后输入网址, 应该可以看到 php 资讯网页

    http://trybox-server-url/php.php



8 安装 perl Module

透过 rpmforge 安装

yum install -y perl-Text-Iconv
yum install -y perl-Mail-Sendmail
yum install -y perl-DBI
yum install -y perl-DBD-Pg
yum install -y perl-DBD-mysql
 
-- 以下可能会出现错误讯息 --
yum install -y perl-Digest-Perl-MD5

透过 CPAN 安装

安装 gcc

使用 perl -MCPAN -e shell 来安装与更新 Perl Module

需要再额外安装 Module

手动下载安装 perl Module

这部份是当无法经由 CPAN 的方式安装才需要透过这方式处理

su - root
mkdir perl
cd perl

Text::Iconv

Digest::Perl::MD5

DBI

DBD::Pg

Mail::Sendmail

MIME::Base64

LWP

9 安装 phpMyAdmin

至 www.sf.net 找 phpMyAdmin

  • 因為预设 MySQL root 并没有设定密码,所以安装好 phpMyAdmin 之后应该要立即透过 phpMyAdmin 更改 root 密码
  • 2.11.10 版本确定有资安弱点, 请务必透过设定 apache 的 deny,allow 方式来让特定 IP 存取 phpMyAdmin

设定 config.inc.php 参数档

10 安装 phpPgAdmin

至 www.sf.net 找 phpPgAdmin

设定参数档 conf/config.inc.php

验证 phpPgAdmin 安装是否正确

建立 Reports 资料库

11 安装 SubVersion(svn)

11.1 安装 SubVersion rpm

CentOS 内附的 SubVersion 并非最新版本, 压力测试发现在同时 svnadmin export 与 svn update 时会出现 db 异常问题, 导致无法运作, 必须执行 svnadmin recover svndir 修復, 以下就是针对 trybox 所修復的范例:

cd /var/www/svn
svnadmin recover trybox
chown -R apache:apache trybox

透过 rpmforge 安装程序

实际下载 rpm 安装程序

11.2 编辑设定档 subversion.conf

cd /etc/httpd/conf.d/
vi subversion.conf
# Needed to do Subversion Apache server.
LoadModule dav_svn_module     modules/mod_dav_svn.so
 
# Only needed if you decide to do "per-directory" access control.
#LoadModule authz_svn_module   modules/mod_authz_svn.so
:
:
:
<Location /repos>
   DAV svn
   SVNParentPath /var/www/svn
 
   AuthzSVNAccessFile /var/www/control
   Satisfy Any
 
   # Limit write permission to list of valid users.
#   <LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      SSLRequireSSL 
 
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /var/www/passwdfile
      Require valid-user
#   </LimitExcept>
</Location>
  • 如果 svn 要改用 http:// 没有加密传送方式, 就在 SSLRequireSSL 前加上 # 拿掉 SSLRequireSSL 功能
  • 如果不需要设定特定使用者权限,就在 AuthzSVNAccessFile 前加上 # 拿掉指定权限功能, 也不用编辑 /var/www/control

11.3 依实际需要建立 svn 目录与专案

mkdir /var/www/svn
cd /var/www/svn
svnadmin create trybox
chown -R apache:apache trybox

11.4 设定存取 subversion 用户帐号密码

htpasswd -c /var/www/passwdfile jonathan
htpasswd /var/www/passwdfile trybox
[root@tryboxap1 svn]# htpasswd -c /var/www/passwdfile jonathan
New password:
Re-type new password:
Adding password for user jonathan
 
[root@tryboxap1 svn]# htpasswd /var/www/passwdfile trybox
New password:
Re-type new password:
Adding password for user trybox

11.5 设定每个使用者在每个 repos 内的权限

vi /var/www/control
[trybox:/]
jonathan = rw
trybox = r

11.6 重起 apache 让 subversion 生效

service httpd restart

12 安装 cronolog 让 log 档可自动依日期分档

透过 rpmforge 安装

yum install cronolog

透过下载原始码安装

13 安装 RRDTool

透过 rpmforge 安装程序

实际安装官网下载档程序

14 依实际需要设定 iptables

su - root
vi /etc/sysconfig/iptables

/etc/sysconfig/iptables

service iptables restart


 

/uc_server/index.php was not found on this server处理方法 - discuz

很多朋友的 DZ论坛在退出时出现The requested URL /uc_server/index.php was not found on this server时,也就是正常登录你的用户,再退出时提示的一段错误
我仔细看了一下路径没有问题 ,把UC后台的IP地址都改成了新的IP,但是问题依然
解决方法:看一下FTP论坛根目录下config.inc.php这里的IP是不是还是127.0.0.1,如果是的话,改成IP地址(我用的方法是就是 这个,把这个文件里填写真实IP地址,UC应用里与其填写一致;留空的方法没有尝试)
好了,如果这几个方法都可以反复测试一下,但前提是UC应用一定要与config.inc.php这个文件里一致

如果是DZ X以上版本的请在config/config_ucenter.php修改127.0.0.1为你的IP即可解决!

团虎的竞争对手-美国团购网站Livingsocial创业故事

美国团购网站系列介绍:Livingsocial创业故事

 

卷首语:对中国互联网产业来说,突然让“团购”这个词火热起来的是2010年3月推出的美团网。由于创业门槛较为低廉,美团网的成功使得一夜之间出现了上百家页面风格相同、定位类似的团购网站。

然而,每日团购(deal-of-the-day)这种本地电子商务模式最早来源于美国团购网站Groupon。自2008年11月首次推出后,Groupon的团购业务很快风靡美国,并始终保持着行业领先地位。去年12月底,Groupon更是拒绝了谷歌高达60亿美元的收购要约,一时间成为全球互联网关注的焦点。

不过我们并不打算介绍业务模式与创业经历已经众所周知的Groupon,因为在美国同样也有近百家团购网站;这些网站有的靠新颖业务吸引用户,有的则有着夫妻创业的有趣故事,我们认为这些小网站的创业经历同样能够给中国的互联网创业者带来思考与借鉴之处。

这也是新浪科技做本次“被中国互联网忽视的美国互联网公司”系列报道的原因。我们将在未来的时间内,精选介绍若干有代表性特色的网站,他们不一定处于海外市场的第一名,但一定会具有各自特色。这第一期为您介绍的,就是美国第二大团购网站Livingsocial的创业故事。

图1:美国第二大团购网站Livingsocial
图1:美国第二大团购网站Livingsocial
图3:联合创始人兼CEO蒂姆·奥肖尼斯(Tim-O’Shaughnessy)
图2:联合创始人兼CEO蒂姆·奥肖尼斯(Tim-O’Shaughnessy)
图3:Livingsocial的四位创始人
图3:Livingsocial的四位创始人

创办饥饿机器

说起Livingsocial的创业故事,就得先介绍下网站联合创始人兼CEO蒂姆·奥肖尼斯(Tim O’Shaughnessy)。这位来自美国明尼苏达州的青年据说从小就很有经商头脑。8岁那年,奥肖尼斯说服了一个小伙伴,用每个月的零花钱去批发糖果,然后再挨家挨户地兜售挣钱。2004年从华盛顿特区的乔治城大学毕业后,市场营销和信息管理双学位毕业的奥肖尼斯在鼎鼎大名的AOL找到了工作,成为了美国的“北漂族”。

在AOL总部效力两年之后,奥肖尼斯加入了AOL联合创始人史蒂夫·凯西(Steve Case)新创办的医疗护理网站Revolution Health。这家网站增长非常迅速,创立头年员工数量就从50人增至280人。精明能干的奥肖尼斯深得老板赏识,多次获得晋升,获得了运营网站的宝贵经验;但更重要的是,他在网站工作结识了数位志同道合的朋友,为日后的创业奠定了基础。

2007年,26岁的奥肖尼斯与三位同事兼铁哥们埃迪·弗雷德里克(Eddie Frederick)、艾伦·巴塔利亚(Aaron Batalion) 以及瓦雷利·阿莱克森科(Valeriy Aleksenko)决定辞职创业。他们在华盛顿创办了一家名叫“饥饿机器”(Hungry Machine)的科技咨询公司。

这四人团队最初打算从事科技咨询业务,同时抽空做做感兴趣的副业——为新兴社交网站Facebook开发应用产品。他们之所以起“饥饿机器”这个名字,是为了激励自己永不满足,进取心要如野狼般饥饿,执行力应似机器般坚决。

饥饿机器启动之初,咨询业务开展得相当不错,先后获得了体育网站ESPN 和“美国猫扑网”JibJab等重要客户,年收入很快就达到了100万美元。看起来,一切都发展那么顺利,创业的四人也有望每人获得六位数的回报。不过,他们并没有沾沾自喜,反而在酝酿着一次冒险的转型

转型开发应用

那个时候,如今的社交网站巨头Facebook还没有大红大紫,老牌社交网站Myspace正是如日中天,两年后成为《时代周刊》年度人物的扎克伯格还是个“小正太”。但早在那时候,奥肖尼斯却就看到了Facebook平台的巨大潜力,决定逐步放弃获利颇丰的咨询业务,全力开发Facebook应用。

在他们的努力下,饥饿机器推出了Facebook上的首款图书推荐与分享应用Visual Bookshelf。功夫不负有心人,这款应用自推出以来就一直是Facebook上最热门的同类应用。然而,在取得开门红之后,饥饿机器的应用开发业务却陷入了停滞。

时间到了2008年的春天,饥饿机器的几位创业者决定筹集资金,招兵买马加大投入,开发更符合用户需求的应用。就在这个时候,老东家Revolution Health的老板凯西伸出了援手。具有“伯乐”眼光的凯西一直都很赏识奥肖尼斯,也看好饥饿机器的应用开发前景。他不仅答应自掏腰包投资饥饿机器,还牵线搭桥帮奥肖尼斯联系了风投。不过,或许凯西也没有料到,这位精明肯干的小伙子能打造出华盛顿特区除AOL之外的第二家全国性网站。

创业者或许都清楚,想从风投手中筹钱,没有一番“忽悠”的本事可不行,奥肖尼斯显然就深谙推广营销之道。他数次求见互联网风投基金Grotech Ventures合伙人雷尼(Rainey),向后者描述了Facebook平台应用开发的美好前景。奥肖尼斯相信,Facebook将成为全球最大的社交平台,他们的应用开发业务具有巨大的市场潜力。

最后Grotech Ventures同意向饥饿机器投资400万美元,凯西也通过投资公司注资100万美元,这是奥肖尼斯等人筹到的首笔资金。他们还决定将公司改名为Livingsocial,以更好地体现公司的社交应用业务。这就是日后美国第二大团购网站Livingsocial的诞生经过。

2009年3月,Livingsocial推出了Pick Your Five与Polls等应用产品。PickYourFive这款应用让Fcebook用户选择自己最喜欢的图书、音乐、电影甚至饮料;推出仅仅30天,用户数就已经达到了8000万人。对一个创业公司而言,这简直就是个天文数字。奥肖尼斯等人不得不轮班负责维护,因为可怜的公司服务器随时可能会因为巨大的流量而崩溃。到2009年夏天的时候,Livingsocial已经是Facebook平台上页面点击量最大的应用开发商。

图4:Livingsocial在华盛顿特区的办公室
图4:Livingsocial在华盛顿特区的办公室

有了成功的应用产品并不一定就能带来丰厚收入。虽然Livingsocial成功签下了可口可乐和迪士尼等重要广告客户,但公司的广告收入仍然与巨大的应用用户数不相符。奥肖尼斯面临的下一步挑战就是怎样把数量惊人的用户数和广告商联系起来,毕竟Livingsocial的应用大多是允许Facebook用户表达产品偏好的产品(有点类似开心网的评比功能)。这个创业团队又在酝酿着第二次业务转型。

2009年初,Livingsocial收购了一家不起眼的小公司Buy a Friend a Drink。正如公司名字所揭示的,这家公司的主要业务就是推广促销新的酒类产品,吸引网络用户到酒吧进行消费。

在与各家酒吧打交道推广网络促销模式的时候,Livingsocial的销售人员发现,本地还有其他很多店家可以进行类似推广。奥肖尼斯回忆说:“当时我们与各种酒类公司打交道,与许多餐馆进行合作,向网络用户提供免费酒水的优惠券。”他从中看到了每日一购业务模式的巨大潜力。

2009年7月27日,Livingsocial正式推出了第一次团购交易,而首次合作的对象则是华盛顿特区唐人街的Zengo餐厅。虽然总部位于芝加哥的Groupon早在8个月前(2008年11月)就推出了团购业务,但Livingsocial凭借着更为灵活的业务模式也实现了爆炸式增长。

Livingsocial的第二次业务转型又获得了成功,这家公司似乎每一次转型都能带来更为出色的业绩。永不满足的企业文化,创业的激情奋斗,又赶上了团购模式风靡美国的好时机,Livingsocial很快就成为了美国第二大团购网站。当年秋天,奥肖尼斯等创始人决定,再一次改变公司核心业务,全力从事团购业务。

业务蒸蒸日上,但奥肖尼斯等人并未失去那颗饥饿的心。Livingsocial每年都会组织员工选出自己的年度激励语。2009年,他们选出的年度激励语是“要么做大,要么回家”(Go big or go home )。而在2010年,Livingsocial则意气风发地喊出了“强势出击”(Strong moves )的口号。

图5:Livingsocial收购的探险度假公司urban-Escapes
图5:Livingsocial收购的探险度假公司urban-Escapes

虽然团购模式大同小异,但成功的团购网站各有各的特点。Livingsocial在旗下每个服务城市,每个工作日推出一个团购交易,团购的商品或服务价格至少打五折。参加团购活动的店家并不需要支付任何前期费用,Livingsocial从中收取大约30%的收入提成。和诸多团购模式相同的是,团购交易结束后,用户才能激活和使用团购的优惠券。

用户可以登录Livingsocial网站或者通过电子邮件获取团购信息,购买成功后会在第二天上午10点左右收到电子邮件的兑换券。他们可以选择打印兑换券进行消费,也可以将兑换券下载到谷歌Android手机或者苹果iPhone、iPad以及iTouch等诸多设备上。(Livingsocial在团购业务赚得钵满盆肥的同时,也没有忘记应用开发商的本色。出色的多平台应用也给团购业务提供了有力保障。)

但比最大竞争对手Groupon更加灵活的是,Livingsocial并不设定最低团购人数。用户不用担心因为团购人数过少,而失去优惠的机会。此外,为了鼓励更多用户参加团购,Livingsocial还推出了当时全新的“推广换免费”模式。用户购买团购交易之后,可以将团购链接发送给自己的朋友,如果吸引其他三位朋友也购买,那么推广的用户此次交易就可以享受免费。

在餐饮领域推广团购获得成功之后,Livingsocial的那帮年轻人再次开始不安分了。他们不断尝试新的服务项目,博物馆、SPA按摩甚至是室内跳伞,Livingsocial的团购项目越来越别出心裁。

或许都是年轻人,都有一颗“玩的野心”。事业成功的奥肖尼斯甚至每天骑着SEGWAY电动代步车去上班。Livingsocial敏锐发现了都市年轻人寻求放松刺激的度假需求。在数次推出周末探险团购试水市场需求后,2010年10月,Livingsocial收购了纽约户外探险度假公司urban Escapes,为美国大城市的年轻人推出度身定做的休闲度假服务。

融资备战扩张

从2009年出道团购行业以来,Livingsocial就一直是美国第二大团购网站,无论是收入还是用户数都被Groupon压过一头。拥有永远“饥饿”心的奥肖尼斯当然不会甘于屈居第二。从2010年开始,Livingsocial和Groupon就开始了激烈的融资与扩张竞赛。竞争刺激增长,Livingsocial的业务规模不断壮大,他们的触角逐渐从美国东部地区扩散到整个美国,甚至蔓延到了加拿大、英国、爱尔兰以及澳大利亚。

从2010年开始,Livingsocial的业务和公司规模一道急剧增长,几乎每天都会有一位新员工加入公司。奥肖尼斯不得不放弃了面试每位新员工的惯例。他感慨道:“我们当时甚至都没有足够的办公空间,不得不占用公司的休息室和游戏室。”

2010年1月,Livingsocial通过B轮融资筹得500万美元,资金还是来自Grotech Ventures以及AOL创始人凯西。当年3月,业务急剧增长的Livingsocial再次融资2500万美元;投资者除了Grotech和Case外,又增加了U.S. Venture Partners。接下去的几个月,Livingsocial又接连从Lightspeed Venture Partner、U.S. Venture、Grotech和凯西等数家投资者处融资了2400万美元。

一连串的大规模融资引发了业内惊叹,但好戏还在后头。为了对抗老冤家Groupon,Livingsocial更是傍上了大款——美国电子商务巨头亚马逊。2010年12月,亚马逊宣布向Livingsocial投资1.75亿美元,注资帮助该网站扩展业务。此前的投资者Lightspeed Venture Partners也不愿放过机会,继续向Livingsocial增资800万美元。至此,Livingsocial的融资总额达到了2.32亿美元,奥肖尼斯宣布将把所筹资金用于全球扩张。

奥肖尼斯谈到亚马逊注资交易时表示:“Livingsocial希望成为本地电子商务领域最为成功的公司,向亚马逊这样的电子商务巨头寻求帮助无疑是非常明智的举动。”

未来发展宏图

目前Groupon和Livingsocial已经控制了美国团购网站绝大部分的市场份额。网络调查公司Experian Hitwise去年11月的数据显示,在美国81家团购网站中,两家公司的总访问量占比达到了惊人的87%。

引入亚马逊的资金后,Livingsocial希望可以借助亚马逊的帮助,向强大的对手Groupon发起挑战。奥肖尼斯在融资成功后春风得意地宣布,2011年将把公司员工规模扩大三倍以上,达到1800人;并将业务规模扩大一倍以上,使得服务城市总数达到300个。相比之下,目前Groupon的雇员总数为3000人,服务城市为300个。

Livingsocial接受亚马逊注资时透露,公司目前团购用户数超过1000万,日均收入在100万美元左右,预计2011年收入将达到5亿美元。不过,该公司并没有透露,100万美元是包括了团购店家营业额的毛收入,还是分成之后的净收入。相比之下,据业界预计,Groupon去年年底用户总数高达2500万,较为合理的年收入是在8亿美元左右。

百事可乐与可口可乐的百年争斗成为了商界传奇,耐克强势崛起挑战阿迪达斯也成为了市场竞争的经典案例,如今Groupon和Livingsocial又将在团购领域上演了新一出的双雄争霸。

对奥肖尼斯来说,市场竞争的意识已经浸入血液,满足守业就意味着失败将近。用他的话来说,“成功的关键就在看准方向全力出击,只有永远保持“饥饿”的进取心才能维持增长与活力。终有一天,我们会得到自己想要的(成为团购市场老大),然后再次转战其他领域。

Joomla

Joomla!是一套在国外相当知名的内容管理系统。Joomla!是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux、 Windows、MacOSX等各种不同的平台上执行。目前是由Open Source Matters(见扩展阅读)这个开放源码组织进行开发与支持,这个组织的成员来自全世界各地,小组成员约有150人,包含了开发者、设计者、系统管理者、文件撰写者,以及超过2万名的参与会员。

目录

简介
  1. Joomla!
  2. 新的配置需求
  3. 可嵌套的分类机制将取代section
Joomla!的优秀特点
  1. 概述
  2. 先进的网站技术的运用
  3. 简单且丰富的操作接口
  4. 高度的客制和开发的弹性
Joomla!网站模板

简介

  

Joomla!

  (Content Management System, CMS),它属于Portal(企业入口网站)类型,顾名思义,就是比较适合作为商业类型的网站程序。一般人对这类型的内容管理系统可能会有以下的别名来称呼:

  ■ 架站程序(或软件

  ■ 快速架站程序(或软件)

  ■ 整站程序

  目前,Joomla!最新的版本是Joomla 1.6。

  

Joomla 1.6给我们的建站作业带来了哪十大变化:  生产环境的PHP版本至少要达到5.2.4以上MySQL需要5.0.4以上;不够的话,考虑升级或是搬家吧。

  不再有Legacy模式:不再支持那些运行在Joomla 1.0或1.5 Legacy模式中的扩展;

  届时可以联系扩展的作者,强烈呼吁开发native模式下的解决方案。

可嵌套的分类机制将取代section

  对于这个变化,Joomla玩家已然呼吁了多年;再见吧section;

  可嵌套的分类机制配合Tag的使用,将使文章分类及站点结构更加灵活合理。

  增强了用户界面的一致性:对于“提交”、“保存并新建”、“保存并复制”等功能使用了全新的图标,

  风格更加直观和一致,将有效提升用户操作效率和准确性。

  整合的垃圾箱:不再为不同功能组件使用各自不同的垃圾箱机制;垃圾箱大一统的时代到来了。

  新的模板风格机制:可以更加便捷的修改和组合模板风格index.php,为不同页面设置不同的主题;

  新的模板管理(Template Manager)。

  模块管理的调整:新的功能机制允许用户基于时间和日期来预设模块的发布或隐藏,并且可以为模块指定更加精确的显示位置。自带三款全新的模板:包括博客风格、协作站点风格以及一款供大家自定义的基础框架模板。

  内建的链接跳转机制:新的分类机制必然导致从前基于旧分类机制创建的文章产生链接失效的问题;

  内建的链接跳转机制将提供完善的解决方案;

  权限管理等级(ACL):这是一个大部头,也是Joomla多年来被指责的方面之一,现在终于得到改进。新的ACL机制允许多层级的用户权限管理,通过创建组别,为不同的用户分配不同级别的权限。

Joomla!的优秀特点

概述

  当然每个知名的开源码程序都会有其吸引人的优点,反之当然会有缺点。以下整理出在网络上来自使用者对Joomla!程序的喜好重点:

先进的网站技术的运用

  Joomla!应用了非常多的网站进步的新技术,像是「网站快取技术」可以加速网站的反应与效能。「RSS新闻联播与新闻读取」是最近十分热门的网站新闻读取的技术,在部落格程序中(Blog)中十分常见。「SEO搜寻引擎最佳化」这个是目前所有网站必备的技术之一,这个功能主要是让搜寻引擎更容易的浏览您网站上的数据,让更多人在搜寻引擎上找到您的网站,相当于为自己的网站带来更多的人潮和商机。

  庞大的附加套件及商机:

  来自全球上千种不同网站应用的附加套件及美工设计布景,都是以这套系统为基础而开发。使用者可以很方便的安装上这些附加套件,如同在桌上计算机中的Windows操作系统中,安装新的软件一般。开发社群总是发挥无止尽的创意,不断的开发符合使用社群需求的产品。Joomla!的商用套件市场目前也有许多价廉物美的软件及美工设计布景主题。

简单且丰富的操作接口

  Joomla!的操作接口除了美观之外,也花了很多心力在设计这些接口的简易操作性。虽然初次使用者,需要花一点时间学习一下操作的方式,才能运用自如。但相信学会使用之后,这是很值得的。另外可搭配的多种所视即所得编辑程序,更可让对网页设计语言不熟悉的管理者,很简易的就可以管理和编辑网站上的文章。

高度的客制和开发的弹性

  对于网站程序开发者和美工设计者,Joomla!保留了最大的客制化弹性和整合能力。全世界的网站相关开发人员,都十分关注与推荐这套系统。是由于这套系统不断在强大能力与客制弹性之间找寻平衡点,受到许多知名厂商的使用。

  Joomla!的历史

  Mambo软件最早在2001年五月份由澳洲Miro公司所开发,由于Miro公司有商业化的考虑,原先发布并采用GNU/GPL授权的软件版本,在版本3.0.5之后就不再支持。

  后来由Robert Castley(现已离开核心小组)接手后续的开发原始码版本,并招募新的志愿者。Mambo发展至4.5.1版本之后,整合了许多新的网站技术,以及新的操作接口,在2004年获得Linux User & Developer Award 2004的「Best Linux or Open Source Software」奖项,自此大放异彩从此,在开源码的内容管理系统中占有一席之地,受到使用社群的高度重视。

  Mambo 2005年8月后由于原先的所有人Miro公司,希望能深入参与开发工作及决定未来的发展方向,引起和核心开发小组之间的意见不合,前开发小组领导人 Eddie Andrew带领几乎八成的原小组成员,成立新的开源码计划Joomla!。而原有的Mambo计划,则由Miro公司重新招募成员与自行雇用开发人员,继续发展下去。目前Joomla!发布的1.0.x版本与Mambo4.5.2版本功能相差无几。

Joomla!网站模板

  目前 市场上有很多公司自行开发的Joomla!系统模板,几个比较大的网站上也经常能够看到一些国外(欧美,韩国)的模板,当中比较有代表性的,在美国有较大影响力的当属TemplateMonster怪兽模板。起源于美国,随即登陆亚洲市场,瞬间风靡全球的网站建设的崭新模式–怪兽网页模板开发了很多CMS网站模板,其中就包括了 joomla ,WordPressmagento drupalmambo 等目前市场上最流行的模板。

扩展阅读:

百度如何介绍Magento的?

目录

Magento (麦进斗)介绍
Magento(麦进斗)的特色
Magento对空间的具体要求
magento汉化
TemplateMonster的Magento模板
Magento功能列表
  1. 1市场营销工具
  2. 2分析与报告
  3. 3搜索引擎优化
  4. 4站点管理
  5. 5其它功能

  

Magento (麦进斗)介绍

  1.是什么

  Magento (麦进斗) 是一套专业开源的电子商务系统

  2.特点

  Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。

  Magento是一款新的专业开源电子商务平台

  3.设计

  在设计上,包含相当全面,以模块化架构体系,让应用组合变得相当灵活,功能也相当丰富。

  4.应用

  其面向企业级应用,可处理各方面的需求,以及建设一个多种用途和适用面的电子商务网站

  包括购物、航运、产品评论等等,充分利用开源的特性,提供代码库的开发,非常规范的标准,易于与第三方应用系统无缝集成。

  为了打开盈利途径,Magento同时具备收费的企业版本,积极谋求合作和第三方整合的工具,比如电子支付平台等。而Magento中国区官方唯一合作伙伴Bysoftchina,也适时推出这种整合服务。方便广大Magento用户将支付模块快速整合到网站。

Magento(麦进斗)的特色

  1 容易整合

  Magento让整合第三方厂商解决方案变得更加容易,透过 Magento建立客制化网站可以节省您很多的时间与资源。

  2 新颖的功能

  像是产品标签、多送货地址或产品比较系统等功能,您不需要支付额外的费用来取得,在现成的 Magento 系统中,您可以发现更多。

  3 专业与社群支援

  不像是其他的开放原始码解决方案, Magento提供专业、可信赖的支援,您也可以从热情的社群中取得协助.

  4 完整的扩充性

  无论网站经过了一夜或是一年的成长,您不需要担心选择的方案无法应付,Magento 提供了完整的扩充性。

Magento对空间的具体要求

  * Supported Operating Systems:

  o Linux x86, x86-64

  * Supported Web Servers:

  o Apache 1.3.x

  o Apache 2.0.x

  o Apache 2.2.x

  * Supported Browsers:

  o Microsoft Internet Explorer 6 and above

  o Mozilla Firefox 2.0 and above

  o Apple Safari 2.x

  o Adobe Flash browser plug-in should be installed

  * PHP Compatibility:

  o 5.2.0 and above

  o Required extensions:

  + PDO_MySQL

  + simplexml

  + mcrypt

  + hash

  + GD

  + DOM

  + iconv

  + SOAP (if Webservices API is to be used)

  o Safe_mode off

  o Memory_limit 32M or more

  * MySQL:

  o 4.1.20 or newer

  o InnoDB storage engine

  * SSL:

  o If HTTPS is used to work in the admin, SSL certificate should be valid. Self-signed SSL certificates are not supported

  * Server – hosting – setup:

  o Ability to run scheduled jobs (crontab) with PHP 5

  o Ability to override options in .htaccess files

magento汉化

  1,下载一个汉化包,参考地址:http://code.google.com/p/magento-cn/downloads/list

  2,解压后copy得到 app文件夹,把汉化包 app文件夹 粘贴 magento下的 app文件夹

  提示有一个对话框,点击“是”

  3.后台登录操作

  A,System ->Cache Magagent

  All Cache 后面选择Refresh 点击分别 Refresh 和 Refresh Now 两个控件

  B.Log into admin panel System > Configuration > general

  then select store view “english” locale options > locale > 中国

  select store view “Francais” locale options > locales > 中国

  Save config

TemplateMonster的Magento模板

  目前比较好的将设计与Magento结合起来比较有名的是TemplateMonster的 Magento模板。精美的设计,高度的开发弹性,短缩了的开发设计时间,使Magento模板更加受到欢迎。TemplateMonster作为网页设计领域的佼佼者,今后肯定会发布更多Magento模板。

  届时中国的用户也可以通过TemplateMonster中国区官方网站TemplateMonster China(http://china.templatemonster.com)下载到最新的加入精美设计的Magento模板。

  相关链接

  官方网站:http://www.magentocommerce.com/

  前台演示:http://demo.magentocommerce.com/

  后台演示:http://demo-admin.magentocommerce.com/ (Admin Username: admin Password: 123123)

Magento功能列表

1市场营销工具

  *私人(俱乐部)销售,包括活动,邀请,分类访问权限

  *灵活的优惠券(价格规则),可限制店铺、客户组、时间段、商品和分类。例如,百分比折扣|固定金额折扣|免运费|买一送一|买一件,第二件可以获得百分比或固定金额的折扣|购买指定商品可以全单免运费|购买指定商品可以获得百分比折扣|购买指定商品可以获得固定金额的折扣

  *可设置按百分比或固定金额的目录促销价格适用于某些店铺、分类和商品

  *免运费选项

  * 按购买数量分层定制价格折扣

  *捆绑商品

  *特定客户组价格和特定客户组分层价格

  *用于促销的目标页面工具

  *搜索引擎友好的URL

  *URL 重写

  *最近浏览商品

  *最近比较商品

  *新商品促销工具

  *商品页面的推荐销售

  *购物车里的交叉销售

  *发送给好友可设为对所有访客或仅对注册用户开放

  *通过电子邮件或RSS 发送收藏夹给好友

  *新商品、新促销和新标签的RSS 源

  *自动生成网站地图

  *Google 网站地图

  *投票调查

  *新闻电邮管理

2分析与报告

  *登录进行管理员操作

  *整合Google 分析

  *报告概览的管理面板

  *销售报告

  *新订单的RSS 源

  *税费报告

  *被放弃的购物车报告

  *访问最多的商品报告

  *订购最多的商品报告

  *低库存报告

  *搜索关键词报告

  *商品评论报告

  *新评论的RSS 源

  *标签报告

  *新标签的RSS 源

  *优惠券使用报告

  *开具发票的销售总额

  *销售退款总额

  *根据订单总金额和订单数目来排行的最

  *佳客户报告

3搜索引擎优化

  *100%搜索引擎友好

  *Google 网站地图

  *URL 重写以全面掌控URL

  *商品与分类的元数据

  *自动生成展示在站点的网站地图

  *自动生成热门搜索关键词页面

4站点管理

  内容拆分与合并。支持按需和按计划来合并和内容回滚。

  多个网站和店铺统一后台管理,可以根

  据需要共享资料

  多语言选择

  支持本地化

  支持多种货币

  用户角色权限的管理系统

  Web 服务API 使得Magento 和第三方软件之间更容易整合

  灵活的税率管理适用于美国和国际市场

  使用模版100% 定制设计

  客户群

  一键式升级

  静态页面内容管理系统

  整合Google 网站优化工具进行A/B 测试盒多元化测试

5其它功能

  目录管理 浏览目录 浏览商品 移动商务 国际支持 结账 配送 支付 客户服务 客户账户 订单管理

看看百度如何知道PHP

PHP

PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用。PHP的另一个含义是:菲律宾比索的标准符号。

目录

PHP语言简介
发展
特性
技术应用
PHP 3与PHP 4
  1. PHP3
  2. PHP4
  3. PHP4的优越性:
PHP5
  1. 1、新的对象模式 (New Object Mode)
  2. 2、异常处理 (Exceptions)
  3. 3、名称空间 (Namespace)
PHP6设想
  1. 1.支持Unicode
  2. 2.Register Globals 将被移除
  3. 3.Magic Quotes 将消失
  4. 5.’var’ 别名为 ‘public’
  5. 6.通过引用返回将出错
  6. 7.zend.ze1 compatbility mode 将被移去
  7. 8.Freetype 1 and GD 1 support 将不见
  8. 9.dl() 被移到 SAPI 中
  9. 10.Register Long Array 去除
  10. 11.一些Extension的变更
  11. 12.APC将被导入核心
  12. 13.告别ASP风格的起始标签
安装
Windows下的PHP环境配置
  1. 软件需求:
  2. 安装过程
UNIX下的PHP环境配置
其他方面
  1. 数据库
  2. 多态
  3. 高级OOP技术
  4. 模板引擎
PHP(penultimate hop pop)
PHP级别
PHP安全
菲律宾比索的标准符号

PHP语言简介

  PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。

它可以比 CGI 或者 Perl 更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。

发展

  PHP 于19

94年由Rasmus Lerdorf创建,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。在1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要求增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中,PHP2.0发布了。第二版定名为PHP/FI(Form Interpreter)。PHP/FI加入了对mySQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI;1997年中,使用PHP/FI的网站数字超过五万个。而在1997年中,开始了第三版的开发计划,开发小组加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名为PHP3。2000年,PHP4.0又问世了,其中增加了许多新的特性。

  PHP 的简称原本为 Personal Home Page,是Rasmus Lerdorf 为了要维护个人网页,而用c语言开发的一些CGI工具程序集,来取代原先使用的 Perl 程序。最初这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。Rasmus Lerdorf 在1995年6月8日将 PHP/FI 公开释出,希望可以透过社群来加速程序开发与寻找错误。这个释出的版本命名为 PHP 2,已经有今日 PHP 的一些雏型,像是类似 Perl 的变量命名方式、表单处理功能、以及嵌入到 HTML 中执行的能力。程序语法上也类似 Perl,有较多的限制,不过更简单、更有弹性。

  在1997年,任职于 Technion IIT 公司的两个以色列程序设计师:Zeev Suraski 和 Andi Gutmans,重写了 PHP 的剖析器,成为 PHP 3 的基础,而 PHP 也在这个时候改称为PHP: Hypertext Preprocessor.[5]。经过几个月测试,开发团队在1997年11月释出了 PHP/FI 2,随后就开始 PHP 3 的开放测试,最后在1998年6月正式释出 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 释出后开始改写

PHP 的核心,这个在1999年释出的剖析器称为 Zend Engine[7],他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。

  在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式释出,2004年7月13日则释出了PHP 5,PHP 5则使用了第二代的Zend Engine[5]。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。

  2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和 Safe mode的功能。

  PHP的最新版本:

  Current PHP 5.3 Stable: 5.3.5

  Current PHP 5.2 Stable: 5.2.17

特性

  PHP的特性包括

  1、开放的源代码

  所有的PHP源代码事实上都可以得到。

  2、PHP是免费的。

  和其它技术相比,PHP本身免费。

  3、php的快捷性

  程序开发快,运行快,技术本身学习快。嵌入HTML:因为PHP可以嵌入HTML语言,它 相对于其他语言,编辑简单,实用性强,更适合初学者。

  4、跨平台性强:

  由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下。

  5、效率高:

  PHP消耗相当少的系统资源

  6、图像处理

  用PHP动态创建图像

  7、面向对像:

  在php4,php5 中,面向对象方面都有了很大的改进,现在php完全可以用来开发大型商业程序。

  8、专业专注;

  PHP支持脚本语言为主,同为类C语言

技术应用

  1,伪静态

  2,静态页面生成

  3,数据库缓存

  4,过程缓存

  5,div+css w3c标准

  6,大负荷

  7,分布式

  8,jquery框架集成

  9,flex

  10,桌面程序应用

PHP 3与PHP 4

PHP3

  PHP3跟Apache服务器紧密结合的特性;

加上它不断的更新及加入新的功能;而且几乎支持所有主流与非主流数据库;再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000。加上它的源代码完全公开,在 Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。

PHP4

  PHP4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP 都将在 Web CGI 的领域上,掀起巅覆性的革命。对于一位专业的Web Master 而言,它将也是必修课程之一。

  PHP 4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比 PHP 3.0要快,其脚本描述更强大并且更复杂, 最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP 脚本引擎重新设计产生的结果:引擎由 AndiGutmans 和 Zeev Suraski从底层全面重写。PHP4.0 脚本引擎 ——Zend 引擎,使用了一种更有效的编译——执行方式, 而不是PHP 3.0 采用的执行 ——当解析时模型。

PHP4的优越性:

  PHP4在3.0版的基础上增加或增强了许多有用的特征,主要如下:

  (1)别名:在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。

  (2)扩充了API 模块:PHP 4.0 为扩展的 API 模块的提供了扩展PHP接口模块, 它比旧的 API 版本显著地快。 PHP 模块已有的及最常用的接口多数被转换到使用这个扩展的接口。

  (3)自动资源释放:PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担。

  (4)布尔类型:PHP 4.0 支持布尔类型。

  (5)进程生成:在 UNIX 环境下的 PHP 4.0 提供了一个很智能和通用的生成进程, 使用了一种名为基于automake/libtool的系统生成技术。

  (6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 仅用于Windows 环境 ) 可以无缝地存取和访问 COM 对象。

  (7)与PHP 3.0 兼容性很好:PHP 4.0 是与 PHP 3.0 代码向后兼容性接近100% 。由于 PHP 4 的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况。

  (8)配置:PHP4重新设计和增强了PHP.ini文件,这使得用PHP.ini来配置PHP显得极为容易,这个文件可以在运行时被Apache(unix系统)或由Windows 注册(Windows 环境)。

  (9)加密支持:PHP4实现了完整的加密, 这些加密功能是一个完整的mycrypt库,并且 PHP 4.0 支持哈希函数。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。

  (10)类型检查:PHP 4.0 支持同一操作符用于评类型检查:===( 3 等号运算符 ), 为在两个值和其类型之间作检查。例如, 3 ===3 将视为假 ( 类型是不同的 ), 而 3 ==3 ( 相等判断 ) 将视为真。

  (11)FTP 支持:PHP 4.0 支持 FTP 。通常, 你会为通过一个调制解调器连接下载一个大文件提供一个接口。然而, 如果你确实有需要,可以使用PHP 。

  (12)PHP4新增函数或功能增强函数:PHP 4.0 新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子。 array_count_values() eval() foreach() include() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()

  (13)here打印:PHP 4.0 的Here打印是与Perl类似的, 尽管完全不相同。Here是打印大容量文章的一个有用的方法,例如在 HTML文件中,不会漏掉任何一个字符,例如目录标记。

  (14)HTTP Session fallback 系统:为 HTTP Session管理的一个 fallback 系统在 PHP 4.0被实现 。缺省情况下,Session标识符由cookies存储。如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在 URL 的查询字符串中被携带。

  (15)ISAPI 支持:PHP 4.0 能作为一个个性化的 ISAPI 模块作为 IIS插件 。这比 PHP 3.0 更有效, 它作为一个外部的程序来运行。

  (16)内存:PHP 4.0 能更有效的使用内存, 导致较少的内存占用消耗,这主要归功于引用计数技术的实现。

(17)其他类成员函数:在 PHP 4.0 你能在成员函数本身的作用域或全局范围内调用其他类的成员函数。例如,你能用一个子函数覆盖父函数,并在子函数中调用父函数。

  (18)多维数组:在 PHP 4.0 ,利用GET,POST,Cookies的进行的数据传输支持多维数组。

  (19)个性化的 HTTP Session支持:HTTP Session处理, 包括 fallback 系统管理,在 PHP 4.0被它的新库函数实现 。在版本 3.0 中处理Session要求使用 PHPLIB 和第三方的库函数, 它比把Session直接地由 PHP 支持慢了许多。

  (20)个性化的 Java 支持:PHP 4.0 支持和java的交互。这种个性化的Java 支持为PHP 在 Java 对象上创建和使用方法提供一个简单并且有效的工具。

  21)对象和数嵌套组:PHP 4.0 实现了功能更加强大的对象, 移去了 PHP 3.0存在的种种句法限制。对象能在数组以内被嵌套并且反过来也如此, 可以根据你的需要实现嵌套。

  (22)面向对象的编程:PHP 4.0 为面向对象的编程和构造类及对象提供扩展的功能和新特征。PHP4实现了对象重载,引用技术等新技术。

  (23)对象重载支持:对象重载语法允许第三方的基于面向对象的类库使用 PHP4 的面向对象的特征存取他们自身的功能。使用这个特征的一个 COM 模块已经被实现了。

  (24)输出缓冲支持:PHP 提供了一个输出缓冲函数集合。输出缓冲支持允许你写包裹函数功能压缩缓冲区。在 PHP4 的输出缓冲支持允许 HTML 头信息存放, 无论 HTML的正文是否输出。头信息( (header(), content type, and cookies ) 不采用缓冲 。

  (25)增加了PCRE 库:PHP 4.0 包括一个 Perl 兼容的正则表达式 (PCRE ) 库, 和正常regex库一起与 PHP 绑定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正规表达式之间有一些细微差别。

  (26)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新设计, 使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在运行时间操作 ( 在 Apache环境 下 ) 或由 Windows 注册表 ( 在 Windows 下面 ) 。被加入PHP.ini文件的配置指令自动地在所有相关的模块中被支持。

  (27)引用计数:PHP 4.0 为系统中的每个数值提供了引用计数, 包括资源。一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源。利用这个特征的最明显的例子一个内置SQL查询的循环语句。在PHP 3.0中 ,每次递归另外的 SQL 结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放。

  (28)支持引用:通过引用可以改变一个变量的值。

  (29)函数的运行时绑定:PHP 4.0 的运行时间绑定功能允许你在他们被声明以前调用, 无论声明是否在代码以后或是在运行时间。

  (30)类的运行时信息:PHP 4.0 支持在运行时刻存取下列类信息:一个对象的类名,一个对象的父类的类名字,以及对象函数所在的名字。

  (31)服务器抽象层:为支持Web服务器提供了增强型 SAPI ( 服务器 API ) 接口,是 PHP 4。0 不可分的一部分。这个服务器抽象层,提供了通用的WEB服务器接口支持,支持多线程WEB服务器,为大多数的WEB服务器提供透明的支持, 这些服务器包括 Apache ,IIS ( ISAPI ), 以及 AOL 服务器。

  (32)语法的点亮显示:PHP 4.0 语法的点亮显示允许开发者看见源代码而不是脚本, 这个功能比PHP 3。0中的更有效。它跑得更快,更执行得更好,并且产生更紧凑的HTML代码。

  (33)由引用改变变量的值:PHP 4.0 由引用支持可变的赋值, “关联”的2个变量之中个的任何一个的值被改变,另外的变量的值同样被改变,这类似与C中的指针类型。

  (34)在引用字符串中的变量引用:PHP 4.0 增强了在引用字符串中的变量引用。

PHP5

  PHP5在长时间的开发及多个预发布版本后,2004年7月13日,PHP5.0发布。该版本以Zend引擎Ⅱ为引擎,并且加入了新功能如PHP Date Objects(PDO)。现在PHP5.0版本强化更多的功能。首先,完全实现面向对象,提供名为PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理用界面。同时还强化了XML Web服务支持,而且标准支持SOAP扩展模块。数据库方面,PHP新版本提供旨在访问MySOL的新界面——MySQL。除此前的界面外,还可以使用面向对象界面和预处理语句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上还捆绑有小容量RDBMS-SQLite.

1、新的对象模式 (New Object Mode)

  PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的一个新起点吧。:)

  * 构造函数和析构函数

  * 对象的引用

  * 对象的克隆

  * 对象中的私有、公共及受保护模式

  * 接口 (Interfaces)

  * 抽象类

  * __call

  * __set 和 __get

  * 静态成员

  构造函数和析构函数

  在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。

  在 PHP5 中,构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。

  对象的引用

  在PHP4中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号“&” 来声明是要做一个引用,而不是一个 Copy。在 PHP5中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。

  对象的克隆

  当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。

  

  对象中的私有、公共及保护模式

  PHP4 中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法。PHP5 引入了三种新的用来控制这种存取权限的模式,它们是:公共的(Public)、受保护的(Protected)及私有的(Private)。

  公共模式(Public):允许在对象外部进行操作控制。

  私有模式(Private):只允许本对象内的方法对其进行操作控制。

  受保护模式(Protected):允许本对象及其父对象对其进行操作控制。

  

  接口 (Interfaces)

  PHP4中的对象支持继承,要使一个对象成为另一个对象的派生类,你需要使用类似 “class foo extends parent” 的代码来控制。PHP4 和 PHP5 中,一个对象都仅能继承一次,多重继承是不被支持的。不过,在 PHP5中产生了一个新的名词:接口,接口是一个没有具体处理代码的特殊对象,它仅仅定义了一些方法的名称及参数,此后的对象就可以方便的使用’implement’ 关键字把需要的接口整合起来,然后再加入具体的执行代码。

  这对提高代码的可读性及通俗性有很大的帮助,通过上面的例子可以看到,对象 foo 包含了displayable 和 printable 两个接口,这时我们就可以清楚的知道,对象 foo 一定会有一个 display() 方法和一个print() 方法,只需要去了解接口部分,你就可以轻易的操作该对象而不必去关心对象的内部是如何运作的。

  抽象类

  抽象类不能被实例化。

  抽象类与其它类一样,允许定义变量及方法。

  抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。

  __call

  PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。

  __set 和 __get

  这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。

  类型指示

  在 PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。

  

  静态成员

  静态成员和静态方法在面象对象编程的术语中被称作 “类方法(class methods)” 和 “类变量(class variables)”。

  “类方法” 在一个对象没有实例化前允许被调用。同样,“类变量” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。

2、异常处理 (Exceptions)

  异常处理是公认的处理程序错误的理想方法,在 Java 及 C 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的应用。你可以尝试使用 “try” 和 “catch” 来控制程序的错误。当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。

  自定义错误处理

  你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个 getMessage 方法。

3、名称空间 (Namespace)

  名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。

  例:名称空间

  <?php

  namespace Math

  {

  class Complex

  {

  //…code…

  function __construct()

  {

  print("hey");

  }

  }

  }

  $m = new Math::Complex();

  ?>

  注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。

PHP6设想

1.支持Unicode

  支持Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外一点,PHP也可以在.ini文件中设定是否开启支持Unicode,决定权在你自己,这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的提升,主要的影响在于需要引用字符串的函数。.

2.Register Globals 将被移除

  这是一个重要的决定,说多新进的PHP开发者会觉得RegisterGlobals满方便的,但是却忽略了RegisterGlobals会带来程序上安全性的隐患,大多数的主机上此项功能是关闭的,印象PHP4.3.x版开始时,此项默认设置值即是关闭状态,PHP6正式移除RegisterGlobals也代表着如果程序是由PHP3时代的产物,将完全无法使用,除了改写一途外,别无他法。相信现在的PHP世界里,仍使用PHP3时代所产生的程序应该是少之又少。

3.Magic Quotes 将消失

  Magic Quotes主要是自动转义需要转义的字符,此项功能移除也符合大多数PHP开发者的心声。

  4.Safe Mode 取消

  老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到

5.’var’ 别名为 ‘public’

  在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,PHP6现在也可以称作为OO语言了。

6.通过引用返回将出错

  现在透过引用返回编译器将会报错 例如$a =& new b()、function &c(),OO语言默认就是引用,所以不需要再使用&了。

7.zend.ze1 compatbility mode 将被移去

  Zend.ze1相容模式将被移去,PHP5是为兼容旧有PHP4,所以在.ini中可选择是否开启相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百分之百能解析PHP4语法,所以旧时代的产物,移除。

8.Freetype 1 and GD 1 support 将不见

  这两个是很久的Libs,所以不再支持,GD1早已被现在的GD2取代了。

9.dl() 被移到 SAPI 中

  dl()主要是让设计师加载extension Libs,现在被移到 SAPI 中

10.Register Long Array 去除

  从PHP5起默认是关闭,再PHP6中正式移除。

11.一些Extension的变更

  例如 XMLReader 和 XMLWriter将不再是以Extension的方式出现,他们将被移入到PHP的核心之中,并且默认是开启,eregextension将被放入PECL,代表着它将被移出PHP核心,这也为了让路给新的正则表达式extension,此外,Fileinfoextension 也将被导入PHP的核心之中。

12.APC将被导入核心

  这是一个提高PHP性能的功能,现在它将被放入PHP核心中,并且可以选择是否启用APC

13.告别ASP风格的起始标签

  原来是为了取悦ASP开发者转向使用PHP,现今已经不再需要这种做法了

安装

  由于php是一个zip文件(非install版),安装较为简单

  解压就行.把解压的 php-5.2.1-Win32 重命名为 php5.并复制到C盘目录下.即安装路径为 c:\php

  1 找到php目录下的 php.ini.recommended (或者php.ini-dist)文件,重命名为 php.ini

  并复制到系统盘的windows目录下(以c:\windows为例).

  2 再把php目录下的php5ts.dll,libmysql.dll复制到目录 c:\windows\system32下.

  3 把php\ext目录下的php_gd2.dll,php_mysql.dll,php_mbstring.dll文件复制到c:\windows\system32下

  注意:不要把 php_mysql.dll 和 php_mssql.dll 混淆

  如果没有加载 php_gd2.dll php将不能处理图像.没有加载php_mysql.dll php将不支持mysql函数库

  php_mbstring.dll在后面使用phpmyadmin时支持宽字符

  配置php并关联MySQL

  1 设置扩展路径

  查找 extension_dir 有这么一行

  extension_dir = "./"

  将此行改成

  extension_dir = "C:\php\ext"

  其中C:\php是你安装php的路径.路径不正确将无法加载dll

  (注意:有些php版本是 ;extension_dir = "./" 要把前面的分号去掉)

  2 分别查找

  ;extension=php_mbstring.dll

  ;extension=php_gd2.dll

  ;extension=php_mysql.dll

  把上面3项前面的分号去掉,这样apache启动时就可以加载这些dll了

  注意不要把 ;extension=php_mysql.dl 和 ;extension=php_mssql.dl 混淆

  当然前面我们也把这些dll复制到system32下了.(大家在安装的过程中都注意到如何把一些dll加载入来了.

  以后要加载一些dll,比如说php_mysqli.dll,也就懂得怎么加载了)

  3 设置会话保存路径

  查找session.save_path 有这么一行

  ; session.save_path = "N;/path"

  在此行后加入一行(注意是加入一行,不是加到后面)

  session.save_path = "C:\WINDOWS\Temp"

  保存到你的临时目录下,这里完全可以保存到windows临时目录Temp下

  4 是否显示错误 display_errors

  出于安全性考虑,display_errors 有些版本也默认为 Off.

  就是说在调试时,如果php代码有误,就只出现一个空白页.而不会显示出错原因和出错行数.

  这样调试起来将非常不便,建议根据自己需要修改

  查找

  display_errors = Off (注意不是 ; – display_errors = Off [Security])

  改成

  display_errors = On

  5 php5时差问题

  <?php echo date("Y-m-d H:i:s");?>时间相差八小时

  为什么呢?PHP5系列版本新增了时区设置,默认为格林威治时间,与中国所在的东8区正好相差8个小时

  查找date.timezone有这么一行

  ;date.timezone =

  将;去掉,改成

  date.timezone = PRC

  其中PRC:People’s Republic of China 中华人民共和国,

  PHP的文件上传问题

  文件上传成败关键的几点php.ini配置

  文件上传的程序没有错,但php的配置很可能导致文件不能上传成功.

  1. 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.

  但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行.

  这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time

  在php.ini里查找

  max_execution_time

  默认是30秒.改为

  max_execution_time = 0

  0表示没有限制

  另一种方法是可以在php程序中加入

  set_time_limit();

  来设定页面最久执行时间.

  set_time_limit(0);//0表示没有限制

  2. 修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。

  php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空.

  查找 post_max_size .改为

  post_max_size = 150M

  3. 很多人都会改了第二步.但上传文件时最大仍然为 8M.

  为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。

  查找upload_max_filesize,默认为8M改为

  upload_max_filesize = 100M

  另外要说明的是,post_max_size 大于 upload_max_filesize 为佳.

  四. active perl 需要安装到c:/perl

  五. ZendOptimizer 安装时把 apache 服务器关掉,在过程中要指定 apache 和 php 的安装路径一、

Windows下的PHP环境配置

软件需求:

  Windows 2000 Professional ; Apache 1.3.19 (apache_1.3.19-win32-src-r2.msi) ; PHP 4.0.5 (php-4.0.5-Win32.zip) ; MySQL 3.23.38 (mysql-3.23.38-win.zip)

安装过程

  1. 将 Apache 1.3.19 安装到 C:\Web\apache\ 目录下。

  2. 将 PHP 4.0.5 解压到 C:\Web\php\ 目录下。

  3. 将 MySQL 3.23.38 安装到 C:\Web\mysql\ 目录下。

  4. 将 C:\web\php\php4ts.dll 文件拷贝到 C:\WINNT\system32\ 目录下。

  5. 将 C:\web\php\php.exel 文件拷贝到 C:\WINNT\ 目录下。

  6. 将 C:\web\php\php.ini-dist 文件拷贝到 C:\WINNT\ 目录下,并将php.ini-dist 更名为 php.ini。

  7. 运行 C:\Web\apache\Apache\Apache.exe -i –n

  8. 运行 C:\Web\mysql\bin\mysqld-nt.exe –install

  9. 编辑 C:\WINNT\php.ini

  找到 “extension_dir = ./ ” 字段,将其改为 extension_dir = "C:\myphp\php\extensions"。

  10. 运行 C:\Web\apache\Apache\Apache.exe -i –n

  11. 编辑 C:\Web\apache\Apache\conf\httpd.conf

  找到“ #BindAddress*” 字段

  将其改为 BindAddress 127.0.0.1 。(如果主机有固定IP地址,此处改为主机IP地址。如 BindAddress 211.101.152.106),找到 “ServerName” 字段,将其改为 ServerName localhost。(如主机有固定主机名,此处改为主机的主机名。如ServerName bn001 )。

  找到“ ScriptAlias /cgi-bin/ "C:/Web/apache/Apache/cgi-bin/" ” 字段,在其下面加入 ScriptAlias /php/ "C:/Web/php/" 。找到 “# And for PHP 4.x, use: ” 字段,在其后面加入:

  AddType application/x-httpd-php .php3

  AddType application/x-httpd-php .php4

  AddType application/x-httpd-php .php

  AddType application/x-httpd-php .phtml

  Action Application/x-httpd-php "c:/Web/php/php.exe"

  找到“ #LoadModule usertrack_module modules/mod_usertrack so” 字段,LoadModule php4_module c:/web/php/sapi/php4apache.dll

UNIX下的PHP环境配置

  所需软件

  php-3.0.14-win32.zip;php-3.0.14-win32.zip;mysql-shareware-3.22.32-win.zip

  所有软件均安装在/export/home/guoj/下,也可在其他目录。

  安装mysql

  gzip -dc mysql-3.22.30.tar.gz | tar xvf-

  cd mysql-3.22.30

  ./configure -prefix= /export/home/guoj/mysql

  make

  make install

  scripts/mysql_install_db

  cd../mysql/bin

  bin/safe_mysqld & 安装php apache

  gzip -dc apache_1.3.11.tar.gz | tar xvf-

  gzip -dc php-3.0.11.tar.gz | tar xvf-

  cd apache_1.3.11

  ./configure -prefix= /export/home/guoj/www

  cd ../php-3.0.11

  ./configure -with-apache= /export/home/guoj/apache_1.3.11

  -with-mysql= /export/home/guoj/mysql -enable-track-vars

  make

  make install

  cd ../apache_1.3.11

  ./configure –prefix= /export/home/guoj/www

  –activate-module=src/modules/php3/libphp3.aP

  make

  make install

  cd ../php-3.0.11

  cd ../php3.ini-dist php3.ini

  vi php3.ini修改php3.ini

  doc_root=/export/home/guoj/www/htdocs/

  extension_dir=/export/home/guoj/php-3.0.11/

  extension=php3_mysql.dllcp php3.ini/usr/local/lib/php3.inivi ../www/conf/httpd.conf

  加上以下几句:

  AddType application/x-httpd-php3 .php3

  <Directory "/export/home/guoj/php-3.0.11/">

  Options FollowSymLinks

  AllowOverride None

  </Directory>../www/bin/apachectl start

其他方面

数据库

  PHP 在数据库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的数据库或是数据文件:

  · Adabas D

  · DBA

  · dBase

  · dbm

  · filePro

  · Informix

  · InterBase

  · mSQL

  · Microsoft SQL Server

  · MySQL

  · Solid

  · Sybase

  · ODBC

  · Oracle 8

  · Oracle

  · PostgreSQL

  而在 Internet 上它也支持了相当多的通讯协议 (protocol),包括了与电子邮件相关的 IMAP, POP3;网管系统 SNMP;网络新闻 NNTP;帐号共用 NIS;全球信息网 HTTP 及 Apache 服务器;目录协议 LDAP 以及其它网络的相关函数

  除此之外,用 PHP 写出来的 Web 后端 CGI 程序,可以很轻易的移植到不同的操作系统上。例如,先以 Linux 架的网站,在系统负荷过高时,可以快速地将整个系统移到 SUN 工作站上,不用重新编译 CGI 程序。面对快速发展的 Internet,这是长期规划的最好选择。

  变数类型:

  PHP有好多种变数; 主要有这些:

  - 数字 (integer – 例: 32)

  - 布尔值 (boolean – 例: TRUE)

  - 字串 (string – 例: ‘a string of text’)

  - NULL

  - 资源(resource)

  - 数组 (array – 例: arrayname[2])

  -对象(object)

  语法:

  语法有三种:

  //comment

  /* comment */

  # comment

  基本的 "Control Structures":

  * if … else

  if (condition == true) ;

  * if … else then

  if (condition == true)

  else if (condition2 == true) ;

  一个PHP实例:

  <html>

  <head>

  <title>First program</title>

  </head>

  <body>

  <?php

  echo "hello world";

  ?>

  </body>

  </html>

  php对面向对象的支持

  面向对象编程的概念:

  不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面:

  抽象数据类型和信息封装

  继承

  多态

  在PHP中是通过类来完成封装的:

  <?php

  class Something {

  // 在OOP类中,通常第一个字符为大写

  var $x;

  function setX($v) {

  // 方法开始为小写单词,然后使用大写字母来分隔单词,例如getValueOfArea()

  $this->x=$v;

  }

  function getX() {

  return $this->x;

  }

  }

  当然你可以按自己的喜好进行定义,但最好保持一种标准,这样会更有效。数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的。一个数据成员可以是一个整数,一个数组,一个相关数组(associative array)或者是一个对象。方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this->name,否则对一个方法来说,它只能是局部变量

  使用new操作符来创建一个对象:

  $obj=new Something;

  然后你可以使用成员函数通过:

  $obj->setX(5);

  $see=$obj->getX();

  在这个例子中,setX成员函数将5赋值给对象的成员变量x(不是类的),然后getX返回它的值5。可以象:$obj->x=6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议通过方法来存取成员变量。如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的OOP程序员。不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的。继承在PHP中很容易实现,只要使用extend关键字。

  <?php

  class Another extends Something {

  var $y;

  function setY($v) {

  $this->y=$v;

  }

  function getY() {

  return $this->y;

  }

  }

  "Another"类的对象现在拥有了父类(Something)的全部的数据成员及方法,而且还加上了自己的数据成员和方法。

  你可以使用

  $obj2=new Something;

  $obj2->setX(6);

  $obj2->setY(7);

  PHP现在还不支持多重继承,所以你不能从两个或两个以上类派生出新的类来。你可以在派生类中重定义一个方法,如果我们在"Another"类中重定义了getX方法,我们就不能使 用"Something"中的getX方法了。如果你在派生类中声明了一个与基派同名的数据成员,那么当你处理它时, 它将“隐藏”基类的数据成员。

  你可以在你的类中定义构造函数。构造函数是一个与类名同名的方法,当你创建一个类的对象时会被调用,例如:

  <?php

  class Something {

  var $x;

  function Something($y) {

  $this->x=$y;

  }

  function setX($v) {

  $this->x=$v;

  }

  function getX() {

  return $this->x;

  }

  }

  所以你可以创建一个对象,通过:

  $obj=new Something(6);

  构造函数会自动地把6赋值给数据变量x。构造函数和方法都是普通的PHP函数,所以你可以使用缺省参数

  function Something($x="3",$y="5")

  接着:

  $obj=new Something(); // x=3 and y=5

  $obj=new Something(8); // x=8 and y=5

  $obj=new Something(8,9); // x=8 and y=9

  缺省参数使用C++的方式,所以你不能忽略Y的值,而给X一个缺省参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用缺省参数。

  当一个派生类的对象被创建时,只有它的构造函数被调用,父类的构造函数没被调用,如果你想调用基类的构造函数,你必须要在派生类的构造函数中显示调用。可以这样做是因为在派生类中所有父类的方法都是可用的。

  <?php

  function Another() {

  $this->y=5;

  $this->Something();

  //显示调用基类构造函数

  }

  OOP的一个很好的机制是使用抽象类。抽象类是不能实例化,只能提供给派生类一个接口。设计者通常使用抽象类来强迫程序员从基类派生,这样可以确保新的类包含一些期待的功能。在PHP中没有标准的方法,但是:如果你需要这个特性,可以通过定义基类,并在它的构造函数后加上"die" 的调用,这样就可以保证基类是不可实例化的,现在在每一个方法(接口)后面加上"die" 语句,所以,如果一个程序员在派生类中没有覆盖方法,将引发一个错误。而且因为PHP 是无类型的,你可能需要确认一个对象是来自于你的基类的派生类,那么在基类中增加一个方法来实义类的身份(返回某种标识id),并且在你接收到一个对象参数时校验这个值。当然,如果一个邪恶不好的程序员在派生类中覆盖了这个方法,这种方法就不起作用了,不过一般问题多发现在懒惰的程序员身上,而不是邪恶的程序员。

  当然,能够让基类对程序员无法看到是很好的,只要将接口打印出来做他们的工作就可以了。在PHP中没有析构函数。

  重载(与覆盖不同)在PHP中不支持。在OOP中,你可以重载一个方法来实现两个或重多的方法具有相同的名字,但是有不同数量或类型的参数(这要看语言)。PHP 是一种松散类型的语言,所以通过类型重载不起作用,然而通过参数的个数不同来重载也不起作用。

  有时在OOP中重载构造函数非常好,这样你可以通过不同的方法创建对象(传递不同数量的参数)。在PHP中实现它的技巧是:

  <?php

  class Myclass {

  function Myclass() {

  $name="Myclass".func_num_args();

  $this->$name();

  //注意$this->name()一般是错误的,但是在这里$name是一个将被调用方法的名字

  }

  function Myclass1($x) {

  code;

  }

  function Myclass2($x,$y) {

  code;

  }

  }

  通过在类中的额外的处理,使用这个类对用户是透明的:

  $obj1=new Myclass(‘1’); //将调用Myclass1

  $obj2=new Myclass(‘1′,’2’); //将调用Myclass2

  有时这个非常好用。

多态

  多态是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方法。例如,如果你有一个figure的类,它定义了一个draw的方法。并且派生了circle和rectangle 类,在派生类中你覆盖了draw方法,你可能还有一个函数,它希望使用一个参数x,并且可以调用$x->draw() 。如果你有多态性,调用哪个draw方法就依赖于你传递给这个函数的对象类型。

  多态性在象PHP这样的解释语言(想象一下一个C++编译器生成这样的代码,你应该调用哪一个方法?你也不知道你拥有的对象是什么类型的,好,这不是重点)是非常容易和自然的。所以PHP当然支持多态性。

  <?php

  function niceDrawing($x) {

  //假设这是Board类的一个方法

  $x->draw();

  }

  $obj=new Circle(3,187);

  $obj2=new Rectangle(4,5);

  $board->niceDrawing($obj);

  //将调用Circle的draw方法

  $board->niceDrawing($obj2);

  //将调用Rectangle的draw方法

  用PHP进行面向对象编程

  一些"纯化论者(purists)"可能会说PHP不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能想/需要在PHP 中使用纯的OOP去声明类,而且在你的项目只用对象和类。

  随着项目越来越大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和重用。这些就是软件工程的基础。在基于web的项目中应用这些概念就成为将来网站成功的关键。

高级OOP技术

  在看过基本的OOP概念后,我就可以向你展示更高级的技术:

  序列化(Serializing)

  PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象。这就是所谓的序列化机制。PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示。然而,序列化只保存了对象的成员数据而不包话方法。

  在PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以继续使用对象的方法!我不建议这样去做,因为(a)文档中没有保证这种行为在以后的版本中仍然可以使用。(b) 这个可能导致一种误解,在你把一个序列化后的版本保存到磁盘并退出脚本时。当以后运行这个脚本时,你不能期待着在反序列化一个对象时,对象的方法也会在那里,因为字符串表示根本就不包括方法。

  总而言之,PHP 进行序列化对于保存对象的成员变量非常有用。(你也可以将相关数组和数组序列化到一个文件中)。

  例子 :

  <?php

  $obj=new Classfoo();

  $str=serialize($obj);

  //保存$str到磁盘上

  //几个月以后

  //从磁盘中装入str

  $obj2=unserialize($str)

  你恢复了成员数据,但是不包括方法(根据文档所说)。这导致了只能通过类似于使用$obj2->x来存取成员变量(你没有别的方法!)的唯一办法,所以不要在家里试它。

  有一些办法可以解决这个问题,我把它留着,因为对这篇简洁的文章来说,他们太不好。我会很高兴地欢迎在PHP的后续版本中有全序列化的特性。

  使用类进行数据存储PHP和OOP一件非常好的事情就是,你可以很容易地定义一个类来操作某件事情,并且无论何时你想用的时候都可以调用相应的类。假设你有一个HTML表单,用户可以通过选择产品ID号来选择一个产品。在数据库中有产品的信息,你想把产品显示出来,显示它的价格等等。你拥有不同类型的产品,并且同一个动作可能对不同的产品具有不同的意思。例如,显示一个声音可能意味着播放它,但是对于其它种类的产品可能意味着显示一个存在数据库中的图片。你可以使用OOP或PHP来减少编码并提高质量:

  定义一个产品的类,定义它应该有的方法(例如:显示),然后定义对每一种类型的产品的类,从产品类派后出来(SoundItem类,ViewableItem类,等等),覆盖在产品类中的方法,使它们按你的想法动作。

  根据数据库中每一种产品的类型(type)字段给类命名,一个典型的产品表可能有(id, type, price, description, 等等字段)…然后在处理脚本中,你可以从数据库中取出type值,然后实例化一个名为type的对象:

  <?php

  $obj=new $type();

  $obj->action();

  这是PHP的一个非常好的特性,你可以不用考虑对象的类型,调用$obj的显示方法或其它的方法。使用这个技术,你不需要修改脚本去增加一个新类型的对象,只是增加一个处理它的类。

  这个功能很强大,只要定义方法,而不去考虑所有对象的类型,在不同的类中按不同的方法实现它们,然后在主脚本中对任意对象使用它们,没有if…else,也不需要两个程序员,只有高兴。

  现在你同意编程是容易的,维护是便宜的,可重用是真的吗?

  如果你管理一组程序员,分配工作就是很简单的了,每个人可能负责一个类型的对象和处理它的类。

  可以通过这个技术实现国际化,根据用户所选的语言字段应用相应的类就可以了,等等。

  拷贝和克隆

  当你创建一个$obj的对象时,你可以通过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一个引用),所以它具有$obj在当时的状态。有时候,你不想这样,你只是想生成一个象obj类一样的一个新的对象,可以通过使用new语句来调用类的构造函数。在PHP中也可以通过序列化,和一个基类来实现,但所有的其它类都要从基类派生出来。

  进入危险区域

  当你序列化一个对象,你会得到某种格式的字符串,如果你感兴趣,你可以调究它,其中,字符串中有类的名字(太好了!),你可以把它取出来,象:

  <?php

  $herring=serialize($obj);

  $vec=explode(‘:’,$herring);

  $nam=str_replace("\"",”,$vec[2]);

  所以假设你创建了一个"Universe"的类,并且强制所有的类都必须从universe扩展,你可以在universe 中定义一个clone的方法,如下:

  <?php

  class Universe {

  function clone() {

  $herring=serialize($this);

  $vec=explode(‘:’,$herring);

  $nam=str_replace("\"",”,$vec[2]);

  $ret=new $nam;

  return $ret;

  }

  }

  //然后

  $obj=new Something();

  //从Universe扩展

  $other=$obj->clone();

  你所得到的是一个新的Something类的对象,它同使用new方法,调用构造函数创建出的对象一样。我不知道这个对你是否有用,但是Universe类可以知道派生类的名字是一个好的经验。想象是唯一的限制。

  <?php echo date("Y-m-d H:i:s");?>这个语句就是写入当前的时间。

模板引擎

  

  Smarty

  Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。

  Heyes Template Class

  一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。

  FastTemplate

  一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。

  ShellPage

  一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。

  STP Simple Template Parser

  一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。

  OO Template Class

  一个你可以用在自己程序中的面向兑现的模板类。

  SimpleTemplate

  一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。

  bTemplate

  短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。

  Savant

  一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。

  ETS – easy template system

  可以使用完全相同数据重组模板的模板系统。

  EasyTemplatePHP

  适用于你的站点的一个简单但是强大的模板系统。

  vlibTemplate

  一个快速、全能的模板系统,它包含一个缓存和调试类。

  AvanTemplate

  多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏。

  Grafx Software’s Fast Template

  一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。

  TemplatePower

  一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。

  TagTemplate

  这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。

  htmltmpl: templating engine

  一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。

  PHP Class for Parsing Dreamweaver templates

  一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。

  MiniTemplator (Template Engine)

  针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。

  Layout Solution

  简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。

  Cached Fast Template

  它已经纳入 FastTemplate ,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。

  TinyButStrong

  一个支持MySQL, Odbc, Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。

  Brian Lozier’s php based template engine

  只有2K大小,非常快并且是面向对象设计

  WACT

  一个从设计中分离代码的模板引擎。

  PHPTAL

  一个PHP下面的XML/XHTML模板库。

PHP(penultimate hop pop)

  倒数第2跳弹出,用与MPLS标签交换网络中,使标签在目的路由器的前一个相邻路由器时自动弹出,这样可以使最终路由器不用进行标签查找,节约资源.

PHP级别

  PHP课程由初级(IFE)、中级(IPE)和高级(IAE)三个部分。

  IFE即Index Front-end Engineer的缩写,指数前端工程师的意思。

  IPE即 Index PHP Engineer 的缩写,意思是指数PHP工程师。

  IAE即 Index architecture/advanced engineer 的缩写,意思是:指数高级/架构工程师 。

PHP安全

  PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全。当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。

菲律宾比索的标准符号

  

国家 中文 英文 原有旧符号 标准符号
菲律宾 菲律宾比索 Philippine Peso Ph.Pes.; Phil.P. PHP

扩展阅读:

Contact us form – source code

Contact us – source code. share with everybody free.
keywords: contact us form php code, contact us php source code,联系我们源代码,php源代码

/**
* A PHP contact form.
* Author: donny12345@gmail.com
* Last revision: 01/15/2011 01:03
*
* Mail header injection prevention based on comments from:
* http://www.php.net/mail
*
*/
// Replace you@example.com with your own e-mail address.
define('YOUR_EMAIL', 'you@example.com');
// If the user does not fill in a subject, this will be used.
define('DEFAULT_SUBJ', 'A message from your contact form');
// This is the maximum length of a subject, in characters.
define('MAX_SUBJ_LEN', 1000);
if (isset($_POST['mail'])) {
$errors = array();
// Sanitize the subject;
if (preg_match('/(%0A|%0D|\\n+|\\r+)/i', $_POST['subj'])) {
$errors[] = 'Your subject contains illegal characters.';
} else {
if (!strlen($_POST['subj']) || is_null($_POST['subj'])) {
$subj = DEFAULT_SUBJ;
} else {
$subj = substr($_POST['subj'], 0, MAX_SUBJ_LEN);
}
}
// Validate their e-mail address.
if (!preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i', $_POST['email'])) {
$errors[] = 'Invalid e-mail address.';
}
// Validate the body.
if (preg_match('/(%0A|%0D|\\n+|\\r+)(content-type:|to:|cc:|bcc:)/i', $_POST['body'])) {
$errors[] = 'Your message body contains invalid characters.';
}
if (!strlen($_POST['body'])) {
$errors[] = 'The body of your message was blank.';
}
if (count($errors)) {
for ($i = 0; $i < count($errors); $i++) {
printf('

%s

', $errors[$i]);
}
} else {
$headers = sprintf("From: %s\r\n", $_POST['email']);
if (mail(YOUR_EMAIL, $subj, $_POST['body'], $headers)) {
print '

Your message was sent.

';
} else {
print '

An error occurred while we were attempting to'
.' send your message. Please try again later.

';
}
}
}
?>




// Replace you@example.com with your own e-mail address.define('YOUR_EMAIL', 'you@example.com');
// If the user does not fill in a subject, this will be used.define('DEFAULT_SUBJ', 'A message from your contact form');
// This is the maximum length of a subject, in characters.define('MAX_SUBJ_LEN', 1000);
if (isset($_POST['mail'])) { $errors = array(); // Sanitize the subject; if (preg_match('/(%0A|%0D|\\n+|\\r+)/i', $_POST['subj'])) { $errors[] = 'Your subject contains illegal characters.'; } else { if (!strlen($_POST['subj']) || is_null($_POST['subj'])) { $subj = DEFAULT_SUBJ; } else { $subj = substr($_POST['subj'], 0, MAX_SUBJ_LEN); } } // Validate their e-mail address. if (!preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i', $_POST['email'])) { $errors[] = 'Invalid e-mail address.'; } // Validate the body. if (preg_match('/(%0A|%0D|\\n+|\\r+)(content-type:|to:|cc:|bcc:)/i', $_POST['body'])) { $errors[] = 'Your message body contains invalid characters.'; } if (!strlen($_POST['body'])) { $errors[] = 'The body of your message was blank.'; }
if (count($errors)) { for ($i = 0; $i < count($errors); $i++) { printf('

%s

', $errors[$i]); } } else { $headers = sprintf("From: %s\r\n", $_POST['email']); if (mail(YOUR_EMAIL, $subj, $_POST['body'], $headers)) { print '

Your message was sent.

'; } else { print '

An error occurred while we were attempting to' .' send your message. Please try again later.

'; } }}?>