以PHP、ASP.NET为代表的Web开发语言

ASP.NET执行Linux/Unix命令

[不指定 2011/01/17 12:34 | by 袁旭东 ]
  在我编写公司内部使用的开发框架的时候,遇到了动态编译的问题,也就是要求,开发框架会实时编译程序员所写C#代码。这就需要开发框架能够执行Linux/Unix命令(我的开发框架运行于Linux/FreeBSD,在Linux/FreeBSD上架设ASP.NET服务器,参见《Ubuntu Server上搭建可用于生产环境的ASP.NET服务器》《使用Jexus+Mono在FreeBSD上搭建asp.net web服务器》)。我使用以下代码来执行Linux/Unix命令,对于Windows环境应该同样适用,只是命令不同而已。
Tags: , , , ,

PHP 5.3.3包含了fpm

[不指定 2010/07/24 22:55 | by 袁旭东 ]
  PHP 5.3.3发布了,看官方的介绍,除了修改了一些Bug以外,最引起我注意的是其中一条。

引用
Added FastCGI Process Manager (FPM) SAPI.


  这表示我们不用再去费心找合适版本的php-fpm了。PHP 5.3.3包含的是php-fpm 0.6.5。为了开启php-fpm,我们编译时需要加入以下参数。

引用
--enable-fpm


Tags: ,

PHP利用curl进行GET和POST

[不指定 2010/07/02 10:45 | by 袁旭东 ]
  前两天在做一个项目,需要模拟登录网站,并获取登录后网页的内容。利用curl实现起来很简单,写了两个函数,如下。

引用
/* GET方式获取网页代码 */
function page_get($url, $cookie)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    ob_start();
    $buf = curl_exec($ch);
    ob_end_clean();
    curl_close($ch);
    unset($ch);

    //$buf = mb_convert_encoding($buf, "utf-8", "gbk");  // 编码转换,可根据需要执行

    return $buf;
}

/* POST方式获取网页 */
function page_post($url, $data, $cookie = "", $show = FALSE)
{
    $ch = curl_init();
    if($show) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    ob_start();  
    $buf = curl_exec($ch);
    ob_clean();
    curl_close($ch);
    unset($ch);

    //$buf = mb_convert_encoding($buf, "utf-8", "gbk");  // 编码转换,可根据需要执行
    
    return $buf;
}


  需要注意的是,$cookie参数是cookie文件的绝对路径,并且需要有写的权限。比如我的PHP是以www用户运行的,因此cookie目录需要对www用户可写。

Tags: , , ,
  因为已经可以在FreeBSD系统上让PHP与asp.net共存了,所以开始考虑两者相互配合进行web开发的方式。

  我目前主力是asp.net开发,而在开发过程中会遇到很多比较难解决的问题,比如Excel的导入导出。大家会说了,asp.net做Excel很简单啊,对,是很简单,但那是建立在Windows系统之上的,并且需要服务器安装Excel,而且在运行时还会启动Excel进程。如果这一切转到FreeBSD下呢?所以,要实现一个可以完全脱离Excel和Windows的Excel导入导出asp.net模块是一件非常困难的事情。即便是有第三方控件或模块,那极可能也是收费的。而目前PHP下的免费开源模块很多,并且我就找到一个名字叫做PHPExcel的免费开源Excel导入导出模块。我的PHP与asp.net相结合开发的想法就是源于此。

  PHPExcel最新版支持Excel 2007格式的导入导出,这对我们来说已经足够好了,最重要的是,这一切完全免费。我要具体怎么做,来实现asp.net下实现Excel的导入导出呢?下面就是大概的描述:
Tags: , , , , ,
  听说Mono和MS编译同样的程序,Mono编译出来的代码要精简,运行效率要高。今天我就在Ubuntu上用gmcs编译了一下我的网站框架,虽然中间有点儿小波折,但总的来说还算顺利,没有更改任何代码。

  首先,我写了一个脚本,这样以后编译就方便了,脚本如下:
引用
#!/bin/sh

files="
../exit.aspx.cs
../help.aspx.cs
../index.aspx.cs
../login.aspx.cs"

