PHP踩坑记录#1

PHP踩坑记录#1

这段时间在开发追番列表展示API(人生中第一个PHP项目啊…),迫于没有系统地学习过PHP只是略知一二,在开发的过程中可以说是到处是坑,于是乎….在我努力地现学现卖的过程下,还是顺利地写完了这个程序

至于运行的效率以及代码质量么….不管了….(自信

那么针对踩过的坑就记录一下吧~(先说明一下 PHP 版本为7.1.26)

0x01 PHP 调用 API

本案例中 API 为 BiliBili 的 Bangumi API:

https://space.bilibili.com/ajax/Bangumi/getList?mid={user.id}

其中{user.id}为用户的UID

正确请求后可得到 json 返回该用户的追番列表

那么 PHP 应该如何调用这个 API 并将返回的 json 存储于变量中呢?

首先建立一个 function

1
2
3
4
5
6
7
8
9
10
function curl_get_https($url) {
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
$tmpInfo = curl_exec($curl); // 返回api的json对象
curl_close($curl);
return $tmpInfo; // 返回json对象

}

搞定后程序中就可以随时调用这个function

1
2
$uid = $_GET["uid"]; //获取提交的UID
$file = curl_get_https('https://space.bilibili.com/ajax/Bangumi/getList?mid=' . $uid);

这样返回的json就被存储于$file变量中了

0x02 PHP 解析 Json

假设 json 数据已经存储与$file变量中,解析 json 非常简单:

1
$res = json_decode($file);

但是请注意,这种方式 json 将以 StdClass Object 的形式存储,如果需要以 Array 的形式存储,则应该这样:

1
$res = json_decode($file, true);

StdClass Object 的进一步解析

假设解析后的内容存储于$res中,$res下有一个分项叫datadata下有一个分项叫pages,那我要获取pages的值,应该怎么办呢?

$pages = $res->data->pages;

这样就可以将pages的值存储于$pages

Array 的进一步解析

假设解析后的内容存储于$res

首先要清楚 Array 的结构,用以下代码可输出:

print_r($res);

接着就要用到foreach()函数一层层完成遍历,相关用法不再赘述,可自行查找相关资料

0x03 For 循环的简单应用

1
2
3
for ($x = 1; $x <= 10; $x++) {
// Put your code here.
}

以上代码可完成$x从1至10的循环

0x04 PHP 下载文件

假设要下载到运行目录下的 cache 目录,下载链接存储于$url变量中

1
2
3
4
5
6
7
8
9
10
11
12
$url = $result['cover'];
$path = 'cache/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$img = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME);
$resource = fopen($path . $filename, 'a');
fwrite($resource, $img);
fclose($resource);

0x05 PHP 判断一个文件是否存在

假设文件名存储于$filename变量中

1
2
3
4
5
if (file_exists($filename)) {
return true;
} else {
return false;
}

好啦暂时就整理这么多,由于本人没有系统地学习过 PHP,本文中的部分表述可能存在漏洞或描述不清,各位大佬轻喷….如果您发现本文中有错误请务必在下方评论区指出,我会感激不尽~



评论

如果您看不见评论框,八成是因为您还未接入真正意义上自由开放的互联网哟~自己看着办吧~

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×