分类目录
文章索引模板
20090710 php sqlite wordpress - 八月 18, 2009 by yippee

今天开始折腾WP了


要在PHP5里面开启SQLITE支持


extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll


否则会报告:


Fatal error: Call to undefined function sqlite_open() in xxx.php on line XX


<?php
print_r(PDO::getAvailableDrivers());


      $db=sqlite_open(“db.sqlite”); //打开db.sqlite数据库,如果不存在则尝试创建。
 sqlite_query($db,”drop table test”);
 sqlite_query($db,”create table test (id INTEGER PRIMARY KEY,name text);”); //创建test表,id字段为自动递增主键
 sqlite_query($db,”insert into test (name) values(‘hello’);”); //插入一行内容
 sqlite_query($db,”insert into test (name) values(‘world’);”);//插入一行内容
 $result=sqlite_query($db,”select * from test”); //取得test表的所有内容
 while($row=sqlite_fetch_array($result)) { //通过while循环表中所有内容
   print “”;
   print_r($row); 
   print “”;
 }
 sqlite_close($db);//关闭数据库的连接


?>


输出:
Array ( [0] => mysql [1] => sqlite [2] => sqlite2 ) Array ( [0] => 1 [id] => 1 [1] => hello [name] => hello ) Array ( [0] => 2 [id] => 2 [1] => world [name] => world ) ?>


