《PHP and MySQL Web Development》 第5版中部分知识总结。
PHP是专门为Web设计的服务端脚本语言。
PHP目前解释为PHP Hypertext Preprocessor.
PHP7包含了Zend引擎的重构。
PHP是不可见的,因为PHP解释器会提前运行脚本,并将PHP用脚本的输出代替。PHP在服务端被解释和运行,而JavaScript等其它客户端技术在用户机器上的浏览器中解释执行。所以使用PHP,可以产生纯净的HTML,被任何浏览器可见。
从安全的角度来说,从用户处获取数据并直接在浏览器上显示,是一个非常有风险的行为。需要经过函数htmlspecialchars()
再传递给浏览器。
变量显示的两种方式:
//1.使用单引号,用.连接字符串
echo htmlspecialchars($tireqty).' tires<br />';
//2.将变量放在双引号中
$tireqty = htmlspecialchars($tireqty);
echo "$tireqty tires<br />";
PHP的一个特性是,不需在使用之前声明变量。
PHP有三种特殊的类型:NULL,resource,callable
。
PHP是一种弱类型语言,它可以在任何时间,根据存储的内容,改变变量的类型。
PHP中变量的变量:
$varname = 'tireqty';
$$varname = 5;
//等同于
$tireqty = 5;
声明和使用常量:
define('TIREPRICE', 100);
echo TIREPRICE; //特点是没有$符号
PHP中关于变量范围的重要几点:
1.脚本中的全局变量在整个脚本中,除了函数内部,都可见。
2.函数中被声明为global
的变量,是指同名的全局变量。
3.在函数内部创建并声明为static
的变量从函数外部不可见,但是在函数的每次运行中会保存其数值。
超全局变量包括:$GLOBALS,$_SERVER,$_GET,$_POST,$_COOKIE,$_FILES,$_ENV,$_REQUEST(GET,POST,COOKIE),$_SESSION
赋值的返回值:
$b = 6 + ($a = 5)
中,$b
的值是11。
引用符:
$a = 5;
1. $b = $a;
//a的值会被复制,存储到另一块内存中。a的值改变,b的值不变。
2. $b = &$a;
//a和b指向同一块内存。a和b的值同时改变。
//但是a被销毁后,b的值仍然存在。(相当于别名,而非指针)
完全相同运算符===
,只有值相等,并且类型相同时才会返回true
。如果是两个数组,不仅需要有相同的键值对,还得顺序和类型相同。
<>
也可以表示不相同。
+
在数组中是并集运算。
运行运算符:
//1.Unix
$out = `ls -la`;
//2.Windows
$out = `dir c:`;
echo '<pre>'.$out.'</pre>';
PHP中的变量处理函数:
1.测试设置变量类型
string gettype(mixed var);
bool settype(mixed var, string type);
is_real() //是否是float类型
is_scalar() //是否是整数、布尔、string或浮点数类型
is_numeric() //是否是数字或数字串
is_callable() //是否是一个有效函数的名字
2.测试变量状态
bool isset(mixed var[,mixed var[,...]])
void unset(mixed var[,mixed var[,...]])
bool empty(mixed var) //变量不存在或者为0或者为空
//如果是false,显示为空;如果是true,显示为1。
3.重新解释变量
int intval(mixed var[, int base=10])
float floatval(mixed var)
string strval(mixed var)
变量的变量与for
循环结合:
//对name1,name2,name3这样的变量进行迭代
for($i=1;$i<=$numnames;$i++) {
$temp = "name$i";
echo htmlspecialchars($$temp).'<br />';
}
停止当前脚本运行语句:exit
。在错误检查时常用。
$_SERVER['DOCUMENT_ROOT']
打开服务器的Web文档根目录。
文件模式中,为获得最大的可移植性,一般建议加上b
。Windows系统区分二进制文件和文本文件,Unix系统不区分。
操作文件:
1.打开文件
$fp = fopen("$document_root/../orders/orders.txt",'ab');
//如果php.ini中,allow_url_open是打开的,那么可以通过FTP和HTTP打开文件
2.写文件
fwrite($fp, $outputstring, strlen($outputstring)); //fputs等同
3.关闭文件
fclose($fp);
4.一次读一行文件
while(!feof($fp)) {
} //使用while循环读文件,直到文件末尾
$order = fgets($fp); //fgets读到\n或EOF停止
string fgetss(resource fp[, int length[, string allowable_tags]]) //默认剔除PHP和HTML标签
array fgetcsv(resource fp, int length[, string delimiter[, string enclosure[, string escape]]]) //可以设定分解符,length设置为0可以不限制长度
5.一次读整个文件
//自动打开文件,输出内容,关闭文件
int readfile(string filename,[bool use_include_path[, resource context]]);
//将文件读入数组中
$filearray = file(string filename);
//返回文件全部内容
file_get_contents(string filename);
//需要fopen,将指针位置处的内容输出,成功返回true
fpassthru($fp);
6.
fgetc($fp); //一次读一个字符,返回EOF
string fread(resource fp, int length); //读任意大小
file_exits(string filename);
filesize(string filename);
unlink(string filename);
rewind($fp); ftell($fp);
int fseek(resource fp, int offest[, int whence]);
//whence默认为SEEK_SET开始位置,还可以为SEEK_CUR,SEEK_END。
处理并发:对文件上锁
bool flock(resource fp, int operation[, int &wouldblock]);
//如果当前进程阻塞,第三个参数将返回true
LOCK_SH //读锁
LOCK_EX //写锁
LOCK_UN //释放锁
flock()
不支持NFS等网络文件系统,也不支持一些不允许锁操作的文件系统如FAT。在一些操作系统上,它在进程级实施,在使用多线程API时无法正常工作。
用@
符号抑制该函数的任何错误提示,可以用对用户更友好的方式显示错误信息。
@$fp = fopen("$document_root/../orders/orders.txt",'ab');
if(!$fp) {
echo "<p><strong> Your order could not be processed at this time.
.Please try again later.</strong></p></body></html>";
exit; //如果错误退出脚本
}
使用fwrite
时,在Unix系统中,需要给apache用户组可写的权限:
1.查看配置文件apache2.conf,搜索User,可以看到
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
2.然后查看/etc/apache2/envvars,看到:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
所以apache用户组的名字为www-data
3.然后创建目录,并授予权限:
sudo mkdir path/to/orders
sudo chgrp apache path/to/orders
sudo chmod 775 path/to/orders
PHP中数组可以动态调整大小。
1.创建数组:
$products = array( 'Tires', 'Oil', 'Spark Plugs' );
$products = ['Tires', 'Oil', 'Spark Plugs'];
$odds = range(1, 10, 2);
$letters = range('a', 'z');
2.使用自定义的索引:
$prices = array('Tires'=>100, 'Oil'=>10, 'Spark Plugs'=>4); //隐式创建
$prices['Tires'] = 100;
3.遍历数组:
//默认索引
foreach($products as $current) {
echo $current.' ';
}
//自定义索引
foreach($prices as $key => $value) {
echo $key.'-'.$value.'<br />';
}
while($element = each($prices)) {
//或者list($product, $price) = each($prices)
echo $element['key'].'-'.$element['value'];
echo '<br />';
}
//each返回4个键值对,'key'和0等价,'value'和1等价。
//注意,数组会记录当前元素的位置,如果使用each()方法两次遍历数组,需要在第二次调用前reset($prices)。
//二维数组的遍历,自定义索引可以采用while循环
for ($row = 0; $row < 3; $row++) {
while (list( $key, $value ) = each( $products[$row])){
echo '|'.$value;
}
echo '|<br />';
}
4.数组排序:
sort(); //对默认索引的数组排序
asort(); //对自定义索引的值排序
文章浏览阅读700次。突如其来的疫情,打乱了所有职场人的节奏。年前裸辞,打算年后再找工作,拿到offer的希望,瞬间渺茫;领了年终奖,准备迎接“跳槽季”,迎来的是裁员、企业倒闭。困守在家中的人,也在线上交流着对未来的担忧:“疫情什么时候结束?我该怎么安排跳槽节奏?”“公司会不会裁员?我该怎么让自己不可替代?”“疫情对行业有什么影响?我要不要朝线上发展?”这些..._程序员怎么走系统优化路线
文章浏览阅读1.2w次,点赞7次,收藏45次。https://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247509797&idx=4&sn=0f356b8f6397ad6e0743e192ed182ede&chksm=e99e94dcdee91dcad9bc842ed129b27e7cfe649fc3407e21e7e0c05060c7f6daf346d628f189&mpshare=1&scene=23&srcid=0617GtNIERqCM_(1)获取点簇特征矩阵x,并计算邻接矩阵a,自连接邻接矩阵 , 及 ; (2)输入两层的gcn
文章浏览阅读625次。https://blog.csdn.net/fireofjava/article/details/46011381_php 上传前 预览图片
文章浏览阅读4k次。java操作redis简单示例_java redis hashmap
文章浏览阅读2.9k次。上次遇到这个问题就想写下来,其实当时我也不怎么会,老师说这个东西不需要理解,只需要死记硬背,写的多了就记住了,所以今天搜集了几篇文章,加上自己的理解,写下了这篇python 输出颜色的样式与方法的文章,一方面想自己记录下自己的理解,另一方面想用自己通俗的理解送给需要的盆友。在写python 程序代码的时候,我们知道python 输出的字符串颜色和一般字符相同,但是许多时候,我们需要强调某些字符..._python windll getstdhandle
文章浏览阅读3.7k次,点赞4次,收藏15次。随着Flutter逐渐的被越来越多的公司所采用,那么如何将中国移动统一认证SDK接入到Flutter应用中。目录1.准备工作2.开始接入3.运行调试4.注意事项1.准备工作1.1 下载好统一认证SDK,这里使用的版本是quick_login_android_5.8.11.2 在移动开发平台申请好应用拿到appid、appkey2.开始接入2.1 按照统一认证SDK接入文档配置好权限,READ_PHONE_STATE权限根据应用方需要选择是否添加,SDK不强制要求._flutter一键登录
文章浏览阅读870次。str1 = 'abcdefg higklmn'print(str1)print(id(str1))print(type(str1))print(dir(str1))print(str1[1:2])# 修改字符串,拼接字符串print(str1 + ' HELLO WORD')# 格式化字符串print('姓名 %s 年龄 %d' % ('小白',10))..._python中str1 = 'abcdefg' str2 = 'abcdefg' print(id(str1)) print(id(str2))
文章浏览阅读2.9k次。核心内容就在这张图上: 相信大家都明白总线的概念,在图中可以看到6个定时器模块,Micro Timer 0、Micro Timer 1、Timer 0、Timer 1、Timer 2、Timer 3,其中前两个是8位的,后四个是16位的。从图中可以看出PIT模块是以总线时钟(Bus Clock)为基准时钟的,总线时钟通过8位Micro Timer 0和Micro Timer 1倍频..._pitmtld0=100-1;设置定时器0的计数值,这里设置为99,用于生成一个定时周期。pitld0=10000-1;设置定时器0的加载值,这里设置为9999,表示定时器0的溢出时间为10000个时钟周期。
文章浏览阅读7.5k次,点赞9次,收藏78次。编者说:ModBus通信协议结构简单,编程方便,在工业应用现场被广泛使用,特别是PLC应用场合。需要指出的是,ModBus只是一种通信协议,即设备之间的数据约束方式,使用时需要有底层的驱动程序支持,例如,串口通讯。串口通信使用简单,在ModBus协议中应用广泛。在信号的传输方式上又分为RS-232通信,RS-485通信,这种区分只是在数据的传输方式方作划分,底层的驱动程序完全一样。需要长距离、..._modbusrtu设备编程
文章浏览阅读607次。read/write 的使用 读函数read ssize_t read(int fd,void *buf,size_t nbyte)read函数是负责从fd中读取内容.成功时,read返回实际所读的字节数,如果返回的值是0,表示已经读到文件的结束了. 小于0表示出现了错误.如果错误为EINTR说明读是由中断引起的, 如果是ECONNREST表示网络连接出了问题. 写函数write ssi_该程序通过从待复制的文件中逐步读出数据到缓冲区,再把缓冲区的数据逐个写入
文章浏览阅读1.1k次。前言: 最近在公司接触的项目都是"maven项目",可是除了安装了一个maven的插件和项目中多了一个maven的配置文件外,对于maven的事情就看不到了,于是今天查了一些关于maven的相关介绍,跟大家一个分享下,看看maven到底是个什么东东... 正题:1.Maven能做什么? Maven是一个强大的构建工具,可以帮我们自动化构建过程,从清理、编译、测试_maven项目
文章浏览阅读2.6k次。第一部分 概 述第1章 调试工具简介许多技术性的书籍和文章都指出了在正确的软件设计和软件工程原则中包含的重要性。有些书侧重于介绍在方法与实践之间的均衡性,而有些书则注重对方法的描述。一些书讨论了面向对象设计、设计模式以及模块化编程等方法,这些方法都能帮助我们编写出更强大的软件。毫无疑问,正确的软件开发方法是所有软件项目获得成功的必要条件。然而,它们却并不是软件项目_windbg logviewer.exe