2009年8月19日星期三

网站不能访问了,有邮件发帖测试看看那

如题

--
==============================
博安天慧  何鹏
qq:36170498
msn:hepengking@hotmail.com
email:paul2smoon@gmail.com
        imusic.hp@gmail.com
==============================

Tucia - online photo editing service gives you some star treatment on the cheap


If you’ve ever wanted to get the same kind of photo retouching love that the stars get when they’re pictured on magazine covers, now’s your chance. Tucia.com is a new online service which offers professional re-touching of any photo by a team of international Photoshop experts.




All ya gotta do is upload your photos, add them to your project, fill in the instruction form and hand over the money via CC, Paypal or whatever. It will cost from $8.00 to $48.00 per image depending on complexity, and the more expensive ones will involve the very top retouching guys. 1700 designers, 24 hour turnaround for small jobs, and satisfaction guaranteed, what more could you ask for? Madonna? Pah, who she?




"Many problems, though, demand more sophisticated opearations, more creativity, more industry experience and a deeper understanding of how to represent an image. Our professional artists understand your instruction better than anyone else. They rely on clever hands and sophisticated software to bring you something that stands out."




tucia photo retouching





tucia photo retouching





tucia photo retouching

2009年4月28日星期二

PHP导入导出Excel方法小结

基本上导出的文件分为两种:
1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。修改这种文件后再保存,通常会提示你是否要转换成Excel文件。
优点:简单。
缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。
2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。

如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:
$yourStr = mb_convert_encoding("gb2312", "UTF-8", $yourStr);

下面详细列举几种方法。
一、PHP导出Excel

1:第一推荐无比风骚的PHPExcel,官方网站: http://www.codeplex.com/PHPExcel
导入导出都成,可以导出office2007格式,同时兼容2003。
下载下来的包中有文档和例子,大家可以自行研究。
抄段例子出来:
/**
* PHPExcel
*
* Copyright (C) 2006 - 2007 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2007 PHPExcel ( http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
* @version 1.5.0, 2007-10-23
*/

/** Error reporting */
error_reporting(E_ALL);

/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');

/** PHPExcel */
include 'PHPExcel.php';

/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';

// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();

// Set properties
echo date('H:i:s') . " Set properties\n";
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescrīption("Test document for Office 2007 XLSX, generated using PHP classes.");
$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
$objPHPExcel->getProperties()->setCategory("Test result file");


// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->setCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!');

// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');


// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);


// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));

// Echo done
echo date('H:i:s') . " Done writing file.\r\n";


2、使用pear的Spreadsheet_Excel_Writer类
下载地址: http://pear.php.net/package/Spreadsheet_Excel_Writer
此类依赖于OLE,下载地址:http://pear.php.net/package/OLE
需要注意的是导出的Excel文件格式比较老,修改后保存会提示是否转换成更新的格式。
不过可以设定格式,很强大。
require_once 'Spreadsheet/Excel/Writer.php';

// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();

// sending HTTP headers
$workbook->send('test.xls');

// Creating a worksheet
$worksheet =& $workbook->addWorksheet('My first worksheet');

// The actual data
$worksheet->write(0, 0, 'Name');
$worksheet->write(0, 1, 'Age');
$worksheet->write(1, 0, 'John Smith');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'Johann Schmidt');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, 'Juan Herrera');
$worksheet->write(3, 1, 32);

// Let's send the file
$workbook->close();
?>

3:利用smarty,生成符合Excel规范的XML或HTML文件
支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。
详细内容请见rardge大侠的帖子:http://bbs.chinaunix.net/viewthread.php?tid=745757

需要注意的是如果导出的表格行数不确定时,最好在模板中把"ss:ExpandedColumnCount="5" ss:ExpandedRowCount="21""之类的东西删掉。

4、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。
缺点是无格式。
// Send Header
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=test.xls ");
header("Content-Transfer-Encoding: binary ");
// XLS Data Cell

xlsBOF();
xlsWriteLabel(1,0,"My excel line one");
xlsWriteLabel(2,0,"My excel line two : ");
xlsWriteLabel(2,1,"Hello everybody");

xlsEOF();

function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}
function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}
function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}
function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}
?>
不过笔者在64位linux系统中使用时失败了,断句符号全部变成了乱码。

5、使用制表符、换行符的方法
制表符"\t"用户分割同一行中的列,换行符"\t\n"可以开启下一行。
header("Content-Type: application/vnd.ms-execl");
header("Content-Disposition: attachment; filename=myExcel.xls");
header("Pragma: no-cache");
header("Expires: 0");
/*first line*/
echo "hello"."\t";
echo "world"."\t";
echo "\t\n";

/*start of second line*/
echo "this is second line"."\t";
echo "Hi,pretty girl"."\t";
echo "\t\n";
?>

