PHP【以淘宝网下载为例,结合情景描述一下PHP的作用】加分,非常感谢

淘宝网为什么是用PHP程序开发_百度知道
淘宝网为什么是用PHP程序开发
首先说明一点,淘宝并不全是PHP,主要是JAVA,PHP只是前端的部分页面为何不用ASP.NET?因为有多个方面的考虑:1.ASP.NET是微软平台,微软平台的综合成本高,服务器软件、数据库管理系统等等,构建淘宝那种级别的系统,花费异常巨大。而淘宝采用开源的操作系统,数据库管理系统及相关软件等,可以大大节省软件成本2.淘宝的级别和京东完全不是一个数量级,可以这么说,京东可能每天的数据量、PV、访问量连淘宝的1/100都没有,所以,京东不能和淘宝相提并论3.微软的系统非开源,不能按实际生产环境进行定制原因1是主要原因你可以看看,世界上比较大的网站,大多是开源架构或专属架构,比如Fackbook,Google等,就是因为软件成本和灵活性、可伸缩性考虑的
其他类似问题
为您推荐:
从用户的角度讲:PHP的开发成本低,速度较快,比用ASP和JSP的开发性价比高。 从技术的角度讲: PHP是一个很优秀的工具,它可以简单,也可以复杂。不一样的项目,应该用不一样的PHP。  小项目 - 简单而直接的PHP   一般对于一个功能页面在20以下的网站,我们可以用一个很简单的框架结构来写。在这个规模上,我建议是使用比较直接的面向过程编码方法,原因很简单,没有必要把class文件弄的N 多,结果controller里边就一个new就完了。当然,需求频繁变化的项目除外。   
在这个级别上,php优点表现的很明显:快速开发,一目了然。缺点同时也被隐藏得很好。   中型项目 - 结构优美的面向对象化的PHP   对于一个中型项目,我建议使用一个良好设计的框架来做,这个框架可以是基于MVC模型,封装了众多底层...
楼上几位讲解的都不错。
程序开发的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发.
本文将探讨两种具体的实现方法, 并对不同的方法做简单的性能对比.
1. 经典cURL并发机制及其存在的问题
经典的cURL实现机制在网上很容易找到, 比如参考的如下实现方式:
function classic_curl($urls, $delay) {
$queue = curl_multi_init();
$map = array();
foreach ($urls as $url) {
// create cURL resources
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOSIGNAL, true);
// add handle
curl_multi_add_handle($queue, $ch);
$map[$url] = $
// execute the handles
$mrc = curl_multi_exec($queue, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active & 0 && $mrc == CURLM_OK) {
if (curl_multi_select($queue, 0.5) != -1) {
$mrc = curl_multi_exec($queue, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
$responses = array();
foreach ($map as $url=&$ch) {
$responses[$url] = callback(curl_multi_getcontent($ch), $delay);
curl_multi_remove_handle($queue, $ch);
curl_close($ch);
curl_multi_close($queue);
首先将所有的URL压入并发队列, 然后执行并发过程, 等待所有请求接收完之后进行数据的解析等后续处理. 在实际的处理过程中, 受网络传输的影响, 部分URL的内容会优先于其他URL返回, 但是经典cURL并发必须等待最慢的那个URL返回之后才开始处理, 等待也就意味着CPU的空闲和浪费. 如果URL队列很短, 这种空闲和浪费还处在可接受的范围, 但如果队列很长, 这种等待和浪费将变得不可接受.
2. 改进的Rolling cURL并发方式
仔细分析不难发现经典cURL并发还存在优化的空间, 优化的方式时当某个URL请求完毕之后尽可能快的去处理它, 边处理边等待其他的URL返回, 而不是等待那个最慢的接口返回之后才开始处理等工作, 从而避免CPU的空闲和浪费. 闲话不多说, 下面贴上具体的实现:
function rolling_curl($urls, $delay) {
$queue = curl_multi_init();
$map = array();
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOSIGNAL, true);
curl_multi_add_handle($queue, $ch);
$map[(string) $ch] = $
$responses = array();
while (($code = curl_multi_exec($queue, $active)) == CURLM_CALL_MULTI_PERFORM) ;
if ($code != CURLM_OK) { }
// a request was just completed -- find out which one
while ($done = curl_multi_info_read($queue)) {
// get the info and content returned on the request
$info = curl_getinfo($done['handle']);
$error = curl_error($done['handle']);
$results = callback(curl_multi_getcontent($done['handle']), $delay);
$responses[$map[(string) $done['handle']]] = compact('info', 'error', 'results');
// remove the curl handle that just completed
curl_multi_remove_handle($queue, $done['handle']);
curl_close($done['handle']);
// Block for data in / error handling is done by curl_multi_exec
if ($active & 0) {
curl_multi_select($queue, 0.5);
} while ($active);
curl_multi_close($queue);
3. 两种并发实现的性能对比
改进前后的性能对比试验在LINUX主机上进行, 测试时使用的并发队列如下:
简要说明下实验设计的原则和性能测试结果的格式: 为保证结果的可靠, 每组实验重复20次, 在单次实验中, 给定相同的接口URL集合, 分别测量Classic(指经典的并发机制)和Rolling(指改进后的并发机制)两种并发机制的耗时(秒为单位), 耗时短者胜出(Winner), 并计算节省的时间(Excellence, 秒为单位)以及性能提升比例(Excel. %). 为了尽量贴近真实的请求而又保持实验的简单, 在对返回结果的处理上只是做了简单的正则表达式匹配, 而没有进行其他复杂的操作. 另外, 为了确定结果处理回调对性能对比测试结果的影响, 可以使用usleep模拟现实中比较负责的数据处理逻辑(如提取, 分词, 写入文件或数据库等).
性能测试中用到的回调函数为:
function callback($data, $delay) {
preg_match_all('/&h3&(.+)&\/h3&/iU', $data, $matches);
usleep($delay);
return compact('data', 'matches');
数据处理回调无延迟时: Rolling Curl略优, 但性能提升效果不明显.
------------------------------------------------------------------------------------------------
Delay: 0 micro seconds, equals to 0 milli seconds
------------------------------------------------------------------------------------------------
Excellence
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
Summary: Classic wins 10 times, while Rolling wins 10 times
数据处理回调延迟5毫秒: Rolling Curl完胜, 性能提升40%左右.
------------------------------------------------------------------------------------------------
Delay: 5000 micro seconds, equals to 5 milli seconds
------------------------------------------------------------------------------------------------
Excellence
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
Summary: Classic wins 0 times, while Rolling wins 20 times
通过上面的性能对比, 在处理URL队列并发的应用场景中Rolling cURL应该是更加的选择, 并发量非常大(1000+)时, 可以控制并发队列的最大长度, 比如20, 每当1个URL返回并处理完毕之后立即加入1个尚未请求的URL到队列中, 这样写出来的代码会更加健壮, 不至于并发数太大而卡死或崩溃. 详细的实现请参考:
5. 参考资料和延伸阅读
Client URL Library
Parallel CURL Requests with PHP
A more efficient multi-curl library for PHP (non-blocking)
PHP: Parallel cURL Performance
我也写过一个相似的开源项目, 叫parallel-curl 。
除了rolling之外,还支持 curl的连接句柄的复用,呵呵
A quality product by查看: 2775|回复: 7
PHPCMS V9 如何实现淘宝帐号登录代码分享!
插件名称:PHPCMS V9 淘宝帐号登录
适用版本:v9
语言编码:GBK简体&
插件作者:小阳SEO
版权所属:小阳SEO
支持网站:http://www.xyseo.cc/
插件介绍:实现PHPCMS V9网站支持淘宝帐号登录功能!
适用版本号:V9
本帖最后由 tmzxcy0123 于
15:54 编辑
用淘宝帐号登录PHPCMS V9
& && & UTF-8 编码已经完成,整合步骤如下
& && & phpcms\languages\zh-cn\admin.lang.php 增加语言项
& && & $LANG['setting_connect_taobao'] = '淘宝帐号';
& && & phpcms\languages\zh-cn\member.lang.php 增加语言项
& && & $LANG['taobao_login'] = '用淘宝账号登陆';
& && & $LANG['taobao_login_notice'] = '使用淘宝帐号登录PHPCMS。';
& && & caches\configs\system.php&&找到& &//QQ SKEY&&打个回车
& && & 后添加
& && & 'tb_appkey' =& '',& & //淘宝帐号登录 appkey
& && & 'tb_secret' =& '',& & //淘宝帐号登录 appsecret
& && & 'tb_callback' =& '', //回调地址
打开:phpcms\modules\member\index.php
在public function login() { }方法上一行或者末尾打回车增加
& && &&&* 淘宝帐号登录
& && && &*/& & public function public_tb_login(){
& && &&&$code = $_REQUEST['code'];& &//通过访问/authorize获取code
& && &&&$appKey = pc_base::load_config('system', 'tb_appkey');
& && &&&$appSecret = pc_base::load_config('system', 'tb_secret');
& && &&&$redirect_uri = pc_base::load_config('system', 'tb_callback');
& && &&&pc_base::load_app_class('tbapi','',0);
& && &&&$info = new tbapi($appKey,$appSecret,$redirect_uri);
& && &&&$this-&_session_start();& && &&&
& && &&&if(!isset($_GET['code'])){
& && && && &$info-&redirect_to_login();
& && &&&}
& && &&&else{
& && && && &$result=$info-&get_openid($code,$appKey,$appSecret,$redirect_uri);
& && && && &$openid = $_SESSION['openid'] = $result['user']['user_id'];
& && && && &if(!empty($openid)){
& && && && && & $r = $this-&db-&get_one(array('connectid'=&$openid,'from'=&'tb'));
& && && && && & if(!empty($r)){
& && && && && && && & //淘宝帐号已存在于数据库,则直接转向登陆操作
& && && && && && && & $password = $r['password'];
& && && && && && && & $this-&_init_phpsso();
& && && && && && && & $synloginstr = $this-&client-&ps_member_synlogin($r['phpssouid']);
& && && && && && && & $userid = $r['userid'];
& && && && && && && & $groupid = $r['groupid'];
& && && && && && && & $username = $r['username'];
& && && && && && && & $nickname = empty($r['nickname']) ? $username : $r['nickname'];
& && && && && && && & $this-&db-&update(array('lastip'=&ip(), 'lastdate'=&SYS_TIME, 'nickname'=&$me['name']), array('userid'=&$userid));
& && && && && && && & if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
& && && && && && && & $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
& && && && && && && & $cookietime = $_cookietime ? TIME + $_cookietime : 0;
& && && && && && && & $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this-&http_user_agent);
& && && && && && && & $phpcms_auth = sys_auth($userid.&\t&.$password, 'ENCODE', $phpcms_auth_key);
& && && && && && && & param::set_cookie('auth', $phpcms_auth, $cookietime);
& && && && && && && & param::set_cookie('_userid', $userid, $cookietime);
& && && && && && && & param::set_cookie('_username', $username, $cookietime);
& && && && && && && & param::set_cookie('_groupid', $groupid, $cookietime);
& && && && && && && & param::set_cookie('cookietime', $_cookietime, $cookietime);
& && && && && && && & param::set_cookie('_nickname', $nickname, $cookietime);
& && && && && && && & $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
& && && && && && && & showmessage(L('login_success').$synloginstr, $forward);
& && && && && & }else{
& && && && && && && & //未存在于数据库中,跳去完善资料页面。页面预置用户名(淘宝返回是UTF8编码,如有需要进行转码)
& && && && && && && & $_SESSION['connectid'] = $
& && && && && && && & $_SESSION['from'] = 'tb';
& && && && && && && & if(CHARSET != 'utf-8') {//转编码
& && && && && && && && &&&$connect_username = iconv('utf-8', CHARSET, $result['user']['nick']);
& && && && && && && & } else {
& && && && && && && && && &$connect_username = $result['user']['nick'];
& && && && && && && & }
& && && && && && && & include template('member','connect');
& && && && && & }
& && && && &}
& && &&&}& && &&&
& & }复制代码以上是需要手动修改的系统文件
& && & 将附件文件上传PHPCMS 所在目录覆盖原有的 修改的系统文件有&&
& && & phpcms\modules\admin\functions\global.func.php 增加淘宝帐号配置项
& && & phpcms\modules\admin\templates\setting.tpl.php 增加淘宝帐号配置项
将tb_index.php复制到网站根目录,另淘宝登录回调地址填写如:www.xyseo.cc/tb_index.php
将tbapi.class.php复制到phpcms\modules\admin\member\classes\文件夹下
将tb_16_16.png复制到statics/images/member/logo/文件夹下
附件地址:/s/1sjCUNBB
注:该版本为免费版本不提供技术支持,使用下载文件替换网站文件时请慎重,如果将要覆盖的文件做过二次开发,请自行整合。
另:本次分享主要是感谢论坛以前帮助过我的人,多亏大家的无私分享才让我少走许多弯路,感谢大家!再请自认很牛B的人谨慎下载,我不想应付你的口水,有不足之处欢迎指正!
& && & 需要代装的 QQ: 注明 :淘宝帐号登录 100一个
原帖地址:http://www.xyseo.cc/post/407.html&&后续更新将在原帖地址更新,有这方面需求的朋友可以关注一下!
本帖子中包含更多资源
才可以下载或查看,没有帐号?
沙发支持!!
支持楼主!!!
看了就要回,是美德!
看了就要回!
nnnnnnnnnnnnnnnnnnbbbbbbbbbbbbbbbbbbbbbbbbbbb
看了一下,希望对自己的站点有效,我的站点是简单街省钱购物资讯网站
看哦!说是
Powered by

我要回帖

更多关于 怎么开淘宝网店 的文章

 

随机推荐