PHP 运算符

1.算术运算符:

[cce_php]
$english = 110; //英语成绩
$math= 118; //数学成绩
$biological = 80; //生物成绩
$physical = 90; //物理成绩
$sum = $english + $math + $biological + $physical;
$avg = $sum/4;
$x= $math - $english;
$x2 = $english * $english;

echo "总分:".$sum."<br />";
echo "平均分:".$avg."<br />";
echo "数学比英语高的分数:".$x."<br />";
echo "英语成绩的平方:".$x2."<br />";
[/cce_php]

取模案例:

[cce_php]
<?php 
     $maxLine = 4; //每排人数
	 $no = 17;//学生编号
	$line = ceil($no/$maxLine); //返回不小于它的下一个整数。
	$row = $no%$maxLine ? $no%$maxLine:$maxLine; 

	 echo "编号<b>".$no."</b>的座位在第<b>".$line."</b>排第<b>".$row."</b>个位置";
?>
[/cce_php]

2.赋值运算符:

(1)=:给左边的运算数申请一块新内存,然后把右边表达式的值复制一份放到新内存中

(2)&: 引用赋值,把两个变量指向同一块内存,如果内存值变了,两个变量的值都改变。

[cce_php]
<?php 
    $a = "我爱祖国";
	$b = $a;
	$c = &$a;
	$a = "我爱家";	
	echo $b."<br />";
	echo $c."<br />";//当变量$a的值改变时,$c的值也改变
?>
[/cce_php]

3.比较运算符:

[cce_php]
<?php  
    $a = 1;
    $b = "1";
	var_dump($a == $b);//bool(true)
	echo "<br />";
	var_dump($a === $b);//bool(false)
	echo "<br />";
	var_dump($a != $b);//bool(false)
	echo "<br />";
	var_dump($a <> $b);//bool(false)
	echo "<br />";
	var_dump($a !== $b);//bool(true)
	echo "<br />";
	var_dump($a < $b);//bool(false)
	echo "<br />";

	$c = 5;
	var_dump($a < $c);//bool(true)
	echo "<br />";
	var_dump($a > $c);//bool(false)
	echo "<br />";
	var_dump($a <= $c);//bool(true
	echo "<br />";
	var_dump($a >= $c);//bool(false)
	echo "<br />";
	var_dump($a >= $b);//bool(true)
	echo "<br />";
?>
[/cce_php]

4.三元运算符:

(expr1)? (expr2):(expr3)

如果expr1的值为true,则表达式的值为expr2,否则为expr3

[cce_php]
<?php 
    $a = 78;//成绩
	$b = $a >=60 ? "及格":"不及格";
	echo $b;
?>
[/cce_php]

5.逻辑运算符:

1、逻辑与:要求所有人都投票同意,才会通过某协议;

2、逻辑或:只要求一个人投票同意就行;

3、逻辑异或:只能有且只能有一个人投票同意;

4、逻辑非:某个人要反对,但是通过逻辑非,使其反对无效;

[cce_php]
<?php 
    $a = TRUE; //A同意
	$b = TRUE; //B同意
	$c = FALSE; //C反对
	$d = FALSE; //D反对
	//咱顺便复习下三元运算符
	echo ($a and $b) ? "通过":"不通过";
	echo "<br />";
	echo ($a or $c) ? "通过":"不通过";
	echo "<br />";
	echo ($a xor $c) ? "通过":"不通过";
	echo "<br />";
	echo !$c ? "通过":"不通过";
	echo "<br />";
	echo $b || $c || $d ? "通过": "不通过";
	echo "<br />";
	//以上全部输出为通过
?>
[/cce_php]

6.字符串连接运算符:

(1) . 连接运算符:将右参数附加到左参数的后面得到新字符串

(2).= 连接赋值运算符:将右边参数附加到左边变量值后面,并重新赋值给变量。

