魏长东

weichangdong

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

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挺顺利的,没遇见啥问题。

虚拟机下linux装nginx

本来以为安装nginx很简单,就是下载然后编译安装,但是装完之后,只能静态起作用,php没法用(我这个原因很多,但是最基本的原因是nginx有些依赖库没有安装)。

tar xvzf nginx-1.7.10.tar.gz

cd  nginx-1.7.10

 ./configure --without-http_rewrite_module【编译的时候有报错,然后提示加这个参数--without-http_rewrite_module】

make 

make install

添加nginx的路径

export PATH=$PATH:/usr/local/nginx/sbin/

启动nginx

nginx -c /usr/local/nginx/conf/nginx.conf

curl http://localhost/ 已经可以看到欢迎的界面了

在我的电脑访问,http://192.168.137.129(这是我虚拟机linux的ip),也可以看到欢迎的界面

因为想找一些文件,就安装了locate这个软件。

yum  install mlocate

updatedb


静态页面没问题,但是访问php文件还是不行。

就修改了nginx.conf文件之后,但是启动后,提示nginx: [emerg] using regex "\.php$" requires PCRE library in /usr/local/nginx/conf/nginx.conf:65,是一些库缺失。

如是我决心重装nginx。因为rpm -qa|grep nginx,居然没有,所以只好去安装的目录,直接rm掉nginx的安装目录。

»»阅读全文

php登陆不用session,用cookie

之前的管理后台是用session实现的,但是现在不让用session了,就改成cookie模式了。

这是之前的代码(登陆存储session):

 

$_SESSION['manage']['showName'] = $rst['showName'];//为了和功能性的session区别开,
//特意用了一个manage的数组来存储admin相关的数值
        $_SESSION['manage']['userPid'] = $rst['userPid'];
        $_SESSION['manage']['gameName'] = $rst['gameName'];

修改之后的:

setcookie("manage[showName]", $rst['showName']);
        setcookie("manage[userPid]", $rst['userPid']);
        setcookie("manage[gameName]", $rst['gameName']);

»»阅读全文