Symfony 如何获取container

我们在控制器中,直接继承了Controller 类。此时我们当使用 $this的时候,此时的 $this已经包含了很多的类和方法
如果我们在一个Utils类中。此类没有继承任何的。那如何获取这个 ($this)container呢

方法1. 调用的时候传参数:
arguments: [@service_container]

方法2. 使用global
global $kernel;
$this->container = $kernel->getContainer();

发表在 symfony | 留下评论

Composer

安装:
https://getcomposer.org/doc/00-intro.md

Composer 搜索地址:
https://packagist.org/

发表在 其它 | 留下评论

Mac 安装pear和pecl

http://jason.pureconcepts.net/2012/10/install-pear-pecl-mac-os-x/

发表在 Mac, PHP | 留下评论

PHP 对比 Erlang

数组过滤

PHP 比较数组过滤

  1. $arr = array(
  2.   array(1, 9),
  3.   array(1, 8),
  4.   array(6, 10),
  5.   array(15, 44),
  6.   array(4, 6),
  7.   array(30, 5),
  8. );
  9.  
  10. $newarr = array();
  11. foreach($arr as $key => $value) {
  12.   if($value[0] > 10 && $value[1] > 10) {
  13.     $newarr[] = $value;
  14.   }
  15. }
  16.  
  17. var_dump($newarr);

Erlang列表解析做相同的事

  1. L = [{1,9},{1,8},{6,10},{15,44},{4,6},{30, 5}].
  2. [{X,Y} || {X,Y} <- L, X >10, Y>10].

毕达哥拉斯三元组

  1. $M = 11;
  2. $R = array();
  3.  
  4. for($X = 1; $X < $M; $X++) {
  5.   for($Y = 1; $Y < $M; $Y++) {
  6.     for($Z = 1; $Z < $M; $Z++) {
  7.       if($X > $Y && $Y > $Z && $Z*$Z + $Y * $Y == $X * $X) {
  8.         $R[] = array($X, $Y, $Z);
  9.       }
  10.     }
  11.   }
  12. }
  13. print '<pre>';
  14. print_r($R);

Erlang

pythag(N) -> [{A,B,C} || 
	A <- lists:seq(1, N),
        B <- lists:seq(1, N),
	C <- lists:seq(1, N),
	A < B,
	B < C,
	A*A + B*B =:= C*C
].
发表在 PHP | 留下评论

Drupal 上传文件以文件的md5命名

有这么一种场景: 如果你的Drupal作为一个server,客户端每次都需要将服务器上的资源下载到客户端,你如何保证下载的内容不重复?比如 a.jpg和b.jpg其它是一张图片复制,只是换了一个名字。如何保证客户端不浪费流量,只需要下载一次?

我这里的解决方案是当上传文件的时候给文件重命名,名字中包含这个文件的md5, 文件md5能确保这个文件的唯一性. 客户端在下载资源的时候,只需要判断文件名前面的md5是否存在既可.

  1. /**
  2.  * 文件上传名增加md5效验.
  3.  *
  4.  * Implements hook_file_insert().
  5.  */
  6. function HOOK_file_insert($file) {
  7.   if ($wrapper = file_stream_wrapper_get_instance_by_uri($file->uri)) {
  8.     $realpath = $wrapper->realpath();
  9.     // 获取文件名.
  10.     $basename = drupal_basename($file->uri);
  11.     $dirname = drupal_dirname($file->uri);
  12.  
  13.     // 当已是md5加密的文件名去掉加密头.
  14.     if(preg_match('#([a-z0-9]{32})_(.*)#', $basename, $matches)) {
  15.       $basename = $matches[2];
  16.     }
  17.     $filename = md5_file($realpath) . '_' . $basename;
  18.     $newpath = file_create_filename($filename, $dirname);
  19.     file_move($file, $newpath, FILE_EXISTS_RENAME);
  20.   }
  21. }
发表在 Drupal | 留下评论

教大家如何免费下载高质量的音乐

首先打开http://music.baidu.com,登陆, 然后搜索喜欢的音乐,并标志为收藏

m1

然后进入到百度云音乐http://yinyueyun.baidu.com/
m2

m3

发表在 其它 | 留下评论

Drupal 重写date模块表单默认展示方式