[cce_php]
<?php 
    $a = "张先生";
	$tip = $a."欢迎你";
	
    $b = "东边日出西边雨";	
    $b.= "道是无晴却有晴";
    
	$c = "东边日出西边雨";	
    $c = $c."道是无晴却有晴";
    
	echo  $tip."<br />";
	echo  $b."<br />";
	echo  $c."<br />";
 //变量b和c的内容输出相同
?>
[/cce_php]

7.错误控制运算符:

@ 对于可能会出错的表达式不显示错误信息,忽略错误信息提示

@只能放在表达式之前。

不能放在函数,类的定义之前,也不能用于条件或其它结构之前

如果在php.ini中设置了track_error,则所有异常信息都会被记录在$php_errormsg中,每次出错,此变量都会被覆盖。

[cce_php]
<?php  
 $conn = @mysql_connect("localhost","username","password");
 echo "出错了,错误原因是:".$php_errormsg;
?>
[/cce_php]

 

 

PHP 常量

常量,值为不变的量或值被定义后不可以被更改的量。

分为:系统常量和自定义常量

自定义常量:

使用define()定义

define(常量名,常量值,大小写)

常量名,不能带$符号,不能为空

常量值,不能为空

大小写敏感,可选,默认为false 区分大小写,true不区分大小写

[cce_php]
<?php
$p = "PII";
define("PI",3.14);
define($p,3.14);//常量名中有$,不执行
echo PI;
echo "<br />";
echo PII;
?>
[/cce_php]

系统常量:

PHP已经定义好的常量

如:

__FILE__ PHP文件名和路径

__LINE__ PHP程序代码所在行数

PHP_VERSION PHP程序代码所在行数

PHP_OS 执行当前PHP版本操作系统的名称

常量取值:

1.直接使用常量名

2.constant(常量名) 用来判断常量是否已经被定义,如果被定义就取值,如果没有定义提示失败

判断常量是否已经定义:

defined(常量名),如果已经定义返回true,已经没有返回false

[cce_php]
<?php 
define("PI1",3.14);
$is1 = defined("PI1");
$is2 = defined("PI2");
var_dump($is1);//返回true
var_dump($is2);//返回false
?>
[/cce_php]

 

 

 

PHP 读取并输出文件案例

1.t.txt内容:

我有一只小毛驴,我从来也不骑。
有一天我心血来潮,骑着去赶集。
我手里拿着小皮鞭,我心里正得意。
不知怎么哗啦啦啦啦,我摔了一身泥!

2.index.php内容:

[cce_php]
<?php 
	$file_hande = fopen("t.txt","r");
	if ($file_hande) {
		while (!feof($file_hande)) {
			$line = fgets($file_hande);
			echo $line;
			echo "<br />";
		}
	}
	fclose($file_hande);
 ?>

[/cce_php]

3.输出为:

我有一只小毛驴,我从来也不骑。
<br />有一天我心血来潮,骑着去赶集。
<br />我手里拿着小皮鞭,我心里正得意。
<br />不知怎么哗啦啦啦啦,我摔了一身泥!<br />[Finished in 0.1s]

 

PHP 数据类型

1.布尔类型:

TRUE 真 FALSE 假,不区分大小写

2.整型

十进制:正常数字:

$data_int = 1234;

八进制:0开头:

$data_int = 0123;

十六进制:0x开头:

$data_int = 0x1a

注,使用echo来输出以上整型会自动转化为十进制数

3.浮点型

小数:

$num_float = 1.234;

科学计数法:大小写E通用,e小数点向前或向后移动几位

$num_float = 1.2e3;

或 $num_float = 1.2E3;

4.字符串

单引号形式

$str = ‘abcd';

双引号形式;

$str = “abcd”;

heredoc形式:以EOT、EOD、EOF等标记来表示,束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号

[cce_php]
<?php 
$v = 2;
$a= <<<EOF
"abc"$v
"123"
EOF;
echo $a;
 ?>
[/cce_php]

在字符串中有引号解决方法:

双引号中有单引号:

$str =”我爱’祖国'”;

单引号中有双引号:

$str =’我爱”祖国”‘;

使用转义符\:

$str =”我爱\”祖国\””;

