1. 数据库编码格式

gb-2312仅支持简体中文,GBK支持简体、繁体中文,utf-8通用程度最高。

2. HTTP请求方法

get方法请求时,会将传输的数据跟在链接后“显式地”发送,受限于链接长度(一般512B或1024B);

post方法请求,数据传输过程更隐秘,数据的长度不受限。

3. Cookie和Session(数据在多个脚本间的共享方式)

Cookie存储于客户端,以键值对存储,可以使用Javascript脚本访问,但受限于客户端浏览器权限,若禁止Cookie,则服务器的脚本无法访问。

Session存储于服务器,以键值对存储,在不同脚本间共享。

4. 数据库操作

mysql扩展自 PHP 5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除,而使用mysqli扩展代替。

1)数据库连接:

函数式编程风格:$mysqli=mysqli_connect("example.com", "user", "password", "database");
面向对象风格:$mysqli = new mysqli("example.com", "user", "password", "database");

2)SQL查询:

$res=$mysqli->query('select * from info_table');

3)根据返回结果的行号输出结果:

mysqli的属性num_rows,根据行号检索结果中的内容:

$res->data_seek($row_no);

遍历所有行的完整代码:

for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
$res->data_seek($row_no);
$row = $res->fetch_assoc();
echo " id = " . $row['id'] . ' name='.$row['name']. "<br>";
}

取出某一行($row_no)的代码:

    $res->data_seek($row_no);
$row = $res->fetch_assoc();
echo " id = " . $row['id'] . ' name='.$row['name']. "<br>";

4)使用“类似迭代器”取结果,并存入数组:

$res_arr=$res->fetch_assoc()

此时$res_arr中存有第一行结果,再执行一次上面一句,则取下一行的结果,并存入数组,通过键值对可以访问。

5.在CSS文件中引入其他CSS文件

@import "../main.css";

6.在链接中调用JavaScript函数

<a href='javascript:function(parameter)'> text </a>

7.实现删除确认

与6配合使用,在删除的链接中调用下面的函数:

<script>
function doDel(id) //删除确认函数
{
if(confirm('r u sure?'))
{
window.location='del_op.php?id_message='+id;
}
}
</script>

8.设备显示自适应的代码方式

①百分比;②vw(width占比)  vh(height占比)

eg. 20%  5vw  10vh

9.样式控制字体

style="font-size: 1vw; font-weight: bold"

10.设置网站的浏览器标识

在网页中使用Favicon最简单的办法便是将制作好的图标文件命名为Favicon.ico,然后将其上传到网站的根目录即可。但亲测服务器似乎不支持,于是手动写代码:

<link rel=”icon” href=”/dir/favicon.ico” mce_href=”/dir/favicon.ico” type=”image/x-icon”>

<link rel=”shortcut icon” href=”/dir/favicon.ico” mce_href=”/dir/favicon.ico” type=”image/x-icon”>

11.padding样式属性

style="padding:1px 2px 3px 4px;"

内边距:上1  右2  下3  左4

12.网站计数器

①通过session

<?php
if(!isset($_SESSION)){ session_start(); } //初始化SESSION变量
$f_open = fopen("./count.txt","r+"); //打开指定的文件
$count = fgets($f_open); //读取文件中的数据
if($_SESSION[temp]==""){ //判断$_SESSION[temp]==""的值是否为空
$count = $count + 1; //将变量$count的值加1
rewind($f_open); //打开指定的文件
fwrite($f_open,$count);    //向文件中写入新的数据
fclose($f_open);     //关闭文本文件
$_SESSION[temp]=1;       //$_SESSION[temp]的值不为空,给$_SESSION[temp]赋一个值1
}
?>

②通过cookie

<?php
$f_open = fopen("count.txt","r+"); //打开指定的文件
$count = fgets($f_open); //读取文件中的数据
if(empty($_COOKIE['cookie_name'])){ //判断Cookie是否存在
setcookie("cookie_name",value,time()+1800);   //如果不存在,则创建Cookie
$count = $count + 1; //将变量$count的值加1
rewind($f_open);  //打开指定的文件
fwrite($f_open,$count); //向文件中写入新的数据
fclose($f_open); //关闭文件
}
?>

13. 禁用ip访问服务器

