echo
<!DOCTYPE html>
<html>
<body>
<h1>我的第一张 PHP 页面</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
php的注释和c++的注释符号一样
//
#
/*
此处为注释
*/
<!DOCTYPE html>
<html>
<body>
<?php
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";
?>
</body>
</html>
以上的三种方法等价
所有用户定义的****函数,类和关键词都对大小写不敏感,例如if else echo等等
在php中所有变量都对大小写敏感,试运行以下代码
<!DOCTYPE html>
<html>
<body>
<?php
$color="red";
echo "My car is " . $color . "<br>";
echo "My house is " . $COLOR . "<br>";
echo "My boat is " . $coLOR . "<br>";
?>
</body>
</html>
通常,在函数完成或执行后,会删除所有变量,不过有时我需要不删除某个局部变量
使用static关键词
<?php
function myTest() {
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时包含的信息(不会重新赋值)
但是这个变量仍然是局部变量
有无括号都可使用(**print和print()**)
<?php
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");
print $txt1;
print "<br>";
print "Study PHP at $txt2";
print "My car is a {$cars[0]}";
?>
取数组中的某一个元素需要加大括号,大括号内部是数组名[index]
返回字符串的长度
<?php
echo strlen("hello world");
?>
str_word_count()
<?php
echo str_word_count("hello world");
?>
用于反转字符串
<?php
echo strrev("hello world"); //输出dlrow olleh
?>
用于检索字符串内指定的字符或文本
如果找到匹配,则会返回首个匹配的字符位置,如果未找到,则会返回false
strpos(“原字符串”,“待检索字符串”);
<?php
echo strpos("hello world","world"); //输出为6,下标从0开始(很特殊的是sql中的substr);
?>
用一些字符串替换字符串中的另一些字符
<?php
echo str_replace("被替换字符","替换字符",“原string”);
echo str_replace("world","kitty","hello world"); //结果为hello kitty
?>
define()函数,一共三个参数
首个参数定义常量的名称
第二个参数定义常量的值
第三个参数规定常量名对大小写是否敏感,默认为false
<?php
define("GREETING","Welcome");
echo GTEETING; //创建了一个对大小写不敏感的GREETING常量,值为Welcome;
?>
<?php
define("GREETING","Welcome");
function mytest() {
echo GREETING;
}
?>
$x + $y
$x - $y
$x * $y
$x / $y
$x % $y
<?php
$x=17;
$y=8;
echo ($x+$y);
?>
if (条件) {
语句;
}
<?php
if(){
}
elseif(){
}
else{
}
?>
有选择地执行若干代码
switch(expression){
case label1:
expression = label1时执行的代码;
break;
case label2:
expression = label2时执行的代码;
break;
default:
表达式的值不等于label1和label2时执行的代码
}
如果没有case为真,才使用default
提前确定了脚本运行的次数,用for循环
for(init counter;test counter;increment counter){
code to be executed;
}
第一个参数是初始化循环计数器的值
第二个参数是判断每个循环迭代,true继续,false结束
第三个参数是增加循环计数器的值
<?php
for($x=0;$x<=10;$x++){
echo "xxx";
}
?>
定义(1)
判断(2)
执行循环体语句
改变循环变量(3)
foreach循环只用于数组,用于遍历数组中的每个键值对
foreach($array as $value){
执行代码
}
每一次循环迭代,当前数组的值就会赋给$value变量,并且数组指针会逐一移动,直到到达最后一个数组元素
<?php
$color = array("red","green","blue");
foreach($color as $value){ //类似于c++中的范围遍历,将$color数组中的每一个元素作为value
echo "value";
}
?>
以单词function开头
function functionname(){
被执行的代码;
}
函数名对大小写不敏感
通过参数向函数传递信息,参数类似于变量
逗号隔开参数
<?php
function family($name){
echo "$name";
}
?>
如果调用没有参数的函数,参数会取默认值
默认参数值只会发生在函数的调用过程中
<?php
function setheight($min=60){
echo "height is $min";
}
setheight(); //无参数,使用默认值60
setheight(100); //有参数,不适用默认值,使用传入的100
?>
<?php
$cars=array("a","b","c");
echo "I like" . $cars[0] . "," . $cars[1] . "," . cars[2] . ".";
?>
索引自动分配,从0开始
$cars=array('a','b','c');
等价于
$cars[0] = 'a';
$cars[1] = 'b';
$cars[2] = 'c';
count()函数,即返回元素个数
<?php
$cars=array("a","b","c");
echo count($cars); //运行结果即为3
?>
可以使用for循环遍历并输出索引数组的所有值
<?php
$cars=array('a','b','c');
$arrlength=count($cars);
for($x=0;$x < $arrlength;$x++){
echo $cars[x];
echo "<br>";
}
?>
关联数组是使用分配给数组的指定键的数组
$age=array("bill" => "35","steve" => "36","elon" => "37");
等价于
$age["bill"]="35";
$age["steve"]="36";
$age["elon"]="37";
语法:array(“键”=>”值”,”键”=>”值”);
使用foreach循环,遍历并输出关联数组的所有值
foreach($age as $x=>$x_value){
echo "key=".$x.",value=".$x_value;
echo "<br>";
}
以升序对数组排序
<?php
$cars=array('a','b','c');
sort($cars);
?>
按照ascii码降序对数组进行排序,reverse的sort();
<?php
$cars=array('a','b','c');
rsort($cars);
?>
根据键对关联数组进行排序
排序对象是关联数组,排序的根据是键值对的键
<?php
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
ksort($age);
?>
php中许多预定义变量都是超全局的,这意味着他们在一个脚本的全部作用域中都可用,无需执行global
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
用于在PHP脚本中的任意位置访问全局变量
PHP在名为$GLOBALS[index]的数组中存储了所有全局变量,变量的名字就是数组的键(逐一这个地方是数组的名字,是去掉$的数组名字再加上单引号括起来)
<?php
$x=1;
$y=2;
function addition() {
$GLOBALS['$z'] = $GLOBALS['$x'] + $GLOBALS['$y'];
}
addition();
echo $z;
?>
$_server这种超全局变量保存关于报头,路径和脚本位置的信息
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
$_server中访问的最重要的元素
重要的
$_server['REQUEST_METHOD'];返回访问页面使用的请求方法,例如post和get
$_server['SERVER_ADDR'];返回当前脚本所在的服务器的IP地址
$_server['PHP_SELF'];返回当前执行脚本的文件名
$_server['SERVER_NAME'];返回当前运行脚本所在的服务器的主机名
用于收集HTML表单提交的数据
下面是一个包含输入字段和提交按钮的表单,当用户通过点击提交按钮来提交表单数据时,表单将发送到标签的 action 属性中指定的脚本文件.
在这个例子中,我们指定文件本身来处理表单数据。如果您需要使用其他的 PHP 文件来处理表单数据,请修改为您选择的文件名即可。然后,我们可以使用超级全局变量 $_REQUEST 来收集 input 字段的值:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
</body>
</html>
广泛用于收集method=”post”的HTML表单后的表单数据
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
Name: <input type="text" name="fname">;
<input type="submit">;
</form>
<?php
$name = $POST['fname'];
echo $name;
?>
</body>
</html>
上面的$_POST和$_GET都是变量,类似于$GLOBAL,存储了脚本中的所有POST或者GET方法传入的参数
使用方法和$GLOBAL类似
echo $_GET["name"];
echo $_POST["age"];
GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。GET 可用于发送非敏感的数据。
GET可以看见注入点(发送的信息的变量名)
POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中)并且对所发送信息的数量也无限制。
readfile()函数读取文件,并把它写入输出缓冲
假设我们有一个名为 “webdictionary.txt” 的文本文件,存放在服务器上,就像这样:
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
读取此文件并且写到输出流的PHP代码如下:读取成功则readfile()函数返回字节数
<?php
echo readfile(webdictionary.txt);
?>
提供比readfile()更多的选项
fopen的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式
<?php
$myfile=fopen("webdictionary.txt","r") or die("unable to open file");
fclose($myfile);
?>
feof()函数检查是否已经到达end of file
feof()对于遍历未知长度的数据很有用
<?php
$myfile=fopen("a.txt","r") or die("unable to open file");
while(!feof($myfile)){
echo fgets($myfile).<br>;
}
fclose($myfile);
?>
fgetc()函数用于从文件中读取单个字符
<?php
fopen("a.txt","r") or die("unable");
while(!feof($myfile)){
echo fgetc($myfile);
}
fclose($myfile);
?>
fopen()函数用于创建文件
在php中,创建文件所用的函数和打开文件的相同
如果fopen()没有遍历到文件,就会创建一个文件
$myfile=fopen("a.txt","w");
fwrite()函数用于写入文件
fwrite()的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串
<?php
$myfile=fopen("newfile.txt","w") or die("unable");
$txt="a";
fwrite($myfile,$txt);//写a
$txt="b";
fwrite($myfile,$txt);//写b
fclose($myfile);
?>
<form action="upload_file.php" method="post" enctype='multipart/form-data'>
第一个参数是input name
第二个下标可以是name type size tmp_name error
$_FILES["file"]["name"] 被上传文件的名称
$_FILES["file"]["type"] 被上传的文件类型
$_FILES["file"]["size"] 被上传的文件大小,以字节计算
$_FILES["file"]["tmp_name"] 存储在服务器的文件的临时副本名称
$_FILES["file"]["error"] 由文件上传导致的错误代码
总之$_FILES超全局变量的作用就是用来上传文件的
只能上传gif或者jpeg文件
if((($_FILES['file']['type'] == 'image/gif') || $_FILES['file']['type'] == 'image/jpeg' || $_FILES['file']['type'] == 'image/pjpeg')) && ($_FILES['file']['size'] < 20000>))
{
if($_FILES['file']['error'] > 0) // 这个地方如果为error则错误代码>0
{
echo "ERROR" . $_FILES['file']['error'] . "<br />"
}
else{
echo "UPLOAD-name" . $_FILES["file"]["name"] . <br />
echo "Type" . $_FILES["file"]["type"] . <br />
echo "Size" . $_FILES['file']['size'] . "byte" . <br />
}
}
上面的例子在服务器的PHP临时文件夹中创建了一个临时副本
这个临时副本会在脚本结束时消失,要保存被上传的文件,我们需要把它拷贝到另外的位置
if(file_exists("upload/" . $_FILES["file"]["name"])){
echo $_FILES["file"]["name"] . "already exists.";
}
else{
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
echo "stored in:" . "upload/" . $_FILES["file"]["name"];
}
上面的脚本检测了是否已经存在了此文件,如果不存在,则把文件拷贝到指定的文件夹
file_exists() 检测在指定目录下是否有文件名的文件存在
move_uploaded_file() 移动文件
setcookie()函数用来设置cookie
setcookie()函数必须位于<\html>标签之前
setcookie(name,value,expire,path,domain)
创建用户名为user的cookie,将它赋值为alex port,规定在一小时后过期
<?php
setcookie("user","alex port",time()+3600);
?>
在发送cookie时,cookie的值会自动进行URL编码,在取回时自动解码
为了防止URL编码,使用setrawcookie()函数取代,set 设置,raw 生的,没有改变进行URL编码的cookie
$_COOKIE超全局变量用于取回cookie的值
取回名为user的cookie值,并且显示
echo $_COOKIE['user'];
使用isset()函数来确认是否已经设置了cookie
<?php
if(isset($_COOKIE["user"]))
echo "welcome" . $_COOKIE['user'] . <br />
else
echo "welcome guest" . <br />
?>
当删除cookie时,应该使用过期日期变更为过去的时间点
如果过期日期在过去的时间点,则认为过去已经过期
<?php
setcookie("user","",time()-3600);//默认为cookie的名称为user,值为空,时间在过去一个小时的时候已经过期
?>
来自表单的输入数据
Cookies
服务器变量
数据库查询结果
如果需要过滤变量,使用以下的过滤器函数之一
filter_var() 通过一个指定的过滤器来过滤单一的变量
filter_var_array() 通过相同的或不同的过滤器来过滤多个变量
filter_input() 获取一个输入变量,并对它进行过滤
filter_input_array() 获取多个输入变量,并通过相同的或不同的过滤器对他们进行过滤
https://www.w3school.com.cn/php/php_ref_filter.asp php-filter函数
<html>
<body>
<form action='welcome.php' method='post'>
Name: <input type='text' name='name'><br>
E-mail: <input type='text' name='email'><br>
<input type='submit'>
</body>
</html>
用户填写此表单并点击提交按钮后,表单数据会发送到名为welcome.php的文件供处理,表单数据是通过HTTP POST的方式发送的
如需显示出被提交的数据,您可以简单地输出(echo)所有变量。”welcome.php” 文件是这样的:
<html>
<body>
welcome <?php echo $_POST["name"];?><br>
your email address is: <?php echo $_POST["email"]?><br>
</body>
</html>
Name: <input type="text" name='name'>
E-mail: <input type="text" name='email'>
website: <input type='text' name='website'>
gender字段是单选按钮,其中,radio的type类型是单选框
gender:
<input type='radio' name='gender' value='female'> female
<input type='radio' name='gender' value='male'> male
<form method='post' action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
检查name字段是否包含字母和空格,如果name字段无效,则存储一条错误信息
$name=test_input($_POST["name"]);
if(!preg_match("/^[a-zA-Z]*$/",name)){
$emailErr='无效的email格式';
}
preg_match()函数检索字符串的模式,如果模式存在则返回true,否则返回false