html-php深入理解

不再纠结div p span.

写html的时候, 在头脑中, 要等同于/实际上就相当于写一篇图文混排的word文档, 有主标题/子标题, 有正文段落等等.
要根据这些标签的本身的语义来使用!
div=division, 是块, 分块, 是用来表示结构布局的. table不应该作为结构布局, 而是应该用来表示表格化的数据
p是有具体语义的, 表示段落, 不一定只是用来表示文字的
h1, h2的语义就是用来表示标题的.
span是纯粹是为了应用样式而存在的, 它是行级内联元素. 当然你可以随意使用span, 但规范的,最好的方式是:
一般只把span用在h1,hx标题以及段落p中. 一般不直接放在div中!

  1. html叫标记语言,也就是说,真正显示/输出到浏览器的都是标记之外的内容/文字, 标记<...>都只是对这些
    文字的一种说明/规范/修饰/补充等等

  2. strlen和strcmp等都是二进制安全的?
    二进制安全, 是指在php函数操作二进制数据时能够保证得到预期的效果, 主要是因为zval结构体变量在保存字符串时
    既有char* 指向字符串, 又有一个int型的len成员保存了字符串的长度: strlen("abc\0d")=5; strlen('ab\0c')=5;

  3. form表单中的enctype编码空格和get编码空格的不同
    enctype是指表单在从浏览器post请求到服务器时要编码的方式, 有三种编码:
    application/x-www-form-urlencoded(这个是默认的编码): 空格编码成+号...
    multipart/form-data: 不编码
    text/plain: 空格编码成+号, 不编码特殊符号
    但是: 在get传递查询参数时的编码中,空格编码成:%20=0x20=(32)十进制

  4. 你编写的web应用程序, 除了img, 声音等资源文件, html等标记文件外, 其余的php脚本文件就是所谓的"程序文件"

  5. form表单的主要分类?
    html中的内容, 无非是两种, 一种是文字/img, 另一种就是表单.
    表单的形式无非就是三种:

  • 用input的单行输入的: text,passwd, radio,checkbox, hidden, submit,reset等等
  • 用来选择的: <select ...> (那中间自然就是要选择的选项吧: <option value="..." selected...>...</select>
  • 再就是用来收集大段文字的<textarea...>...</textarea>
    总之, 表单就是用来收集用户信息的,然后在请求telegram报文的请求数据中通过post传递到服务器上.

通过 var_dump($_REQUEST $_GET $_POST)
通过action=xx?xx=??方式传递到目标页面的变量保存在\(_GET中, 同时\)_REquest确实包含了\(_GET和\)_POST的集合.
要注意, 当POST和GET变量中有相同名称"键"的元素时, 在\(_REQUEST中将只保留 \)_POSt中的元素值. 但是, 在\(_GET和\)_POST中, 仍然各自保留着相应的元素

register_globals的含义
打开"注册全局变量: register_globals"后, 真的就是将action=index.php?para1=1&para2=2
的值传递到目标页面, 并作为可用的\(变量, 如: 这里有`\)para1=1, $para2=2.`

为什么要检查 if(isset($_POST['user'])?
因为在php.ini的配置文件中, 有这样的配置指令:
max_input_time=60 ; spending max-time to parse request data.
有最大input解析时间限制以及脚本最大执行时间post_max_size=8M等的限制,
所以, 从客户端传递过来的请求数据不一定每次都成功, 所以需要判断一下.

凡是数组, 如$_GET, $_POST 等的元素键--下标, 都应该加上"单"引号,###

否则, php将把下标当成"裸子面常量", 将会首先当作常量进行解析, 只有当常量解析失败后, 才当成
字符串来进行解析, 这样就太花时间, 绕弯子了.

跟安全等有关的验证?###

首先在客户端通过js进行验证
然后, 如果需要存入数据库的数据, 需要在服务器端进行验证, 验证的错误提示信息, 通常就发到当前页面!

html类型的写法###

PUBLIC 后面是三个双斜线 3个部分 : "-//W3C//DTD XTHML 1.0 Transitional//EN"
类型标志符的网站: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
org后面是TR和DTD中间的xhtml1.

字符集编码的写法(统一一下)###

可以是大写的, 用连字符-, 也可以是小写的: UTF-8 , utf8.
通常用小写的吧, 看mysql服务器的变量和设置中的 字符集就知道了.

apache2的alias?###

在目录/wamp/apache2/conf/alias/中, 直接删除某个alias好像会启动失败?

从1~N的数字中随机选出n个数字的算法?

算法步骤: range-> shuffle -> array_rand/array_slice

也可以直接用sql语句一次性的从mysql中取出/检索出多个随机的记录....

页面内分割区域的方式?

用空白区域;
水平线
方框
表格

mysql本身就提供了表 字段的comment属性功能,

但是, 要在browser浏览查看数据记录的时候, 才会显示.

mysql表中的auto_increment字段, 可以自动地自增1(如果你不手动地输入的话),

  • 也可以手动地输入! 而且, 输入的值可以是任意的, 不连续的.
  • 所以不一定是 连续的.
    至于字段的值, 是否可以重复(与前面的值相等), 则取决于该字段的属性, 如: 当它是primary key时,
    则不允许重复/相同, 如果不是则可以相同.

关于mysql_query的结果处理

mysql_query("$query_string")的结果:
对于select, show等语句, 成功时返回的是 resource标识符type(mysql result), 失败时返回false;
对于非select语句, 如: delete, insert, update, 成功时返回true, 失败时返回false.

select的mysql_num_rows()返回结果集中的行数, delete等用mysql_affected_rows()返回被影响的行数

select的mysql_query("...")返回的是一个结果集, 是一个包含字段名和记录的二维数组样式的资源标识符...
所以, 是不能直接使用的. 要通过mysql_fetch_array等: 从结果集$resource中获取一行作为关联或数字数组...

标准的获取方法是: while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf ("ID: %s  Name: %s", $row[0], $row[1]); //比 echo 'id:'.$row[0]...更好.
}
mysql_free_result($result);

blob存储的是什么?

blob大块类型, 存储的是二进制文件, 如图片/声音等

char(n), varchar(n)中的n指的是?

在声明表字段类型的时候, char(n)中的n指的是"字符"个数, 而不是存储字节!
一个中文文字和一个西文字母都只是算一个字符!
而我们说的, 字段类型的长度=存储所占的空间, 是说的多少个"字节".

默认的char和varchar所占的字节数?

char默认的是255个字节.
varchar默认的是65535个字节.

那么一个varchar类型的字段究竟可以存放多少个中文字符呢?

根据3个因素来确定:
首先,varchar不是从第一个字节/(而是从第二个字节)开始存放数据的, 而且大于255字节
时在头部还要用2个字节来表示该字段的实际长度, 所以要减3;
其次, 要看中文字符的编码;
最后, 还要遵守" 在一个记录行中, 行的最大字节总和不超过65535个字节.
所以, varchar(n)中的n最大为: (65535-1-2)/3 个utf8编码的中文字符.
所以一般"题干/答案选项" 用varchar(800)/varchar(300)完全足够了!

char和varchar都不分大小写比较和转换.
char的内容如果不够长, 则在** 后面** 补空格 **
varchar不会补, 实际是多少就只分配多少存储空间.
char和varchar的存储和检索/更新/删除等原理不同. char用空间的牺牲为代价, 换来操作效率的提升.

巧记mysql字段的大小

都是根据字节长度来分配大小的.
text和int在字节分配上是不同的/相反的:
tinyint 占一个字节0~255./-128~127
smallint 占2个字节,0~ 2^16-1: 0~65535
mediumint 占3个字节: 0 ~ 2^24-1
int 占4个字节...
bigint 占8个字节, 基本上不会用到.

而text/blob的存储范围:
tinytext: 占1个字节长度, 最多为255个字符.
text: 最多占2个字节, 最多65535个字符
mediumtext: 最多3个字节...
longtext: 最多4个字节...

软件的版本号如何写?

GNU版
主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]]
Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]
示例 : 1.2.1, 2.0, 5.0.0 build-13124
管理策略:
项目初版本时,版本号可以为 0.1 或 0.1.0,也可以为 1.0 或 1.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式;
当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1;
当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;
当项目在进行了* 重大修改或局部修正累积较多,而导致项目** 整体发生全局变化时,主版本号加 1;
编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。

