http://blog.sina.com.cn/s/blog_48c95a1901018nq1.html
libssh2:(configure: error: The required libssh2 library was not found. You can obtain that package from http://sourceforge.net/projects/libssh2/,可通过yum install libssh2-devel.x86_64 解决,不用下源码包)
https://www.libssh2.org/download/
ssh2:
http://pecl.php.net/package/ssh2
读取公钥的脚本:
摘自:http://www.4wei.cn/archives/1002295
php中的ssh2模块学习
阅读全文
libssh2:(configure: error: The required libssh2 library was not found. You can obtain that package from http://sourceforge.net/projects/libssh2/,可通过yum install libssh2-devel.x86_64 解决,不用下源码包)
https://www.libssh2.org/download/
ssh2:
http://pecl.php.net/package/ssh2
读取公钥的脚本:
摘自:http://www.4wei.cn/archives/1002295
php中的ssh2模块学习

问题:北京东单-东邪 15:14:04
问一个问题
中间我让运维给几十个服务器的cron,加了新的cron,他们是咋批量加的啊(我自己加的话,的手动一个一个服)
【点击】Chris 15:18:21
有个工具是在一台服务器上执行命令,其他服务器都跟着执行
方案:
1.有批量运行的工具如上面:有个工具是在一台服务器上执行命令,其他服务器都跟着执行
2.有一个zoomkeeper来实现多个服务器同步执行。(集群)
这儿主要讲:
puppet运维自动化之cron管理:
http://www.w3ccollege.org/puppet/operation-and-maintenance-automation-puppet-resources-management-cron-instance.html
阅读全文
问一个问题
中间我让运维给几十个服务器的cron,加了新的cron,他们是咋批量加的啊(我自己加的话,的手动一个一个服)
【点击】Chris 15:18:21
有个工具是在一台服务器上执行命令,其他服务器都跟着执行
方案:
1.有批量运行的工具如上面:有个工具是在一台服务器上执行命令,其他服务器都跟着执行
2.有一个zoomkeeper来实现多个服务器同步执行。(集群)
这儿主要讲:
puppet运维自动化之cron管理:
http://www.w3ccollege.org/puppet/operation-and-maintenance-automation-puppet-resources-management-cron-instance.html

参见手册 date()与strtotime()
date("Y-m-d H:i:s")
CURRENT_TIMES*****P() or NOW()
DATE_FORMAT(date,format)
now() curtime() datetime()
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-11-29 11:14:55 |
+---------------------+
1 row in set (0.00 sec)
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 11:14:31 |
+-----------+
1 row in set (0.00 sec)
实例
下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:
DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')
结果类似:
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635
题目内容:
1、MySQL取得当前时间的函数是?,格式化日期的函数是
2、写出 SQL语句的格式 : 插入 ,更新 ,删除
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
(b) 请用sql语句把张三的时间更新成为当前系统时间
(c) 请写出删除名为张四的全部记录
3、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别
4、MySQL自增类型(通常为表ID字段)必需将其设为(?)字段
5、以下请用PHPMYADMIN完成
(一)创建新闻发布系统,表名为message有如下字段
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量
(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
(三)上述内容管理系统,表category保存分类信息,字段如下
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
date("Y-m-d H:i:s")
CURRENT_TIMES*****P() or NOW()
DATE_FORMAT(date,format)
now() curtime() datetime()
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-11-29 11:14:55 |
+---------------------+
1 row in set (0.00 sec)
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 11:14:31 |
+-----------+
1 row in set (0.00 sec)
实例
下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:
DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')
结果类似:
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635
题目内容:
1、MySQL取得当前时间的函数是?,格式化日期的函数是
2、写出 SQL语句的格式 : 插入 ,更新 ,删除
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
(b) 请用sql语句把张三的时间更新成为当前系统时间
(c) 请写出删除名为张四的全部记录
3、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别
4、MySQL自增类型(通常为表ID字段)必需将其设为(?)字段
5、以下请用PHPMYADMIN完成
(一)创建新闻发布系统,表名为message有如下字段
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量
(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
(三)上述内容管理系统,表category保存分类信息,字段如下
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
经过两个月的时间,简单做(ZTD)系列终于完结。希望这一套系统确实使你有所帮助。简单做(ZTD)系列主要介绍了时间管理的十个好习惯的培养,在这篇文章中,将对每个习惯做一个简介,具体的请参考全文。

阅读全文

首先安装完php后最好保留当时安装的文件,比如我的路径/export1/soft
cd php-5.1.6/ext/soap
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config –enable-soap
make
make install
编译后的soap.so文件保存在了/usr/local/php/lib/php/extensions/no-debug-non-zts-20050922目录下
修改php.ini文件
手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = “./”
修改为extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20050922/”
并在此行后增加如下,然后保存:
extension = “soap.so”
重新启动apache,ok 我们就已经能看到扩展的soap模块了。
如果还要扩展别的模块可以一次类推,这里还有点要说明,如果做了zend,php.ini文件是在/usr/local/php/etc下的,但是我们这边重新编译后,它回放到/usr/local/php/lib下。所以这里要注意一下。
来源:http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2010/1014/6598.html
cd php-5.1.6/ext/soap
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config –enable-soap
make
make install
编译后的soap.so文件保存在了/usr/local/php/lib/php/extensions/no-debug-non-zts-20050922目录下
修改php.ini文件
手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = “./”
修改为extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20050922/”
并在此行后增加如下,然后保存:
extension = “soap.so”
重新启动apache,ok 我们就已经能看到扩展的soap模块了。
如果还要扩展别的模块可以一次类推,这里还有点要说明,如果做了zend,php.ini文件是在/usr/local/php/etc下的,但是我们这边重新编译后,它回放到/usr/local/php/lib下。所以这里要注意一下。
来源:http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2010/1014/6598.html
自1999年起我就开始发掘一些科技公司,并帮助它们运营。我最近的一个公司是 fabulis.com 。下面是从干这行中得到的57条经验。我可以列出更多,但恐怕会令你厌烦。
阅读全文

Banshee 是一个 PHP 开发 Web 网站的框架,主要特点是安全和易用,使用 MVC 模式,使用 XSLT 的模板,支持 MySQL 数据库。
该版本升级了 CKEditor 到3.4.1 版本,使用 SlimStat 来替换 Google Analytics,同时还包含一些bug的修复。
下载 地址 http://www.banshee-php.org/download
Tokyo Cabinet的tcutil.c提供了一套不错的C语言Utility API函数库,可以作为标准C函数库的一个增强。其中的一部分函数增加了申请内存失败、非数值等异常处理,例如tcmalloc()、tccalloc()、tcatoi(),另一部分提供了增强字符串处理、内存池、正则、文件操作、编码转换、压缩、Array List、Hash Map等。
上午和《独孤九剑》游戏的程序经理开会,约定了我们开发的KE游戏运营平台及中间件,与独孤九剑服务器端进程,进行各种功能交互的详细通信协议。C开发的中间件daemon,采用HTTPS/SSL REST协议与Nginx+PHP游戏运营平台通信,采用TCP二进制协议、信号与游戏进程通信。
昨晚,移动硬盘连接电脑的USB线突然被碰掉,再插入,提示移动硬盘的分区未格式化,上面的重要数据差点丢失,还好用CHKDSK /F修复了。得定时做个备份了,是再买块硬盘,还是用云存储?如果能找到一款能够便捷地进行本地加密后再上传,下载后再解密的软件,保护数据隐私,云存储或许也是个不错的选择。
上午和《独孤九剑》游戏的程序经理开会,约定了我们开发的KE游戏运营平台及中间件,与独孤九剑服务器端进程,进行各种功能交互的详细通信协议。C开发的中间件daemon,采用HTTPS/SSL REST协议与Nginx+PHP游戏运营平台通信,采用TCP二进制协议、信号与游戏进程通信。
昨晚,移动硬盘连接电脑的USB线突然被碰掉,再插入,提示移动硬盘的分区未格式化,上面的重要数据差点丢失,还好用CHKDSK /F修复了。得定时做个备份了,是再买块硬盘,还是用云存储?如果能找到一款能够便捷地进行本地加密后再上传,下载后再解密的软件,保护数据隐私,云存储或许也是个不错的选择。
3月28日,戴志康释出了传说以久的内部代号为UltraX的体验版。大概是希望借用discuz已有的巨大号召力,UltraX在发布之前还是改成了discuz!X。
阅读全文

最近做网站有一个站要用到WEB网页采集器功能,当一个PHP脚本在请求URL的时候,可能这个被请求的网页非常慢慢,超过了mysql的 wait-timeout时间,然后当网页内容被抓回来后,准备插入到MySQL的时候,发现MySQL的连接超时关闭了,于是就出现了“MySQL server has gone away”这样的错误提示,解决这个问题,我的经验有以下两点,或许对大家有用处:
第 一种方法:
当然是增加你的 wait-timeout值,这个参数是在my.cnf(在Windows下台下面是my.ini)中设置,我的数据库负荷稍微大一点,所以,我设置的值 为10,(这个值的单位是秒,意思是当一个数据库连接在10秒钟内没有任何操作的话,就会强行关闭,我使用的不是永久链接 (mysql_pconnect),用的是mysql_connect,关于这个wait-timeout的效果你可以在MySQL的进程列表中看到 (show processlist) ),你可以把这个wait-timeout设置成更大,比如300秒,呵呵,一般来讲300秒足够用了,其实你也可以不用设置,MySQL默认是8个小 时。情况由你的服务器和站点来定。
第二种方法:
这也是我个人认为最好的方法,即检查 MySQL的链接状态,使其重新链接。
可能大家都知道有mysql_ping这么一个函数,在很多资料中都说这个mysql_ping的 API会检查数据库是否链接,如果是断开的话会尝试重新连接,但在我的测试过程中发现事实并不是这样子的,是有条件的,必须要通过 mysql_options这个C API传递相关参数,让MYSQL有断开自动链接的选项(MySQL默认为不自动连接),但我测试中发现PHP的MySQL的API中并不带这个函数,你重新编辑MySQL吧,呵呵。但mysql_ping这个函数还是终于能用得上的,只是要在其中有一个小小的操作技巧:
这是我的的数据库操 作类中间的一个函数
function ping(){
if(!mysql_ping($this->link)){
mysql_close($this->link); //注意:一定要先执行数据库关闭,这是关键
$this->connect();
}
}
我需要调用这个函数的代码可能是这样子的
$str = file_get_contents(’http://www.tianqiyugao.net’);
$db->ping();//经过前面的网页抓取后,或者会导致数据库连接关闭,检查并重新连接
$db->query(’select * from table’);
ping()这个函数先检测数据连接是否正常,如果被关闭,整个把当前脚本的MYSQL实例关闭,再重新连接。
经 过这样处理后,可以非常有效的解决MySQL server has gone away这样的问题,而且不会对系统造成额外的开销。
来源:http://www.sablog.net/blog/MySQL-server-has-gone-away/
第 一种方法:
当然是增加你的 wait-timeout值,这个参数是在my.cnf(在Windows下台下面是my.ini)中设置,我的数据库负荷稍微大一点,所以,我设置的值 为10,(这个值的单位是秒,意思是当一个数据库连接在10秒钟内没有任何操作的话,就会强行关闭,我使用的不是永久链接 (mysql_pconnect),用的是mysql_connect,关于这个wait-timeout的效果你可以在MySQL的进程列表中看到 (show processlist) ),你可以把这个wait-timeout设置成更大,比如300秒,呵呵,一般来讲300秒足够用了,其实你也可以不用设置,MySQL默认是8个小 时。情况由你的服务器和站点来定。
第二种方法:
这也是我个人认为最好的方法,即检查 MySQL的链接状态,使其重新链接。
可能大家都知道有mysql_ping这么一个函数,在很多资料中都说这个mysql_ping的 API会检查数据库是否链接,如果是断开的话会尝试重新连接,但在我的测试过程中发现事实并不是这样子的,是有条件的,必须要通过 mysql_options这个C API传递相关参数,让MYSQL有断开自动链接的选项(MySQL默认为不自动连接),但我测试中发现PHP的MySQL的API中并不带这个函数,你重新编辑MySQL吧,呵呵。但mysql_ping这个函数还是终于能用得上的,只是要在其中有一个小小的操作技巧:
这是我的的数据库操 作类中间的一个函数
function ping(){
if(!mysql_ping($this->link)){
mysql_close($this->link); //注意:一定要先执行数据库关闭,这是关键
$this->connect();
}
}
我需要调用这个函数的代码可能是这样子的
$str = file_get_contents(’http://www.tianqiyugao.net’);
$db->ping();//经过前面的网页抓取后,或者会导致数据库连接关闭,检查并重新连接
$db->query(’select * from table’);
ping()这个函数先检测数据连接是否正常,如果被关闭,整个把当前脚本的MYSQL实例关闭,再重新连接。
经 过这样处理后,可以非常有效的解决MySQL server has gone away这样的问题,而且不会对系统造成额外的开销。
来源:http://www.sablog.net/blog/MySQL-server-has-gone-away/
Apache日志不记录图片文件设置方法是
httpd.conf 设置如下:
<FilesMatch "\.(ico|gif|jpg|png|bmp|swf|css|js)">
SetEnv IMAG 1
</FilesMatch>
CustomLog logs/access_log combined env=!IMAG
虚拟机的日志也一样配置。
来源:http://www.sablog.net/blog/apache-donot-log-images/
httpd.conf 设置如下:
<FilesMatch "\.(ico|gif|jpg|png|bmp|swf|css|js)">
SetEnv IMAG 1
</FilesMatch>
CustomLog logs/access_log combined env=!IMAG
虚拟机的日志也一样配置。
来源:http://www.sablog.net/blog/apache-donot-log-images/
C++可以用string
头文件
#include <string>
using namespace std;
string a,b;
string c;
c=a+b;
c就是a连接b的结果了
头文件
#include <string>
using namespace std;
string a,b;
string c;
c=a+b;
c就是a连接b的结果了
1 #include <string>
string str="12345";
int b=atoi(str.c_str());
2
【转】C++ int,char,string,CString类型转换(整理总结)
#include <string> //使用C++标准库的string类时
using namespace std; //同上
#include <sstream>
#include <iostream>
#include <stdlib.h> //要将string类和int类型直接转换最好有这些包含,
//因为自己写一个转换函数比较方便,函数定义参考如下
string getstring ( const int n )
{
std::stringstream newstr;
newstr<<n;
return newstr.str();
}
string 转 CString
CString.format(”%s”, string.c_str());
char 转 CString
CString.format(”%s”, char*);
char 转 string
string s(char *);
string 转 char *
char *p = string.c_str();
CString 转 string
string s(CString.GetBuffer());
1,string -> CString
CString.format(”%s”, string.c_str());
用c_str()确实比data()要好.
2,char -> string
string s(char *);
只能初始化,在不是初始化的地方最好还是用assign().
3,CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”\0“的字符串数组
2,c_str(),返回有”\0“的字符串数组
3,copy()
—————————————————————
CString与int、char*、char[100]之间的转换- -
CString与int、char*、char[100]之间的转换- -
CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format(”%d”, i)
Format函数的功能很强,值得你研究一下。
void CStrDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString
ss=”1212.12″;
int temp=atoi(ss);
CString aa;
aa.Format(”%d”,temp);
AfxMessageBox(”var is ” + aa);
}
sart.Format(”%s”,buf);
CString互转char*
///char * TO cstring
CString strtest;
char * charpoint;
charpoint=”give string a value”;
strtest=charpoint;
///cstring TO char *
charpoint=strtest.GetBuffer(strtest.GetLength());
标准C里没有string,char *==char []==string
可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。
CString转换 char[100]
char a[100];
CString str(”aaaaaa”);
strncpy(a,(LPCTSTR)str,sizeof(a));
3 string 转int
itoa(i,num,10);
i 需要转换成字符的数字
num 转换后保存字符的变量
10 转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
为了您的安全,请只打开来源可靠的网址
打开网站 取消
来自: http://hi.baidu.com/buptyoyo/blog/item/de1d94c6060429a38226ac37.html
string str="12345";
int b=atoi(str.c_str());
2
【转】C++ int,char,string,CString类型转换(整理总结)
#include <string> //使用C++标准库的string类时
using namespace std; //同上
#include <sstream>
#include <iostream>
#include <stdlib.h> //要将string类和int类型直接转换最好有这些包含,
//因为自己写一个转换函数比较方便,函数定义参考如下
string getstring ( const int n )
{
std::stringstream newstr;
newstr<<n;
return newstr.str();
}
string 转 CString
CString.format(”%s”, string.c_str());
char 转 CString
CString.format(”%s”, char*);
char 转 string
string s(char *);
string 转 char *
char *p = string.c_str();
CString 转 string
string s(CString.GetBuffer());
1,string -> CString
CString.format(”%s”, string.c_str());
用c_str()确实比data()要好.
2,char -> string
string s(char *);
只能初始化,在不是初始化的地方最好还是用assign().
3,CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”\0“的字符串数组
2,c_str(),返回有”\0“的字符串数组
3,copy()
—————————————————————
CString与int、char*、char[100]之间的转换- -
CString与int、char*、char[100]之间的转换- -
CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format(”%d”, i)
Format函数的功能很强,值得你研究一下。
void CStrDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString
ss=”1212.12″;
int temp=atoi(ss);
CString aa;
aa.Format(”%d”,temp);
AfxMessageBox(”var is ” + aa);
}
sart.Format(”%s”,buf);
CString互转char*
///char * TO cstring
CString strtest;
char * charpoint;
charpoint=”give string a value”;
strtest=charpoint;
///cstring TO char *
charpoint=strtest.GetBuffer(strtest.GetLength());
标准C里没有string,char *==char []==string
可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。
CString转换 char[100]
char a[100];
CString str(”aaaaaa”);
strncpy(a,(LPCTSTR)str,sizeof(a));
3 string 转int
itoa(i,num,10);
i 需要转换成字符的数字
num 转换后保存字符的变量
10 转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
为了您的安全,请只打开来源可靠的网址
打开网站 取消
来自: http://hi.baidu.com/buptyoyo/blog/item/de1d94c6060429a38226ac37.html
11月19日上午消息,在腾讯与360大战趋于平静时,奇虎360董事长周鸿祎首次在公开场合出现出席2010创业家年会,他在演讲中总结本次大战的两个感悟,一是用户支持,二是行业应团结合作,并表示如果能让行业开放付出什么代价都值得。
周鸿祎在谈及近日大战时,表示目的是希望让中国互联网更加开放。“互联网已经形成的行业巨头,他们总希望格局50年不变,他们永远在赚大钱,大公司跟创新是矛盾的,只有小的创业者不愿意遵循已有的游戏规则,所才有动力去创新。”
对于这一次前所未有的大战,周鸿祎说有两个感悟。“第一个感悟是用户支持了我们。关键的时候用户的力量对你的支持,是一个创新公司当面对垄断巨头,这是唯一所能依靠最大的力量。因为比钱比人比资源,我们依然是一个创业公司,还是一句话,只有重视用户才能脚踏实地。”
“第二个感悟,很多创业者,我们每一个人要做微创新,每一个人都微不足道,但我认为我们各个行业,特别是互联网的创业者,我希望大家一定要能够多相互合作、相互团结起来。”周鸿祎说。
周鸿祎指出,如果很多创业公司、创业者都能够呼吁创新、反对抄袭、反对垄断,如果通过这个事件让行业有所反思,每个公司都能够改变,让这个行业更加开放,有更多的新的创业公司能够成功,“这次我们付出什么样的代价都是值得。”
阅读全文
周鸿祎在谈及近日大战时,表示目的是希望让中国互联网更加开放。“互联网已经形成的行业巨头,他们总希望格局50年不变,他们永远在赚大钱,大公司跟创新是矛盾的,只有小的创业者不愿意遵循已有的游戏规则,所才有动力去创新。”
对于这一次前所未有的大战,周鸿祎说有两个感悟。“第一个感悟是用户支持了我们。关键的时候用户的力量对你的支持,是一个创新公司当面对垄断巨头,这是唯一所能依靠最大的力量。因为比钱比人比资源,我们依然是一个创业公司,还是一句话,只有重视用户才能脚踏实地。”
“第二个感悟,很多创业者,我们每一个人要做微创新,每一个人都微不足道,但我认为我们各个行业,特别是互联网的创业者,我希望大家一定要能够多相互合作、相互团结起来。”周鸿祎说。
周鸿祎指出,如果很多创业公司、创业者都能够呼吁创新、反对抄袭、反对垄断,如果通过这个事件让行业有所反思,每个公司都能够改变,让这个行业更加开放,有更多的新的创业公司能够成功,“这次我们付出什么样的代价都是值得。”

我觉得首先还是看这位兄弟的两篇文章后实践Ok后再接着看吧,那两篇文章写得很好,如下:
http://hi.baidu.com/doyoueat/blog/item/2593153a88604b3371cf6c65.html
http://hi.baidu.com/doyoueat/blog/item/f3b48320f13f2e0f4d088d5a.html
以上两篇文章,博主是实践Ok了的。。。。:)
下载php源码
进入源码路径假如说是 /data/soft/php-5.2.5/
进入ext 目录
./ext_skel --extname=cpptest
进入 cpptest 目录 修改 config.m4
变化主要是这几行
PHP_ARG_ENABLE(cpptest, whether to enable cpptest support,
Make sure that the comment is aligned:
[ --enable-cpptest Enable cpptest support])
以下几行主要用来指定源代码是 c++的
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, "", EXTRA_LDFLAGS)
PHP_NEW_EXTENSION(cpptest, cpptest.cpp, $ext_shared)
然后 mv cpptest.c cpptest.cpp
修改 cpptest.cpp
20 extern "C" {
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include "php.h"
26 #include "php_ini.h"
27 #include "ext/standard/info.h"
28 #include "php_cpptest.h"
29 }
用 extern c 把原来的c 的 头文件包起来 让其兼容c++
#ifdef COMPILE_DL_CPPTEST
ZEND_GET_MODULE(cpptest)
#endif
修改为如下:
72 BEGIN_EXTERN_C()
73 ZEND_GET_MODULE(cpptest)
74 END_EXTERN_C()
用 BEGIN_EXTERN_C() 还有 END_EXTERN_C() 把 ZEND_GET_MODULE(cpptest) 包起来,最关键是:
#include "cpptest.h"
这个cpp的头文件要放在:
extern "C" { 的花括号里!!!
using std::string;
extern "C" {
#ifdef HAVE_CONFIG_H
#include "config.h"
#include "cpptest.h"
否则会出现编译错误:错误:‘char* PHP_HELLO()’的早先声明有‘C++’链接 错误:与带有‘C’链接的新声明冲突,
再加入:
#ifdef COMPILE_DL_EXT_NAME
BEGIN_EXTERN_C()
ZEND_GET_MODULE(ext_name)
END_EXTERN_C()
#endif
为此,特别注意!!!
------------------------------------------------------------------------------------------------------------
然后可以 随便测试进入几个c++的 头文件
30 #include <iostream>
31 #include <string>
32 #include "cpptest.h"
33 using std::string;
修改一下示例
160 PHP_FUNCTION(confirm_cpptest_compiled)
161 {
174 int len;
175 char *strg;
176 strg=estrdup(PHP_HELLO());
177 std::cout<<strg<<std::endl;
178 len=strlen(strg);
179 RETURN_STRINGL(strg, len, 0);
180 // std::cout<<"hello world"<<std::endl;
181 }
182 char * PHP_HELLO()
183 {
184 string str("aaaaaa");
186 char * cp;
187 cp=estrdup(str.c_str());
188 return cp;
190
191 }
然后添加 cpptest.h
定义 PHP_HELLO()
char * PHP_HELLO();
然后 phpize
./configure --with-php-config=/data/app/php/bin/php-config
make
makeinstall
在 phpini中 引用 so文件
下边就可以测试啦
阅读全文
http://hi.baidu.com/doyoueat/blog/item/2593153a88604b3371cf6c65.html
http://hi.baidu.com/doyoueat/blog/item/f3b48320f13f2e0f4d088d5a.html
以上两篇文章,博主是实践Ok了的。。。。:)
下载php源码
进入源码路径假如说是 /data/soft/php-5.2.5/
进入ext 目录
./ext_skel --extname=cpptest
进入 cpptest 目录 修改 config.m4
变化主要是这几行
PHP_ARG_ENABLE(cpptest, whether to enable cpptest support,
Make sure that the comment is aligned:
[ --enable-cpptest Enable cpptest support])
以下几行主要用来指定源代码是 c++的
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, "", EXTRA_LDFLAGS)
PHP_NEW_EXTENSION(cpptest, cpptest.cpp, $ext_shared)
然后 mv cpptest.c cpptest.cpp
修改 cpptest.cpp
20 extern "C" {
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include "php.h"
26 #include "php_ini.h"
27 #include "ext/standard/info.h"
28 #include "php_cpptest.h"
29 }
用 extern c 把原来的c 的 头文件包起来 让其兼容c++
#ifdef COMPILE_DL_CPPTEST
ZEND_GET_MODULE(cpptest)
#endif
修改为如下:
72 BEGIN_EXTERN_C()
73 ZEND_GET_MODULE(cpptest)
74 END_EXTERN_C()
用 BEGIN_EXTERN_C() 还有 END_EXTERN_C() 把 ZEND_GET_MODULE(cpptest) 包起来,最关键是:
#include "cpptest.h"
这个cpp的头文件要放在:
extern "C" { 的花括号里!!!
using std::string;
extern "C" {
#ifdef HAVE_CONFIG_H
#include "config.h"
#include "cpptest.h"
否则会出现编译错误:错误:‘char* PHP_HELLO()’的早先声明有‘C++’链接 错误:与带有‘C’链接的新声明冲突,
再加入:
#ifdef COMPILE_DL_EXT_NAME
BEGIN_EXTERN_C()
ZEND_GET_MODULE(ext_name)
END_EXTERN_C()
#endif
为此,特别注意!!!
------------------------------------------------------------------------------------------------------------
然后可以 随便测试进入几个c++的 头文件
30 #include <iostream>
31 #include <string>
32 #include "cpptest.h"
33 using std::string;
修改一下示例
160 PHP_FUNCTION(confirm_cpptest_compiled)
161 {
174 int len;
175 char *strg;
176 strg=estrdup(PHP_HELLO());
177 std::cout<<strg<<std::endl;
178 len=strlen(strg);
179 RETURN_STRINGL(strg, len, 0);
180 // std::cout<<"hello world"<<std::endl;
181 }
182 char * PHP_HELLO()
183 {
184 string str("aaaaaa");
186 char * cp;
187 cp=estrdup(str.c_str());
188 return cp;
190
191 }
然后添加 cpptest.h
定义 PHP_HELLO()
char * PHP_HELLO();
然后 phpize
./configure --with-php-config=/data/app/php/bin/php-config
make
makeinstall
在 phpini中 引用 so文件
下边就可以测试啦

我想找一个类似于java中split那样的函数,支持C++字符串分割
比如
aabe(bbb)iefjij(bbb)(bbb)
用(bbb)分割得到
aabe
iefjij
fjdkfji
注:不用CString
今天用c++写了个分割字符串的函数,老是内存报错。在网上搜搜发现c的一个函数就可以搞定。
汗啊
c++
==========
find实现方法:函数参数类型:int =sting.find(string);
c++ substr的用法问题:
我的代码是这样的:
#include <iostream>
#include<string>
using namespace std;
void main()
{
string a;
getline(cin,a);
cout<<a.length()<<endl;
cout<<a.substr(1,1);
}
输出结果为输入的第二个字符,我很好奇substr中的两个参数是怎么截取中间部分的,还有这个函数的起始字符是用0来表示么?
最佳答案
下面给出解释:
substr 方法
返回一个从指定位置开始,并具有指定长度的子字符串。
参数
start
必选。所需的子字符串的起始位置。字符串中第一个字符的索引为 0。
length
可选项。返回的子字符串中包含的字符数。
备注
如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。
看了上面这些应该就会明白了!!
来源:http://group.gimoo.net/review/60574
比如
aabe(bbb)iefjij(bbb)(bbb)
用(bbb)分割得到
aabe
iefjij
fjdkfji
注:不用CString
今天用c++写了个分割字符串的函数,老是内存报错。在网上搜搜发现c的一个函数就可以搞定。
汗啊
c++
==========
#include "stdafx.h"
#include <windows.h>
//查找字符串中的制定字符,并返回字符的位置
int strstrFindPos(char srcstr[],char deststr[] )
{
int j=0;
for (int i=0;srcstr[i]!='\0';i++)
{
if (deststr[0]==srcstr[i])
{
while (deststr[j]!='\0'&&srcstr[i+j]!='\0')
{
j++;
if (deststr[j]!=srcstr[i+j])
{
break;
}
}
}
if (deststr[j]=='\0')
{
return i;
}
}
return -1;
}
//截取字符串中的位置1到位置2的字符串
char* substr(char *des, char *src, int start, int end)
{
int i =0;
while(*src != '\0')
{
if((i >= start)&&(i<=end))
{
*des= *src; //[*]
des++;
};
i++;
src++;
};
*des= '\0';
return des;
}
int main(int argc, char* argv[])
{
char *cCode = "XXXXXX000000000000000000000001XXXXXX1111111111111111111111111112XXXXXX2222222222222222222223XXXXXX";
char *cAllCode = new char[];
char *cTempCode = new char[];
char *cNeedCode= new char[];
char *cOnlyCode ="XXXXXX";
char *cMyData = NULL;
int iPos = -1;
if ( cCode != NULL)
{
strcpy(cAllCode,cCode);
}
do{
substr(cTempCode, cAllCode,6,lstrlen(cAllCode));
iPos = strstrFindPos(cTempCode,cOnlyCode);
if (iPos > -1)
{
substr(cNeedCode,cTempCode,0,iPos -1);
printf("cNeedCode : %s \n" , cNeedCode);
substr(cAllCode, cTempCode,iPos,lstrlen(cTempCode));
}
}while (iPos > -1);
// delete cTempCode;
// delete cNeedCode;
delete cAllCode;
return 0;
}
#include <windows.h>
//查找字符串中的制定字符,并返回字符的位置
int strstrFindPos(char srcstr[],char deststr[] )
{
int j=0;
for (int i=0;srcstr[i]!='\0';i++)
{
if (deststr[0]==srcstr[i])
{
while (deststr[j]!='\0'&&srcstr[i+j]!='\0')
{
j++;
if (deststr[j]!=srcstr[i+j])
{
break;
}
}
}
if (deststr[j]=='\0')
{
return i;
}
}
return -1;
}
//截取字符串中的位置1到位置2的字符串
char* substr(char *des, char *src, int start, int end)
{
int i =0;
while(*src != '\0')
{
if((i >= start)&&(i<=end))
{
*des= *src; //[*]
des++;
};
i++;
src++;
};
*des= '\0';
return des;
}
int main(int argc, char* argv[])
{
char *cCode = "XXXXXX000000000000000000000001XXXXXX1111111111111111111111111112XXXXXX2222222222222222222223XXXXXX";
char *cAllCode = new char[];
char *cTempCode = new char[];
char *cNeedCode= new char[];
char *cOnlyCode ="XXXXXX";
char *cMyData = NULL;
int iPos = -1;
if ( cCode != NULL)
{
strcpy(cAllCode,cCode);
}
do{
substr(cTempCode, cAllCode,6,lstrlen(cAllCode));
iPos = strstrFindPos(cTempCode,cOnlyCode);
if (iPos > -1)
{
substr(cNeedCode,cTempCode,0,iPos -1);
printf("cNeedCode : %s \n" , cNeedCode);
substr(cAllCode, cTempCode,iPos,lstrlen(cTempCode));
}
}while (iPos > -1);
// delete cTempCode;
// delete cNeedCode;
delete cAllCode;
return 0;
}
find实现方法:函数参数类型:int =sting.find(string);
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string a = "aaaAlice";
int pos = a.find("Alice");//pos = 3;
printf("%d\n",pos);
}
#include <string.h>
using namespace std;
int main()
{
string a = "aaaAlice";
int pos = a.find("Alice");//pos = 3;
printf("%d\n",pos);
}
c++ substr的用法问题:
我的代码是这样的:
#include <iostream>
#include<string>
using namespace std;
void main()
{
string a;
getline(cin,a);
cout<<a.length()<<endl;
cout<<a.substr(1,1);
}
输出结果为输入的第二个字符,我很好奇substr中的两个参数是怎么截取中间部分的,还有这个函数的起始字符是用0来表示么?
最佳答案
下面给出解释:
substr 方法
返回一个从指定位置开始,并具有指定长度的子字符串。
参数
start
必选。所需的子字符串的起始位置。字符串中第一个字符的索引为 0。
length
可选项。返回的子字符串中包含的字符数。
备注
如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。
看了上面这些应该就会明白了!!
来源:http://group.gimoo.net/review/60574