res="/r:/usr/lib/mono/2.0/System.Web.dll,/usr/lib/mono/2.0/System.Data.dll,/usr/lib/mono/2.0/System.Drawing.dll"

gmcs /nologo /o+ /out:jixiao.dll /t:library /debug- /unsafe- /warn:3 /checked- $res $files
Tags: , , ,
  我是使用jexus来实现asp.net web服务的,而mono自带的fastcgi-mono-server2提示不支持FreeBSD。

  由于早期的jexus 3.2在FreeBSD下不能正常运行,所以在jexus开发者的帮助下,进行了双方调试,最后终于在FreeBSD下运行成功,已经完美支持asp.net。在即将发布的jexus 3.3 beta版本将支持FreeBSD。

  网站升级计划进入到第二步,对系统进行稳定性测试。

  我将在最近一两天整理出FreeBSD通过mono+jexus支持asp.net服务器的搭建教程,敬请关注。

  相关链接:《使用Jexus+Mono在FreeBSD上搭建asp.net web服务器》http://blog.jiqila.com/post/145/

Tags: , , ,
  今天.NET应用遇到了一个错误:
引用
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。

  看样子,应该是我的群集造成的,因为我用到了nginx负载均衡,后台服务器就是一个服务器群集(按微软的叫法是群集,我倒是喜欢叫集群)。那么究竟什么是machineKey,machineKey的作用是什么?通过查找MSDN得知:
引用
对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。
Tags: , ,
  从PHP 5.3开始,PHP for Windows 已经开始支持X64了,不用再去费事找第三方的X64版本了。

  PHP 5.3.0RC4下载地址:http://windows.php.net/downloads/qa/php-5.3.0RC4-nts-Win32-VC9-x64.zip

  安装此版本还需要系统装有VC9的运行时,如果以前没有装过的话,在以下地址可以下载到:http://www.microsoft.com/downloads/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6&displaylang=en
Tags: , ,
  我今天在做PHP版本的动态令牌功能的时候,遇到了一个数组方面的问题。在.net版本中我写了一个MyCookie类,这个类是用来处理自定义格式 cookie的。如果大家尝试过服务端脚本堆好cookie字符串,用ajax获取并写入cookie的话,你应该会发现“=”和“&”都被编码了,那么.net的HttpCookie就无法将此cookie正确拆分,而只能作为一个整体使用。比如:
引用
// 以下是cookie,假设cookie名字为userinfo
_strCookie="user=xxx&age=20&height=190";
// 服务端脚本Response.Write(_strCookie)或者<%=_strCookie%>出来以后,
// =和&都会被编码,因此ajax获取并写入cookie的就是这个被编码过字符串。


// 这种被编码过的字符串,会导致下列语句出错
HttpCookie hc = Request.Cookies["userinfo"];
if(hc != null)
{
    string strUser = hc["user"].ToString();     // 会报错
    string strAge = hc["age"].ToString();       // 会报错
    string strHeight = hc["height"].ToString(); // 会报错
}
Tags: , ,

动态令牌已经使用.net实现

[不指定 2009/05/15 20:55 | by 袁旭东 ]
  前两天我设想的《多用户网站权限安全的设想——动态令牌》今天已经实现了,因为比较熟悉.net,所以首先用.net来实现了,接下来就是用PHP来实现了。等php版本的做好以后,我会把代码公布出来。为什么不把.net版本公布出来呢?因为,.net版本是给别人做的,出于各种方面的考虑,就不公开代码了。不过,参考php版本,自己动手.net版本很容易实现的。

  因为这个想法本来就是针对php设计的,所以,数据库关于时间的字段都是int(10),所以需要用.net实现php中的time()函数。time()函数,大家都知道,是取得自1970年1月1日0时0分0秒,到现在所经过的秒数。那么.net实现代码如下:
引用
// 获取类似于php中time()函数的时间戳
public static uint php_time()
{
    DateTime dt = new DateTime(1970, 1, 1);
    return Convert.ToUInt32((DateTime.UtcNow.Ticks - dt.Ticks) / 10000000);
}
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]