有的还有: 日期版本号, 希腊字母版本号
希腊字母版本号有5种: base, alpha, beta, RC, release. 表示"当前版本的软件处于哪个开发阶段".

借鉴ecshop的写法

类文件用cls_做前缀, 库公用文件, 用lib_做前缀
库函数文件, 类文件通常放在includes目录中, 通常是被其他文件所"包含的"
一般在/includes/的init.php中, 要完成所有的/绝大部分/大部分的初始化工作, 包括@ini_set("自定义的php.ini设置").

define和defined

define是定义常量.
而defined是判断某个字符串是否定义为常量?

在markdown中: 段落的反引号 === 每行的tab缩进, 都是将内容当作代码来处理(有语法highlight)

编程风格和格式约定

大中小括号跟单词紧邻, !-句尾的分号; ->成员运算符等紧邻单词
函数或结构if while等的大括号单独占一行
其他每个单词, 包括运算符如== !== . 等都隔一个空格, 函数的参数每个也要隔空格
!!! 注意行与行的内容的缩进, 在对多个变量进行赋值, 特别是类内部的变量进行赋值的时候, 注意对齐(风格需要).
简单的if---else语句通通用 ?:三元运算符来代替.

URI和URL

uri: 是统一资源标识符identifier, url是统一资源定位符locator
uri可以表示所有的资源, 包括网络和本地的资源, 本地资源可以使用相对路径, 如: ./ ../
还可以使用 #:指向当前资源内部的片段标识符(anchor标识符)
url: 则是uri的子集, 主要是用来表示/定位网络资源.

