魏长东

weichangdong

东邪

正在查看: php 分类下的文章(第 6 页 / 共 96 篇)

php几种遍历目录文件的方法

第一种用opendir,readdir,closedir系统函数遍历。应该是最常用的。

function myscandir($dir){
        $link = opendir($dir);
        $allfile =array();
        while(($value=readdir($link)) !== false){
                if ($value!='.' && $value!='..') {
                        if (is_dir($dir.'/'.$value)) {
                                $allfile[$dir]=myscandir($dir.'/'.$value);
                        }else {
                                $allfile[]=$dir.'/'.$value;
                        }
                }
        }
        closedir($link);
        return $allfile;
}
$v=myscandir('/home/test');
print_R($v);

第二种用scandir,这个需要对scandir出来的结果进行处理。

$v=scandir('/home/test');
function myscan($v)
{
        foreach ($v as $t){
                if($t=='.'||$t=='..')continue;
                if(is_dir($t)){
                        $tmp=scandir("/home/test/$t");
                        $file[$t]=myscan($tmp);
                }else{
                        $file[]=$t;
                }
        }
        return $file;
}
$v=myscan($v);
print_R($v);

第三种,用glob函数,这个和scandir差不多,也需要吧glob的结果拿来重新处理。

$wcd=glob("/home/test/*");
function myglob($wcd){
        foreach ($wcd as $v) {
                if(is_dir($v)){
                        $d=glob($v."/*");
                        $www[$v]=myglob($d);
                }else{
                        $www[]=$v;
                }
        }
        return $www;
}
$wcd=myglob($wcd);
print_R($wcd);

执行结果如下:

»»阅读全文

修复了CI框架STBLOG的一个BUG

前好一阵子,发现了我的这个博客的【日志分类】浏览有问题。每次点击之后,然后分页显示,但是点击第二页就,显示的内容就重复了,简单的说就是【http://swordman.sinaapp.com/index.php/category/php/4】的内容和【http://swordman.sinaapp.com/index.php/category/php/3】内容一样。开始以为是我加了SAE的kvdb缓存的问题,但是吧缓存给关掉了,问题依旧。困扰了我好久,今天龙颜大怒,铁腕杀之。

»»阅读全文

preg_replace_callback替换preg_replace高级用法

装了SAE的thinkPHP的框架,有个地方报错了。

preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead ..../ThinkPHP/Lib/Core/Dispatcher.class.php 第 125 行.

看了下125行的代码是这样的:

preg_replace('@(\w+)\/([^\/]+)@e', '$var[\'\\1\']=strip_tags(\'\\2\');', implode('/',$paths));

改成这样就好了。

preg_replace_callback('@(\w+)\/([^\/]+)@',function ($matches) use ($var){
                    return $var[$matches[1]] = $matches[2];
                 },implode('/',$paths));

主要是用preg_replace_callback替换了preg_replace,还有用了php的闭包函数。通过use可以使用外面的$var变量。但是我这么写也没有问题。

preg_replace_callback('@(\w+)\/([^\/]+)@',function ($matches){
                    return $var[$matches[1]] = $matches[2];
                 },implode('/',$paths));

php 时区设置 date_default_timezone_set

Asia/Shanghai 亚洲,中国,上海 
Asia/Taipei 亚洲,中国,台北 
Asia/Chongqing 亚洲,中国,重庆 
Asia/Harbin 亚洲,中国,哈尔滨 
Asia/Urumqi 亚洲,中国,乌鲁木齐 
Asia/Hong_Kong 亚洲,中国,香港 
Asia/Macau 亚洲,中国,澳门 
Asia/Singapore 亚洲,新加坡 
Asia/Seoul 亚洲,韩国,首尔 
Asia/Tokyo 亚洲,日本,东京 
Europe/Berlin 欧洲,德国,柏林 
Europe/Dublin 欧洲,德国,都柏林 
Europe/Paris 欧洲,法国,巴黎 

php 5.3新增的闭包语法介绍function() use()

