2014年2月

Javascript Math.random函数生成随机数

Math.random(); //该方法产生一个0到1之间的浮点数。
Math.floor(Math.random()*10+1); //1-10
Math.floor(Math.random()*24);//0-23 
var now=new Date(); 
var number = now.getSeconds(); //这将产生一个基于目前时间的0到59的整数。 

var now=new Date(); 
var number = now.getSeconds()%43; //这将产生一个基于目前时间的0到42的整数。 

关于这点,math.random()具体怎么实现我们不必在意,只要知道怎么用就行了。另外Math.random()实际上取的是[0, 1),加上Math.floor()向下取整,也就是取小于x的整数,在非负数范围内相当于舍去小数点,于是就能达到这个效果了

bootstrap激活tooltip

bootstrap官方帮助说:

出于性能方面的考虑,工具提示和弹框组件的data属性api是选择性加入的,也就是说你必须自己初始化他们。

初始化 在需要使用tooltip的元素里加上:

onMouseOver="$(this).tooltip('show')"

不然光靠进入js还是没办法的。然后设置上data-toggle="tooltip",设置好title属性,就OK了

PHP 遍历目录实例

做文件管理的基础设施建设吧,嗯……反正还是打到打不开的思路来的。
这里为了后续方便,忽略了本目录.的显示,然后对于根目录不显示上一级的..

            $num = 0;    // 统计子目录和文件个数
            $problem = FALSE;
            $fileList = [];

            if (!empty($_GET['route'])) 
                $dirname = $_GET['route'];
            else 
                $dirname = 'upload';

            $dir_handle = @opendir($dirname);

            if (!file_exists($dirname)) 
                echo "<script>window.location.href='"."index.php';</script>";
            
            if (!$problem) {
                while ($file = readdir($dir_handle)) {
                    $dirFile = $dirname.'/'.$file;
                    if ($dirname == 'upload' && $file != '.' && $file != '..') {
                        $fileList[$num] = array('file' => $file, 'filesize' => filesize($dirFile), 'filetype' => filetype($dirFile), 'filemtime' => date('Y/n/t',filemtime($dirFile)));
                        if (is_dir($dirFile)) {
                            $fileList[$num]['filesize'] = '';
                        }
                        $num++;
                    } elseif ($dirname != 'upload' && $file != '.') {
                        $fileList[$num] = array('file' => $file, 'filesize' => filesize($dirFile), 'filetype' => filetype($dirFile), 'filemtime' => date('Y/n/t',filemtime($dirFile)));
                        if (is_dir($dirFile)) {
                            $fileList[$num]['filesize'] = '';
                        }
                        $num++;
                    }
                }
            }

            /*
            // 统计文件夹大小
            function dirSize($dir) {
                $dir_size = 0;

                if ($dirhandle = @opendir($dir)) {
                    while ($filename = readdir($dirhandle)) {
                        if ($filename != '.' && $filename != '..') {
                            $subFile = $dir.'/'.$filename;
                            if(is_dir($subFile)) 
                                $dir_size += dirSize($subFile);
                            if(is_file($subFile)) 
                                $dir_size += filesize($subFile);
                        }
                    }
                    closedir($dirhandle);
                    echo 'Hello';
                    return $dir_size;
                }
            }
            */

            @closedir($dir_handle);
            return $fileList;

PHP 浏览器已知文件类型下载写法

header()真的是个好东西,下载的本体其实就是把路径给出来,未知格式浏览器无解自然会弹出下载框,已知格式怎么破呢?比如html,这不就成了直接打开了吗?

    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Content-Length: '.filesize($filename));

    readfile($filename);

加上header()之后读取文件,收工。

PHP 自写函数删除文件夹

文件类中经常用到@忽略报错同时告诉你:打到打不开未知,比如这次,用递归一直一直来,最终还是能滚出来的。

function delDir($directory) {
    if(file_exists($directory)) {
        if($dir_handle = @opendir($directory)) {
            while($filename = readdir($dir_handle)) {
                if($filename != '.' && $filename != '..') {
                    $subFile = $directory . '/' .$filename;
                    if(is_dir($subFile))
                        delDir($subFile);
                    if (if_file($subFile))
                        unlink($subFile);
                }
            }
            closedir($dir_handle);
            rmdir($directory);
        }
    }
}

在目录菜单的时候,会生成一个.的目录和..的目录,.代表此目录,..包括上一级目录,遍历的时候要把他们俩除外。

PHP 文件类函数以及一个新手坑

PHP文件基本操作函数有:
unlink()删除文件
rename()重命名文件或目录
copy()复制文件
另外还有文件夹操作
mkdir() 建立文件夹
rmdir() 删除空文件夹(非空会报错)

比如rename()手册上会这么写:
bool rename ( string $oldname , string $newname [, resource $context ] )

嗯 我个人觉得有点坑,其实与其说name不如说带上路径的文件/目录名好了,它不仅是要name,还要route啊!!

PHP 文件上传类实例

=A=其实是书上扒下来的,我觉得自己写一定会死=A=

这种高危产品不搞演示了,拆开来说一下好了。(个人理解,说不定有误)

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="route" value="<?php echo $route ?>">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <input type="file" name="myfile">
    <input type="submit" value="上传文件">
</form>    

- 阅读剩余部分 -

PHP die()的运用

die()其实也就是exit(),可以输出内容并且结束脚本,否则PHP还是会继续向下运行,除非是致命错误:
这样我们就不需要再设变量然后嵌套if来达成如果这里报错了。

写成die('错误'),那么就会在运行到这行结束脚本并且输出错误

        if (strpos($route, '..') !== FALSE || strpos($route, 'upload') === FALSE) {
            echo '路径非法';
            //$problem = TRUE;
            die();
        }

比如这个 本来想用$problem嵌套之后判断在运行之后的代码,但用了die()之后就直接搞定了,如果是有报错的部分,也可以与@配合使用(@能忽略报错提示)