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 | 留下评论

HTTP 缓存

曾经最困惑我的问题就是,如果服务器上的一个资源已经在本地保存了副本,那第二次再访问此资源并且此资源还没有过期,还要不要进行HTTP连接?是否需要网络?
HTTP 权威指南中是这样写的:原始服务器的内容可能会发生变化,缓存要不时的对其进行检测,看看保存的副本是否为最新的。“新鲜度检测”被称为HTTP再验证(revalidation)。为了有效的验证,HTTP定义了一些特殊的请求,不要用从服务器获取整个对象,就可以快速检测出内容是否为最新。
由于缓存中通常会包含数百万文档,而且网络宽带比较珍贵,所以大部分缓存只有客户端发起请求,并且副本旧的足以需要检测时,才会再验证。

所以通过上面的文章可以得出, 在资源未过期是不会进行验证的。

看到一篇很不错的文章:http://kb.cnblogs.com/page/166267/

发表在 web | 留下评论

导致HTTP事务慢的几个常见原因

当发现一条HTTP事务漫的时候,可以可以从以下几个原因去判断问题
1. DNS解析漫,当访问一个URL浏览器首先会分割URI. 将URI中的域名解析成IP地址,然后发起一个TCP请求(浏览器一般会有DNS缓存)
2. HTTP连接过多
3. COOKIE过多. 当HTTP向服务器发起请求时会将本地将网站所有的COOKIE找出来向服务器发起请求
4. 因特网对报文的传输和服务器处理报文都需要时间
5. 服务器响应过漫. 当服务器接受到的请求过多导致服务器压力过大时,服务器对请求的处理会变得很缓慢. 数据库压力过大或者程序编写不正等原因都会导致服务器响应过漫.
6. 网络过漫
7. 对HTTP的处理算法. 比如Chrome可能就会更快,而IE6会慢一些.

发表在 web | 留下评论

Centos 安装tengine

http://tengine.taobao.org/

安装pcre和openssl

yum install pcre-devel
yum -y install openssl openssl-devel
wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz
tar -zxvf tengine-2.1.0.tar.gz
cd tengine-2.1.0.
./configure
make
sudo make install

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
发表在 服务器 | 留下评论

Drupal date pop-up 只能选择今天以后的日期

  1. function MYMODULE_date_popup_process_alter(&$element, &$form_state, &$context) {
  2.   if (isset($element['#field']['field_name'])) {
  3.     switch($element['#field']['field_name']) {
  4.       case 'field_material_group_play_date':
  5.         $element['#datepicker_options'] = array(
  6.             'minDate' => "+0",
  7.         );
  8.         $element['date'] = date_popup_process_date_part($element);
  9.         break;
  10.     }
  11.   }
  12. }
发表在 Drupal | 留下评论

PHP 判断上传文件的mime类型

Drupal默认的上传我也不知道是不是属于bug. 当你只允许上传.jpg的图片时。如果我将一个.php的文件后缀改成.jpg也能够正常上传。以下我写了一个修复脚本

/**
 * Implements hook_file_validate
 */
function mymodulename_file_validate($file) {
  $errors = array();
  $mime = mime_content_type(drupal_realpath($file->uri));
  if($mime != $file->filemime) {
    $errors[] = t('Upload error, the file format is not valid.');
  }
  return $errors;
}

发表在 Drupal | 留下评论

Drupal Views 添加默认过滤

经常我们的Views会暴露出一些字段让用户过滤,但是在默认的时候过滤肯定是空的. 可能你想添加一些默认的过滤怎么办?

  1. function mymodule_views_query_alter(&$view, &$query) {
  2.   if ($view->name == 'myviews' && $view->current_display == 'mypage') {
  3.     // 如果以下的field和table不知道的话,可以先在views页面选择一个值来过滤. 然后使用dpm($query);来看
  4.     if(!isset($view->exposed_input['myfield'])) {
  5.       $query->add_table('myfield_table');
  6.       $query->add_where(1, 'myfield_table.myfield.xxx', $default_fileter_array, 'IN');
  7.     }
  8.   }
  9. }
发表在 Drupal | 留下评论

Drupal 用户锁定以后怎么办?

用户登陆的信息主要保存在flood表,所以当你登陆失败以后最简单的办法就是清空flood表

1. 如果你安装了drush?
以下两种方法都可以.

  1. $drush sqlq "DELETE FROM flood"
  2. $drush php-eval 'db_query("DELETE FROM `flood`");'

2. 如果你安装了devel?
直接打开 /devel/php,然后运行以下代码

  1. db_query("DELETE FROM `flood`");

3. 如果以上你都没有? 你可以登陆到phpmyadmin。找到你的flood表,然后清空

发表在 Drupal | 留下评论

关于HTTPS几大疑问

为什么https是安全的? 它的加密工作原理是什么?从哪里开始加密的?是浏览器完成的加密工作?证书的工作机制是什么(为什么证书收费)?

发表在 其它 | 留下评论