Hacked by Ricter

## 用 PHP 读取文件夹大小各路方法哪家强？

2014.11.04 04:59

参照 Hostker 写在线文件管理器的时候，发现 Hostker 的文件夹也是显示了文件大小的，而且响应速度一点儿也不慢，于是有了下面没什么实际用处的测试。

## 测试方法

以发送请求到请求完毕的时间为准

## 测试用文件夹

## 迭代法

    function GetDirectorySize($path){
        $bytestotal = 0;
        $path = realpath($path);
        if($path!==false){
            foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object){
                $bytestotal += $object->getSize();
            }
        }
        return $bytestotal;
    }

## 递归大法

    function foldersize($path) {
      $total_size = 0;
      $files = scandir($path);

      foreach($files as $t) {
        if (is_dir(rtrim($path, '/') . '/' . $t)) {
          if ($t<>"." && $t<>"..") {
              $size = foldersize(rtrim($path, '/') . '/' . $t);
              $total_size += $size;
          }
        } else {
          $size = filesize(rtrim($path, '/') . '/' . $t);
          $total_size += $size;
        }
      }
      return $total_size;
    }

## php 调用 linux 命令

    function pathsize($path) {
      $io = popen('du -sb ' . $path, 'r');
      $size = fgets($io);
      $pathsize = substr ( $size, 0, strpos ( $size, "\t" ) );
      pclose($io);
      return $pathsize;
    }

## Python 乱入

    from django.http import HttpResponse
    import os

    path = r'D:\dev\homestead\Code\filem\vendor'
    def get_size(start_path = '.'):
        total_size = 0
        for dirpath, dirnames, filenames in os.walk(start_path):
            for f in filenames:
                fp = os.path.join(dirpath, f)
                total_size += os.path.getsize(fp)
        return total_size

    def first_page(request):
        total_size = get_size(path)
        return HttpResponse(total_size)

## 测试结果

显而易见， 调用系统命令 > 递归 > 迭代

## 结论

就算是用最快的方法，也达不到 Hostker 那样的效果啊，后来新喵告诉我才知道

## PHP-PDO

2014.10.08 10:39

执行SQL语句：exec，query，prepare

- exec()
  执行会影响行数的，inert, update, delete...，可以用来判断执行是否成功
- query()
  有结果集的，select

## 因为有预处理，所以上面的都可以全给忘了QAQ

## 为什么在CSS中，id也能像class一样被重复使用

2014.09.20 20:36

在学习CSS的时候，不论老师还是书本都会告诉你：对于只需要用到一次的情况使用id，对于需要用到多次的情况使用class。
但是，如果我们把id用于多个标签，发现它和class一样能改变多个标签的样式。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style>
        #test1{
          width: 200px;
          height: 200px;
          background: red;
          margin: 10px 0;
        }
      </style>
    </head>
    <body>
      <div id="test1"></div>
      <div id="test1"></div>
      <div id="test1"></div>
    </body>
    </html>

结果会发现，三个div的背景都是红色。
说好的id只能使用一次呢？怎么能用在多个div上？这不和class一样了？
这个时候，我们就只有找到官方的权威资料，来看看是怎么一回事了，下面分别是JS、HTML、CSS分别对id标签的使用定义。

## 我们先来看看javascript，MDN对id怎么规定的

js是通过DOM来对HTML进行操作，在DOM的定义中，虽然提到了ID是唯一的

> The concept of an element's unique identifier (ID)(资料链接1)

但是并没对存在多个相同id的情况做出规定，见 (资料链接2)，不过，大部分浏览器会返回找到的第一个id，从这个点来说，，JS中保证id的唯一性很重要。

## 我们再看看w3c标准中对HTML的ID标签的规定

> If a document contains more than one object with the same identifier, the objects are exposed as a collection that can be referenced only in ordinal position. (资料链接3)

大概意思是：如果有多个相同的id，这些对象将被存放在一个集合中，并且只能顺序地被引用。

## 最后，找到w3c标准中对CSS的ID选择器的规定

> If an element has multiple ID attributes, all of them must be treated as IDs for that element for the purposes of the ID selector. (资料链接4)

大概意思是：如过有多个相同的ID，所有的ID都必须选中。

## 最终结论

也就是说，之所以在css中，id也能像class一样被重复使用，这只是对于css来说的，而对于JS和HTML并不适用。
另外id的权值比class高，因此，可以在css中用class做大部分的样式，最后再用id来修改特定的需求。

## Learning CSS tips

2014.09.15 20:53

- 初始化css的使用
  如果对相同的元素用相同的选择符，则以后面的为准，所以大可放心的把初始化css放在最前面。
- 为什么用背景图像来设置列表图标，而不是用`list-type-image`，因为不同浏览器对`ul`、`ol`的`padding-left`值解析可能不同，所以用北京图像更稳妥。

## 当python报错：ImportError: No module named zlib

2014.06.27 22:26

## 下载zlib

http://www.zlib.net/

## 解压并安装zlib

    ./configure
    make
    make install

## 重新编译安装python

    ./configure --with-zlib
    make
    make install