互联网只是一个工具
Posted in 生活感悟 on 2008/04/16 / 评论(0) »
最近看到不少言论关于对互联网的理解,个人比较赞同工具论一说。

由于前两年互联网投资热潮,互联网成了最热门的创业行业。当时听到很多言论,“只要有一个点子就赶紧用网站去实现”,“有用户就是一切”,“上市找风投”。刹那间很多web2.0网站出现,经常可以听到一些关于互联网企业成功的故事。当然,确实有一些互联网企业拿到了风险资金,榜上有名,但是很多很多的网站却烧了大量的钱而最终以项目失败而告终。自己身在这个行业当中,恰恰就在失败的项目中度过了这两年,在这期间没办法也换了公司。这些公司财务状况也出奇一致是只出不进,花得钱都来自投资人。项目好不容易做出来了,却因为种种原因经营不善而失败。有些项目甚至是老板一个念头的转变就半路夭折了。

这两年来通过多个项目经验的积累,自己的技术已经迅速提高,项目管理经验也得到锻炼,只可惜至今没有一个成功的项目在互联网上运营着。参加工作快4年了,我一直在从事技术工作,从最简单的使用dreamweave进行网页设计和制作开始,接着自学服务端编程语言php,然后在学校里创办校园网站。凭着早期的技术经验我获得毕业后的第一份工作,完全脱离我大学所学的工科类纺织工程专业。2004年无依无靠的我来到上海工作,幸好公司包住,才能在上海坚持下来。一年半后,翅膀稍微有力的我选择离开了公司,目的很简单,为了更高的收入。原来的公司是有稳定收入的互联网公司,后来我选择的都是创业型的互联网公司,伴随着锻炼机会的增多,我也得到较高的报酬。曾经从网上看到一句话,“互联网公司永远离倒闭只有一个月的时间”。这句话给我印象很深。于是我不断的提升自己的技能,为了能在这个行业拥有立足之本。也有人说,在互联网干过的人从事其他行业的成功率会很高。原因很简单,因为这些人很讲究时间效率。我参加开发的具体项目还没有一个开发完成时间需要超过3个月的,也就是说,我们总是需要在很短的时间去完成一些人的想法,然后投入经营。

回忆了这两年来互联网行业的变化和自己工作的经历,总想通过自己的努力去实现属于自己的价值。最终发现互联网对于创业者来说,只不过是一个工具。互联网的两端,服务提供商赚走了互联网企业的钱,网络运营商赚走了网民的钱,而能通过互联网赚钱的企业基本上都是结合传统行业和互联网工具,成了传统行业的新应用。
        本文分两个段落介绍如何加强 PHP SOAP 的安全性。第一,通过安全的https(即HTTP over SSL)协议,加密http信息,防止在网络传输层的数据包被明文获取。php方面只要支持OpenSSL模块,就可以访问https服务器。第二,为了验证soap client,在soap server端加上一个标准的HTTP认证,防止任何soap客户端都可以连上服务端。那么代码如何实现呢?
如何快读,简单的搭建 php soap webservice 可以先看我以前发表的文章。《实现 php webservice 之 SOAP Functions 介绍》。

以下是我实现的代码:

       1、服务端 soap_server.php 代码,关键是加了一段 basic http authentication.


<?php
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
!($_SERVER['PHP_AUTH_USER']=='admin' && $_SERVER['PHP_AUTH_PW']=='123456')) {
    header('WWW-Authenticate: Basic realm="WEBSERVICE"');                  
    header("HTTP/1.0 401 Unauthorized");
    echo "You must enter a valid login ID and password to access this resource\n";
  die;
}else{
  require './soap_functions.php';
  ini_set("soap.wsdl_cache_enabled", 0);
  $server = new SoapServer('pay.wsdl',array('encoding'=>'UTF-8'));
  $server->addFunction(array("get_user_info"));
  
  if(isset($HTTP_RAW_POST_DATA)) {
     $request = $HTTP_RAW_POST_DATA;
  } else {
      $request = file_get_contents('php://input');
  }
  
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $server->handle($request);
  } else {
      echo "This SOAP server can handle following functions: ";
      $functions = $server->getFunctions();
      foreach($functions as $k=>$func){
        echo $k.". ".$func . "\n";
      }
  }
}
?>


     2、客户端soap_client.php代码, 注意要加上array('login' => "admin",  'password' => "123456")这个参数,否则会显示错误如下:Fatal error: SOAP Fault: (faultcode: HTTP, faultstring: Unauthorized) in ...

<?php
//define("SSL_PASSWD", "asdfghjkl");
//define("SSL_CERTFILE", "E:\tz\pay\admincp\webservice\server.pem");
try{
  ini_set("soap.wsdl_cache_enabled", 0);
  //array('local_cert'     => SSL_CERTFILE,'passphrase'=>SSL_PASSWD)
  $soap = new SoapClient('pay.wsdl',array('login' => "admin",  'password' => "123456"));
  $result = $soap->get_user_info(10001);
  print_r($result);

}catch (SoapFault  $fault){
  trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}
?>


       3、 wsdl 文件

<?xml version='1.0' encoding='UTF-8'?>

<!-- WSDL file generated by Zend Studio. -->

