PHP踩坑记录#1

Cover Image

本文最后更新于 天前,文中部分描述可能已经过时。

这段时间在开发追番列表展示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

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

$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 非常简单:

$res = json_decode($file);

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

$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 循环的简单应用

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

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

0x04 PHP 下载文件

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

$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变量中

if (file_exists($filename)) {
  return true;
} else {
  return false;
}

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

PHP踩坑记录#1
本文作者
Hans362
最后更新
2019-02-18
许可协议
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!
喜欢这篇文章吗?考虑支持一下作者吧~
爱发电 支付宝

评论

您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。