6、使用com
如果你的PHP可以开启com模块,就可以用它来导出Excel文件
$filename = "c:/spreadhseet/test.xls";
$sheet1 = 1;
$sheet2 = "sheet2";
$excel_app = new COM("Excel.application") or Die ("Did not connect");
print "Application name: {$excel_app->Application->value}\n" ;
print "Loaded version: {$excel_app->Application->version}\n";
$Workbook = $excel_app->Workbooks->Open("$filename") or Die("Did not open $filename $Workbook");
$Worksheet = $Workbook->Worksheets($sheet1);
$Worksheet->activate;
$excel_cell = $Worksheet->Range("C4");
$excel_cell->activate;
$excel_result = $excel_cell->value;
print "$excel_result\n";
$Worksheet = $Workbook->Worksheets($sheet2);
$Worksheet->activate;
$excel_cell = $Worksheet->Range("C4");
$excel_cell->activate;
$excel_result = $excel_cell->value;
print "$excel_result\n";
#To close all instances of excel:
$Workbook->Close;
unset($Worksheet);
unset($Workbook);
$excel_app->Workbooks->Close();
$excel_app->Quit();
unset($excel_app);
?>
一个更好的例子: http://blog.chinaunix.net/u/16928/showart_387171.html

一、PHP导入Excel

1:还是用PHPExcel,官方网站: http://www.codeplex.com/PHPExcel。

2:使用PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader
举例:
require_once 'Excel/reader.php';

// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();

// Set output Encoding.
$data->setOutputEncoding('utf8');

$data->read(' jxlrwtest.xls');


error_reporting(E_ALL ^ E_NOTICE);

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
}
echo "\n";
}

?>

2009年4月9日星期四

php调用webservice实例

  NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类,由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )开发。NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,不受服务器安全设置的影响。  

方法一:直接调用

'username', 'strPassword'=>MD5('password'));

// 调用远程函数
$aryResult = $client->call('login',$aryPara);

//echo $client->debug_str;
/*
if (!$err=$client->getError()) {
print_r($aryResult);
} else {
print "ERROR: $err";
}
*/

$document=$client->document;
echo <<


$document


SoapDocument;

?>


方法二:代理方式调用

getProxy();

//调用远程函数
$aryResult=$proxy->login('username',MD5('password'));

//echo $client->debug_str;
/*
if (!$err=$proxy->getError()) {
print_r($aryResult);
} else {
print "ERROR: $err";
}
*/

$document=$proxy->document;
echo <<


$document


SoapDocument;

?>


  许多使用NuSoap 调用.NET WebService或J2EE WebService的朋友可能都遇到过中文乱码问题,下面介绍这一问题的出现的原因和相应的解决方法。

  NuSoap调用WebService出现乱码的原因:

  通常我们进行WebService开发时都是用的UTF-8编码,这时我们需要设置:



$client->soap_defencoding = 'utf-8';


  同时,需要让xml以同样的编码方式传递:

$client->xml_encoding = 'utf-8';


  至此应该是一切正常了才对,但是我们在输出结果的时候,却发现返回的是乱码。

  NuSoap调用WebService出现乱码的解决方法:

  实际上,开启了调试功能的朋友,相信会发现$client->response返回的是正确的结果,为什么$result = $client->call($action, array('parameters' => $param)); 却是乱码呢?

  研究过NuSoap代码后我们会发现,当xml_encoding设置为UTF-8时,NuSoap会检测decode_utf8的设置,如果为true,会执行 PHP 里面的utf8_decode函数,而NuSoap默认为true,因此,我们需要设置:

$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'utf-8';

2009年4月6日星期一

论坛网址

http://groups.google.com/group/boentel

2009年3月31日星期二

FINDSTR正则表达式的基本用法

1.findstr . 2.txt 或 Findstr "." 2.txt
从文件2.txt中查找任意字符,不包括空字符或空行
====================

2.findstr .* 2.txt 或 findstr ".*" 2.txt
从文件2.txt中查找任意字符包括空行和空字符
====================

3.findstr "[0-9]" 2.txt
从文件2.txt中查找包括数字0-9的字符串或行
====================

4.findstr "[a-zA-Z]" 2.txt
从文件2.txt中查找包括任意字符的字符串或行
====================

5.findstr "[abcezy]" 2.txt
从文件2.txt中查找包括a b c e z y字母的字符串或行
====================

6.findstr "[a-fl-z]" 2.txt
从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。
====================

7.findstr "M[abc][hig]Y" 2.txt
从文件2.txt中可以匹配 MahY , MbiY, MahY等…..
====================

8. ^和$符号的应用
^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词
$ 表示行尾,"step<# WebPartBody #>quot;仅匹配 "hello world step"中最后一个单词
====================

9.finstr "[^0-9]" 2.txt
如果是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。
====================

10.findstr "[^a-z]" 2.txt
同上,如果是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了
====================

11.*号的作用
前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者多次。
====================

12.findstr "^[0-9]*$" 2.txt
这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。
Findstr "^[a-z]*$" 2.txt
这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了
如果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,因为有行首和行尾的限制,"^[0-9]<# WebPartBody #>quot;第一个字符如果是数字就匹配,如果不是就过滤掉,如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。
=====================

