hdfoo站点开发笔记-2

时间:2022-10-06 19:11:27

httpd的目录的 Options: (里面的单词都是用的复数): Options Indexes FollowSymLinks

为了避免有些目录下没有生成deny.htm而显示列表, 可以直接给 /var/www/html目录去掉 Indexes选项

不能在 Options选项的Indexes前面 单独的添加 减号

[root@localhost conf]# httpd -t
AH00526: Syntax error on line 144 of /etc/httpd/conf/httpd.conf:
Either all Options must start with + or -, or no Option may. // 意思是: 不能单独给Options中的某一个选项添加 + 或 - , 必须给每个选项都加上加号或减号, 或者都不加符号.
  1. md5函数的应用?
  • md5函数是将任意长度的信息(字符串)作为输入, 将其输出 总是 为一个 128 bit 的"指纹信息", "报文摘要".

  • 因此, md5函数的格式是 md5(in_string, [raw]) raw是可选的, 指明是以原始的 二进制格式输出, 还是以16进制的格式输出. 默认的是false, 以16进制输出.

  • 如果raw为true, 以0~255的 二进制格式输出, 就是 128/8=16个字符, 如果以16进制格式输出, 则是32个字符.

  • 因为是二进制格式的, 所以如果输出md5的raw格式, 将会有很多 "不可读"的 控制字符(乱码), 所以 通常要以 16进制的可读字符来显示.

  • md5函数, 主要是在用户 注册/登陆 进行密码输入和 保存的时候使用. 注册时将密码经过md5处理保存在数据库中, 登陆验证时, 将用户的输入字符串经过md5处理后, 7然后与保存在数据库中的 注册时将密码经过md5处理保存在数据库中, 登陆验证时, 将用户的输入字符串经过md5处理后, 然后与保存在数据库中的密码进行比较... 这样就可以在不知道用户确切密码的情况下完成比对.

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