(详细参考:https://linux.cn/article-4904-1.html)

在Linux中,可以很简单地用netfilter/iptables框架禁止IP地址:

  1. $ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP

如果你想要完全屏蔽一个IP地址段,你可以用下面的命令很简单地做到:

(我使用这条命令,1.1.2.0/24 表明子网掩码为前三段,若准确禁止某个ip,则24改成32)

  1. $ sudo iptables -A INPUT -s 1.1.2.0/24 -p TCP -j DROP

然而,当你有1000个独立IP地址,且不带CIDR(无类别域间路由)前缀,你该怎么做?你要有1000条iptable规则!这显然这并不适于大规模屏蔽。

  1. $ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP
  2. $ sudo iptables -A INPUT -s 2.2.2.2 -p TCP -j DROP
  3. $ sudo iptables -A INPUT -s 3.3.3.3 -p TCP -j DROP
  4. . . . .

14.PHP获取访问者的ip

<?php
function getIp()
{
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
?>

15. PHP异常处理

try{
...;
}catch (Exception $e){
print $e->getMessage();
exit();
}

16.时间戳与日期、时间

①时间戳

时间戳是指自Unix纪元(1970年00:00:00)起到当前经过的秒数,故单位是秒。

在PHP中,直接使用time()函数即可返回时间戳。

②日期、时间

时间戳不够直观,才有了date()函数,用以直观地按照指定格式输出日期和时间。

格式控制:

  • Y:年
  • m:月
  • d:日
  • H:带首位零的24小时制时
  • h:带首位零的12小时制时
  • i:由于m(inute)已经被m(onth)占用,所以取第二个字母i,代表分
  • s:带首位零秒
  • a:午前午后(am或pm)

函数格式:string date ( string $format [, int $timestamp = time() ] )

eg. date ("Y-m-d H:i:s", time());

第二个参数可以直接给定某个时间戳,从而将其转换为指定格式。

17.使用Pear提供的Mail类通过SMTP服务器发送邮件

  1. 在服务器上安装Pear提供的Mail类,其依赖于Net/SMTP.php和Mail/mime.php,故安装三个:

    pear install Mail
    pear install Mail_Mime
    pear install Net_SMTP
  2. 编写发送邮件的PHP脚本:
<?php
// Pear Mail 扩展
require_once('Mail.php');
require_once('Mail/mime.php');
require_once('Net/SMTP.php'); $smtpinfo = array();
$smtpinfo["host"] = "smtp.163.com";//SMTP服务器
$smtpinfo["port"] = "25"; //SMTP服务器端口
$smtpinfo["username"] = "username@163.com"; //发件人邮箱
$smtpinfo["password"] = "password";//发件人邮箱密码
$smtpinfo["timeout"] = 10;//网络超时时间,秒
$smtpinfo["auth"] = true;//登录验证
//$smtpinfo["debug"] = true;//调试模式
// 收件人列表
$mailAddr = array('receiver@163.com');
// 发件人显示信息
$from = "Name <username@163.com>";
// 收件人显示信息
$to = implode(',',$mailAddr);
// 邮件标题
$subject = "这是一封测试邮件";
// 邮件正文
$content = "<h3>随便写点什么</h3>";
// 邮件正文类型,格式和编码
$contentType = "text/html; charset=utf-8";
//换行符号 Linux: \n Windows: \r\n
$crlf = "\n";
$mime = new Mail_mime($crlf);
$mime->setHTMLBody($content);
$param['text_charset'] = 'utf-8';
$param['html_charset'] = 'utf-8';
$param['head_charset'] = 'utf-8';
$body = $mime->get($param);
$headers = array();
$headers["From"] = $from;
$headers["To"] = $to;
$headers["Subject"] = $subject;
$headers["Content-Type"] = $contentType;
$headers = $mime->headers($headers);
$smtp =& Mail::factory("smtp", $smtpinfo);
$mail = $smtp->send($mailAddr, $headers, $body);
$smtp->disconnect();
if (PEAR::isError($mail)) {
//发送失败
echo 'Email sending failed: ' . $mail->getMessage()."\n";
}
else{
//发送成功
echo "success!\n";
}

这段代码是转自网络的内容,在实测时存在问题,花了半天时间解决。

首先,目前所有的邮件服务器都要求使用SSL连接(smtp发送邮件端口号463或587),故不可使用其他端口。而且,密码并非邮箱密码,必须在邮箱中设置开启POP/SMTP服务,开启后会给一个授权码,在程序中连接服务器的时候,使用授权码代替密码。

其次,Pear自己的官方文档中,未提及Mail::factory()第二个参数$smtpinfo中的$smtpinfo['auth']元素实质,只简单地提了这里填写Boolean类型,可是实测发现,这里要填写认证方式,例如我尝试了$smtpinfo['auth']="PLAIN"之后就成功连接了smtp.qq.com,并成功发送了邮件。

故最重要的两点:端口要选择SSL端口并开启SMPT服务后使用授权码;给定认证方式。

WebNotes(PHP、css、JavaScript等)的更多相关文章

  1. html css javascript 加载的顺序

    html /css /javascript 这三者的加载顺序影响整个页面的加载速度.而加载速度的快慢直接影响pv(访问量),而且会影响经济收入.在大网站中,可能打开速度快一秒,一年能多带来上亿的收入. ...

  2. Sublime Text插件:HTML+CSS+JAVASCRIPT+JSON快速格式化[转]

    今天在github上乱逛,无意间找到victorporof分享的htmlpretty插件,特做推荐: 先看看他是怎么描述htmlpretty的: This is a Sublime Text 2 an ...

  3. html+css+javascript实现列表循环滚动示例代码

    使用html+css+javascript实现列表循环滚动,设置时间定时,在规定的时间内替换前一个节点的内容,具体示例如下,感兴趣的朋友可以参考下 说明:设置时间定时,在规定的时间内替换前一个节点的内 ...

  4. HTML+CSS+JAVASCRIPT 总结

    1. HTML 1: <!doctype html> 2: <!-- This is a test html for html, css, javascript --> 3: ...

  5. Umbraco(3) - CSS & Javascript(翻译文档)

    原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/umbraco3css-javascript/ CSS & Jav ...

  6. 原创的基于HTML/CSS/JavaScript的层级目录树

    之前参加过一些基于HTML/CSS/JavaScript的项目,当在页面中需要生成一颗目录树时,总是首先想着网上有没有现成的生成树的源代码,比如dtree.zthee,或者使用一些javascript ...

  7. MiniCodeEditor:只有168字节的在线Html/CSS/JavaScript编辑器

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:MiniCodeEditor:只有168字节的在线Html/CSS/JavaScript编辑器.

  8. CSS+Javascript的那些框架

    CSS CSS 制作框架 SASS http://www.oschina.net/p/sass Blueprint  http://www.oschina.net/p/blueprintcss Ela ...

  9. 3 Ways to Preload Images with CSS, JavaScript, or Ajax---reference

    Preloading images is a great way to improve the user experience. When images are preloaded in the br ...

  10. Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)

    Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由 Adobe 创建和维护,根据MIT许可证发布,支持 Wind ...

随机推荐

  1. pycharm + git实现两台电脑代码同步

    说明:此篇文章是作者方便日后查阅所有,请不要按本文的方法搭建 1.下载msysygit,https://git-for-windows.github.io/ 点击download获取下载链接,可能由于 ...

  2. spring开发中commons-logging.jar包的功能

    删除后程序会报错 Java.lang.NoClassDefFoundError 记录日志,通常和  log4j.jar共同使用 原因: 在 sun 开发 logger 前,apache 项目已经开发了 ...

  3. 白话SpringCloud | 第四章:服务消费者(RestTemple+Ribbon+Feign)

    前言 上两章节,介绍了下关于注册中心-Eureka的使用及高可用的配置示例,本章节开始,来介绍下服务和服务之间如何进行服务调用的,同时会讲解下几种不同方式的服务调用. 一点知识 何为负载均衡 实现的方 ...

  4. 如何设计一个“高大上”的 logo

    前不久,我们老大写的一篇博客< Coding,做一个有情怀的产品 >中有提到设计 Coding logo 的大致由来,今天我就设计 Coding 猴头的过程具体说说如何设计一个 logo. ...

  5. 浅谈------location

    今天在上班的时候碰到了要根据不同的页面随机添加栏目的问题,很简单的问题,想到了判断页面url是否含有某字符串来进行随机添加栏目...这就需要了解location对象. location 属性名 属性说 ...

  6. 三种ajax解析模式!

    一.Ajax中的JSON格式 html代码: <html> <body> <input type="button" value="Ajax& ...

  7. 自己用jquery+css+div写的一个弹窗

    弹窗支持两种模式,一种是普通信息提示框,调用方法:popup.msgPopup(msg); 另一种是可以加载页面的弹窗,调用方法:popup.pagePopup(url); 效果图: css代码 ;; ...

  8. jeecg308 <t:authFilter />标签失效的问题

    <%--该标签放到body末尾会无效,估计是js冲突,放到body前好用--%><t:authFilter /> <body></body>

  9. HashMap和Hashtable存放null

    Hashmap是可以放key为null的,Hashtable不能放key为null.hashtable放key为null会报空指针异常 1. hashmap put方法源码 public V put( ...

  10. OLEDB 枚举数据源

    在之前的程序中,可以看到有这样一个功能,弹出一个对话框让用户选择需要连接的数据源,并输入用户名和密码,最后连接:而且在一些数据库管理软件中也提供这种功能--能够自己枚举出系统中存在的数据源,同时还可以 ...