$str =’我爱\’祖国\”;

在字符串中有变量名操作:双引号中会取出变量值,单引号不会。

[cce_php]
<?php 
$str ="我爱祖国";
echo "我想说$str";//输出我想说我爱祖国
echo '我想说$str';//输出我想说$str
 ?>
[/cce_php]

5.资源类型

如打开文件,数据库链接,图形画布等

打开文件:

$file = fopen(“f.txt”,”r”);

连接数据库 :

$con = mysql_connect(“localhost”,”root”,”pass”);

图形画布:

$img =imagecreate(100,100),

6.空类型

NULL 空类型

变量值为NULL 或被unset()

以下四个输出都为空

[cce_php]
<?php 
 error_reporting(0); //禁止显示PHP警告提示
 $var;
 var_dump($var);
 $var1 = null;
 var_dump($var1);
 $var2 = NUll;
 var_dump( $var2);
 $var3 = "节日快乐!";
 unset($var3);
 var_dump($var3);
?>
[/cce_php]

 

 

 

 

PHP 变量定义规则

1.变量名必须以字母或下划线开头

2.变量名只能是字母,数字,下划线组成

3.变量名内不能包含空格

4.变量名区分大小写

如果变量名由多个单词组成,可以使用下划线隔开($my_book)或使用驼峰法单词首字母大写($myBook)。

使用memory_get_usage()可以查看变量所占用的内存资源

 

PHP 设置环境变量 include.php

例:

[cce_php]
//创建系统环境
<?php
session_start();
define("ROOT", dirname(__FILE__));
set_include_path(".".PATH_SEPARATOR.ROOT."/lib".PATH_SEPARATOR.ROOT."/core".PATH_SEPARATOR.get_include_path());
require_once 'mysql.func.php';
require_once 'image.func.php';
require_once 'common.func.php';
require_once 'string.func.php';
require_once 'page.func.php';
?>
//调用
<?php
require_once '../include.php';
?>

[/cce_php]

session_start():打开session,注意session只需要打开一次,如包含的文件里也有此语句,需要删除掉,否则文件运行错误。
dirname(__FILE__):文件根目录
set_include_path:设置PHP环境变量
PATH_SEPARATOR:php常量,在linux中显示:,在windows中显示;,配合set_include_path使用。
require_once:包含一个文件,如果文件已经被包含过,将不会再次包含。

PHP 验证码函数

image.func.php

[cce_php]
<?php
require_once 'string.func.php';
// 通过GD库做验证码
function verifyImage($type = 1,$length = 4,$sess_name = "verify",$pixel = 0, $line = 10)
{
    session_start();
    // 创建画布
    $width = 80;
    $height = 28;
    $image = imagecreatetruecolor($width, $height);
    $white = imagecolorallocate($image, 255, 255, 255);
    $black = imagecolorallocate($image, 0, 0, 0);
    // 用填充矩形填充画布
    imagefilledrectangle($image, 1, 1, $width - 2, $height - 2, $white);
    $type = 1;
    $length = 4;
    $chars = buildRandomString($type, $length);
    $_SESSION[$sess_name] = $chars;
    $fontfiles = array(
        "SIMYOU.TTF"
    );
    for ($i = 0; $i < $length; $i ++) {
        $size = mt_rand(14, 18);
        $angle = mt_rand(- 15, 15);
        $x = 5 + $i * $size;
        $y = mt_rand(20, 26);
        $fontfile = "../fonts/" . $fontfiles[mt_rand(0, count($fontfiles) - 1)];
        $color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 200), mt_rand(90, 180));
        $text = substr($chars, $i, 1);
        imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
    }
    // 增加干扰元素
    // 画点

    if ($pixel) {
        for ($i = 1; $i < 50; $i ++) {
            imagesetpixel($image, mt_rand(0, $width - 1), mt_rand(0, $height - 1), $black);
        }
    }
    // 画直线

    if ($line) {
        for ($i = 1; $i < $line; $i ++) {
            $color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 200), mt_rand(90, 180));
            imageline($image, mt_rand(0, $width - 1), mt_rand(0, $height - 1), mt_rand(0, $width - 1), mt_rand(0, $height - 1), $color);
        }
    }

    header("content-type:image/gif");
    imagegif($image);
    imagedestroy($image);
}
verifyImage(2,1,10,10);
?>
[/cce_php]

