一、[2012-05-16] PHP的dubug
这个3个函数是debug无敌组合
二、[2012-05-18] Linux用源码安装的程序如何卸载?
*.tar.gz/*.tgz、*.bz2形式的源代码软件包
安装:tar zxvf *.tar.gz 或 tar jxvf *.bz2 先解压
然后进入解压后的目录:
./configure 配置
make 编译
make install 安装
卸载:make uninstall 或 手动删除
说明:建议解压后先阅读说明文件,可以了解安装有哪些需求,有必要时还需改动编译配置。有些软件包的源代码在编译安装后可以用make install命令来进行卸载,如果不提供此功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净,那你应该在编译前进行配置,指定软件将要安装到目标路径:./configure --prefix=目录名,这样可以使用“rm -rf 软件目录名”命令来进行干净彻底的卸载。
三、[2012-05-23]cp命令时错误提示:'Argument list too long' error
执行linux中的cp命令,当cp 的目录查过一定的数目会报Argument list too long 的警告
cp -uf /home/ftpuser1/public_html/ftparea/*.jpg /home/ftpuser2/public_html/ftparea/
And I am getting the error:
-bash: /bin/cp: Argument list too long
原因:*.jpg expands to a list longer than the shell can handle. Try this instead
解决办法:
find /home/ftpuser/public_html/ftparea/ -name "*.jpg" -exec cp -uf "{}" /your/destination \;
四、[2012-05-24] Linux下如何使cp命令不提示覆盖文件
可以试一下 -f 选项,-f 一般表示强制执行(force)。
cp -f file dir
但好像结果并不像我们希望的那样,系统依然会有覆盖提示。为什么呢?
原因很简单,系统将 cp 命令alias为 cp -i。当我们执行cp命令的时候,系统往往执行的是cp -i,-i 选项表示有交互的提示信息,所以执行 cp -f 的时候,系统实际执行的是 cp -i -f, 所以仍然会有覆盖提示。
想要执行原始的cp也很简单,可以在调用cp的时候加入绝对路径,当然还可以直接执行下面的语句:
\cp -f file dir
五、[2012-05-30] 命令行导出所有数据库
6、[2012-05-31] PHP单例模式的本质
PHP单例模式实现的核心要点有如下三条:
1. 需要一个保存类的唯一实例的静态成员变量(通常为$_instance私有变量)
2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序new类从而失去单例模式的意义
3. 必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用
/**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序new
* 类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法
* 以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。
* 使用单例模式生成一个对象后,
* 该对象可以被其它众多对象所使用。
*/
class Example
{
//保存例实例在此属性中
private static $_instance;
//构造函数声明为private,防止直接创建对象
private function __construct()
{
echo 'I am Construceted';
}
//单例方法
public static function singleton()
{
if(!isset(self::$_instance))
{
$c=__CLASS__;
self::$_instance=new $c;
}
return self::$_instance;
}
//阻止用户复制对象实例
public function __clone()
{
trigger_error('Clone is not allow' ,E_USER_ERROR);
}
function test()
{
echo("test");
}
}
// 这个写法会出错,因为构造方法被声明为private
$test = new Example;
// 下面将得到Example类的单例对象
$test = Example::singleton();
$test->test();
// 复制对象将导致一个E_USER_ERROR.
$test_clone = clone $test;
7、[2012-05-31] Nginx下配置FastCGI原理
Nginx通过fastcgi调用python, Perl和C++等写的CGI程序。PHP有PHP-FPM (FastCGI Process Manager),这个对PHP来说更好的FastCGI进程管理器,关于PHP-FPM的更多信息,请Google php-fpm+nginx。
Nginx并不提供支持对外部程序的直接调用或者解析(所以缺少像apache里的mod_php这样的模块),所有的外部程序(包括PHP)必须通过fastcgi接口来调用,在Linux下接口是socket (文件socket或者Internet socket)。所以为了调用CGI程序,我们需要一个fastcgi的wrapper,这个wrapper绑定在某个固定socket上(比如端口或者文件socket),当nginx将CGI请求发送给这个socket的时候,wrapper接纳请求并fork一个新的线程,这个线程调用外部的程序或者解释器处理脚本并读取返回值,而wrapper再将返回的数据(网页或者图片等)通过fastcgi将数据通过那个固定的socket传递给nginx。
8、[2012-06-29] PHP中静态方法(static)
static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”
如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。
static关键字可以用来修饰变量、方法。
不经过实例化,就可以直接访问类中static的属性和static的方法。
static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。
static的属性,在内存中只有一份,为所有的实例共用。
使用self:: 关键字访问当前类的静态成员。
一个类的所有实例,共用类中的静态属性。
也就是说,在内存中即使有多个实例,静态的属性也只有一份。
9、[2012-09-29] WINDOWS下GVIM的块选
LINUX下是Ctrl-v,但是在windows下的GVIM,Ctril-v是粘贴。
WINDOWS下的GVIM的块选命令是:
V+Ctrl-q,然后使用hjkl移动。
先按V,在按组合键Ctrl-q,然后使用hjkl来移动光标选择块。
10、[2012-10-12] 缓冲区输出
some problems with ob_flush() and flush() could be resolved by defining content type header :
header( 'Content-type: text/html; charset=utf-8' );
so working code looks like this:
header( 'Content-type: text/html; charset=utf-8' );
echo 'Begin ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
echo $i . '<br />';
flush();
ob_flush();
sleep(1);
}
echo 'End ...<br />';