zoukankan      html  css  js  c++  java
  • hdfoo站点开发笔记

    为了安全,也要兼顾编辑器切换管理 开发时不必管目录名称的事, 只是在部署的时候,才修改应用目录和tp目录的名字就行了.

    为了提高tp的加载效率, 始终给app和tp以绝对路径.就是以 realpath来定位
    realpath返回的就是 一个绝对路径, 在lx中是以 斜杠 根树开始的. 参数可以是文件名, 也可以是目录名称. 返回结果: 如果是文件的话, 末尾会带文件名, 如果是目录的话,即使参数末尾带斜杠, 也会删除结尾的斜杠.
    所以, 如果定义 THINK_PATH的话, 末尾要加上/ define('THINK_PATH', realpath('./Think').'/');

    vim的f 和 t键的区别: f是正好调到指定的字符 , 而t: to 是跳转到指定字符的前面
    0和^的区别: 0是第一个字符,不管是不是空白字符; ^是跳转到第一个非空白字符. 跳到行的最后 就只有一个符号了$

    在vim中, 除了对行的操作外, 将 操作命令 y,d,c,x 等和 跳转条件 f, t等 相结合, 操作就不只是以行为单位了, 可以想到哪里就操作到哪里. 比如 dt)...

    vim中,字的含义, 一个英文单词是一个字, 连续的多个汉字也只能算一个字. 文本的单位 有 字w, 行j k等这些, 既是文本 的单位, 同时 也是vim的跳转命令.

    所以, 像 操作命令 d, c,y, x 等 和 文本内容的单位比如 w j k 等符号之间的位置关系: 应该是: 操作命令+倍数+单位: 比如: d2w, d4j, y2w等等,
    而不是: 倍数+单位+操作命令, 比如 : 4wd: 因为如前所说, 4w它是已经是一个命令了, 会向后跳转4个字, 这时命令就已经执行了, 再到d的时候, 其实也就只有一个 单字符 d命令了, 这个肯定就不是原来的本意了.

    非常重要的一个思维就是, html中的结构, 尽量不要用手工符号 比如 br等 去调整, 而是要用 "语义化的标签" 去组织 内容. 比如p, span, div, 字体大小等方面,尽量不要用 font size之类的, 而是用 h1, h2...

    chmod的格式: chmod [who] [+-=] [mode] 文件1 文件2...

    一般来说, 文件/目录的创建者, 自动成为所有者, 自动具有 "读写执行" 的权限

    1. chmod默认只是对当前文件或目录(只一层目录), 修改访问mode. 要对目录下的子目录递归修改权限, 要使用 -R或 --recursive
    2. 可以一次性的 修改多个文件或目录, 而不必使用多个相同的命令来修改,这样更快 chmod +x file1 file2 dir1
    3. who可以是多个用户的组合,比如: ug+x
    4. 可以在一个命令中设置多个不同用户的权限, 中间用逗号分隔, 比如: g+w, o+x
    5. 访问模式还可以用 除了加号减号外, 还可以用等号. =u =g, 等, 表示跟所有者, 组的权限相同.
      [root@localhost html]# chmod o+w Honda Public -R

    一般来说, 文件在本地(控制台) 访问, 读写, 编辑 都是以 owner的身份进行的, 只是在以 网络/web/localhost的 方式 访问时是以other(比如apache)身份访问的.

    要让apche能够访问web根站点以下所有目录(解决linux写权限问题), 只是要求从 html目录(localhost网站根) 开始->到其下 所有子目录的访问权限 能被apache所 "读 + 写"就行了, 不必要求从/var/www/ 的所有逐级目录都被apache所读写.

    • 父目录下, 可以存放 和父目录所有者不同的 其他所有者的文件或子目录.


    ==================================


    查看apache httpd载入了哪些模块, 使用httpd -M 命令

    查看到已经载入了 rewrite_module
    然后在 html根目录设置: AllowOverride All.

    在tp的入口文件设置 define('DIR_SECURE_FILENAME', 'deny.htm') 以及deny内容的时候, 并不会自动 关闭apache的目录列表显示功能, 这个设置 只是在目录下生成对应的deny.htm文件和写入内容. 要禁止显示目录列表, 还的要自己在httpd.conf中设置:

    两种设置方法:

    1. 是设置<IfModule dir_module> DirectoryIndex index.php index.html (在这里加入deny.htm文件, 当访问目录时,如果下面没有其他index文件, 就会显示这个deny.htm文件的内容 Access Denied)</IfModule> 这个对于 所有的目录都适用 是最简单有效的方法

    2. 另一种方式就是设置 某个目录的Options, 去掉Indexes索引(显示功能): 不写Indexes, 或者在前面加减号-Indexes.

    <Directory '/var/www/html/Foo'>
     Options  FollowSymLinks
    </Directory>
    
    // 默认情况下, 上面的Foo下面的子目录都不能索引列表显示了, 比如: html/Foo/Bar/ . 但是如果你又显式的 规定了其他子目录的Indexes权限, 那么根据权限重写, 覆盖的原理, 下面的这个Common目录又可以列表显示了.
    
     <Directory '/var/www/html/Foo/Common'>
      Options Indexes FollowSymLinks
     </Directory>
    

    注意 jk 等 "行" 的倍数和 w b等 "字"的倍数的不同, 因为 j k本身就要向上/下一行了,所以, 如果 2j, y2j 将会 复制 3行...



    关于分页类的使用

    分页类, 页码的显示, 是一个包含链接的字符串, 这个页码字符串要用 $page->show() 方法生成并传递到模板
    页码中的字符串, 可以用类的 setConfig方法去设置

    分页类的作用有两个: 一个是生成(通常在显示内容下方)的页码链接字符串; 二个是 根据limit决定 传递到模板的数据记录范围.
    主要有三步: 初始化类new ThinkPage($count, 10); 写分页字符串; 写limit连贯方法. 其中 limit的参数不能写死了, 因为这个要被修改的.$limit=$page->firstRow . ',' . $page->listRow 这两个page对象的两个属性.

    page类用到了类似ajax的思想: 将单击 产生的 页码号传递到php后台的操作方法中, 操作方法根据页号($_GET['page']), 从数据库中查询对应的内容, 在返回给前段的ajax程序, 最后显示.

    在 模板中 的函数 U方法 生成url地址时 中, 要使用 原生的php语法, 不能再用模板语法了, 比如数组只能使用中括号, 不能使用点号语法, 和模板输出. 又比如: success和error方法的 跳转 地址就是用 U方法生成的

    通常在实际开发中, 除非特别需要, 都要尽量保持系统的默认值. 不必去费不必要的精力去改一些不必要的默认值.


    mysql中, 无法删除test数据库?

    别的数据库的frm,myd,myi文件直接拷贝过来即可打开,数据也都有,这意味着只要这些文件在,数据就不会丢失。(其中frm是表的结构信息, myd是表的数据记录信息, myi是表的索引信息. 因此, 要移植/导入数据库, 就将这三个文件拷过来. )不过貌似只有frm文件的表拷贝过来是打不开的。
    请不要在数据库文件夹下面创建文件或者目录。否则会 删除数据库失败.
     .empty文件时wampserver安装时自动创建的,可能是为了让用户不要删除test库才创建的吧。
    

    #### 数据库中的db.opt是记录数据库所用的 默认字符集和校验规则.

    在mysql的数据库中, 只有一个单词使用 下划线,就是 auto_increment, 其他都不使用下划线,比如 primary key.

    单独使用命令来设置主键: alter table foo_table add constraint pk_foo primary key(id, name);


    url编码?

    根据rfc的规定, 在url中只能包含字母数字,和一些特殊符号(包括 .-_'$?&*等,只有单引号没有双引号), 但是这些特殊符号只能是在网址中,不是说在 查询字符串(传参中), 如果这些特殊符号在query string中, 就要对它们进行编码处理

    rfc没有对编码做统一的规定, 而是让浏览器自己来做决定,所以就比较混乱. 比如ie和ff就有很多不一样的地方.
    可以通过js脚本来对url做统一的处理, 即: 不让浏览器有插手的机会, 让js来处理(汉字和特殊字符). 主要包括两个函数:
    encodeURI() 和 decodeURI()

    使用模板包含include需要注意的事项?

    1. 被包含的模板文件本身, 并不会自动调用对应的控制器方法, 也就是说, 被包含的其他模板文件中的变量赋值需要在当前操作中完成. 比如: 在foo1.html中包含foo2.html <include file="action/foo2" /> 如果要在foo2.html中输出变量 {$bar}, 那么这个$bar变量需要在foo1对应的操作中去完成。

    2. 模板包含的时候, 还可以传递变量, 在被包含的模板中使用 传参变量时, 用 [title] 中括号的方式。 是不是只能传递title和keywords参数,其他任意参数都可以吗?

    3. 由于模板解析的特点, 总是从入口模板开始解析的, 如果被包含的 外部模板有所更新 , 这种更新并不会自动表现在入口模板中, 入口模板引擎并不会重新编译, 除非你在调试模式下, 或者缓存已经过期. 所以, 如果在部署模式下, 修改了被包含的 外部模板文件后, 要把模块的缓存目录清空, 否则改变不会生效.


    杂项

    trim不但能过滤(去掉 空白字符), 而且还可以在 第二个参数 $charlist 中指定要 过滤 / 去除掉的 其他字符列表. 注意这些字符列表 表示的字符 只能是 两边 靠边的字符或字符组合, 对中间的字符没有影响,比如: echo trim('hello world', 'hld' 将输出 "ello wor" 中间的ll不会被删除. 这个用法在删除字符串两端的{} 符号比较有效

    guid和uuid的区别?
    uuid是osf "软件基金会"统一规定的标准,而guid是ms对uuid的一种实现
    uuid是用 4个横线对 32个字节(32个16进制字符)的分隔得到的 36个字节.

    php的date函数的特殊用法?

    • date是一种时间格式函数, 本身并没有时间. 是把时间戳格式化为更易读的日期和时间.

    • 通常date函数, 需要传入 一个时间戳 作为第二个参数 比如date('ymd', $time); . 但是它 的格式是: date('日期时间格式', [时间戳]); 所以, 这个时间戳是一个 可选参数, 是可以省略的. 如果省略,就是代表的 当前时刻的时间戳. 而在很多时候, 我们处理的就是 当前时刻的时间戳. 所以, 可以看到 date('Y-m-d')的用法.

    • 更重要的是, 日期格式, 不一定是我们常用的 y-m-d, 有的时候, 我们只需要 当前的年份, 月份,或日期中的一个数字, 这就要使用 date的单字符, 单字母(没有数字)格式, 比如: date('Y'),date(m,和d都是两位数字,比如05 月份, 08日期. 表示星期, date('w')返回星期几的数, 而date('l') (注意是L的小写, 不是数字1)则返回星期的英文单词比如Wednesday.

    • 再比如 自动版权年份: @ 2010-<?php echo date('Y') ?>

    ===========================================

    编写Page类进行分页的实例:

    mysql中的信息显示用show命令, 后面 要跟 关键字 , 不能跟函数, 如果要用函数, 需要用 select语句

    • select version();
    • show engines; 可以看出默认的是innoDB引擎
    • show errors;
    • show warnings; 显示最后一条执行的sql语句的错误或警告, 注意都要用复数.
      显示错误和警告?
    • show variables;
    • show status;
    ### 关于null和空字符串的区别? 这个是在php和mysql中多次遇到的问题了: null就是没有, 就是根本不存在 null=not existing, 比如主键用

    auto_increment的int, 你不想输入, 那么就用null. 但是你不能用 '', 因为这两个数据类型都不一样. 空''字符串是string, 用来给int类型

    的主键赋值, 肯定会产生warning.

    这个警告是发生在 mysql 5.X以上的版本.

    null可以给任何数据类型的 字段, 比如 int, 比如 char... ,任何类型的 变量赋值! 比如表示一个字段不为空, 就是 not null.

    **可以同时插入多个记录, 但是在多个values 之间 要用 逗号进行分割! **

    生成xhtml类型的网页, emmet使用的缩略词是 html:xt, 注意是 xt, 表示 是html向xml过渡的类型, 即xml -trans, 所以是xt, 但不是xh, 要生成html5的网页, 可以写 html:5, 或者直接写一个! 都可以.

    • 表格本身也有一些有用的/ 直接的 属性, 包括: 颜色 bgcolor, bordercolor, cellspacing, cellpadding (单元格的外边距和内边距).

    • page类的show方法, 返回的是, 分页字符串: return "<div>{$page_str}</div>

    	public function  page(){
    		header('Content-type: text/html; charset=utf8');
    		$count= M('user')->count(); 
    		$rowPerPage=4;
    		$page = new ThinkPage($count, $rowPerPage);
    
    		$limit= $page->firstRow .','.$page->listRows; 
    
    		$data = M('user') -> order('id desc') -> limit($limit) ->select();
    
    		$page->setConfig('first', 'fff');
    		$page->setConfig('last', 'eeee');
    
    		$page->setConfig('theme',    '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%  , <font color="red"> %HEADER%,  
    
    共 %TOTAL_PAGE%页 </font>');
    
    		$p = $page->show();
    		
    		
    		$this->assign('data', $data);
    		$this->assign('page', $p);
    		$this->display();
    
    	}
    
    
    
    
        'DB_TYPE'               =>  'mysql',     // 数据库类型
        'DB_HOST'               =>  '127.0.0.1', // 服务器地址
        'DB_NAME'               =>  'test',          // 数据库名
        'DB_USER'               =>  'root',      // 用户名
        'DB_PWD'                =>  '',          // 密码
        'DB_PORT'               =>  '3306',        // 端口
        'DB_PREFIX'             =>  'think_',    // 数据库表前缀
        'DB_PARAMS'          	=>  array(), // 数据库连接参数    
        'DB_DEBUG'  			=>  TRUE, // 数据库调试模式 开启后可以记录SQL日志
        'DB_FIELDS_CACHE'       =>  true,        // 启用字段缓存
        'DB_CHARSET'            =>  'utf8',      // 数据库编码默认采用utf8
        'DB_DEPLOY_TYPE'        =>  0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
        'DB_RW_SEPARATE'        =>  false,       // 数据库读写是否分离 主从式有效
        'DB_MASTER_NUM'         =>  1, // 读写分离后 主服务器数量
        'DB_SLAVE_NO'           =>  '', // 指定从服务器序号
    
    
    
    {__NOLAYOUT__}
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    	<title>page分页</title>
    </head>
    <body>
    	<table width="80%" border="1" cellspacing="0"   bgcolor="#eff"  align="center">
    		<tr>
    			<th>id</th>
    			<th>username</th>
    			<th>age</th>
    			<th>addr</th>
    		</tr>
    
    		<foreach name="data" item="u">
    			<tr>
    				<td>{$u.id}</td>
    				<td>{$u.username}</td>
    				<td>{$u['age']}</td>
    				<td>{$u.addr}</td>
    			</tr>
    		</foreach>
    	</table>
    	{$page}
    
    
    </body>
    </html>
    
    

  • 相关阅读:
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    Windows10+CLion+OpenCV4.5.2开发环境搭建
    Android解决部分机型WebView播放视频全屏按钮灰色无法点击、点击全屏白屏无法播放等问题
    MediaCodec.configure Picture Width(1080) or Height(2163) invalid, should N*2
    tesseract
    Caer -- a friendly API wrapper for OpenCV
    Integrating OpenCV python tool into one SKlearn MNIST example for supporting prediction
    Integrating Hub with one sklearn mnist example
    What is WSGI (Web Server Gateway Interface)?
    Hub --- 机器学习燃料(数据)的仓库
  • 原文地址:https://www.cnblogs.com/bkylee/p/8975601.html
Copyright © 2011-2022 走看看