PHP介绍

《PHP and MySQL Web Development》 第5版中部分知识总结。

1.介绍
1.什么是PHP

PHP是专门为Web设计的服务端脚本语言。

PHP目前解释为PHP Hypertext Preprocessor.

PHP7包含了Zend引擎的重构。

2.使用PHP

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。在错误检查时常用。

3.PHP存储和提取数据

$_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
4.PHP数组

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(); //对自定义索引的值排序
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值