function callback($callback) {    
    $callback();    
}        
callback(function() {    
    print "This is a anonymous function.<br />\n";    
});
//以上代码详解  
//输出: This is a anonymous function.<br />\n    
//这里是直接定义一个匿名函数进行传递, 在以往的版本中, 这是不可用的.    
//现在, 这种语法非常舒服, 和javascript语法基本一致, 之所以说基本呢, 需要继续向下看    
//结论: 一个舒服的语法必然会受欢迎的.

»»阅读全文

preg_replace的/e模式的替换

到了php5.5不支持preg_replace后面加/e的模式了。如这种

$str = preg_replace("/\{(\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}/es", 
"\$this->addquote('<?php echo \\1;?>')",$str);

后报错的。

可以用这个preg_replace_callback函数替换。

附上preg_replace_callback函数的用法实例。

$str='HELLO';
$s=preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str);
echo $s;
$s=preg_replace_callback("/([A-Z])/",'wcd', $str);  
function wcd($match) {  
    return  '_'.strtolower($match[1]);  
}  
echo $s;
//以上程序,在php5.5以下版本输出是一样的。但是在大雨等于5.5版本就会报错。

如果是对象中使用,这么使用:

preg_replace_callback("/([A-Z])/",array($this,'wcd'), $str);

安装php的redis扩展

在linux下安装了redis,想进一步在php中使用,那就得安装php的redis扩展了。

wget https://codeload.github.com/owlient/phpredis/zip/master

unzip phpredis-master.zip
mv  phpredis-master   /usr/local/php/include/php/ext/phpredis
cd /usr/local/php/include/php/ext/phpredis
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config

»»阅读全文

曲折的过程-linux安装composer

网上看了安装composer的教程,就两行命令,结果我安装的时候,一个雷接一个雷的。

虚拟机linux装composer,

curl -sS https://getcomposer.org/installer | /usr/local/php/bin/php 

报错说连不上host,然后我用我的电脑用浏览器代理把php文件下载下来,然后传到虚拟机linux再去执行。

/usr/local/php/bin/php composer.php,结果又报错

【Some settings onyour machine make Composer unable to work properly.
Make sure thatyou fix the issues listed below and run this script again:
The opensslextension is missing, which means that secure HTTPS transfers areimpossible.
If possible youshould enable it or recompile php with --with-openssl】

然后一看,我当时装php的时候,装了openssl,但是编译安装php的时候,确实没有加--with-openssl选项。

如是,决定装php的openssl。

»»阅读全文

Tags: composer

配置php-fpm和nginx

折腾了好久终于把nginx和php-fpm安装好了。但是只能访问静态文件,不能访问php,中间改了一些配置,可以王文index.php但是不能访问别的php文件,例如wcd.php。

具体过程就不说了,直接上结果。主要是这个文件nginx.conf 。

»»阅读全文

编译安装php

之前用yum安装了php,但是因为yum的repo源问题,导致php-fpm没有安装成功。然后就试着用编译安装。

yum -y install gcc automake autoconf libtool make
yum -y install gcc gcc-c++ glibc

yum -y install libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl openssl-devel
 
wget http://cn2.php.net/distributions/php-5.4.38.tar.gz
tar zvxf php-5.4.38.tar.gz
cd php-5.4.38
./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt \
--enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath \
--enable-inline-optimization --with-bz2  --with-zlib --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \
--with-gd --with-jpeg-dir
make test
make 
make install

第一次装完,惊奇的发现php居然还是之前的5.16版本,还没有php-fpm。当时我是用了yum erase命令的,吧之前yum install的都erase了,但是这次编译安装完居然这样。

没办法,我又用rpm -e卸载了php,又重新来了一遍。贺!终于ok了!

/usr/local/php/bin/php -v

PHP 5.4.38 (cli) (built: Mar 13 2015 00:20:52) 

/usr/local/php/sbin/php-fpm -v

PHP 5.4.38 (fpm-fcgi) (built: Mar 13 2015 00:21:15)

之前装php-fpm挺顺利的,没遇见啥问题。