string.func.php:

[cce_php]
<?php
function buildRandomString($type=1,$length=4){
    if ($type == 1) {
        $chars = join("", range(0, 9));
    } elseif ($type == 2) {
        $chars = join("", array_merge(range("a", "z"), range("A", "z")));
    } elseif ($type == 3) {
        $chars = join("", array_merge(range("a", "z"), range("A", "Z"), range(0, 9)));
    }

    if ($length > strlen($chars)) {
        exit("字符串长度不度");
    }
    $chars = str_shuffle($chars);
    return substr($chars, 0, $length);
}
?>
[/cce_php]

PHP 创建目录,删除目录和其它交互

mkdir创建目录函数:

mkdir(参数,权限) 参数为新目录名,权限为新目录的权限码。如果是权限码需要重新设置:

使用umask来重新设置(对window系统无用);

[cce_php]

$oldumask = umask(0);
mkdir($dir,0777);
umask($oldumask);

[/cce_php]

rmdir删除目录函数:

rmdir(参数) 参数为目录名,目录必须为空

查看文件状态函数案例:

[cce_php]

<body>
<?php
$current_dir = ‘$DOCUMENT_ROOT/../uploads/';
$file = basename($current_dir);

echo ‘<h1> Details of file:’ .$file. ‘</h1>';

echo ‘<h2>File data</h2>';
echo ‘File last accessed:’ .date(‘j F Y H:i’, fileatime($file)). “<br />”;
echo ‘File last modified:’ .date(‘j F Y H:i’, filemtime($file)). “<br />”;

// $user = posix_getpwuid(fileowner($file));
// echo ‘File owner :’ . $user[ ‘name’]. ‘<br />';
//
// $group = posix_getgrgid(filegroup($file));
// echo ‘File Group :’ . $group[ ‘name’]. “<br />”;

echo ‘File permissions;’ . decoct(fileperms($file)). “<br />”;
echo ‘File type:’. filetype($file).'<br />';
echo ‘File size’ . filesize($file). ‘<br />';

echo ‘<h2>File tests</h2>';