vim中的点号可以重复上一次操作, 但是这个操作, 必须是一些 复制/粘贴/删除之类的操作. 如果是 移动/ 跳转 光标的操作, 比如: fa, ta, f( 等操作, 是不能用点号来重复的.

即使是在linux中, gvim也是非常有用的. 它支持laptop触摸屏的鼠标拖动.

  • gvim中关于窗口的所有 操作, 即使是窗口的关闭 ^W+c, 都不会影响(不会关闭)缓冲区的, 所以, 即使你用 ^W+o(others)关闭了其他所有窗口, 只有当前这个窗口, 其他的缓冲区内容并不会关闭仍然存在的.

  • gvim中, 窗口的宽度和高度调节是 通过 | 和 _ 来做的, 它们使窗口的宽度或高度最大化, 而对应的 最小化则是在前面加上1, 比如: 1| 宽度最小化, 1_ 高度最小化.

在php中, $和{}的组合是不支持的, 包括: {$var} 和 ${var}都不支持, 前者只有在模板中得到支持, 这种组合是在 bash的shell脚本中有意义. php中会报错.


tp的上传驱动, 类型很多, 比如local本地上传, ftp上传等, 通常用的是local

上传信息数组的 saveName 和 subName的命名方式, 有三种

  • 函数命名法. 用配置或动态赋值的方式: $upConfig = array( 'saveName' => 'uniqid'); 或 $Upload -> saveName = 'uniqid'; 如果有函数有参数, 就用

    数组的方式, 比如$u ->saveName = array('date', 'Ymd') 如果参数有多个,则参数也用数组的方式: $u ->saveName = array('date', array('Ymd', $t))

  • 直接字符串命名法, 字符串可以是 函数和字符串之间拼接而成的 比如: $u->saveNam = 'my'. date('Ymd') . mt_rand() ;

  • 保持原来的文件名称, 则 赋值为 空串: $u->saveName = '';

  • uniqid() 函数是php 从运行php脚本的服务器上, 获得的 基于微秒 的唯一 id数. 基本上就表示了 事件(比如发帖/操作数据库) 的时间 先后顺序, 所以, uniqid 既可以做

    id, 也可以做唯一的文件名, 还可以此为依据事件 进行排序.




1. php的rand函数?
每种语言的rand函数都不同, 有的是 返回0~1之间的小数... 而php中的rand函数很直接,
- rand() 返回介于下限或0, 和上限或 getrandmax() 之间的 (包含端点边界值,相当于 闭区间) 随机 **整数**
- 随机值 是自动 随机播种, 因此, 使用时就不用再自己去调用种子函数了
- 还有一个效率更高的随机函数,就是 mt_rand() .通常就用的这个mt_rand
  1. 要通过数字获得对应的 字符串, 这个其实也很简单, 将对应 的字符串定义为数组, 然后用数字对应取数组的下标就好了. `$week = array('日', '一', '

二', '三', '四', '五', '六'); echo '

今天是: 星期'. $week[date('w')];`

  • 对于date函数, 虽然也可以用数组对应的方法,取得 年月日的对应字符串, 但是人家已经提供了对应的格式字符, 直接使用就好了

    比如

  • 月份: m 两位数字不足要 补0, n 两位数字 不补0, M: 三个英文字母, F全名

  • 日: d 几日, 二位数字不足补零, j 二位数字不补零

  • 星期: w 0-6(星期日为0), l 英文全名, D三个字母.

  • 小时: h g 12小时制, 前者补0,后者不补0; H G24小时制, 前者补0, 后者不补0

  • 分钟: i, 秒s , 12小时制配合上午下午: 小写是a(只用一个a就表示 上午或下午了.), 大写是A.

关于date的时区?

  1. 时区支持, 亚洲只支持三个: Chongqing, Shanghai, Hong_Kong 其他任何 都不支持. 如果时区 不合法(invalid), 将会返回一个

E_NOTICE级别(共E_NOTICE, E_WARNING, E_ERROR)的 错误信息.

  1. 地区/时区, 不限大小写,比如: Asia/Chongqing, 和 asia/chongqing 都是可以的.

    修改时区有三种方法:
  • date_default_timezone_set('Asia/Shanghai');
  • ini_set('date.timezone', 'Asia/Shanghai'); // 这两种方法都是临时设置的, 不会改变 php.ini中的内容. 相当于 临时修改selinux: setenforce 1
  • 永久性的修改 [date] 节的 date.timezone = ...

    date节是配置 php在使用date函数的时候,的时区问题
  1. 时区 有很多种制度, 一种是UTC(世界协调上:universal time coordinate) 一种是GMT(Greenwich mean time格林尼治平均时) 两者看成是 基本上一样的.

不加以区分. 编程中都使用UTC 时间

  • 本地时间 = UTC + 时区时差.
  • 东区的时差为正, 西区的时差为负 ,比如我国的本地时间 都认为是: +0800, 相当于 08:00 分钟, 刚好比 UTC 快8个小时.
  • php.ini中默认的时区是 UTC, 所以 ,如果你不设置/修改时区, 那么得到的时间就 刚好比系统时间(当前时间)慢 8个小时.
  1. 关于时区的函数有:

    date_default_timezone_set(...), date_default_timezone_get()获取默认的时区(在php.ini配置中的)

    ini_set('name', value); ini_get('name')获取配置值.

  2. It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the

date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely

misspelled the timezone identifier. : (rely on: 依靠什么事物, 而depend on通常是依赖什么人, in case (of/that) 跟if的区别: in case是万一, 假

设说, 退万步来说...)

即: 如果你 使用time()或date函数, 那么你就要用 date_default_timezone_set(), ini_set()来设置, 否则你不设置就可能是不安全的...

杂项:

熵: 表示混乱程度: entropy ['entr2pi]

mime[maim], 表示资源的类型. 它本身也是有意义的单词" 哑剧, 哑剧演员; 演哑剧"

tp中的NOW_TIME 是什么

可以看出, $_SERVER服务器的信息, 还是很重要的, 很多程序中要用到的判断,比较等信息, 都是从 $_SERVER中得到的.

class App {

    /**
* 应用程序初始化
* @access public
* @return void
*/
static public function init() {
// 加载动态应用公共文件和配置
load_ext_file(COMMON_PATH); // 日志目录转换为绝对路径 默认情况下存储到公共模块下面
C('LOG_PATH', realpath(LOG_PATH).'/Common/'); // 定义当前请求的系统常量
define('NOW_TIME', $_SERVER['REQUEST_TIME']);
define('REQUEST_METHOD',$_SERVER['REQUEST_METHOD']);
define('IS_GET', REQUEST_METHOD =='GET' ? true : false);
define('IS_POST', REQUEST_METHOD =='POST' ? true : false);
define('IS_PUT', REQUEST_METHOD =='PUT' ? true : false);
define('IS_DELETE', REQUEST_METHOD =='DELETE' ? true : false); retunr NOW_TIME >=$start && NOW_TIME <=$end; 'SERVER_SIGNATURE' => string '' (length=0)
'SERVER_SOFTWARE' => string 'Apache/2.2.17 (Win32) PHP/5.3.5' (length=31)
'SERVER_NAME' => string 'localhost' (length=9)
'SERVER_ADDR' => string '127.0.0.1' (length=9)
'SERVER_PORT' => string '80' (length=2)
'REMOTE_ADDR' => string '127.0.0.1' (length=9)
'DOCUMENT_ROOT' => string 'C:/wamp/www/' (length=12)
'SERVER_ADMIN' => string 'admin@localhost' (length=15)
'SCRIPT_FILENAME' => string 'C:/wamp/www/test.php' (length=20)
'REMOTE_PORT' => string '50364' (length=5)
'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
'REQUEST_METHOD' => string 'GET' (length=3)
'QUERY_STRING' => string '' (length=0)
'REQUEST_URI' => string '/test.php' (length=9)
'SCRIPT_NAME' => string '/test.php' (length=9)
'PHP_SELF' => string '/test.php' (length=9)
'REQUEST_TIME' => int 1525318431



### strpos和strstr的区别?
strpos是判断hay中是否含有needle?
strstr 是返回 hay中needle第一次出现位置 到最后/或最前(search_before=true)的字符部分.

**在使用这两个函数时, 如果搜索字符串是 反斜杠, 要用两个反斜杠: '\' 如果只用一个反斜杠, 会报错! **

即 如果只是判断是否存在, 不返回子串, 就用 strpos就行了, 这个效率更高

检测自定义命名空间 否则就以 项目应用 APP_PATH: ./Application/ 为命名空间, 注意不是 httpd 的根目录/, 也不是模块 Application/Home或Admin. 也就是说, 不一定要完全定义命名空间, 项目根目录APP_PATH下的目录也可以autoload! 比如: APP_PATH . 'Component/'

在控制器的操作中, 如果不是以反斜杠 开头的类, 则是 认为 在 Controller目录下开始查找类.... 这个是反复提到的了!

namespace Think;

class Think{

	........
public static function autoload($class) {
// 检查是否存在映射
if(isset(self::$_map[$class])) {
include self::$_map[$class];
}elseif(false !== strpos($class,'\\')){
$name = strstr($class, '\\', true); // 求出路径信息 $path
if(in_array($name,array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH.$name)){
// Library目录下面的命名空间自动定位
$path = LIB_PATH;
}else{
// 检测自定义命名空间 否则就以模块为命名空间
$namespace = C('AUTOLOAD_NAMESPACE');
$path = isset($namespace[$name])? dirname($namespace[$name]).'/' : APP_PATH; 因为这个 即使没有在 AUTOLOAD_NAMESPACE中定义, 所以, 它是 以 APP_PATH即: Application/目录为起始路径的... } // 生成类文件名
$filename = $path . str_replace('\\', '/', $class) . EXT; // 就是 应用目录下的类. // 最后import导入类.
.........
}

  1. 类的自动加载时由 ThinkPHP/Library/Think目录下的Think类 的 静态函数autoload: static public function autoload(){...} 来实现的.注意不是__auto. 这个里面实现了 "tp框架自动加载的"步骤和过程.

  2. 为了调试tp框架, 或者跟踪/查看框架的执行过程, 也可以在框架中(的某些函数里面)是有 echo, dump等 结合 段落p 分行线 hr等 进行输出. 比如Think::autoload函数中的 $class. 经过echo就可以看出,他不包含: new \Component\Foo() 类, 最前面的反斜杠.$class=Comopent\Foo.

  3. 为了不让tp框架输出自定义的 错误, 而是让php输出更详细的错误信息, 可以注释掉框架 Think::start()函数中的 错误和异常 "设置"语句 即: regitster_shutdown_function('Think\Think::fatalError'); set_error_handler('Think\Think::appError'); set_exception_handler('Think\Think::appException');

### 要跟踪tp框架的执行过程和步骤, 其实只需要看一个函数就好了, 就是Think::start() 这个里面有非常详细的执行过程和注释.

...
class Think{
...
static public function start() {
// 注册AUTOLOAD方法
spl_autoload_register('Think\Think::autoload');
// 设定错误和异常处理
register_shutdown_function('Think\Think::fatalError');
set_error_handler('Think\Think::appError');
set_exception_handler('Think\Think::appException'); // 初始化文件存储方式
Storage::connect(STORAGE_TYPE); // 部署模式下的运行时文件.
$runtimefile = RUNTIME_PATH.APP_MODE.'~runtime.php'; .... public static function autoload($class) {
// 检查是否存在映射
// 打印实际传入的类名称, 结合段落标签 <p> 进行分段输出, 就 不必用br等来控制分行了. 每次都带一个 <p> 的话, 就不必用关闭标签</p>
echo '<p>自动载入的类: '.$class.; if(isset(self::$_map[$class])) {
include self::$_map[$class]; // 注意 , 自动载入实际上 使用的是 include 语句. 注意 Think类的所有成员变量和成员函数 都是 静态的!!! 包括: static private $_map.
}elseif(false !== strpos($class,'\\')){
$name = strstr($class, '\\', true);
echo '<p>取得根命名空间名:'.$name.' '; // 这里显示的是根命名空间, 是 最前面的那个路径名称, 是第一个路径名称, 不包含子路径. // 根据上面的$name, 来确定 自动载入的 路径: $path
if(in_array($name,array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH.$name)){ // 如果是Libray下的目录(包括Think或非...目录), 则自动载入LIB_PATH
// Library目录下面的命名空间自动定位
echo $path = LIB_PATH;
}else{
// 检测自定义命名空间 否则就以模块为命名空间
$namespace = C('AUTOLOAD_NAMESPACE');
$path = isset($namespace[$name])? dirname($namespace[$name]).'/' : APP_PATH;
echo '<p>自动转入的路径是: '. $path;
} // 确定自动载入的类名 = 路径+类名
$filename = $path . str_replace('\\', '/', $class) . EXT;
echo '<p>载入的文件名是:'.$filename.'</p> <hr>'; // 这里用 <hr> 来分区输出

自动载入的类文件 是 去掉最前面的 反斜杠: 比如: new \Component\ABC\Foo() 那么 类名就是 Component\ABC\Foo : 对应的$name就是 Component, 于是走elseif路径, 得到的$path就是 APP_PATH, 然后组装成的 完整类名 被 include的是: $filename= $path. str_replace('\', '/', $class). EXT; 即: 根命名空间Component 和子目录和类名 ABC\Foo是由$class得到的, 文件的扩展名是 由 EXT得到的 就是: ./Application/ + Component/ABC/Foo + .class.php


关于tp中的session的应用

session是一个类,可以创建很多个类实例化对象, 每个对象的属性就是设置参数, 包括id, name, expire, path, prefix, domain, use_cookie

type等

session的所有函数都是同一个函数, 只是参数的格式不同: 包括初始化(数组参数), 设置属性值, 获取属性值,删除用null, 判断用?, 管理用中

括号['...'](牢记null和''的不同了, ''你要记得它始终是一个字符串)

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

关于css中的问题?

body: min-width: 320px; min-width是在css2中就支持的属性了, 它是设置元素的最小宽度.

opacity: 不透明度, 可以单独设置, 那么会针对这个元素中的所有内容进行设置.比如: `h1{ color:rgb(0,0,0); backgournd-color: rgb

(255,255,255); opacity: 0.5; `

也可以根颜色值 相结合, 即使用 rgba属性来写. 比如: rgba(100,120, 140, .87);

rgb属性的写法其实根16进制的写法是一样的. 数字越大, 颜色越浅,比如:rgb(200,200,200)基本上就是灰色了. 要习惯用这种rgb的方式来写颜

色, 这是css3的写法.用#号来写的称为传统写法了

rgba的写法, 可以使用在任何需要 颜色的地方, 比如: color, background-color, border中的颜色等等.

**strpos除了可以作为 判断 字符串是否包含字符外, 还可以用来作为 截取字符串时的位置定位, 比如: ` substr($com, -strpos($com, '\

')+1, 4) ` 因为strpos本身返回的就是一个整数... **

blockquote????

line-height:1.4285em是多少像素


css: 数值为0 的时候, 可以加px ,也可以不加px

hr同样可以加 border, margin等属性. 如果没有border ,hr是一条很细的线,加了border后,线就变粗了

如何控制浏览器窗口的最小宽度和文本的最小宽度?

  1. 这是两个不同的事情, 用鼠标拖动改变浏览器窗口的最小宽度,是 鼠标事件, 因此要通过js的脚本来实现; 而 文本元素比如div, p等的最小宽度,是css控制的.

  2. css的元素dimension 不只是常见的height, width, 还有几个属性: max-width,min-width, max/min-height,line-height等.

min-width的作用最明显: 在布局时,我们常见的一种布局是: 左边一个导航栏(或其他辅助布局栏, 通常要固定宽度, 比如350px) + 中间一个main内容显示栏+ 右边右浮动的布局栏. 中间那个内容栏通常要求是 内容在宽度上自适应的. **怎样实现自适应? 很简单, 只要你不去设置内容div容器的宽度width属性,那么它就是 宽度自适应的.(当缩小浏览器窗口时, div中的内容自动向下排列就是自适应) **

这个有时候会产生问题: 当宽度自适应到很小的时候, 原来在水平方向上的布局就会被破坏, 从而使页面布局变得很坏.

这时候, 就可以设置内容容器的 min-width属性: 起先,div的内容宽度自适应, 然后当浏览器窗口缩小到某个位置时, 将要破坏水平布局的情况下, min-width 将阻止 "内容自适应", 即div中的内容不再 向下排列,而是出现一个水平滚动条, 水平方向上多余的内容 (部分元素) 将被遮挡住, 你需要拖动水平滚动条来浏览. (但是它的布局就能够保持不变!) 这个就是min-width的作用.

1.通常在页面的 header头部和footer尾部 以及main的内容部分, 使用 min-width, 能够确保布局的不被破坏, 改变.

但是, 你要注意, 这个 min-width属性 跟浏览器窗口 能否一直/继续 水平缩小, 是两码事. 在设置了 min-width的情况下, 窗口是仍然够 继续拖动缩小的! 除非你用js 来控制 窗口 的拖动缩小!

  1. 控制浏览器窗口拖动缩小的js代码是:
$(window).resize(function(){
if(document.body.clientWidth<350){
window.resizeTo(document.body.clientHeight, 350);
} });

hdfoo站点开发笔记-2的更多相关文章

  1. hdfoo站点开发笔记

    为了安全,也要兼顾编辑器切换管理 开发时不必管目录名称的事, 只是在部署的时候,才修改应用目录和tp目录的名字就行了. 为了提高tp的加载效率, 始终给app和tp以绝对路径.就是以 realpath ...

  2. 基于ASP&period;NET core的MVC站点开发笔记 0x01

    基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...

  3. firefox 扩展开发笔记(三)&colon;高级ui交互编程

    firefox 扩展开发笔记(三):高级ui交互编程 前言 前两篇链接 1:firefox 扩展开发笔记(一):jpm 使用实践以及调试 2:firefox 扩展开发笔记(二):进阶开发之移动设备模拟 ...

  4. web前端开发笔记(1)

     一.HTML标签书写有哪些规范? 页面编码. 文档声明. 关键字与描述. 行内元素不能包含块级元素. a标签不能嵌套a标签. 标签名和属性必须用小写字母书写,属性必须加引号,标签必须闭合,单标签页必 ...

  5. phpcms二次开发笔记

    phpcms二次开发笔记 --soulsjie 以下载的全新的phpcms搭建一个新的站点为例,讲解如何利用phpcms进行二次开发 一.下载和安装phpcms http://www.phpcms.c ...

  6. &lbrack;开发笔记&rsqb;-未找到与约束ContractName Microsoft&period;VisualStudio&period;Text&period;ITextDocumentFactoryService&period;&period;&period;匹配的导出【转载自:酷小孩】

    原文地址:http://www.cnblogs.com/babycool/p/3199158.html 今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目 ...

  7. EasyUI 开发笔记&lpar;二&rpar;

    接上篇 :EasyUI 开发笔记(一)  (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...

  8. EasyUI 开发笔记&lpar;一&rpar;

    由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...

  9. &lbrack;Openwrt 项目开发笔记&rsqb;:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

随机推荐

  1. Ubuntu下deb文件及tgz文件安装

    dpkg 是Debian Package的简写,是为Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu.Knopp ...

  2. 第 31 章 项目实战-PC 端固定布局&lbrack;5&rsqb;

    学习要点: 1.底部区域 2.说明区域 3.版权及证件区 主讲教师:李炎恢 本章主要开始使用学习用 HTML5 和 CSS3 来构建 Web 页面,第一个项目采用 PC 端固定布局来实现. 一.底部区 ...

  3. Dom中的继承关系

    首先声明,一些内容基于个人猜测,如果哪里有错误,请立即联系在下! 我们用js操作Dom时,会经常用到一些个方法比如基于获取到的元素选择其子元素: <!DOCTYPE html> <h ...

  4. PHP之ThinkPHP模板标签操作

    Action    : $User=M("user");     $list=$User->select();     $this->assign("list ...

  5. JavaScript的问题

    定义一个函数function, function testParams() { var params = ""; for(var i=0; i<arguments.lengt ...

  6. asp&period;net如何实现word文档在线预览

    原文:asp.net如何实现word文档在线预览 实现方式:office文档转html,再在浏览器里面在线浏览 1.首先引入com组件中office库,然后在程序集扩展中引入word的dll 2.将M ...

  7. mysql数据库基本操作以及获取数据库强大帮助文档

    MySQL数据库强大帮助文档 mysql 中help等价于\h或者? mysql> ? create database;(查看创建数据库的语法) mysql> ? drop databas ...

  8. mysql自动删除90天前数据

    #coding:utf-8import MySQLdb #方法1直接在Navicat中添加计划任务#DELETE FROM message2 where SEND_TIME < UNIX_TIM ...

  9. PHP中常用的数组函数总结

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数,数组的分段和填充,数组与栈,数组与列队,回调函数,排序,计算,其他的数组函数等. 一,数组操作的基本函数 数组的键名和值 array_va ...

  10. 【Revit API】脱离中心文件

    话不多说,直接代码,整个过程不需要发起Transaction OpenOptions op = new OpenOptions(); op.Audit = true; //是否需要核查 op.Deta ...