Drupal date模块默认的表单展示的确有点很不喜欢,于是写了hook去覆盖原来的展示方式
date1

最终显示方式:
date2

代码:

  1. function mymodule_date_combo_process_alter(&$element, &$form_state, $form) {
  2.   $element['#title_display'] = 'none';
  3.   $element['value']['#title_display'] = true;
  4.   $element['value']['#title'] = t('Start date');
  5.   $element['value2']['#title'] = t('End date');
  6. }
  7.  
  8. /**
  9.  * 移除fieldset.
  10.  */
  11. function mytheme_date_combo($variables) {
  12.   $element = $variables['element'];
  13.   $field = field_info_field($element['#field_name']);
  14.   $instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
  15.   return $element['#children'];
  16. }
  17.  
  18. /**
  19.  *移除字段的描述.
  20.  *
  21.  * Implements hook_weight_process_alter().
  22.  */
  23. function mymodule_date_popup_process_alter(&$element, &$form_state, &$context) {
  24.   if (isset($element['#field']['field_name'])) {
  25.     switch($element['#field']['field_name']) {
  26.       case 'myfield':
  27.         unset($element['date']['#description']);
  28.         break;
  29.     }
  30.   }
  31. }
发表在 Drupal | 留下评论

Centos 编译PHP-fpm mysql nginx

前言
我的编译目录分别为

/app/mysql
/app/php
/app/nginx

MYSQL

下载必要的软件

yum -y install make gcc-c++ cmake bison-devel  ncurses-devel

下载mysql, 这里现在最新的是5.6.26, 要下载其它的把URL后面的版本号改成你需要的版本号就可以了

wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.26.tar.gz
tar -zxvf mysql-5.6.26.tar.gz
cd mysql-5.6.26

开始编译

cmake \
-DCMAKE_INSTALL_PREFIX=/app/mysql/ \
-DMYSQL_DATADIR=/app/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

make && make install

创建用户组

groupadd mysql
useradd -g mysql mysql

修改mysql目录权限

chown -R mysql:mysql /app/mysql

执行初始化配置

/app/mysql/scripts/mysql_install_db --basedir=/app/mysql --datadir=/app/mysql/data --user=mysql
#移除默认的my.cnf文件
mv /etc/my.cnf /etc/myback.cnf
cp /app/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
#启动mysql
/etc/init.d/mysql start

编辑/etc/profile 增加

PATH=/app/mysql/bin:$PATH
export PATH
source /etc/profile

设置mysql密码

mysql_secure_installation

mysqlconfig

mysql基本配置

vim /app/mysql/my.cnf

[mysqld]
socket=/tmp/mysql.sock

建议sock文件

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

Nginx

安装必要软件

yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel

下载nginx
http://nginx.org/en/download.html 选择最新的

wget http://nginx.org/download/nginx-1.9.5.tar.gz
tar -zxvf nginx-1.9.5.tar.gz
cd nginx-1.9.5

创建用户

useradd -r nginx

开始编译

./configure \
--user=nginx                          \
--group=nginx                         \
--prefix=/app/nginx                   \
--sbin-path=/usr/sbin/nginx           \
--conf-path=/app/nginx/nginx.conf     \
--pid-path=/var/run/nginx.pid         \
--lock-path=/var/run/nginx.lock       \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module        \
--with-http_stub_status_module        \
--with-http_ssl_module                \
--with-pcre                           \
--with-file-aio                       \
--with-http_realip_module             \
--without-http_scgi_module            \
--without-http_uwsgi_module

make && make install

创建启动文件/etc/init.d/nginx

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# pidfile:     /var/run/nginx.pid
# user:        nginx

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

lockfile=/var/run/nginx.lock

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

增加可执行文件并启动nginx

chmod +x /etc/init.d/nginx
/etc/init.d/nginx start

chkconfig --add nginx
chkconfig --level 345 nginx on

nginx_welcome

开启fastcgi, 编辑/etc/nginx/nginx.conf

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
}

PHP-fpm

安装必要软件

yum -y install gcc automake autoconf libtool make gcc-c++ glibc 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

下载php http://php.net/get/php-5.5.29.tar.bz2/from/a/mirror

