<?php
header("content-type:text/html;charset=utf-8");
show_source(__FILE__);
echo '<pre>';
include('u/ip.php');
include('flag.php');
if (in_array($_SERVER['REMOTE_ADDR'],$ip)){
die("您的ip已进入系统黑名单");
}
echo "hello";
var_dump($ip);
if ($_POST[substr($flag,5,3)]=='attack'){
echo $flag;
}else if (count($_POST)>0){
$ip = '$ip[]="'.$_SERVER['REMOTE_ADDR'].'";'.PHP_EOL;
file_put_contents('u/ip.php',$ip,FILE_APPEND);
}
echo '</pre>';
?>
根据代码学习函数,我是个半吊子。
一.in_array
定义和用法
in_array() 函数搜索数组中是否存在指定的值。
注释:如果 search 参数是字符串且 type 参数被设置为 TRUE,则搜索区分大小写。
语法
in_array(search,array,type)
参数 | 描述 |
---|---|
search | 必需。规定要在数组搜索的值。 |
array | 必需。规定要搜索的数组。 |
type | 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。 |
说明
如果给定的值 search 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。
如果没有在数组中找到参数,函数返回 false。
注释:如果 search 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。
技术细节
返回值: | 如果在数组中找到值则返回 TRUE,否则返回 FALSE。 |
PHP 版本: | 4+ |
Changelog: | 自 PHP 4.2 起,search 参数现在也可能是数组。 |
实例
<?php
$people = array("Bill", "Steve", "Mark", "David");
if (in_array("Mark", $people))
{
echo "匹配已找到";
}
else
{
echo "匹配未找到";
}
?>
二.file_put_conents()
定义和用法
file_put_contents() 函数把一个字符串写入文件中。
与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
语法
file_put_contents(file,data,mode,context)
参数 | 描述 |
---|---|
file | 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。 |
data | 可选。规定要写入文件的数据。可以是字符串、数组或数据流。 |
mode | 可选。规定如何打开/写入文件。可能的值:
|
context | 可选。规定文件句柄的环境。 context 是一套可以修改流的行为的选项。若使用 null,则忽略。 |
说明
参数 data 可以是数组(但不能是多维数组)。
自 PHP 5.1.0 起,data 参数也可以被指定为 stream 资源,stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。
对 context 参数的支持是 PHP 5.0.0 添加的。
返回值
该函数将返回写入到文件内数据的字节数。
提示和注释
- 如果文件不存在,则创建文件,相当于fopen()函数行为。
- 如果文件存在,默认将清空文件内的内容,可设置 flags 参数值为 FILE_APPEND 以避免。
- 本函数可安全用于二进制对象。
三.substr
定义和用法
substr() 函数返回字符串的一部分。
注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
语法
substr(string,start,length)
参数 | 描述 |
---|---|
string | 必需。规定要返回其中一部分的字符串。 |
start | 必需。规定在字符串的何处开始。
|
length | 可选。规定被返回字符串的长度。默认是直到字符串的结尾。
|
技术细节
返回值: | 返回字符串的提取部分,若失败则返回 FALSE,或者返回一个空字符串。 |
PHP 版本: | 4+ |
更新日志: | 在 PHP 5.2.2 到 5.2.6 版本中,如果 start 参数表示负截断或者越界位置,则返回 FALSE。 其他版本则从 start 位置开始获取字符串。 |
更多实例
例子
使用带有不同正负数的 start 和 length 参数:
<?php
echo substr("Hello world",0,10)."<br>"; //Hello worl
echo substr("Hello world",1,8)."<br>"; //ello wor
echo substr("Hello world",0,5)."<br>"; //Hello
echo substr("Hello world",6,6)."<br>";//world
echo substr("Hello world",0,-1)."<br>"; //Hello worl
echo substr("Hello world",-10,-2)."<br>"; //ello wor
echo substr("Hello world",0,-6)."<br>"; //Hello
echo substr("Hello world",-2-3)."<br>"; //world
?>
四.PHP_EOL
换行符
unix系列用 \n
windows系列用 \r\n
mac用 \r
PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性
将文件中的内容合成一行
$str = str_replace(PHP_EOL, '', $str);
向文件中追加内容并换行
$ip = '$ip[]="'.$_SERVER['REMOTE_ADDR'].'";'.PHP_EOL;
file_put_contents('u/ip.php',$ip,FILE_APPEND);
五.count()
定义和用法
count() 函数返回数组中元素的数目。
语法
count(array,mode);
参数 | 描述 |
---|---|
array | 必需。规定数组。 |
mode | 可选。规定模式。可能的值:
|
说明
count() 函数计算数组中的单元数目或对象中的属性个数。
对于数组,返回其元素的个数,对于其他值,返回 1。如果参数是变量而变量没有定义,则返回 0。
如果 mode 被设置为 COUNT_RECURSIVE(或 1),则会递归底计算多维数组中的数组的元素个数。
技术细节
返回值: | 返回数组中元素的数目。 |
PHP 版本: | 4+ |
更新日志: | mode 参数是在 PHP 4.2 中新增的。 |
更多实例
例子 1
递归地对数组进行计数:
<?php
$cars=array
(
"Volvo"=>array
(
"XC60",
"XC90"
),
"BMW"=>array
(
"X3",
"X5"
),
"Toyota"=>array
(
"Highlander"
)
);
echo "常规计数:" . count($cars)."<br>";
echo "递归计数:" . count($cars,1);
?>
运行结果
常规计数:3
递归计数:8