echo ‘is_dir:’ . (is_dir($file)? ‘true':’false’) . ‘<br />';
echo ‘is_executable:’ . (is_executable($file)? ‘true':’false’) .'<br />';
echo ‘isfile:’ . (is_file($file)? ‘true':’false’) . ‘<br />';
echo ‘is_link:’ . (is_link($file)? ‘true':’false’) . ‘<br />';
echo ‘is_readable:’ .(is_readable($file)? ‘true':’fales’) . ‘<br />';
echo ‘is_writable:’ . (is_writable($file)? ‘true':’fales’) . ‘<br />';

?>
</body>

[/cce_php]

 

basename(参数) 获得文件名;

fileatime(参数) 获得最近被访问的时间戳

filemtime(参数) 获得最近被修改的时间戳

date(时间) 格式化时间戳

fileowner(参数) 返回 用户标识UID

filegroup(参数) 返回 用户组标识 GID

fileperms(参数) 返回 文件权限码

decoct(参数) 将文件权限码格式化为八进行数

filetype(参数) 返回文件类型

filesize(参数) 返回文件大小

is_dir(参数) 判断是否是目录
is_executable(参数) 判断是否可执行
is_file(参数) 判断是否是文件
is_link(参数) 判断是否是链接
is_readable(参数) 判断是否是可读
is_writable(参数) 判断是否是可写

stat(参数)可以将文件信息读入到一个数组

clearstatcache() 文件系统变化后需要使用此函数清空缓存

chgrp() 修改文件组

chmod() 修改文件权限

chown() 修改文件所有者

touch() 创建文件

unlink() 删除文件

copy() 复制一个文件

rename() 重新命名一个文件或移动一个文件

调用服务器命令函数:

exec(参数) 参数为服务器命令,返回命令最后一行

案例:

[cce_php]

<?php
chdir(‘$DOCUMENT_ROOT/../uploads/’);
echo ‘<pre>';
exec(‘dir’,$result);
foreach ($result as $line)
{
echo “$line\n”;
}

?>

[/cce_php]

passthru(参数) 返回结果到浏览器:

案例:

[cce_php]

<?php
chdir(‘$DOCUMENT_ROOT/../uploads/’);
echo ‘<pre>';
passthru(‘dir’);
echo ‘</pre>';

?>

[/cce_php]

system(参数) 返回结题到浏览器,并向后对齐

案例:

[cce_php]

<?php
chdir(‘$DOCUMENT_ROOT/../uploads/’);
echo ‘<pre>';
$result = system(‘dir’);
echo ‘</pre>';

?>

[/cce_php]

以上三个案例输出内容完全一样

chdir(参数) 改变当前目录

与环境变量交互:

phpinfo() 查看所有PHP环境变量信息;

getenv() 获得环境变量值

例:

getenv(“HTTP_REFERER”) 返回当前页的上一个URL

putenv() 改变环境变量值

例:

$home = ‘/home/nobody';

putenv(“HOME=$home”);

设置php.ini 中的 safe_mode_allowed_env_vars 可以限制改变PHP环境变量;

 

 

 

PHP 浏览目录中文件

使用PHP浏览指定目录中的文件:

[cce_php]

<body>
<?php
$current_dir = ‘$DOCUMENT_ROOT/../uploads/';
$dir = opendir($current_dir);

echo “<p> Upload directory is $current_dir</p>”;
echo ‘<p> Directory Listing:</p><ul>';
while (false !== ($file = readdir($dir)))
//判断文件是否存在并可以打开
{

//过滤.和..目录
if ($file != “.” && $file != “..”)
{
echo “<li> $file </li>”;
}
}

echo ‘</ul>';
closedir($dir);
?>

</body>

[/cce_php]

opendir(参数) 打开需要浏览的目录,参数为目录名.返回为一个句柄

readdir(句柄) 从目录中读取文件信息,每次读取一个文件,读完返回false

closedir(句柄) 关闭打开目录

rewinddir(句柄) 将句柄移回目录开头

 

使用dir类开显示目录列表:

[cce_php]

<?php
$dir = dir(‘$DOCUMENT_ROOT/../uploads/’);

echo “<p>Handle is $dir->handle</p>”;
echo “<p>Upload directory is $dir->path</p>”;
echo ‘<p>Directory Listing:</p><ul>';

while (false !== ($file = $dir->read()))
{
if ($file != “.” && $file != “..”)
{
echo “<li>$file</li>”;
}
}
echo ‘</ul>';
$dir->close();
?>

[/cce_php]

使用scandir函数来浏览目录:

[cce_php]

<body>

<h1> Browsing</h1>
<?php
$dir = ‘$DOCUMENT_ROOT/../uploads/';
$files1 = scandir($dir);
$files2 = scandir($dir,1);

echo “<p>Upload directory is $dir</p>”;
echo ‘<p>Directory Listing in alphabetical order, ascending:</p><ul>';

foreach($files1 as $file)
{
if ($file != “.” && $file != “..”)
echo “<li>$file</li>”;
}

echo “</ul>”;

echo “<p>Upload directory is $dir</p>”;
echo ‘<p> Directory listing in alphabetical, descending:</p><ul>';

foreach ($files2 as $file)
{
if ($file != “.” && $file != “..”)
echo “<li>$file</li>”;
}

echo “</ul>”;

?>

</body>

[/cce_php]

scandir(参数,整数)

参数为目录,把目录列表传给一个数组,默认为升序,如果整数为1,则为倒序。

dirname(参数) 显示参数的路径:

basename(参数) 显示参数的文件名;

disk_free_space(参数) 显示一个磁盘的空余空间;