验证完后,按照 http://wordpress.org/extend/plugins/pdo-for-wordpress/installation/



  • Step 1: unzip the files in your wp-content directory. After unzipping the structure should look like this


    wp-content
    ->plugins
    ->themes
    ->pdo
    db.php
    index.php[maybe]


    The key thing is the presence of the pdo directory and the db.php file in the ‘root’ of the wp-content directory.



  • Step 2: Edit your wp-config.php file so that:


    this line of code is placed directly after the define(‘COLLATE’,”); line:

    define(‘DB_TYPE’, ’sqlite’);    //mysql or sqlite`

    Note: currently only mysql and sqlite are supported. I hope that more flavours will appear soon.


  •  

    标签:, , , ,
    20090718 wordpress OK - 八月 18, 2009 by yippee

    搞了半天,终于搞定了。

    由于空间PHP版本的问题,没有办法使用SQLITE

    本机很快就已经搭建完成。

    数据也很快导入了。

    但是发布出现两个问题

    1、当部署到服务器的时候,安装插件的时候,发现TAG不正常显示,直接搜索插件也提示出现未知错误。原本是把自己本机弄好的直接上传,因此重新弄了一次。重新进行干净安装。但是奇怪的是,问题还是存在,然后在网吧又是正常的。

     由于服务器速度问题,数据导入倒出问题,导致折腾了好几天。

    2、数据错位问题,也许由于垃圾留言的影响,导致丢了几个BLOG,结果导入的时候没有发现,直接忽略空白内容,导致错位,标题和内容失配,只好又重新来过,这次在网吧折腾,好像速度会快些。

    主题采用的是:Contrast Style 1.1 三栏,因为比较喜欢堆彻东西。

    插件用了不少

    Antispam Bee 屏蔽垃圾留言的

    Akismet 自带反垃圾留言的,但是不知道到哪里去找被它砍掉的留言(上线才半天,报告干掉了24个)

    Disable Canonical URL Redirection WP默认首页为不带index.php

    Genki Announcement 公告栏

    Peter’s Custom Anti-Spam 增加留言验证码

    Simple Tags 智能标签,这个比较强大

    Some Chinese Please 屏蔽纯洋文留言,上次就被阿拉伯文搞死两个BLOG

    Wordpress Thread Comment 嵌套留言

    WP-PageNavi 页码导航 但是不能输入

    WP-PostViews BLOG点击数

    WP-T-Wap WAP插件

    WP Kit CN 强大 

    用来解决官方 WordPress 没有照顾到的中文相关问题。使用这个插件,你可以显示随机文章,最新留言(最新引用),留言最多文章,发表评论最多的网友,还有真正的文章摘要,等等,真正截断,没有乱码。此插件在桑葚基础上修改,支持最新评论显示表情。支持指定最新评论截断字数。使用了对中文兼容更好的截断算法,现在控制字数更精确了。

    Genki AnnouncementSCP SettingPageNaviPostViewsWP-T-WAPSimple TagsWP Kit CN

    标签:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
    20090409 PHP TEXT BLOG - 八月 18, 2009 by yippee

    20090409 PHP TEXT BLOG

    BOBLOG已经改为MYSQL了
    再找找别的BLOG

    FlatPress

    Pivot 改个东西都得改HTML代码太麻烦了
    Simplephpblog从2007就没有维护更新了

    res:themes [FlatPress Wiki]
    http://wiki.flatpress.org/res:themes

    start [FlatPress Wiki]
    http://wiki.flatpress.org/

    PivotX
    http://pivotx.net/?w=weblog

    Pivot
    http://www.pivotlog.net/

    FlatPress Blog Engine Guide » How to: Backup and Restore Your FlatPress Blog Site
    http://flatpress.110mb.com/index.php/2008/06/29/how-to-backup-and-restore-your-flatpress-blog-site/

    Pritlog – Blogging made simple &line; Pritlog / Pritlog
    http://hardkap.net/pritlog/pmwiki.php?n=Pritlog.Pritlog

    FlatPress Blog Engine Guide
    http://flatpress.110mb.com/index.php/page/4/

    FlatPress Blog Engine Guide » Enhancing Your FlatPress RSS Feed with Feedburner
    http://flatpress.110mb.com/index.php/2008/06/07/enhancing-your-flatpress-rss-feed-with-feedburner/

    Hank Online
    http://phpbs.110mb.com/

    res:plugins [FlatPress Wiki]
    http://wiki.flatpress.org/res:plugins

    res:plugins [FlatPress Wiki]
    http://wiki.flatpress.org/res:plugins

    Flatpress 试用体会 – Press Code – 群组 – 话题 – Aiving – 艺术·科技·生活 – Aiving.com
    http://www.aiving.com/space.php?uid=1&do=thread&id=105

    FlatPress Themes
    http://themes.flatpress.org/

    SourceForge.net: FlatPress: Files
    http://sourceforge.net/project/showfiles.php?group_id=157089

    Simplephpblog菜鸟完全攻略 – 爱上冰纯 – 歪酷博客 Ycool.com
    http://binchun.ycool.com/post.2799068.html

    PANTAO.ORG » simplephpblog
    http://www.pantao.org/tag/simplephpblog

    Simple PHP Blog – Project Homepage
    http://www.simplephpblog.com/index.php?y=00&m=01

    标签:, , ,
    20080222 c# post 模拟 接收 php - 十一月 23, 2008 by yippee

    20080222 c# post 模拟 接收 php
    http://www.yippeesoft.com

    Windows端应用程序
     
      1,首先建立两个POST变量,这两个POST变量模拟ASP中的Form的name~~~(我瞎试的,果然是模拟form)
     
     
      System.Net.WebClient WebClientObj=new System.Net.WebClient();
      System.Collections.Specialized.NameValueCollection PostVars=new System.Collections.Specialized.NameValueCollection();
      PostVars.Add("c",textBox2.Text);
      PostVars.Add("b",textBox3.Text);
      //textBox2.Text里面存的是要POST的信息哈
     
     
     
      2,然后传送给一个网页:http://www.dc9.cn/t/default.aspx
     
      try
      &leftsign;
      byte[] byRemoteInfo=WebClientObj.UploadValues("http://www.dc9.cn/t/default.aspx","POST",PostVars);
      //下面都没用啦,就上面一句话就可以了
      string sRemoteInfo=System.Text.Encoding.Default.GetString(byRemoteInfo);
      //这是获取返回信息
      textBox1.Text=sRemoteInfo;
      axDHTMLEdit1.DocumentHTML=sRemoteInfo;
      //下面用了COM组件WebBrowser,让他显示返回信息,没什么用,可以不看。
      object url="about:blank";
      object nothing=System.Reflection.Missing.Value;
      this.axWebBrowser1.Navigate2(ref url,ref nothing,ref nothing,ref nothing,ref nothing);
      ((mshtml.IHTMLDocument2)this.axWebBrowser1.Document).write(sRemoteInfo);
      &rightsign;
      catch
      &leftsign;&rightsign;
     
     
      WEB端应用程序
     
      1,在Page_Load里写
     
      string MyText=System.Web.HttpContext.Current.Request.Form["c"];
      string MyText2=System.Web.HttpContext.Current.Request.Form["b"];
      //获取两个POST来的信息
      StreamWriter sw=new StreamWriter(Server.MapPath(".")+"\\\\1.shtml", true, Encoding.UTF8);
      sw.Write(MyText);
      sw.Write(MyText2);
      sw.Close();
      //true的意思就是以append的方式写入POST来的信息

    function   httppost($sURL,$aPostVars,$nMaxReturn=0)&leftsign; 
      //set_time_limit(100); 
      $url   =   parse_url($sURL); 
      
      if   (!$url)   return   ""; 
      if   (!isset($url[\'port\']))     $url[\'port\']   =   80; 
      if   (!isset($url[\'query\']))   $url[\'query\']   =   ""; 
      
      $fp   =   fsockopen($url[\'host\'],   80); 
      
      if   (!$fp)&leftsign; 
      return   ""; 
      fclose($fp); 
      exit; 
      &rightsign; 
      
      $postctt=""; 
      if(is_array($aPostVars))&leftsign; 
      foreach($aPostVars   as   $k=>$v)&leftsign; 
      if($postctt!="")   $postctt.="&"; 
      $postctt.=($k."=".urlencode($v)); 
      &rightsign; 
      &rightsign; 
      $request     =   "POST   ".$url[\'path\']."?".$url[\'query\']."   HTTP/1.1\\r\\n"; 
      $request   .=   "Host:   ".$url[\'host\']."\\r\\n"; 
      $request   .=   "Content-Type:   application/x-www-form-urlencoded\\r\\n"; 
      $request   .=   "User-Agent:   roastduck   Http/1.1\\r\\n"; 
      $request   .=   "Accept-Language:   zh-cn\\r\\n"; 
      $request   .=   "Content-length:   ".strlen($postctt)."\\r\\n"; 
      $request   .=   "Connection:   Keep-Alive\\r\\n\\r\\n"; 
      
      $request   .=   $postctt; 
      fputs($fp,   $request); 
      $tmp=""; 
      $i=0; 
      while   (!feof   ($fp))&leftsign; 
      $tmp.=   fgetc($fp);   
            $i++; 
            if($i>$nMaxReturn   &&   $nMaxReturn>0)   break; 
      &rightsign;   
      fclose($fp); 
      return   $tmp; 
      &rightsign;  

      for(int i = 0;i<Request.Params.Count;i++) Response.Write("<li>" + Request.Params.Keys[i].ToString() + " = " + Request.Params[i].ToString()); Response.Write("<hr>"); for(int i = 0;i<Request.Form.Count;i++) Response.Write("<li>" + Request.Form.Keys[i].ToString() + " = " + Request.Form[i].ToString()); Response.Write("<hr>"); for(int i = 0;i<Request.QueryString.Count;i++) Response.Write("<li>" + Request.QueryString.Keys[i].ToString() + " = " + Request.QueryString[i].ToString()); Response.Write("<hr>"); for(int i = 0;i<Request.Cookies.Count;i++) Response.Write("<li>" + Request.Cookies.Keys[i].ToString() + " = " + Request.Cookies[i].ToString());

      接收post过来的东西
    Stream resStream = Request.InputStream;
       //根据上面定义的数据流,以默认编码的方式定义一个读数据流
       StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
       Response.Write(sr.ReadToEnd());

       this.Request.QueryString["ID"].ToString();//获取查询字符串的值

    this.Request.Form["ID"].ToString();//获取Post的值

    request("xxx").tostring  

     string StrFileName="c:\\\\1.txt";
       System.IO.FileStream fs = new System.IO.FileStream(StrFileName,System.IO.FileMode.Create);
       System.IO.Stream ns=Request.InputStream;
       byte[] nbytes = new byte[512];
       int nReadSize=0;
       nReadSize=ns.Read(nbytes,0,512);
       while( nReadSize >0)
       &leftsign;
        fs.Write(nbytes,0,nReadSize);
        nReadSize=ns.Read(nbytes,0,512);
       &rightsign;
       fs.Close();
       ns.Close();

    [php]
    <?php
    $fp = fopen("php://input",\’r\’);
    $post = \’\';
    while (!feof($fp)) &leftsign;
       $post .= fgets($fp, 4096);
    &rightsign;
    fclose ($fp);
    echo $post;
    ?>
    [/php]
    写了一个试验接收POST的文件
    [php]
    <?php
    $fp = fopen("php://input",\’r\’);
    $post = \’\';
    while (!feof($fp)) &leftsign;
       $post .= fgets($fp, 4096);
    &rightsign;
    fclose ($fp);

    //echo $post;
    /*
    $headers = getallheaders();
    while (list($header, $value) = each($headers)) &leftsign;
      $aaa = "$header: $value<br>\\n";
      $header .= $aaa;
    &rightsign;

    $content = $post."@@@@@".$header;
    */

    $filename = \’test.txt\’;

    if (is_writable($filename)) &leftsign;
        if (!$handle = fopen($filename, \’a\’)) &leftsign;
             print "不能打开文件 $filename";
             exit;
        &rightsign;
        if (!fwrite($handle, $post)) &leftsign;
            print "不能写入到文件 $filename";
            exit;
        &rightsign;
        print "成功地将 $post 写入到文件 $filename";

        fclose($handle);

    &rightsign; else &leftsign;
        print "文件 $filename 不可写";
    &rightsign;

    ?>
    [/php]

    <SCRIPT LANGUAGE="JavaScript">
    <!–
    var ajax=new Ajax();
    str="a=<root><name>10000</name><sex>select * from words where</sex></root>&b=c";
    arg=obj(str);
    var done=function(o)&leftsign;alert(err(o));&rightsign;;
    var load=function()&leftsign;&rightsign;;
    ajax.open("getobj.php","POST",done,load,str);
    //–>
    </SCRIPT>

    php端
    <? header("content-Type: text/html; charset=utf-8");?>
    <?
    $dom = new DomDocument;
    $dom->loadXML($_POST[\'a\']);
    $company = $dom->getElementsByTagName(\’sex\’)->item(0)->nodeValue;
    print $company;
    print_r($_POST);
    ?>

    <?php
    $strName = "fs2you_f_name";
    $strLink = "fs2you_f_link";
    $strResult = "fs2you_f_result";
    $strDescription = "fs2you_f_description";

    if (isset($_POST[$strResult])) &leftsign;
        $RAW_POST = file_get_contents("php://input");
        $RAW_POST = str_replace("=", "[]=", $RAW_POST);
        parse_str($RAW_POST, $my_post);

        for ( $i=0;$i<count($my_post[$strResult]);$i++) &leftsign;
         echo "<p>\\n文件名:".$my_post[$strName][$i]."<br />\\n"
          ."描述:".$my_post[$strDescription][$i]."<br />\\n"
          ."上传状态:".$my_post[$strResult][$i]."<br />\\n"
          ."链接:".$my_post[$strLink][$i]."<br />\\n</p>\\n";
        &rightsign;
    &rightsign;

    ?>

    编码
    public string EncodeBase64(string code_type,string code)
      &leftsign;
       string encode = "";
       byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code);
       try
       &leftsign;
        encode = Convert.ToBase64String(bytes);
       &rightsign;
       catch
       &leftsign;
        encode = code;
       &rightsign;
       return encode;
      &rightsign;
    解码
    public string DecodeBase64(string code_type,string code)
      &leftsign;
       string decode = "";
       byte[] bytes = Convert.FromBase64String(code);
       try
       &leftsign;
        decode = Encoding.GetEncoding(code_type).GetString(bytes);
       &rightsign;
       catch
       &leftsign;
        decode = code;
       &rightsign;
       return decode;
      &rightsign;

    标签:, , ,

    20070518 php import sql txt - 一月 27, 2008 by yippee

    20070518 php import sql txt
    http://www.yippeesoft.com

    php导入SQL文本文件,发现失败
    问题出现在该文本文件加了UTF8头,晕倒~

    <?php
       $link = mysql_pconnect(" http://www.yippeesoft.com ", "root", " http://www.yippeesoft.com ")
           or die("Could not connect: " . mysql_error());
     
       $result = mysql_query("CREATE DATABASE  if not exists `my_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;")
           or die("Invalid query: " . mysql_error());
      
    /*   if (mysql_create_db("my_db")) &leftsign;
           print ("Database created successfully\\n");
       &rightsign; else &leftsign;
           printf ("Error creating database: %s\\n", mysql_error());
       &rightsign;

       $lines = file(\’C:\\tt.sql\’);
       foreach ($lines as $line_num => $line)
       &leftsign;
        $query = $line;
        print \’<br>\’;
        print "$query";
        print \’<br>\’;
        $result = mysql_query("$query") or die("Query failed");
       &rightsign;*/

    // get contents of a file into a string
     $filename = "c:\\sql.txt";
     $handle = fopen($filename, "r");
     $contents = fread($handle, filesize ($filename));
     fclose($handle);
     $contents = str_replace("\\r\\n","\\n",$contents);
     $qs = explode(";\\n", trim($contents));
     $i=count($qs);
     print $i;
     mysql_select_db(\’my_db\’, $link) or die (\’Can\\\’t use foo : \’ . mysql_error());
     for ($i=0;$i<count($qs);$i++)
     &leftsign;
      $sql=$qs[$i];
    //  print $qs[$i];
      //$sql = str_replace("\\n","",$sql);
      $sql=$sql.chr(13).chr(10);
      print $sql;
     
      $resultt = mysql_query($sql) or die("Invalid query: " . mysql_error());

    //  $resultt = mysql_query($qs[$i]) or die("Query failed");
     &rightsign;
    ?>

    <?php
    $file_name="c:\\sql.txt"; //要导入的SQL文件名
    $dbhost=" http://www.yippeesoft.com "; //数据库主机名
    $dbuser="root"; //数据库用户名
    $dbpass=" http://www.yippeesoft.com "; //数据库密码
    $dbname="my_db"; //数据库名
    set_time_limit(0); //设置超时时间为0,表示一直执行。当php在safe mode模式下无效,此时可能会导致导入超时,此时需要分段导入
    $fp = @fopen($file_name, "r") or die("不能打开SQL文件 $file_name");//打开文件
    $link = mysql_pconnect(" http://www.yippeesoft.com ", "root", " http://www.yippeesoft.com ")
           or die("Could not connect: " . mysql_error());
     
       $result = mysql_query("CREATE DATABASE  if not exists `my_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;")
           or die("Invalid query: " . mysql_error());
      
    mysql_connect($dbhost, $dbuser, $dbpass) or die("不能连接数据库 $dbhost");//连接数据库
    mysql_select_db($dbname) or die ("不能打开数据库 $dbname");//打开数据库
     
    echo "正在执行导入操作
    ";
    while($SQL=GetNextSQL())&leftsign;
    if (!mysql_query($SQL))&leftsign;
    echo "<font color=\\"#ff0000\\">执行出错:".mysql_error()."</font>";
    echo "SQL语句为:".$SQL."
    ";
    &rightsign;;
    &rightsign;
    echo "导入完成";
     
    fclose($fp) or die("Can\’t close file $file_name");//关闭文件
    mysql_close();
     
    //从文件中逐条取SQL
    function GetNextSQL() &leftsign;
    global $fp;
    $sql="";
    while ($line = @fgets($fp, 40960)) &leftsign;
    $line = trim($line);
    //以下三句在高版本php中不需要
    //$line = str_replace("\\\\\\\\","\\\\",$line);
    //$line = str_replace("\\\’","\’",$line);
    //$line = str_replace("\\\\r\\\\n",chr(13).chr(10),$line);
    // $line = stripcslashes($line);
    if (strlen($line)>1) &leftsign;
    if ($line[0]=="-" && $line[1]=="-") &leftsign;
    continue;
    &rightsign;
    &rightsign;
    $sql.=$line.chr(13).chr(10);
    if (strlen($line)>0)&leftsign;
    if ($line[strlen($line)-1]==";")&leftsign;
    break;
    &rightsign;
    &rightsign;
    &rightsign;
    return $sql;
    &rightsign;
    ?>

    标签:,
    20070509 php fileupload wap push - 一月 22, 2008 by yippee

    20070509 php fileupload wap push
    http://www.yippeesoft.com

    例 38.3. 上传一组文件

    PHP 的 HTML 数组特性甚至支持文件类型。

    <form action="" method="post" enctype="multipart/form-data">
    <p>Pictures:
    <input type="file" name="pictures[]" />
    <input type="file" name="pictures[]" />
    <input type="file" name="pictures[]" />
    <input type="submit" value="Send" />
    </p>
    </form>

       

    <?php
    foreach ($_FILES["pictures"]["error"] as $key => $error) &leftsign;
        if ($error == UPLOAD_ERR_OK) &leftsign;
            $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
            $name = $_FILES["pictures"]["name"][$key];
            move_uploaded_file($tmp_name, "data/$name");
        &rightsign;
    &rightsign;
    ?>

    开发Web程序通常需要文件上传功能,现在有很多免费的文件上传组件,其中使用比较多的也是非常著名的有:

    FileUpload (http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi)

    Cos        (http://www.servlets.com/cos/index.html) 基于javabean组件

    SmartUpload (http://wwww.jspsmart.com) 完全基于JSP来处理上传的组件

    HttpClient是一个致力于提供简单的程序编程接口(API),使Java开发人员能在HTTP之上编写代码。入伙你在开发一个Web浏览器或者仅仅是一个偶尔需要一些来在Web的数据,HttpClient能帮助你在HTTP之上开发客户端代码。从名字上我们也可以看出,HttpClient意味着仅仅是HTTP客户端代码,并不能开发服务器端以处理HTTP请求。

    我推荐你使用 HttpClient 代替 java.net 类包,因为HttpClient更容易使用,它支持一些 java.net 没有提供HTTP功能,并且还有一个活跃的社团支持它。你可以浏览http://www.nogoop.com/product_16.html#compare,比较一下HttpClient, java.net,和其它类似的API。

    jsp文件上传大多采用采用开源项目来简化处理,这里列出常用的两个jar包的实现,并进行比较,说明他们的优缺点和应该注意的问题。

    Commons FileUpload,可以在http://jakarta.apache.org/commons/fileupload/下载,这个包需要Commons IO的支持,可以在http://jakarta.apache.org/commons/io/下载

    com.oreilly.servlet,可以在http://www.servlets.com/cos/下载
    Commons FileUpload提供三种文件上传处理方式,DiskFileUpload、ServletFileUpload和 PortletFileUpload三种方式,其中DiskFileUpload已经在javadoc下已经被标记为过期的方法,建议用 ServletFileUpload代替,而PortletFileUpload需要配合portlet-api来使用,所以这里我们只介绍 ServletFileUpload,并且这个也是最常用的。

    com.oreilly.servlet 也提供了三种文件上传的处理方式,MultipartWrapper、MultipartRequest和MultipartParser三种方式,其中 MultipartWrapper和MultipartRequest的用法基本相同,并且没有MultipartRequest提供的操作多,所以这里介绍MultipartRequest,MultipartParser和前两者有些不同,可以用来处理某些特殊情况,例如表单中有两个同名的文件上传选择框。

    我们暂时称三面三种文件上传方式分别为: ServletFileUpload方式(MultipartTestServlet)、MultipartRequest方式(MultipartTestServlet2)、MultipartParser方式(MultipartTestServlet3)

    fileupload post http webclient
    因为微软认为这项服务在国内还不成熟,对用户来说不安全,用户会被强制接受广告甚至被一些人恶意散播病毒,所以国内的微软系统的手机默认是关闭wap push这项服务的,而且在设置中也没有让用户可以打开的选项。而国外部分移动公司订制的手机大部分都是打开这项服务的。用户可以通过这项服务来主动访问感兴趣的内容。

    呵呵 说了这么半天你对wap push这项服务感兴趣吗?你知道你的手机开没开这项服务吗?或者你想现在就关上这项服务吗?那么我来教你如何打开和关闭这项服务。

    首先下载注册表编辑器,笔者推荐使用在电脑上联机编辑手机的注册表。下载地址:

    http://www.tompda.com/bbs/display.asp?luntan=27&forumID=1986261

    同步后打开编辑器,会发现在注册表编辑器中出现了手机的注册表"My WCE Device"

    点击后将显示全图

    按照路径找到:

    HKEY_LOCAL_MACHINE/Security/Policies/Policies/0000100D

    点击后将显示全图

    看到0000100D的值了吗?值是3072 是关的意思。如果你想一直关着它就不要动了,如果你想打开它,就把这个值改为4095 就打开服务了。如果你的手机没有解锁则修改不了,需要先解锁。

    终于发现Smartphone自由开关wap push的方法

    这个问题应该是困扰了很多人很久了。查了很多资料,发现以下方法确实可行,因为手边机型不多,所以不敢保证所有机型都有效。
    用过之后无论有没有效果,都请说一声,如果不行我再研究。

    修改注册表:
    HKEY_LOCAL_MACHINE/Security/Policies/Policies/0000100D

    如果想接收wap push就把这个值改为4095;
    不想接收的话,就把它改成3072。

    改成3072之后如果有wap push进来,背光灯会亮,但是不会显示任何消息。

    以上方法在我的577和朋友575,586上测试成功,希望大家能反馈一下在自己机器上的效果。谢谢

    wappush是通过GPRS发来的一种信息,移动和一些服务提供商经常用它来给我们发送通知和广告,也有的网站提供通过它来发送免费自写信息的服务。
    普通手机都有一个wap push收件箱,我们的sp则没有,大部分sp也收不到这种信息,所以有的人一直以为sp不支持这种信息。其实只是微软认为wap push可能会被利用传播病毒。默认关闭这个功能而已。

    3.2 PDU 模式
     
      用PDU 模式发送 WAP PUSH可以使用三种编码: 7-bit 编码、8-bit 编码和UCS2 编码。7-bit 编码用于发送普通的ASCII 字符,8-bit 编码通常用于发送数据消息,UCS2 编码用于发送Unicode 字符。由于要实现中文WAP PUSH的发送,所以选择用UCS2 编码,即中文Unicode 码。
    ⑴ UCS2 编码原理 所谓UCS2 编码,是将单个的字符(1-2 个字节)按ISO/IEC10646 的规定,转变为16 位 的Unicode 宽字符。即将单个的字符转换为由四位的‘0’-‘9’、‘A’-‘F’的数字和字 母组成的字符串。待发送的消息以UCS2 码的形式进行发送。
    ⑵ 通过UCS2 编码我们得到中文Unicode 码,接着就可以进行发送PDU 串的编制了。从表面上看,PDU 串是ASCII 码串,同样由‘0’-‘9’、‘A’-‘F’这些数字和字母组成。它们是8 位字节的十六进制数,或者BCD 码十进制数。PDU 串除了包含所发送的消息本身外,还包含很多其它参数信息,如服务中心号码、目标号码和编码方式等

      例如

    0051000BA13108086406F600F5A7850B05040B8423F_
    0000303010129060603AE81EA8DCA02056A0045C6080C033231312e_
    3133362e3135332e33302f776170707573682f70757368496e6465782e_
    6a73703f7075736849643d3035303531313134313630353231000103E8A_
    FB7E782B9E587BBE4BBA5E4B88BE993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9000101_

      为一串可以成功发送的WAP PUSH,其中包括了汉字描述和WAP页面地址。具体分析如下

      00 SMSC 地址信息的长度 00表示用手机上设置短信中心号码,PDU 串的“SMSC 址格式”段和“SMSC 地址”段将省去

      51 基本参数(TP-MTI/VFP) 不要求发送回复

      00 消息基准值(TP-MR)

      0B 对方电话的长度

      A1 目标地址格式 A1表示为国内格式

      3108086406F6 目标地址,补‘F’凑成偶数位后奇偶位互换

      00 协议标识(TP-PID) 是普通GSM 类型,点到点方式

      F5 用户信息编码方式 (TP-DCS)

      A7 有效期(TP-VP)

      85 用户信息长度(TP-UDL)

      0B WAP PUSH头部的总长度

      05040B8423F0表示接下来是一个WAP PUSH

      00 表示是Concatenated Short Messages

      03 长度

      03 reference number

      01 表示分成1个短信发送

      01 当前包的序号

      29060603AE81EA8DCA WSP

      02 标记位

      05 -//WAPFORUM//DTD SI 1.0//EN

      6A UTF-8

      00 标记开始

      45 <si>

      C6 <indication

      08 <action=signal-high>

      0C href="http://

      03 字符串开始

    3231312e3133362e3135332e33302f776170707573682f
    70757368496e6465782e6a73703f7075736849643d3035303531313134313630353231 URL

      00 URL 字符串结束

      01 >

      03 内容描述字符串开始

      E8AFB7E782B9E587BBE4BBA5E4B88BE993BEE68EA_
      5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9 内容描述字符串

      00 内容描述字符串结束

      01 </si>

      01 </indication>

      由以上分析可以看出,WAP PUSH可以被当作一种特殊的短信来发送,WAP PUSH包发送的内容实际上跟通过PPG网关发送的XML原理相同,但是经过了压缩。压缩之后的格式称为WBXML,这种格式将一些标记用代码来表示。然而WBXML的缩略标记分为两部分,一部分是所有类型的XML都通用的,另一部分是不同类型的XML有着不同的解释。
    用户接收到此类信息时,在客户端手机支持WAP的情况下,可以直接访问到信息中加载的WAP网站地址,这样服务器也达到了推广业务方便用户使用的目的。由于在UCS2 编码方式下,可发送短消息的最大字符数是140字节,即WAP PUSH中的推送URL与描述文字的总字符数为140,因此描述文字的字数限制与推送的URL长度有关。

    标签:, , ,
    20070803 PHP5 IIS NTFS - 一月 4, 2008 by yippee

    20070803 PHP5 IIS NTFS
    http://www.yippeesoft.com

    配置IIS和PHP的资料多的是,且非常简单
    windows2003 IIS中安装php5 飞竹体验版 文件权限的麻烦
    网络是个好地方,但网络永远不能告诉你真理,这个东西还是要自己探求啊
    IIS下安装php说起来应该是比较简单的,因为不管在哪种服务器上安装php都只需要执行这么几步
    注意,本文最后会提到一个IIS下特殊的问题 如果在使用IIS作为PHP的服务器发生对文件操作出问题的情况,那就是他了哈
    首先配置php.ini文件,复制到windows目录中,注意不是system32目录,不然不能装zend
    ——————————————
    配置php.ini,建议使用php.ini-recommended作为php.ini的蓝本
    打开php.ini,查找extension_dir后面的改为"C:/php/ext"
    查找Windows Extensions,那下面有一排的;extension=php_***.dll
    开始去分号了,去掉就是支持这些组件
    起码把
    extension=php_gd2.dll
    extension=php_mbstring.dll
    extension=php_mysql.dll
    前面的分号去掉
    php5开始默认不支持mysql了,所以我们除了要为他添加支持,除了extension=php_mysql.dll去分号之外
    在php目录里有个libmysql.dll文件,把它复制到系统的system32文件夹下
    其他的各类设置,自己自由配置
    显示错误信息display_errors
    魔术引号 magic_quotes_gpc 建议改成on
    允许使用URL打开文件allow_url_fopen 建议改成off
    ——————————————

    然后是在在服务器上的配置
    加载php模块,可以是php.exe 使php以cgi方式运行
    但一般都是加载php5isapi.dll 呵呵,据说速度更快
    然后是增加对 .php 扩展名的支持 增加默认首页index.php

    具体我的环境是windows2003,IIS6.0
    首先我们打开WIN2003中的“Internet信息服务(IIS)管理器”->“WEB服务扩展”,按菜单上的“操作”->“添加一个新的WEB服务扩展”
    在“扩展名”中输入“PHP”,按“添加”,在弹出新的窗口中按“浏览”,选择安装PHP目录中的php5isapi.dll文件后,在原本的窗口中“设置扩展状态为允许”前面打勾,确定即可。
    将IIS管理器中的“所有未知ISAPI扩展”设置为允许,如下图所示:

    之后配置 网站 的属性,可是是配置全局属性,当然也可以是在各个站点中配置了哈
    在站点属性中 ISAPI筛选器选项卡中 新增加一条,可执行文件当然是选择phpisapi.sll ,名称自己来哈;
    再到主目录选项卡中,点选 配置,增加一条应用程序扩展,可执行文件选php5isapi.sll,扩展名php;
    在文档选项卡中,新增默认内容文档 index.php

    呵呵,做法不同原理是一样的,这样一个IIS+PHP的环境就配成了,调试一下,似乎没有问题,真的??
    N长时间后,在正式应用时我突然发现,fopen()似乎有点问题??因为需要,在使用fopen($file,\’a\’)时,突然发现文件不可以修改
    failed to open stream: No such file or directory
    不可能的呀,又花了N长的时间查资料,研究,摆弄,头晕之后,终于被我发现了
    这个是只有IIS才有的问题,apache中一点问题都没有哈
    我真是天才啊,哈哈哈哈!!!

    玩笑玩笑,如果你也遇上这个问题,那本文最主要的目的来了
    这个问题其实主要是 由于Win NTFS盘下去除了everyone 权限引起的, 我们只要在安全权限中加个 Internet 来宾账号,就可以解决了。
    具体方法是在资源管理器中,那个站点的文件夹,属性,安全选项卡中,新增加一个Internet 来宾帐户
    IUSR_SERVER,赋予相应的权限,就搞定了哈,郁闷哇

    可是我就是不行,连文件都找不到

    最近发现,是NTFS权限问题 安全权限中加个 Internet 来宾账号

    没有问题,我自己找到问题所在了。
    使用 NTFS 文件系统的朋友出现此问题是因为 php 目录没有给 Users 用户组读取和运行权限。
    PS:关于 NTFS 下权限的问题,建议为 php 目录、phpMyAdmin 目录和其上一级目录分配 Users 读取运行权限,否则可能出现问题。

    标签:, , ,
    20070620 Ruby or rails php adodb - 十一月 21, 2007 by yippee

    20070620 Ruby or rails php adodb
    http://www.yippeesoft.com/blog/

    Rails提供了一种非常方便的数据映射机制 – 活动记录。这种机制可以使用尽可能少的代码将一个数据表映射成ruby对象。为了达到这一目的,rails给出了一些约定。如上面的例子的第四步中使用了Record作为映射数据表的类名,而如果不明确指定所映射的表名时,rails就将这个类名后加s作为表名,即records。下面的代码是一个关于活动记录的例子。

    require \’rubygems\’
    require_gem \’activerecord\’
    class Record < ActiveRecord::Base
    # set_table_name(\’tablename\’)
    establish_connection(
    :adapter => "mysql",
    :host => "localhost",
    :username => "root",
    :password => "password",
    :database => "autoweb_development"
    )
    end
    record = Record.new
    record.title = \’abc\’
    record.content = \’aabbcc\’
    record.dt = Time.now
    if record.save
    puts \’增加记录成功!\’
    else
    puts \’增加记录失败!\’
    end

    这是以前用PHP+ADODB
    #error_reporting(0); # 不显示任何的错误讯息
    define(\’ADODB_ERROR_LOG_TYPE\’,3);
    define(\’ADODB_ERROR_LOG_DEST\’,\’./errors.log\’);
    require_once(\’../adodb/adodb-errorhandler.inc.php\’);
    require_once("../adodb/adodb.inc.php");
    require_once(\’../adodb/tohtml.inc.php\’);

    function GetInsertSQL($table,$record)
    &leftsign;
     $sql = "SELECT * FROM $table WHERE 1 = -1";
     $rs = $this->Execute($sql);
     $insertSQL = $this->conn->GetInsertSQL($rs, $record);
     return $insertSQL;
    &rightsign;
    function GetUpdateSQL($table,$record,$where)
    &leftsign;
     $sql = "SELECT * FROM ".$table.$where;  # 选择一笔记录以便更新
     $rs = $this->conn->Execute($sql); # 执行这个查询,并取得一个存在的记录来更新
     # 传入这个只有单一记录的资料集以及含有资料的阵列到 GetUpdateSQL函数里
     # 函数将会回传一个具有正确 WHERE 条件的 UPDATE(更新) SQL 指令
     $updateSQL = $this->conn->GetUpdateSQL($rs, $record);
     print_r($record);
     return $updateSQL;
    &rightsign;

    function AddNew()
    &leftsign;
     $insertSQL=$this->db->GetInsertSQL($this->tblname,$_POST);
     $rs=$this->db->Execute($insertSQL);
     echo \’<Script LANGUAGE=JavaScript>\’;
     if(!$rs)
      echo "alert(\’新增失败!\’)";
     else
      echo "alert(\’新增成功!\’)";
     echo "</script>";

    function Save()
    &leftsign;
     $where=" where ".$this->fieldpre."id=".$_POST[$this->fieldpre."id"];
     $UpdateSQL=$this->db->GetUpdateSQL($this->tblname,$_POST,$where);
     #echo $UpdateSQL;
     $this->db->Execute($UpdateSQL);
     #$this->totalcount=$this->GetRowCounts($this->sessionsql);
     $this->Show();
    &rightsign;

    标签:, , ,
    20070606 php socket - 十一月 7, 2007 by yippee

    20070606 php socket
    http://www.yippeesoft.com

    活见鬼,用 Monitor Apache Servers 重启APACHE居然不能把PHP.INI里面的配置生效
    必须进入管理重启

    如何让php5显示错误信息
    作者:MKD 日期:2006-12-05
    字体大小: 小 中 大
    php5默认是关闭错误信息的,一遇到出错,就显示空白页;如果这个网站正在运行,这样做是安全的;但作为一个开发者,则需要查看错误信息,便于调试页面;

    解决方法:
    打开php.ini文件,356行display_errors = Off(本人为php5版本)
    改为display_errors = On
    重启IIS服务

    php_sockets.dll

    socket_create() 不能用

    PHP Fatal error: Call to undefined function socket_create() in F:\\php\\send2.php
    1 如果網頁出現下列資訊
    Fatal error: Call to undefined function: xml_parser_create() in /var/www/localhost/htdocs/cacti/lib/xml.php on line 31
    編輯下列檔案增加相關資訊
    #nano -w /etc/portage/package.use
    =dev-lang/php-4* cgi force-cgi-redirect xmlrpc expat apache2 mysql
    emerge -N –newuse =dev-lang/php-4*
    Save&exit
    重新安裝php4
    #emerge =dev-lang/php-4*
    筆者在這建議安裝PHP4 因為PHP5問題較多

    PHP使用Berkley的socket库来创建它的连接。你可以知道socket只不过是一个数据结构。你使用这个socket数据结构去开始一个客户端和服务器之间的会话。这个服务器是一直在监听准备产生一个新的会话。当一个客户端连接服务器,它就打开服务器正在进行监听的一个端口进行会话。这时,服务器端接受客户端的连接请求,那么就进行一次循环。现在这个客户端就能够发送信息到服务器,服务器也能发送信息给客户端。
    产生一个Socket,你需要三个变量:一个协议、一个socket类型和一个公共协议类型。产生一个socket有三种协议供选择,继续看下面的内容来获取详细的协议内容。
    定义一个公共的协议类型是进行连接一个必不可少的元素。下面的表我们看看有那些公共的协议类型。

    表一:协议
    名字/常量     描述
    AF_INET  这是大多数用来产生socket的协议,使用TCP或UDP来传输,用在IPv4的地址
    AF_INET6     与上面类似,不过是来用在IPv6的地址
    AF_UNIX  本地协议,使用在Unix和Linux系统上,它很少使用,一般都是当客户端和服务器在同一台及其上的时候使用
    表二:Socket类型
    名字/常量     描述
    SOCK_STREAM  这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。
    SOCK_DGRAM  这个协议是无连接的、固定长度的传输调用。该协议是不可靠的,使用UDP来进行它的连接。
    SOCK_SEQPACKET  这个协议是双线路的、可靠的连接,发送固定长度的数据包进行传输。必须把这个包完整的接受才能进行读取。
    SOCK_RAW  这个socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议。(ping、traceroute使用该协议)
    SOCK_RDM  这个类型是很少使用的,在大部分的操作系统上没有实现,它是提供给数据链路层使用,不保证数据包的顺序

    表三:公共协议
    名字/常量     描述
    ICMP  互联网控制消息协议,主要使用在网关和主机上,用来检查网络状况和报告错误信息
    UDP      用户数据报文协议,它是一个无连接,不可靠的传输协议
    TCP 传输控制协议,这是一个使用最多的可靠的公共协议,它能保证数据包能够到达接受者那儿,如果在传输过程中发生错误,那么它将重新发送出错数据包。

    现在你知道了产生一个socket的三个元素,那么我们就在php中使用socket_create()函数来产生一个socket。这个 socket_create()函数需要三个参数:一个协议、一个socket类型、一个公共协议。socket_create()函数运行成功返回一个包含socket的资源类型,如果没有成功则返回false。
    Resourece socket_create(int protocol, int socketType, int commonProtocol);

    现在你产生一个socket,然后呢?php提供了几个操纵socket的函数。你能够绑定socket到一个IP,监听一个socket的通信,接受一个socket;现在我们来看一个例子,了解函数是如何产生、接受和监听一个socket。

    <?php
    $commonProtocol = getprotobyname(“tcp”);
    $socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
    socket_bind($socket, ‘localhost’, 1337);
    socket_listen($socket);
    // More socket functionality to come
    ?>

    <?php
    $server_ip="128.168.10.1";
    $port = 8888;
    echo "0";
    if (($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) &leftsign;
        echo "socket_create() failed: reason: " . socket_strerror($sock) . "\\n";
    &rightsign;
    $sock=socket_create(AF_INET,SOCK_DGRAM,0);
    echo "1";
    if(!$sock)&leftsign;

        echo "socket create failure";

    &rightsign;
    echo "2";

        $buf="hello,how are you!\\n";

    if(!@socket_sendto($sock,$buf,strlen($buf),0,"127.0.0.1",5566))&leftsign;

        echo "send error\\n";

        socket_close($sock);

        exit();

    &rightsign;

    exit();

    $buf="";
    $msg="";

    if(!@socket_recvfrom($sock,$msg,256,0,&$server_ip,&$port))&leftsign;

        echo "recvieve error!";

        socket_close($sock);

        exit();

    &rightsign;

    echo trim($msg)."\\n";

    socket_close($sock);

    ?>

    标签:,
    20070506 php Web服务 web service - 十月 8, 2007 by yippee

    20070506 php Web服务 web service
    http://www.yippeesoft.com

    找的一些 php Web Service 的资料
       * Development
    SOAP 及其它:
       * SOAP Version 1.2 Part 1: Messaging Framework
       * SOAP’s Alive: Try the New Native SOAP Extensions for PHP
       * Simon Willison: PHP SOAP Documentation
       * Zend Technologies – PHP 5 In Depth – PHP SOAP Extension
       * Application Development: Consuming Web services in PHP
       * Simple Object Access Protocol
       * Access an enterprise application from a PHP script
       * ASPN : Web Services : Simple Web Services API
       * ONLamp.com: A PHP Web Services Client
       * DevChannel &line; Building PHP Web services with PEAR

    XML-RPC:

       * O’Reilly Network: Meerkat: The XML-RPC Interface
       * Keith Devens – XML-RPC Library for PHP
       * XML-RPC Specification
       * Build your own Web Service with PHP and XML-RPC [PHP & MySQL Tutorials]

    php 的 SOAP 实现主要有:
       * PEAR::SOAP
       * NuSOAP
       * PHP SOAP
    还有就是 php 自己的 SOAP 函数库。
    在 SF 上搜索 nusoap 可以发现有不少的 php 项目都用了 nusoap ,大致看了一下,也感觉 nusoap 比较不错。以后可能就靠它了,不过它的文档不是特别多。

    pear里的SOAP   package  
     http://pear.php.net/packages.php?catpid=23&catname=Web+Services  
     nusoap是目前较好的一种方式,不过目前国内做这方面的不多。PHP下webservice的介绍文章都是国外的。

     第一,很多WEB SERVCIE是C#这类语言写的,所以他们返回的DATASET类型,PHP接收过来不像他们那么方便。
    第二,个人认为WEB SERVICE通信时间较长,感觉是个缺陷。
    下面来说一下自己写的PHP链接WEB SERVICE类。
    webserv.class.php
    //通讯类开始

    class webserv
    &leftsign;
    //webservice 地址参数
    var $webadd = array(
       "publ" => "client.asmx?wsdl",  
       "client" => "Client.asmx?wsdl",  
       "bann" => "");  
       //调用webservice
       function soap($class,$function,$par = array())&leftsign;
        //链接web service
        $client = new SoapClient($this->webadd[$class]);
       
        $require = $client->$function($par);
        //调用信息debug
        if (is_soap_fault($require)) &leftsign;
         echo "远程接口".$function."调用失败!";
         exit();
        &rightsign;
     //获取返回值
        $function_result = $function."Result";
        $str = $require->$function_result;
        //解析XML
        $row = @simplexml_load_string( $str );
        //如果不能用XML解析直接返回
        if ($row == false) &leftsign;
         if (is_string($str))&leftsign;
          return $str;
         &rightsign; else &leftsign;
          $require = (get_object_vars($str));
          $str = $require[\'string\'];
          return $str;
         &rightsign;
        &rightsign;
     //结果转换为数组
        $row_arr = get_object_vars($row);
        print_r($row_arr);exit();
     $row_return = $row_arr[\'Table\'];
     //判断是不是多反馈记录
     if (is_array($row_arr[\'Table\'])) &leftsign;
      foreach ($row_return as $key => $vlaues)&leftsign;
        $rows[$key] = get_object_vars($vlaues);
      &rightsign;
     &rightsign; else &leftsign;
      $rows[0] = get_object_vars($row_arr[\'Table\']);
     &rightsign;
     //通讯记录
     //$this->soap_log($class,$function,$par,$rows);
        return $rows;
       &rightsign;
     
       //接口通讯记录
       function soap_log($class, $function, $in, $out)&leftsign;
        $log = date("Y-m-d H:i:s");
        $log .= " ".$class."->".$function." input:";
        $input = "";
        if ($in != array()) &leftsign;
         foreach ($in as $key => $vlaue)&leftsign;
          $input .= $key."=".$vlaue;
         &rightsign;
         $log .= $input." output:".var_export($rows)."\\n";
        &rightsign;
       &rightsign;
    &rightsign;

    以上是通信类的内容。用法很简单
    include 一下php类文件

    <?
    include "./webserv.class.php";
    $webserv = new webserv;
    //这里是调用方法给传递的参数
    $a = array("aa"=>"aaaa");
    print_r($webser->soap("function_name",$a));
    ?>
    http://blog.sina.com.cn/u/565d1faf010007zi

    [转]关于php编写web service客户端

    由于帮一个朋友写web service(.net)的php版客户端,弄得我今天是晕头转向,asp通过xmlhttp实现与服务器的soap协议数据传输,在查过无数资料后,没看到linux下对xmlhttp的支持,于是放弃了走xmlhttp的路线(已经是晕头转向了)。
    于是采取了第二方案,fsockopen连接服务器发送请求(以前没用过这东西),实现了,哈哈,真爽,不过高兴得太早了,一个是反应速度慢,一个是有时喉respond数据不全,郁闷!
    慢的原因找出来了,是
    [复制PHP代码]
    PHP代码如下:

    while(!feof($fp)) &leftsign;
    $str=fgets($fp,128);
    &rightsign;

    的原因,难道是每fgets一次就与服务器一次对话?
    数据偶尔不全原因到现在还没找到,是机器、网速、还是服务器?要不行只有再想想别的方案了  
    以下是目前的代码:
    [复制PHP代码]
    PHP代码如下:

    <?php
    define ("STARTTIME", getTime()); //计算执行时间用

    $fp = fsockopen("so.hustonline.net", 80, $errno, $errstr, 30);
    //$fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 30);

    //以下是测试程序执行时间
    function getTime() &leftsign;
     $time = explode(" ",microtime());
     $theTime = (double)$time[1] + (double)$time[0];
     return $theTime;
    &rightsign;
    function getRunTime() &leftsign;
    echo number_format(getTime()-STARTTIME,5);
    &rightsign;

    if (!$fp) &leftsign;
    echo "$errstr ($errno)<br />\\n";
    &rightsign;
    else &leftsign;
       $SoapRequest = "<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>
       <soap:Envelope xmlns:xsi=\\"http://www.w3.org/2001/XMLSchema-instance\\" xmlns:xsd=\\"http://www.w3.org/2001/XMLSchema\\" xmlns:soap=\\"http://schemas.xmlsoap.org/soap/envelope/\\">
       <soap:Body>
       <getResult xmlns=\\"http://tempuri.org/\\">
       <nKeyword>天地英雄</nKeyword>
       <nArea>全部</nArea>
       <nNowPage>1</nNowPage>
       <nPageSize>5</nPageSize>
       </getResult>
       </soap:Body>
       </soap:Envelope>";
     $len = strlen($SoapRequest);
    $out = "POST /remote.asmx HTTP/1.1\\r\\n";
    //$out = "GET /index3.php HTTP/1.1\\r\\n";
    $out .= "Host: so.hustonline.net\\r\\n";
    //$out .= "Host: 127.0.0.1\\r\\n";
    $out .= "Content-Type: text/xml; charset=utf-8\\r\\n";
    $out .= "Content-Length: ".$len."\\r\\n";
    $out .= "SOAPAction: \\"http://tempuri.org/getResult\\"\\r\\n\\r\\n";
    $out .= $SoapRequest;

    fputs($fp, $out);
       $str = "";
    while(!feof($fp)) &leftsign;
       $str=fgets($fp,128);
     &rightsign;
     $num = strpos($str,"<?xml");
     $str = substr($str,$num);
    echo $str;
    getRunTime();
    fclose($fp);
    &rightsign;
    ?>

    web service的php客户端方案II
    在第一种方案没找到原因后,我开始用第二种方案,这种方案在速度上得到了很大的提升,但是仍然存在着偶尔数据无法完整读取的毛病,这个偶尔比上一种方案的偶尔小了很多,即使是很小,毕竟存在,这问题必须得解决,但确实没找到是为什么。郁闷  
    第二种方案必须有sockets库的支持,因为用到了很多sockets的函数。
    二方案目前具体代码如下:
    [复制PHP代码]
    PHP代码如下:

    <?php
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $sourceips[\'madcoder\'] = \’so.hustonline.net\’;
    if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) &leftsign;
    echo socket_strerror(socket_last_error($socket));
    &rightsign;
    socket_connect($socket, \’so.hustonline.net\’, 80);
    $SoapRequest = "<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>
       <soap:Envelope xmlns:xsi=\\"http://www.w3.org/2001/XMLSchema-instance\\" xmlns:xsd=\\"http://www.w3.org/2001/XMLSchema\\" xmlns:soap=\\"http://schemas.xmlsoap.org/soap/envelope/\\">
       <soap:Body>
       <getResult xmlns=\\"http://tempuri.org/\\">
       <nKeyword>功夫</nKeyword>
       <nArea>全部</nArea>
       <nNowPage>1</nNowPage>
       <nPageSize>15</nPageSize>
       </getResult>
       </soap:Body>
       </soap:Envelope>";
     $len = strlen($SoapRequest);
    $out = "POST /remote.asmx HTTP/1.1\\r\\n";
    //$out = "GET /index3.php HTTP/1.1\\r\\n";
    $out .= "Host: so.hustonline.net\\r\\n";
    //$out .= "Host: 127.0.0.1\\r\\n";
    $out .= "Content-Type: text/xml; charset=utf-8\\r\\n";
    $out .= "Content-Length: ".$len."\\r\\n";
    $out .= "SOAPAction: \\"http://tempuri.org/getResult\\"\\r\\n\\r\\n";
    $out .= $SoapRequest;
    socket_write($socket, $out);
    $line = trim(socket_read($socket, 10000));
    $num = strpos($line,"<?xml");
    $str = substr($line,$num);
    echo $str;
    socket_close($socket);
    ?>

    by 5w台灯

    标签:, , ,
    20070504 php session_start - 十月 6, 2007 by yippee

    20070504 php session_start
    http://www.yippeesoft.com

    [quote]
    问:Cannot send session cache limiter – headers already sent 的php错误怎么解决?

    Cannot send session cache limiter – headers already sent错误是由于在调用Session_Start()之前有输出导致的.

    例如下面是错误的.

       1
       2<?PHP
       3 Session_Start();//之前在第一行已经有输出
       4…..
       5?>

    错误产生的原因是:由于没有制定session文件的存放路径.

    解决方法:

    方法一:

    如果是windows系统

    (1)在c盘建立文件夹tmp
    (2)打开PHP.ini,找到session.save_path,修改为session.save_path="c:/tmp"

    方法二:

    error_reporting (E_ALL ^ E_WARNING);
       session_start();
       [/quote]

    [quote]
    当用header()转向或者session_start()之前有输出,会有Cannot send session cache limiter – headers already sent的错误,可以用ob_start(),这样会在页面全部执行完毕才输出.

       1. <?php
       2. ob_start();
       3. …
       4. ?>
       [/quote]

    关于使用 session_start 出现的 headers already sent错误的解释

    请看详细的错误程序和输出结果
    <html>
    <?
    echo "testing … ";
    session_start();
    ?>
    </html>

    输出为
    testing …
    Warning: Cannot send session cookie – headers already sent by (output started at F:php2000test.php:2) in F:php2000test.php on line 4

    Warning: Cannot send session cache limiter – headers already sent (output started at F:php2000test.php:2) in F:php2000test.php on line 4
    1:在调用Session_Start()之前不能有任何输出.例如下面是错
    误的.
    ==========================================
    1行
    2行<?PHP
    3行 Session_Start();//之前在第一行已经有输出
    4行…..
    5行?>
    ==========================================

    提示1:

    凡是出现"……..headersalreadysent……….",就是Session_Start()之前向浏览器输出信息.
    去掉输出就正常,(COOKIE也会出现这种错误,错误原因一样)

    提示2:

    如果你的Session_Start()放在循环语句里,并且很难确定之
    前哪里向浏览器输出信息,可以用下面这种方法:
    1行<?PHP Ob_Start();?>
    ……..这里是你的程序……

    2:这是什么错误

    Warning:session_start(): open(/tmp\\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR)failed:….
    因为你没有指定session文件的存放路径.

    解决方法:
    (1)在c盘建立文件夹tmp
    (2)打开php.ini,找到session.save_path,修改为session.save_path="c:/tmp"
    将output_buffering = Off改为:output_buffering = 4096
    即可.

    解决Cannot send session cache limiter – headers already- -

                                          

       关于使用 session_start 出现的 headers already sent错误的解释
    请看详细的错误程序和输出结果
    <html>
    <?
    echo "testing … ";
    session_start();
    ?>
    </html>

    输出为
    testing …
    Warning: Cannot send session cookie – headers already sent by (output started at F:Php2000test.Php:2) in F:Php2000test.Php on line 4

    Warning: Cannot send session cache limiter – headers already sent (output started at F:Php2000test.Php:2) in F:Php2000test.Php on line 4

    分析:
    主要原因,Php.ini里有关于session 的定义,默认是使用 cookie
    [session]
    session.use_cookies = 1 ; whether to use cookies

    这句表明使用 cookies 存储session 而 cookies的设置必须在正式 htm 之前,也就是只能在 header 里面才行,所以造成这个错误的发生

    我们修改程序为
    <?
    echo "testing … ";
    session_start();
    ?>
    同样错误,因为 echo 已经输出了

    我们修改程序为
    <?
    $i=1;
    session_start();
    ?>
    运行正确表明在session_start的前面可以有计算语句,但是不能有输出语句

     

    标签:, ,
    20070503 mysql php html utf 乱码 - 十月 5, 2007 by yippee

    20070503 mysql php html utf 乱码
    http://www.yippeesoft.com

    mysql php html utf 乱码之间需要注意的问题
    1、MY.INI修改
       [mysql]
        default-character-set=utf8

    2、数据库创建
          数据库   整理     
          bill  utf8_unicode_ci  

    3、表的创建
         表  操作  记录数  类型 整理 大小 多余
     routes        5 MyISAM utf8_unicode_ci 5.1 KB

    4、HTML编码格式
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    5、HTML文件保存格式 UTF-8

    6、PHP文件保存格式 UTF-8

    7、数据库连接设置
                $this->link = mysql_connect($host,$user,$pwd)
            or die("Could not connect : " . mysql_error());
            mysql_select_db($db) or die("Could not select database");
             mysql_query("SET   CHARACTER   SET    \’utf8\’");
             mysql_query("SET   NAMES   \’utf8\’");

    这几个步骤做下来,基本PHPMYADMIN和自己的网页基本OK

    [quote]
    一直漂原创,转载请注明

    Mysql自4.1以后,增加了对字符集的支持。笔者之前对Mysql比较了解,刚接触4.1时,感觉Mysql有点多此一举,但后来细想发现,对字符集的支持,虽然对开发者来说,会麻烦一些,但不可否认,是一种进步。对字符集的支持,不仅更加支持多语言,而且,也方便移植。
    刚开始使用Mysql4.1,你可能感觉有点不适,下面,简单阐述一下笔者对Mysql4.1字符集的理解,再讲述如何PHP如何适应Mysql的这种变化,希望大家看过这文章后,能够有所收获。
    如果你对计算机基础知识不了解,请直接阅读“结论篇”

    [color=Red][size=4]一.原理篇[/size][/color]
    Mysql的字符集里有两个概念,一个是“Character set(字符集)”,另一个是“Collations”。
    [size=3][color=Blue]1. Collations[/color][/size]
    Collations翻成中文是“校验”,在网页开发的过程中,这个词汇,只在Mysql里使用,主要作用是指导Mysql对字符的比较,比如, ASCII字符集里,Collations规定了a小于b,a等于a,以及a是否等于A之类的。通常,大家基本可以忽略Collations的存在,因为每个字符集都有一个默认的Collations,通常,使用默认的Collations就可以了。
    [size=3][color=Blue]2.字符集[/color][/size]
    与这对比的是,字符集是个更广的概念,即使是Windows下普通的文本文件,也渗及到字符集的问题。不同的字符集,规定了不同的字符的编码方式。一个character set (字符集)是一组符号和编码,比如,ASCII字符集,包括的字符有:数字,大小写字母,分号、换行之类的符号,编码方式是用一个7bit表示一个字符(A的编码是65,b的编码是98)。ASCII只规定了英文字母的编码,非英文语言不能用ASCII编码表示,为此,不同的国家,都为自己的语言做了编码,比如,我们国家,就有GB2312编码。但每个国家之间的编码不同,也存在着一些跨平台的问题,为此,一些国际化标准组织,就制定了一些国际通用的编码,最常用的就是UTF8了。ASCII只对英文符号和英文字母做了编码,GB2312对英文符号,英文字母,汉字做了编码,UTF8对世界上所有的语言文字做了编码,所以,GB1212的字符包含了ASCII字符,UTF8包含了GB2312字符。由此可见, UTF8是所含最广字符的字符集,所以,在一些多语言的WEB系统中,一般用UTF8字符集(PHPMyAdmin使用UTF8编码)。
    任何文本的存储,都渗及到字符集的概念。包括数据库,也包括普通的文本文件。
    主要术语:
    字符:汉字,英文字母,标点符号,拉丁文等等。
    编码:将字符转换成计算机存储的格式,比如,A用65表示。
    字符集:一组字符以及对应的编码方式。
    [color=Blue]a. Mysql的字符集[/color]

    Mysql目前支持多字符集,并且,支持在不同的字符集之间转换(便于移植和支持多语言)。
    Mysql可以设置服务器级字符集、数据库级字符集、数据表级字符集、表列的字符集,实际上,最终使用字符集的地方是存储字符的列,比如,你设置 table1中col1列是字符类型,col1才用到了字符集,如果table1表的col2列是int类型,col2不使用字符集的概念。
    服务器级字符集、数据库级字符集、数据表级字符集都是为列的字符集做默认选项的。
    Mysql一定有一个字符集,可以通过启动时加参数指定 ,也可以编译时指定,也可以在配置文件里指定。Mysql服务器字符集,只是做为数据库级的默认值。创建数据库时,你可以指定字符集,如果没指定,就使用服务器的字符集。同理,创建表时,你可以指定表级的字符集,如果没指定,使用数据库的字符集做为表的字符集。创建列时,你可以指定某列的字符集,如果没指定,就使用表的字符集。
    通常情况下,您只需设置服务器级的字符集,其它的数据库级,表级,以及列级的字符集,都继承自服务器级字符集。
    由于UTF8是最广的字符集,所以,一般情况下,我们设置Mysql服务器级的字符集为UTF8!
    [color=Blue]b. 普通文本的字符集问题[/color]

    任何文本的存储,都存在着字符集的问题,普通文本文件也不例外。
    Windows2000+的系统中,打开记事本,“保存为…”对话框,就有一个选项,可以让你选择存储文本的编码方式。
    通常情况下,大家都使用Windows2000+的系统,都使用默认的编码,所以,不会碰到字符集的问题。
    Windows下,保存文本文件时,可以选择编码方式,但打开文本文件时,都是自动判断编码方式的。网上有一个用Windows2000+的记事本玩移动,联通的笑话,大家可以搜搜,就是因为Windows在打开文本文件时,编码判断错误引起的问题。
    因为自动判断编码有时会错误,所以,有的文本文件,规定了如何识别自身所使用的编码。HTML文件就是一个这样的例子。
    HTML是文本文件。存储HTML文件的时候,需要使用一个编码,并且,在HTML文件里,也使用HTML语法,指定了该文件所使用的编码(比如 <meta http-equiv="content-type" content="text/html; charset=UTF-8">)。如果HTML文件没有指定编码,则浏览器自动识别文件的编码。如果HTML指定了编码,则浏览器使用HTML指定的编码。
    通常情况下,HTML文件指定的charset和HTML文件自身的编码是一致的,但也有不一致的情况,如果不一致,就会导致网页乱码(此处乱码,只和文本文件有关,和数据库无关。)使用专门的网页编辑工具(比如Dreamwave),会自动根据网页中的charset值来编码文件。
    [color=Blue]c. php+mysql的字符集问题[/color]

    PHP最终生成的是文本文件,但他要取数据库里的文本,或将文本存进数据库。
    由于Mysql支持多字符集,默认情况下,Mysql不知道PHP发给他的是什么编码的字符,所以,Mysql要求客户端(PHP)告诉他存取的字符集是什么。
    PHP通过设置character_set_client,告诉Mysql,PHP存进数据库的是什么编码方式。
    PHP通过设置character_set_results,告诉Mysql,PHP需要取什么样编码的数据。
    PHP通过设置character_set_connection,告诉Mysql,PHP查询中的文本,使用什么编码。
    MYSQL使用设置的编码方式存储文本。
    假设Mysql使用setserver来存储文本,PHP的character_set_client是setclient,PHP的 character_set_results是setresult。那么,Mysql将PHP发来的文本,从setclient编码方式,转换成 setserver编码方式,再存入数据库,如果PHP取文本,Mysql将文本从setserver转换成setresult,再发送给PHP。
    PHP文件(最终生成的HTML文件)本身有个编码,如果Mysql传过来的编码,与PHP文件自身的编码不同,那么,整个网页,必然乱码。所以,PHP一般将自己的编码方式,告诉Mysql。
    要保证不乱码,就必须将三个编码统一:一是网页自身的编码,二是HTML里指定的编码,三是PHP告诉Mysql的编码(包括character_set_client和character_set_results)。
    第一和第二个编码,如果使用DW之类的编辑器写的网页,通常是一致的,但用记事本写的网页,有可能不一致。
    第三个编码,需要手工通知Mysql。这步可以通过在PHP里使用mysql_query(“set names characterX”)来实现。
    [color=Blue]d.字符集的转换问题[/color]
    如果小字集转换成大字符集,不会丢失数据,但大字集,转换成小字集,可能会丢失数据。
    比如,UTF8里有的字符,GB2312不一定有,所以,从UTF8转换到GB2312可能会丢失一些字符。
    但有种情况例外,先从GB2312转成UTF8,再从UTF8转成GB2312,这种情况是不会丢数据的,因为,刚开始转换的文本,都是GB2312里的字符,所以,整个过程都是GB2312的字符在转换,不会丢失。
    正因为UTF8能容纳世界上的所有字符,所以,数据库一般使用UTF8编码。这使得,任何字符都可以存进UTF8编码的数据库。
    [color=Blue]e. PHPMyAdmin乱码的问题[/color]
    PHPMyAdmin支持多国语言,这就必定要求HTML页面使用UTF8编码。
    HTML页面使用UTF8编码,这就必定要求PHPMyAdmin连接Mysql时,character_set_client和character_set_results使用UTF8编码。
    当前情况下,PHP连接Mysql只能是使用set names(或其它几个语句)来通知Mysql的编码方式,如果没有显式的声明编码方式,都将使用latin1编码。一般的程序,都没有显式声明character_set_client变量,所以,都是将gb2312文本,按latin1编码方式存在数据库,PHPMyAdmin再用utf8格式读取,肯定是乱码的。
    如果PHP程序按正确的编码存入数据库,肯定是没有问题的。所以,需要修改的不是PHPMyAdmin.(虽然有时修改PHPMyAdmin可以解决乱码问题,但这不是问题的根本)

    [color=Red][size=4]二.总结篇[/size][/color]

    上面的讲得有点乱,总结一下:
    1.数据库尽量使用utf8存储(修改/etc/my.cnf,在[mysqld]段加上default-character-set=utf8)
    (已有的数据库,先转成UTF8格式)
    2.PHP程序在查询数据库之前,执行mysql_query(“set names xxxx”);其中xxxx是你网页的编码 (charset=xxxx),如果网页中charset=utf8,则xxxx=utf8,如果网页中charset=gb2312,则xxxx= gb2312,如果网页中的charset=ipaddr,则xxxx=ipaddr (开个玩笑,没这编码)
    几乎所有WEB程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入mysql_query(“set names”)就可以了。
    3.PHPMyAdmin不需要做改动。
    4.需要注意的是,为保证网页实际编码(Windows保存对话框里的编码)和他声明的编码(charset=?)是一致的,请用DW之类的工具做网页。
    [/quote]

    标签:, , , ,
    20070426 apache2 php 5.2 mysql phpMyAdmin - 九月 28, 2007 by yippee

    20070426 apache2 php 5.2 mysql phpMyAdmin
    http://www.yippeesoft.com

    新版本总是有些乱七八糟的问题
    httpd.conf:
    LoadModule php5_module "F:/php/php5/php5apache2_2.dll"
    PHPIniDir "f:/php/php5"
    LoadFile "f:/php/php5/libmysql.dll"

    PHP.INI
    extension_dir = "f:\\php\\php5\\ext"
    extension=php_mbstring.dll
    extension=php_mysql.dll

    config.inc.php
    $cfg[\'blowfish_secret\'] = \’sf\’;
    $cfg[\'Servers\'][$i][\'controluser\'] = \’root\’;
    $cfg[\'Servers\'][$i][\'controlpass\'] = \’sfsfsf\’;

    遇到的问题:
    phpMyAdmin – 错误

    无法载入 mysql 扩展,<br />请检查 PHP 配置
     1.20 I receive the error "cannot load MySQL extension, please check PHP Configuration".

    To connect to a MySQL server, PHP needs a set of MySQL functions called "MySQL extension". This extension may be part of the PHP distribution (compiled-in), otherwise it needs to be loaded dynamically. Its name is probably mysql.so or php_mysql.dll. phpMyAdmin tried to load the extension but failed.

    Usually, the problem is solved by installing a software package called "PHP-MySQL" or something similar.

    欢迎使用 phpMyAdmin 2.9.2

    Probably reason of this is that you did not create configuration file. You might want to use setup script to create one.

    错误
    MySQL 返回:

    #1045 – Access denied for user \’root\’@\’localhost\’ (using password: NO) 

    配置文件现在需要绝密的短语密码(blowfish_secret)。

    没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果.

    资料:
    [quote]
    ################设置使用 phpmyadmin 时需要输入密码:########################################
    打开  config.php  ,找到
    $cfg[\'Servers\'][$i][\'auth_type\']          =  \’config\’;        
    修改config  为cookie即可,如果php以模块方式安装的话,也可以修改成  http
    如果出现“配置文件现在需要绝密的短语密码(blowfish_secret)”
    那么请在$cfg[’blowfish_secret’] = ‘ ‘;的等号里面设置你网站的cookie,例如:$cfg[’blowfish_secret’] = ‘www.taoliyuan.com.cn‘;
    这是因为你的“$cfg[’Servers’][$i][’auth_type’] = ‘cookie’的原因。
    打开 config.php ,找到
    $cfg[\'Servers\'][$i][\'auth_type\'] = \’config\’;
    修改config 为cookie即可,如果php以模块方式安装的话,也可以修改成 http
    $cfg[\'blowfish_secret\'] = \’不能为空\’;

    blowfish_secret\’用一个任意字符串作为cookie的加密字符串,如果没有加密钥匙,系统会显示"配置文件现在需要绝密的短语密码(blowfish_secret) " ,配置如下:
    vi phpmyadmin/config.inc.php

    <?php
    $cfg[\'Servers\'][$i][\'auth_type\'] = \’cookie\’;

    $cfg[\'blowfish_secret\'] = \’sakia\’;(其中的"sakia"自定义)
    ?>
    修改以后,以后登入phpmyadmin就方便多了,但一定不要使用空密码,切记!
    [/quote]

    [quote]
    #1045 – Access denied for user \’root\’@\’localhost\’ (using password: NO)错误的解决方
    打开phpmyadmin下config.inc.php

    找到$cfg[\'Servers\'][$i][\'host\']          = \’localhost\’; // MySQL hostname or IP address

    红色的部分必须必须设置正确,如果在本地测试,为localhost或者127.0.0.1

    如果在远程服务器,请找对相应的路径!

    [/quote]

    [quote]
    apache_2.2.4-win32-x86-no_ssl
    php-5.2.0-win32-installer.msi
    php-5.2.0-Win32.zip
    mysql-5.0.27-win32
    phpMyAdmin-2.9.2-rc1-all-languages-utf-8-only

    使用以上环境 出错。。。。
    引用
    phpMyAdmin – 错误
    无法载入 mysql 扩展,<br />请检查 PHP 配置 – 文档
    做了如下操作后 木有用。。。。
    引用
    1.最常犯的错误
    php.ini里
    extension=php_mysql.dll之前的;没有去掉

    2.路径错误,假设php的安装目录为c:\\php,则
    php.ini里
    extension_dir = "c:/Php/ext"

    3.Apache2加载错误,假设虚拟主机文件夹在c:\\aaa,则
    Apache2\\conf\\httpd.conf文件里
    DocumentRoot "C:/aaa/"
    <Directory "C:/aaa/">
    两处要保持一致

    4.将libmysql.dll,php_mysql.dll放于C:\\WINDOWS\\system32
    [/quote]

    [quote]
    Apache2.2 php5.2 mysql 配置方法
    天下维客,你可以修改的网络知识库
    Jump to: navigation, search

    Apache PHP MySQL 全部安装完成后,
    1,修正httpd.conf

    可按照网络上可搜索到的apache安装教程修改具体内容
    2,加入支持php5和mysql的代码到httpd.conf

    LoadFile G:/server/php5/libmysql.dll
    LoadModule php5_module G:/server/php5/php5apache2_2.dll
    PHPIniDir "G:/server/php5"
    AddType application/x-httpd-php .php

    LoadFile行用来支持mysql,下边3行用来支持php5.2。具体路径自行修正。如果不需支持mysql,则loadfile行可以不加。
    3,修正 php.ini (使用php.ini-dist 或者 php.ini-recommended 都行)

    修改extension_dir = "G:\\server\\php5\\ext" (用查找 extension_dir,路径改为你的php5的ext目录)

    然后必须去掉 ;extension=php_gd2.dll 和 ;extension=php_mysql.dll 前的分号。如果不用mysql。则可以不删除php_mysql.dll 前的分号

    Apache2.2与php5.2配置
    2006-11-12 23:29

    全部使用的解压版本,解压缩以后,向以往那样,修改php.ini httpd.conf …

    启动apache 报错!昏!

    去Google了一下,原来apache到2.2以后和以往的配置不同了哦

    记录一下:

    1:配置支持php5

    需要增加以下几行

    LoadFile E:/php/php5/php5ts.dll
    LoadModule php5_module E:/php/php5/php5apache2_2.dll
    PHPIniDir "E:/php/php5"

    注意这里,很多网站说加

    LoadModule php5_module c:/php/php5apache2.dll

    那是错误滴php5apache2.dll 那是支持 5.14版的,也不晓得那些写文章的人,自己动手去试过没有….

    另外,修改默认目录的时候要注意

    apache2.2在修改目录的时候,一定要修改两个地方

    DocumentRoot "D:/……" 与 <Directory "D:/…..">一定要对应,不然找不到目录,嘿嘿

    其他的和以前一样,另外,除了cUrl 模块 需要复制去 windows/system32 以外,其他的统统不需要复制

    apache2.2 side
    httpd.conf configure file:

    1. 在加载模块区添加:
      LoadModule php5_module D:/PHP/php-5.2.0-Win32/php5apache2_2.dll    //这个变了,记得以前是php5apache2.dll
    2. 在添加类型区添加:
      AddType application/x-httpd-php .php        //使apache能处理php类型的文件
      AddType application/x-httpd-php-source .phps
    3. ScriptAlias /php/ "D:/PHP/php-5.2.0-Win32"    //指定PHP脚本的目录,这个没变
    4.改DocumentRoot的时候要注意在修改目录的时候,一定要修改两个地方
      DocumentRoot "D:/……"
     与 <Directory "D:/….."> 两地方的路径要一致,不然会发送访问拒绝的错误.
    5. 定位DirectoryIndex:  
    <IfModule dir_module>
        DirectoryIndex index.php index.php.var index.htm index.htm.var index.xml index.xml.var
    </IfModule>
       这里比以前多了<IfModule dir_module>标签.
      
    6.AddDefaultCharset  这个属性找不到了!估计字符问题APACHE已经使用标准的编码方式.

    php5.2 side
    php.ini configure file:
    1. 把php目录下的php.ini-dist改名为php.ini复制到c:\\windows(或:\\winnt视操作系统而定),把php5ts.dll和libmysql复制到c:\\windows\\system32下
      也可以设个PHPRC的环境变量指定php.ini的位置
    2. 查找extension_dir,添加:
       extension_dir = "extension_dir = "D:\\PHP\\php-5.2.0-Win32\\ext""   //PHP5.0安装目录里的ext文件夹用于定位DLL文件
      在extension区选择一些常用的PHP的DLL文件:
       extension=php_mysql.dll   //扩展php_mysql.dll,可以使用mysql语句了
       extension=php_gd2.dll     //允许建立,修改图片
       extension=php_ming.dll    //swf支持
       extension=php_dbase.dll   //maplab需要php_dbase支持
      这些因人而异什么时候需要什么时候加,有的时候还要另外下载dll文件

    3. 修改c:\\windows\\system32下的php.ini文件session.save_path = "D:\\Apache Software Foundation\\Apache2.2\\ymiao\\sessiontmp"
      这个是设定会话变量的路径
    4. session.auto_start =1 //自动开始会话变量  
    5. cgi.force_redirect = 1改成 cgi.force_redirect = 0
       这样做是强迫不运行在cgi模式下
    6. register_globals  默认  Off,改成on
    [/quote]

    标签:, , , ,
    20070318 php5 apache2.2 - 八月 20, 2007 by yippee

     20070318 php5 apache2.2

     http://www.yippeesoft.com

     想弄弄PHP,结果弄了半天,以为以前弄过应该简单
     http://www.yippeesoft.com/blog/p/zendphpapacheinsta.php

     结果发现错了。

     服务器的环境:
     Apache 1.3.34
     php 5.2.0
     mysql 5.0.27

    跑去下载:
     IMPORTANT NOTE FOR APACHE USERS: Apache 1.3 was designed for Unix OS variants. While the ports to non-Unix platforms (such as Win32, Netware or OS2) will function for some applications, Apache 1.3 is not designed for these platforms. Apache 2 was designed from the ground up for security, stability, or performance issues across all modern operating systems. Users of any non-Unix ports are strongly cautioned to move to Apache 2.
     The Apache project no longer distributes non-Unix platform binaries from the main download pages for Apache 1.3. If absolutely necessary, a binary may be available at http://archive.apache.org/dist/httpd/.  apache_1.3.34-win32-x86-no_src.msi        18-Oct-2005 18:32  1.8M  

    PHP 5.2.0 Released
    [02-Nov-2006] The PHP development team is proud to announce the immediate release of PHP 5.2.0. This release is a major improvement in the 5.X series, which includes a large number of new features, bug fixes and security enhancements. Further details about this release can be found in the release announcement 5.2.0, the full list of changes is available in the ChangeLog PHP 5.
    All users of PHP, especially those using earlier PHP 5 releases are advised to upgrade to this release as soon as possible. This release also obsoletes the 5.1 branch of PHP.
    For users upgrading from PHP 5.0 and PHP 5.1 there is an upgrading guide available here, detailing the changes between those releases and PHP 5.2.0.
    #  PHP 5.2.0 installer [18,879Kb] – 02 Nov 2006
    md5: 1521d6e9b273299ebd8081d174146d22

    MYSQL是一个多线程的,结构化查询语言(SQL)数据库服务器。SQL 在世界上是最流行的数据库语言。MySQL 的执行性能非常高,运行速度非常快,并非常容易使用。是一个非常捧的数据库。
    MySQL 5.2 Community Edition – Alpha Development Release (Falcon Preview)
    NOTE: This alpha release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any other software beta release. MySQL generally recommends that you dump and reload your tables from any previous version to upgrade to 5.2.
    Note that the only new feature that 5.2 contains at this time (over 5.1) is the Falcon storage engine.
    Windows (x86) ZIP/Setup.EXE        5.2.0-falcon-alpha    36.1M    Pick a mirror

    用的是PHP安装包,它自己改了HTTPD.CONF
    结果
    发现The Apache service named Apache.exe reported the following error:
    >>> Syntax error on line 990 of e:/php/apache/apache/conf/httpd.conf: <<<
     before the error.log file could be opened.
     More information may be available in the error.log file.   .

    The Apache service named Apache.exe reported the following error:
    >>> Invalid command \’PHPIniDir\’, perhaps mis-spelled or defined by a module not included in the server configuration <<<
     before the error.log file could be opened.
     More information may be available in the error.log file.   .
     实在莫名其妙,发现是顺序问题,于是把PHPINIDIR放到最后,结果APACHE虽然启动了,可是不能解析PHP

     于是下载APACHE最新的
     Apache HTTP Server 2.2.4 is the best available version

        The Apache HTTP Server Project is pleased to announce the release of Apache HTTP Server, version 2.2.4. This release represents ten years of innovation by the project, and is recommended over all previous releases! In particular, this release fixes an \’important\’ security vulnerability in mod_rewrite.
     
     结果报告
    想想The Apache service named  reported the following error:
    >>> httpd.exe: Syntax error on line 115 of E:/php/apache/conf/httpd.conf: API module structure `php5_module\’ in file E:/php/php5/php5apache2.dll is garbled – perhaps this is not an Apache module DSO?     .

    看了一大堆资料,都是说
    PI module structure `php5_module\’ in file /etc/httpd/modules/libphp5.so is garbled – perhaps this is not an Apache module DSO?
    我用google和baidu查了很多页面了,有不少人有这个问题,但都没有很好的解决方法;哪位达人能帮忙解决,不胜感激;
    hbird    2006-5-23 02:52
    我在solaris9上安装apache2.2+php5得到你一样的错误,后来改为apache2+php5,并且按照sunfreeware上的说明打包,结果就正常了,希望对你有用。

    小虎牙    2006-5-23 06:34
    apache编译安装的时候没有加上–enable-so

    现在加载共享模块加载不了
    我也在redhat9遇到了这问题兄台你解决了    没郁闷现在一打开测试页面 就弹出自动保存PHP页面的窗口,apache没解析PHP
    LoadModule php5_module modules/libphp5.so 写入了/usr/local/apache/conf/httpd.conf(/usr/local/apache/我apache安装目录) 里面但是有效的却是:/etc/httpd/conf/httpd.conf ,在:/etc/httpd/conf/httpd.conf 下加入LoadModule php5_module modules/libphp5.so 重启apache时候就出提示跟你一样的错误 把LoadModule php5_module /usr/local/apache/modules/libphp5.so换成这样也不行

    最后发现
    [28 Nov 2006 6:14pm UTC] oldimp at gmail dot com

    try

    LoadModule php5_module "%php%/php6apache2_2.dll"

    By me it works :)

    改为使用php5apache2_2.dll就OK了
     

    标签:, ,
    20070303 sqlite php5 PDO - 八月 4, 2007 by yippee

    20070303 sqlite php5 PDO

    http://www.yippeesoft.com

    本来想找找BOBLOG的数据格式资料,看到的,顺便纪录一下

    香港 PHP 用家社區 &line; Hong Kong PHP Users Group
    分享 PHP 及網頁開發的知識和經驗 &line; Share PHP and Web Development Knowledge and Experience
    在 Turn up the Crank 有一位作者分享他使用 PHP5、Sqlite、Windows 的經驗。作者需要一個數據庫儲存資料,由於涉及的資料處理工作很簡單,所以他選擇了 Sqlite,結果他發現:
       1.      SQLite 3 無法與 PHP 相容:他不斷遇到一個錯誤訊息「PHP Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database」,網上有關 Sqlite 3 與 PHP 共用的文件十分缺乏,最後他終於發現 PHP 尚未支援 SQLite 3,對於 SQLite 3 已經推出了超過兩年仍未得到 PHP 的支援,作者感到大惑不解。
       2.      PHP 與 SQLite 2 並不合作暢順:作者在放棄 SQLite 3 後轉而嘗試 SQLite 2,但發現 PHP 無法讀取他使用命令行建立的 SQLite 資料庫,在網絡上經過一番搜索後,他發現這個問題根本沒有解決方案。
       3.      SQLite 對於目錄權限的要求極度愚蠢:SQLite 要求資料庫的路徑中每一個目錄它都具備讀/寫權限,例如資料庫儲存在 D:\\websites\\site_1234\\db.sqlite,執行 PHP 的帳號須具備 D:\\websites\\ 及 D:\\websites\\site_1234\\ 的讀/寫權限,若過伺服器上同時運行多個網站,這肯定是一個極大的安全漏洞。
    作者最後感嘆說:「在 PHP 中使用 SQLite 真是極度痛苦,早知如此我便使用 PostgreSql,這可能有點大材小用,但至少不會浪費我那 多時間。」

    这是典型的×¥%#×¥&)%

    资料:
    通过Apache + PHP5 + PDO 连接 SQLite3 数据库- -
    李骏(2005-6-23下午)
    通过PHP跟PDO配置SQLite数据库是一件很繁琐的事情,经过一下午的研究,终于理清了里面的思路。现在拿出来跟大家共享。初学,错误请指出。
    首先我们先选择要使用的web server 软件,由于从兼容性跟性能方面的需求,我选择了目前来说最新版的apache_2.0.54-win32-x86-no_ssl.msi 下载地址:http://apache.freelamp.com/httpd/binaries/win32/apache_2.0.54-win32-x86-no_ssl.msi 。
    第二步,我们要使用目前最新版本的PHP 5.0.4 zip package .这里提示大家一下,经过我痛苦的反复的实验跟查看资料,如果大家想要使用PDO扩展连接到SQLite数据库的话,请你一定不要选择安装包,因为它不支持很多PHP的扩展库文件。
    第三步,我们要去http://snaps.php.net/win32/PECL_5_0/ 下载PDO的两个扩展库文件,文件名各自为:php_pdo.dll 跟 php_pdo_sqlite.dll 。下来以后保存在一边,我们稍候会使用到。顺便提一下哦,关于PHP_PDO的驱动资料请大家查阅 http://cn2.php.net/PDO 里面有详细的不同平台的安装信息。
    最后一步,大家需要到SQLite官方网站去下载SQLite的文件包。地址为:
    http://www.sqlite.org/download.html  选择适合自己的版本即可。我用的是:sqlite_analyzer-3_2_1.zip 。
           好了,预备工作做好了,我们开始工作吧!首先,请大家按照上面介绍的顺序安装阿Apache 安装过程很简单,不赘述.一路的next直到完成。但是有一些小细节需要说一些,正是这些小细节让我吃了不少苦。需要注意的是大家如果原来的系统上安装了微软的IIS的话,可能会安装出现冲突,具体的是在端口绑定方面的问题。如果可以的话,请尽量将IIS卸载掉,如果大家有避免冲突的方法,可以拿出来讨论一下。
           下面开始将下载下来的PHP 5.0.4 zip package 解压缩出来,放到C:\\PHP 文件夹下面,也可以放在自己想要的地方,最后在各个配置文件里面修改一下即可。我们把C:\\PHP文件夹下面的php5ts.dll 文件放到C:\\Windows\\System32下面,如果是NT或者2000系统的话,就放在C:\\Winnt\\System32下面。然后将C:\\PHP文件夹下面的php.ini-recommended文件复制到C:\\Windows\\下面并改名为php.ini 。把我们下载下来的两个PDO桥驱动文件(
    php_pdo.dll 跟 php_pdo_sqlite.dll)放到C:\\PHP\\ext里面。这个文件夹是PHP专门存放扩展库的地方,大家仔细看就可以发现很多熟悉的面孔哦^_^。
          打开我们刚才存放在C:\\Windows\\下面php.ini文件,开始配置信息了。找寻下面的行。
    ;Windows Extensions
    ;Note that ODBC support is built in, so no dll is needed for it.
    ;
    我们在两行后面可以发现众多的扩展库文件,对,这里就是php启动时加载扩展库的地方,我们要把我们需要加载的PDO扩展库放到这里面,让PHP当作模块加载,我们才能使用阿~~。
    加载方法很简单,在所有的库文件后面添加上如下两句:
    ;手动添加的php的pdo的驱动扩展支持
    extension=php_pdo.dll
    extension=php_pdo_sqlite.dll
    下面还有一个很重要的工作,就是我们要把扩展库的路径告诉php否则,PHP不知道去哪里找这些小宝贝了^_^ ,我们查找到如下的行:(查找关键字:extension_dir):
    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = "c:\\php\\ext"
    把它设置为动态库存方的路径,我们这里是:c:\\php\\ext
    好了PHP的配置文件我们修改好了,保存关闭。
    我们下面开始右击状态栏里面那个小羽毛的图标,选择“Open Apache Monitor”打开Apache监视窗口,我们选择右边一列按钮里面的“Stop”按钮,将服务暂时关掉。然后我们打开“开始-〉程序-〉Apache HTTP Server 2.0.54-〉Configure Apache Server-〉Edit the Apache httpd.conf Configuration File”菜单,打开Apache的配置文件httpd.conf。在这里面我们要把php当作Apache的一个模块加载进来。我们在配置文件的最后面加上如下两句。请注意路径问题哦:
    LoadModule php5_module "c:/php/php5apache2.dll"
    AddType application/x-httpd-php .php
    这样当Apache启动的时候就把PHP加载进来了。再寻找下面的行
    (查找关键字:DocumentRoot):
    #
    DocumentRoot "D:\\website"
    设置我们站点的根目录。我选在D:\\website下面。
    我们还要寻找如下的行:(查找关键字:DirectoryIndex)
    #
    DirectoryIndex index.html index.html.var
    这里我们可以设置自己的首页名称,在后面加上我们使用的文件名即可.中间使用空格分隔。
    例如:
    #
    DirectoryIndex index.html index.html.var index.php default.php
    至此,我们所有的配置完成了,请大家保存关闭。然后再次启动Apache监视窗口,选择右边的“Start”按钮,启动Apache服务器,
    最后拉~~
    如果要测试SQLite数据库的话,我们使用一些SQLite建表工具,建一个数据库跟一些表,然后输入一些数据字段,最后使用自己喜欢的编辑器,在里面输入如下代码:
    <?php
    // Connect to an ODBC database using driver invocation
    $dsn = \’sqlite:c:\\sql.db\’;
    try &leftsign;
        $dbh = new PDO($dsn, $user, $password);
        echo \’PDO Connection  Ok\’,\’<br>\’;
        $dbh->exec("CREATE TABLE PKU(id integer,name varchar(255))");
        echo \’Create Table ok\’,\’<br>\’;
        $dbh->exec("INSERT INTO PKU values(1,\’jarjin\’)");
        echo \’Insert Data ok\’,\’<br>\’;
        $dbh->beginTransaction();
        $sth = $dbh->prepare(\’SELECT *FROM PKU\’);
        $sth->execute();
        $result = $sth->fetchAll();
        print_r($result);
        $dsn=null;
    &rightsign; catch (PDOException $e) &leftsign;
       echo \’Connection failed: \’ . $e->getMessage();
       $dsn=null;
    &rightsign;
    ?>
    (注意:PHP5自身带的SQLite是2版本,不能执行3版本的连接跟操作,POD就是解决这个问题的桥梁,它使PHP5连接并且操作3版本的SQLite,因此,PHP5自身带的SQLite 函数库是无法操作SQLIte3的,必须使用PHP5手册里面PDO的函数来间接驱动SQLite3数据库)
    保存到我们站点的根目录下面,比如叫做:default.php 如果不出其他问题的话,我们启动IE,在地址栏里输入http://localhost/ 回车后,看看出现了什么。^_^
    Mail: jarjin@gmail.com

    PDO
    PDO support    enabled
    PDO drivers     sqlite2, sqlite

    pdo_sqlite
    PDO Driver for SQLite 3.x    enabled
    PECL Module version     (bundled) 1.0.1 $Id: pdo_sqlite.c,v 1.10.2.6 2006/01/01 12:50:12 sniper Exp $
    SQLite Library     3.3.7

    SQLite
    SQLite support    enabled
    PECL Module version     2.0-dev $Id: sqlite.c,v 1.166.2.13.2.5 2006/10/20 21:28:31 tony2001 Exp $
    SQLite Library     2.8.17
    SQLite Encoding     iso8859

    Directive    Local Value    Master Value
    sqlite.assoc_case    0    0

    ID: 唠叨: php5默认支持sqlite,不过php5.1取消了独立的sqlite支持而代之以统一数据库接口PDO

    5.11的sqlite.dll还是在的,不过加载前也必须加载pdo.dll(这是一个bug),不过还是用sqlite的特性函数—

    Php 5.1.0 集成PDO 将SQLite升级到3.2.7.
    要使用sqlite2必须安装上pdo扩展和sqlite扩展,因为PHP5.1已经不将SQLite默认集成了.

    PDO_SQLITE DSN
    sqlite:/opt/databases/mydb.sq3
    sqlite::memory:
    sqlite2:/opt/databases/mydb.sq2
    sqlite2::memory:

    另外,SQLiteManager 要读sqlite3数据文件,需要在 user_defined.inc.php 加入

    define(\’SQLITE3\’, true);

    地震之后,想下载都困难
    1. Get the latest sqlite binaries and executables from http://www.sqlite.org/download.html:

        * sqlitedll-3_3_0.zip
        * sqlite-3_3_0.zip
        * sqlite-2_8_17.zip
        * sqlitedll-2_8_17.zip

    sqlite-2_8_17.zip
    (130.47 KiB)         A command-line program for accessing and modifying SQLite version 2.* databases on win32.sqlite-3_3_8.zip
    (187.08 KiB)         A command-line program for accessing and modifing SQLite databases. See the documentation for additional information.

    标签:, , ,