iOS5语言设置为中文导致Cydia秒退的解决办法

phone4 ios5不完美越狱后,cydia在中文状态下,点搜索或添加源秒退。只能用其他语言才行。使用很不方便。今天网上搜了一下,有解决的办法,测试可行,给大家试试。

方法很简单:

1.首先安装iFlie;

2.复制/User/Librery/下的Keyboard文件夹到/var/root/Librery/;

3.点/var/root/Librery/Keyboard文件夹右边的那个右箭头。

4.所有权改为:
所有者:root
组:wheel
并选择“应用到所有层级”。

设置IPHONE连接GPRS

IPHONE虽然很好酷,但是有几个地方很恶心,其中之一是默认不支持GPRS连接,只能手动配置了。

打开,设置-通用-网络-蜂窝数据网

蜂窝数据:
APN:cmnet
用户名:(不用填)
密码:(不用填)

彩信:
APN:cmwap
用户名:(不用填)
密码:(不用填)
MMSC:mmsc.monternet.com
彩信代理:10.0.0.172:80
彩信的最大信息容量:50000

这样就好了!设置好重启,看看在左上角信号条旁边有没有一个小E!这样就是连接成功了

通过反射机制获取PHP类的所有方法

想要获取一个PHP类的方法,大家可能很自然的想到了get_class_methods(),可手册中并没说明此函数返回的只是public类型的方法。
如果想要获取到包括私有和保护的所有方法,那需要用到PHP中反射类,还是通过例子来说明吧。

<?php
class Foo
{
    private function priFunc(){}
    protected function proFunc(){}
    public function pubFunc(){}
}

function get_class_all_methods($class){
    $r = new ReflectionClass($class);
    foreach($r->getMethods() as $key=>$methodObj){
        if($methodObj->isPrivate())
            $methods[$key]['type'] = 'private';
        elseif($methodObj->isProtected())
            $methods[$key]['type'] = 'protected';
        else
            $methods[$key]['type'] = 'public';
        $methods[$key]['name'] = $methodObj->name;
        $methods[$key]['class'] = $methodObj->class;
    }
    return $methods;
}

$methods = get_class_all_methods('Foo');
var_dump($methods);

结果:

array(3) {
  [0]=>
  array(3) {
    ["type"]=>
    string(7) "private"
    ["name"]=>
    string(7) "priFunc"
    ["class"]=>
    string(3) "Foo"
  }
  [1]=>
  array(3) {
    ["type"]=>
    string(9) "protected"
    ["name"]=>
    string(7) "proFunc"
    ["class"]=>
    string(3) "Foo"
  }
  [2]=>
  array(3) {
    ["type"]=>
    string(6) "public"
    ["name"]=>
    string(7) "pubFunc"
    ["class"]=>
    string(3) "Foo"
  }
}

php中is_file和file_exists的区别

is_file 只判断文件是否存在;
file_exists 判断文件是否存在或者是目录是否存在;
is_dir 判断目录是否存在;

查看手册,虽然这两个函数的结果都会被缓存,但是is_file却快了N倍。
还有一个值得注意的:
文件存在的情况下,is_file比file_exists要快N倍;
文件不存在的情况下,is_file比file_exists要慢;
结论是,file_exits函数并不会因为该文件是否真的存在而影响速度,但是is_file影响就大了。

CURL不依赖COOKIEJAR获取COOKIE

PHP中CURL类是一个非常牛逼的工具类,具体怎么牛逼就不啰嗦了。
对于COOKIE,CURL类也有很不错的支持,但不够灵活,并未能通过现成的方法以变量的方法获取到,而以要通过以下方法实现。

// 把COOKIE保存至cookie.txt
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

先把COOKIE保存文件,调用的时候还得读取文件,这样意味着两次的IO操作,效率如何,不用说大家都清楚了。
那么有没有办法可以绕过写读文件呢?不卖关子,直接上代码:

// 初始化CURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// 获取头部信息
curl_setopt($ch, CURLOPT_HEADER, 1);
// 返回原生的(Raw)输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行并获取返回结果
$content = curl_exec($ch);
// 关闭CURL
curl_close($ch);
// 解析HTTP数据流
list($header, $body) = explode("\r\n\r\n", $content);
// 解析COOKIE
preg_match("/set\-cookie:([^\r\n]*)/i", $header, $matches);
// 后面用CURL提交的时候可以直接使用
// curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$cookie = $matches[1];

打完收工!欢迎大家来喷!

隐藏Nginx版本号方法

那nginx版本号可以隐藏不?其实可以的,看下面我的步骤:

1、进入nginx配置文件的目录(此目录根据安装时决定),用vim编辑打开

# vim nginx.conf

在http {—}里加上server_tokens off; 如:

http {
//……省略
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
server_tokens off;
//…….省略
}

2、编辑php-fpm配置文件,如fastcgi.conf或fcgi.conf(这个配置文件名也可以自定义的,根据具体文件名修改):

找到:

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

改为:

fastcgi_param SERVER_SOFTWARE nginx;

3、重新加载nginx配置:

# /etc/init.d/nginx reload

这样就完全对外隐藏了nginx版本号了,就是出现404、501等页面也不会显示nginx版本。

mysqlhotcopy备份报错

错误信息:

/usr/local/mysql/bin/mysqlhotcopy -u root -p  --addtodest --noindices --flushlog -q qeedoo /tmp/bak
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 7) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Proxy, Sponge.

解决办法:

# http://search.cpan.org/~capttofu/DBD-mysql-3.0008/
wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.020.tar.gz
tar zxvf DBD-mysql-4.020.tar.gz
cd /tmp/DBD-mysql-4.020
perl Makefile.PL --mysql_config=/usr/local/webserver/mysql/bin/mysql_config
make
make install

最后编译安装完之后 发现还是报错:

install_driver(mysql) failed: Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.16: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
 at (eval 7) line 3
Compilation failed in require at (eval 7) line 3.
Perhaps a required shared library or dll isn't installed where expected
 at /usr/bin/mysqlhotcopy line 177

是因为tar安装mysql后的路径配置的有问题

vi /etc/ld.so.conf

把mysql的这个库文件路径添加进去

echo "/usr/local/webserver/mysql/lib/mysql" >> /etc/ld.so.conf
ldconfig

再执行mysqlhotcopy的时候,一切正常。

有一台服务出现如下问题:
以下问题待遇查看资料,先记下另外这个问题:

Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/local/mysql/bin/mysqlhotcopy line 8.
BEGIN failed--compilation aborted at /usr/local/mysql/bin/mysqlhotcopy line 8.

原因:系统没有按安装DBI组件。

第一个PHP扩展开发

假设要有这么一个扩展,提供一个叫ccvita_string的函数,他的主要作用是返回一段字符。对应的PHP代码可能是这样:

function ccvita_string($str){
     $result = '<a href="'.$str.'">Link</a>';
     return $result;
}

第一步,生成代码
PHP为了扩展开发的方便,提供了一个类似代码生成器的工具ext_skel,具体可以参见说明。
首先我们创建一个文件ccvita.skel,它的内容为

string ccvita_string(string str)

就是告诉ext_skel这个东西,我们要做的扩展里面有个函数叫ccvita_string。然后执行

cd MooENV/src/php-5.3.8/ext/
./ext_skel --extname=ccvita --proto=ccvita.skel
cd ccvita/

这时候,ccvita这个扩展的代码框架就已经出来了。 继续阅读第一个PHP扩展开发