php对文件的目录函数

FILE:表示当前文件本身
basename: index.php=filename+extension
dirname: c:\wamp\www\wes, 没有最后的反斜线
pathinfo: 关于文件目录的数组.

两种注释的使用?

/* */这种注释是对下面的代码片段进行注释时使用的
// 则主要是对单个语句进行注释, 写在语句后面的.

预格式化文本标签
=preformat

使用

标签, 就不再为空格和换行而烦恼!
通常有两种情况使用
标签:

  • 要保留输出中的空格和换行...
  • 要输出计算机代码

tty

tty是teletype电传打字机, 由键盘/收发报器/印字机组成, 是传真之前的主要"收发有文字内容的电报"
的主要设备, 后来成为计算机的实时"输入/输出"设备. 后被键盘和显示器代替.
teletype使用的最广泛的是ibm公司的Bud Kettler等宽(a monospaced typeface)字体:courier:
Courier: 小写的i和大写的W宽度都是一样的. Courier代表的是一种尊严, 威望和稳重.
courier: n. 送快递的人, 信差; 导游; 情报员. he worked as a motorcyle courier.

php的单引号转义?

单引号不会替换$变量
但是, 单引号会转义, 但是:只转义两个: 反斜线, 和单引号'本身.其他都不转义!
因此: str_replace('\', '/', FILE);会替换反斜线为正斜线.

code>只是暗示是代码, 但不能保持空格和换行等等

pre>跟code都会显示等宽电传字体courier...

pre>中不能包含引起段落变化的标签如:p> div>等


NULL既是一种类型:NULL类型,
也是一个值, 是NULL类型的唯一一个值, 尽管大小写不分, 但通常作为专有名词大写之

<<<str 和str的用法
这种perl风格的字符串, <<< 和str开始标识符之间可以有空格, 也不一定跟echo在同一行,
但是: 结束标识符一定要顶行写. 否则, 不认而报错.

在php中, &&和and, ||和or两种写法都是可以的. 通常逻辑量用true/false小写的表示.

posted @ 2016-01-22 16:33  noitanym  阅读(264)  评论(0编辑  收藏  举报