<definitions name="Untitled" targetNamespace="urn:Untitled" xmlns:typens="urn:Untitled" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  
  <message name="get_user_info">
    <part name="user_id" type="xsd:integer"/>
  </message>
  <message name="get_user_infoResponse">
    <part name="get_user_infoReturn" type="xsd:anyType"/>
  </message>
  <portType name="soap_functionsPortType">
    <operation name="get_user_info">
      <documentation>
        获取用户所有信息
      </documentation>
      <input message="typens:get_user_info"/>
      <output message="typens:get_user_infoResponse"/>
    </operation>
  </portType>
  <binding name="soap_functionsBinding" type="typens:soap_functionsPortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    
    <operation name="get_user_info">
      <soap:operation soapAction="urn:soap_functionsAction"/>
      <input>
        <soap:body namespace="urn:Untitled" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body namespace="urn:Untitled" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
  </binding>
  <service name="UntitledService">
    <port name="soap_functionsPort" binding="typens:soap_functionsBinding">
    <soap:address location="https://www.xxx.com/webservice/soap_server.php"/>
    </port>
  </service>
</definitions>



关键主要的地方,location="https://...";告诉soap去访问https的服务端,如果php的OpenSSL没装,那么就会报错;
Fatal error: SOAP Fault: (faultcode: HTTP, faultstring: SSL support is not available in this build) in ...

<service name="UntitledService">
    <port name="soap_functionsPort" binding="typens:soap_functionsBinding">
    <soap:address location="https://www.xxx.com/webservice/soap_server.php"/>
    </port>
  </service>
JIRA用户使用指南
Posted in 网海拾贝 on 2008/03/06 / 评论(9) »
最近终于使用上jira项目管理系统。从网上找的一个简化版的使用手册。共享一下。下载地址:右键--另存为
记老毛病
Posted in 生活感悟 on 2008/03/03 / 评论(0) »
    今天是3月3日,昨天老毛病又犯了!为了把握其规律性,我打算记录一下,以供今后参考。

    我翻阅了日志,看到06年11月23日我写了一篇关于《职业病终于来了》的文章,有一次脊椎病是喝黄酒引起的,另一次是喝葡萄酒。无独有偶,1号晚上我喝了一杯葡萄酒,其实还兑了三分之一雪碧的,第二天早上,一起床就发现颈椎酸疼。见鬼了,我回想起上周五快下班的时候,颈椎是有点酸疼了,已经有预告了,我却没当回事,一喝酒就把它给激发出来了。看来酒虽然不是导致颈椎病的根本原因,但是很明显酒是引诱病发的最直接原因了。

     第二个值得考虑的因素,我去年07年几乎没有颈椎酸疼过,结婚那段时间喝了很多葡萄酒,怎么却一点事情也没有呢?我怀疑是体内上火的缘故。上星期六是吃了不少花生和瓜子。昨天我赶紧泡了金银花水喝,晚上还煮了马蹄水。不过今天早上起来还是发现嘴巴口唇有一个小溃疡,喉咙也有点干燥。这些就是上火的表现了。

     这个职业病去医院看也没有作用。06年我去瑞金医院看了,医生建议我去拍了x光片,回来一看说就是颈椎骨头接触的地方有些发炎,让我回去注意休息,什么药也不用开。我后来在朋友的建议下去买了一些膏药来贴在颈部上。还有有些效果的。不过关键还是要注意休息,调整体内火气平衡。

     写这篇文章希望告诫自己要再次注意身体,防止颈椎病的复发。瑞金的骨科专家看到我这个年龄就患有颈椎病,感叹了一声:你太年轻了,这个病不应该属于你啊!

   项目需要为多个域名搭建网站。一般的做法是给apache添加一段virtualhosts。但是如果是大量的网站就麻烦了,通过学习apache rewrite模块发现有可以替代的快速方法。

1.需要创建一个vhost.map文件
内容如下

www.a.com E:\platform\a
www.b.com E:\platform\b
...


2.在apache的第一个虚拟主机(默认)virtualhost段里面加入rewrite 规则
内容如下:


RewriteEngine on

#字母小写方法
RewriteMap    lowercase    int:tolower

#引入 vhost.map文件
RewriteMap    vhost        txt:E:\platform\vhost.map

#确认拥有主机头报文
RewriteCond   %{HTTP_HOST}                 !^$

#将hostname变量转换成小写
RewriteCond   ${lowercase:%{HTTP_HOST}|NONE}  ^(.+)$

#转跳到host地址  
RewriteRule  ^/(.*)$ ${vhost:%1}/$1


保存,重起apache,完毕!每次需要增加一个网站,只要修改vhost.map文件,快速简单,域名配置的时候只要指向服务器的ip地址。

参考资料http://httpd.apache.org/docs/2.0/misc/rewriteguide.html   Mass Virtual Hosting

mySQL system error:111 & 113
Posted in MySQL on 2008/02/21 / 评论(0) »
 最近遇到一个比较少见的问题,php连接mySQL的时候,会报错
Lost connection to MySQL server at 'reading initial communication packet', system error: 111


这种现象还不是不断重复的,出现的频率不确定,疑似mySQL数据丢包。google之后,得到解决办法,通过修改my.cnf

1. 注释掉 # skip-networking
2. 给MYSQL绑定IP bind-address = 123.45.67.89 # server IP address

分页: 5/26 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]