13. "\<…\>"这个表达式的作用
这个表示精确查找一个字符串,\表示字的结束位置
echo hello world computer|findstr "\"这样的形式
echo hello worldcomputer|findstr "\" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。
echo hello worldcomputer|findstr ".*computer\>"这样就可以匹配了

2009年3月29日星期日

window下如何配置sybase使用最大内存

在32位的操作系统如win2K上,操作系统能管理的内存为4GB,sybase使用的总内存有2G限制。目前大多数unix服务器都能为数据库配上4G物理内存甚至更多,但无论你为系统配置多大的物理内存,正常情况下都不能使sybase使用超过2G的内存,从而造成系统资源浪费。那么,有没有什么办法能使运行在windows系统上的sybase使用超过2G的内存呢?windows 提供了一种叫4GT(4G Tuning)的技术,使得sybase使用超过2G(不超过3G)的内存成为可能。而为了让应用程序使用更大的内存,还有一种PSE36的技术,可以让sybase使用超过3G的内存。这里,介绍如何使用4GT特性让sybase使用超过2G的内存。

1。打开操作系统的3G开关
首先修改boot.ini文件,在C盘根目录下。加入/3G参数:
[boot loader]
timeout=8
default=multi(0)disk(0)rdisk(0)partition(1)
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)="Microsoft Windows 2000 Advanced Server” /3G /fastdetect
然后从起机器,使/3G参数生效

2。将NT的虚拟内存调整到3G以上。
这一步不用多说了,右键单击我的电脑选属性。


3。打开sybase使用超过2G内存的开关
进入/ASE-12_5/bin下,备份sqlsrvr.exe。
在/ASE-12_5/bin目录下执行:imagecfg sqlsrvr
imagecfg.exe可以从网上下载,我就是在google上搜索的,http://www.robpol86.com/tutorial ... g的安装和使用方法。
执行后如果显示下面的内容则说明2G开关未打开
sqlsrvr.exe contains the following configuration information:
Subsystem Version of 4.0
Stack Reserve Size: 0x20000
Stack Commit Size: 0x4
如果2G开关未打开,则执行:imagecfg -l sqlsrvr.exe
再执行imagecfg sqlsrvr.exe,应显示下面内容:
sqlsrvr.exe updated with the following configuration information:
Subsystem Version of 4.0
Image can handle large (>;2GB) addresses
Stack Reserve Size: 0x20000
Stack Commit Size: 0x4
此时sybase的2G开关已经被打开。

4。配置数据库参数
打开数据库配置文件,修改total memory到2.2G。
修改shared memory starting address参数到23662592(十进制的数)
重启数据库。

以上是配置的全过程。下面解释一下为什么配置totol memory到2.2G和23662592的来源。
shared memory starting address 参数并不是大小,而是一个地址,它指定sybase从什么地方开始使用内存。在NT操作系统可以管理的4G内存中,0到7fffffff是供应用程序使用的,80000000到FFFFFFFF是保留给操作系统使用的。如果3G开关打开,0到BFFFFFFF提供给应用程序使用,C0000000到FFFFFFFF保留给操作系统。
应用程序使用内存是从0开始的,0到FFF提供给guard page,至于什么叫guard page本人也不是很清楚,从字面理解吧。
sqlsrvr.exe从400000开始占用内存,很多lib文件,比如libct、libsrv被装载在400000的上下,那么从400000以上的某个地方起,我们边得到一个整块的空间用于应用程序。
默认情况下(shared memory starting address 参数为default时),sybase的total memory从20000000开始使用内存,那么从20000000到7FFFFFFF就有1.5G空间,如果打开3G参数则是从20000000到BFFFFFFF,即2.5G空间。这就是为什么在nt上的sybase的total memory无法配过1.5的原因所在。
但实时上,这1.5或2.5的空间并不能完全由sybase支配,系统会在内存顶端,也就是从7FFFFFFF开始向下装载一些dll文件,因此sybase在shared memory starting address 参数为default时可用空间在20000000到某个比7FFFFFFF小的值,也就是1.4G左右吧。
可见7FFFFFFF一段是个死的限制,如果想让sybase使用更多的内存只有打破shared memory starting address 参数从20000000开始的限制。配置shared memory starting address 参数的目的就在于此。
配置shared memory starting address 参数等于23662592的目的就在于使sybase从地址低于20000000的地方开始使用内存,23662592转换成16进制为1691000,配置这个参数后,sybase可用空间就变为从1691000到7FFFFFFF,也就是1.9G,如果打开了3G参数,则是从1691000到BFFFFFFF,也就是2.9G。
那么为什么推荐23662592呢?这是sybase公司的经验值,如果这个值太低则会引起操作系统在分配内存时的错误,因为空间都被压缩的很小了嘛。

PAUL2SMOON 的共享项目