wget http://cn2.php.net/get/php-5.5.29.tar.bz2/from/this/mirror
mv mirror php-5.5.29.tar.bz2
bunzip2 php-5.5.29.tar.bz2 
tar -xvf php-5.5.29.tar
cd php-5.5.29

开始编译,其中 –with-mysql=/app/mysql 是我的Mysql安装目录

./configure --prefix=/app/php  --enable-fpm --with-mcrypt --enable-mbstring --enable-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=mysqlnd --with-mysqli=mysqlnd --with-gd --with-jpeg-dir --enable-opcache --with-pdo-mysql

make && make install

如果出现错误:configure: error: mcrypt.h not found. Please reinstall libmcrypt.
需要安装mcrypt 2.5.8,一定是2.5.8

wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
tar -zxvf libmcrypt-2.5.8.tar.gz 
cd libmcrypt-2.5.8
./configure
make && make install

opcache 出错?
configure: error: Don’t know how to define struct flock on this system, set –enable-opcache=no

vim /etc/ld.so.conf.d/local.conf     # 编辑库文件
/usr/local/lib                       # 添加该行,64位使用:/usr/local/lib64
                                     # 保存退出
ldconfig -v                          # 重新加载

复制php.ini和php-fpm.conf

cp php.ini-production /app/php/lib/php.ini
cp /app/php/etc/php-fpm.conf.default /app/php/etc/php-fpm.conf

配置php.ini, 编辑/app/php/lib/php.ini

display_errors = On
memory_limit = 1024M #根据个人情况来
date.timezone = Asia/Shanghai
post_max_size = 1000M
upload_max_filesize = 1000M
max_execution_time = 1000

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=4
opcache.max_accelerated_files=4000

配置php-fpm.conf, 编辑/app/php/etc/php-fpm.conf

user = nginx   #这里和上面nginx的用户对应起来
group = nginx

启动php-fpm

/app/php/sbin/php-fpm

#重启, 不支持重启,唯一的办法就是结束进程再启动
killall php-fpm
/app/php/sbin/php-fpm

编辑/etc/profile

export PATH=/app/php/bin:$PATH

测试

vim /app/nginx/html/index.php

phpinfo();

phptest

发表在 mysql, PHP | Centos 编译PHP-fpm mysql nginx已关闭评论

Drupal bootstrap

一直看到system表中的bootstrap字段, 没看懂哪里来的
在modules_list函数中是这样调用的

$list = system_list('bootstrap');

手动试了一下,大概打印出了这么几个模块。
bootstrap

于是乎我就拿了devel来做实验. 在 devel.info中并没有看到有定义bootstrap这样的属性.

经过一番搜索和跟踪,大概了解了是这个样子:
函数_system_update_bootstrap_status 会更新这个字段的值. 前提就是模块要定义这么几个Hook中的任意一个. 都会为把此模块的bootstrap设置为1. 具体定义定义的hook是什么是由函数提供:bootstrap_hooks

  1. hook_boot()
  2. hook_exit()
  3. hook_watchdog()
  4. hook_language_init()

接着我再返回来看devel模块,果然在devel有定义了devel_boot().

有什么用?
数据中字段的描述是这样的:Boolean indicating whether this module is loaded during Drupal’s early bootstrapping phase (e.g. even before the page cache is consulted).

但是我还是不大懂它是如何个早法,于是自己debug. 大概是这样

在函数_drupal_bootstrap_variables()中会看到这行代码module_load_all(true). 其实并这是drupal第一次加载模块,但是并不是所有模块,而是bootstrap的模块. 而在后面的_drupal_bootstrap_full()中的module_load_all()中才会加载所有模块
boostrap1

发表在 Drupal | 一条评论

Mysql 常用

  1. # 查看mysql状态
  2. mysql> show global status;
  3.  
  4. #查看指定的变量,查看当前的连接数
  5. mysql> show global status LIKE "%threads_connected%";
  6.  
  7. #查看当前的连接创建数
  8. mysql> show global status LIKE "%threads_created%";
  9.  
  10. #查看变量信息
  11. mysql> show variables;
  12.  
  13. #查看指定变量的信息
  14. mysql> show variables LIKE "%xxxx%";
  15.  
  16. # 每秒刷新一次mysql变量信息
  17. $mysqladmin -uroot -proot extended-status -ri1
发表在 mysql | 留下评论