PHP简单实现一言 / 随机一句功能

mengkun 764 26

很多网站都喜欢在页面中加个一言,不过一般都是调用的第三方api。其实,使用万能的php能通过短短的几行代码就实现该功能![wb_dog13]

准备工作

首先准备一个代码编辑器,然后新建一个 php 文件,命名为 api.php,再新建一个文件,命名为 data.dat(两个文件均需采用 UTF-8 编码,否则会乱码)。

打开 data.dat,在里面贴入要随机显示出来的文本,一行一条。如果你暂时想不出什么比较好的句子的话,[wb_害羞]我这儿准备了几十条古诗名句,可以直接点我下载备用。

上代码

将下列代码复制并粘贴到 api.php 中保存,你的专属“一言” API 就搭建完成了!超简单是不是……[wb_dog9]戳我查看效果演示

<?php
// 存储数据的文件
$filename = 'data.dat';        

// 指定页面编码
header('Content-type: text/html; charset=utf-8');

if(!file_exists($filename)) {
    die($filename . ' 数据文件不存在');
}

$data = array();

// 打开文档
$fh = fopen($filename, 'r');

// 逐行读取并存入数组中
while (!feof($fh)) {
    $data[] = fgets($fh);
}

// 关闭文档
fclose($fh);

// 随机获取一行索引
$result = $data[array_rand($data)];

echo $result;

上面的代码是用 fopen + fgets 函数实现的,有些朋友似乎不是特别喜欢,觉得“效率低”。别急,这儿还有个 file_get_contents 函数实现的版本:[wb_爱你]

<?php
// 存储数据的文件
$filename = 'data.dat';        

// 指定页面编码
header('Content-type: text/html; charset=utf-8');

if(!file_exists($filename)) {
    die($filename . ' 数据文件不存在');
}

// 读取整个数据文件
$data = file_get_contents($filename);

// 按换行符分割成数组
$data = explode(PHP_EOL, $data);

// 随机获取一行索引
$result = $data[array_rand($data)];

// 去除多余的换行符(保险起见)
$result = str_replace(array("\r","\n","\r\n"), '', $result);

echo $result;

如何在静态页面中引用

上面的代码都是直接在页面中就输出了随机的句子。如果想像一言那样在静态的网页中引用这个 api,该如何实现呢?

很简单,将最后那一行的 echo $result; 换成

echo 'document.write("'.htmlspecialchars($result).'");';

然后在需要的位置用引入 js 的方式进行调用即可。

示例代码:

<script src="http://你的网址.cn/api.php"></script>

下面的这个“随机古诗名句”就是按照上述方法进行的调用:

(↑↑↑ 刷新一下页面,会有不同的句子)

打赏
发表评论
表情 图片 链接 代码

  1. 楚狂人
    楚狂人 Lv 1

    不错哦,这个很有用[aru_22]

  2. cn
    cn Lv 1

    哈哈 这么晚了来看看你[aru_59]

    • mengkun
      mengkun 站长

      @cn欢迎欢迎,有失远迎[aru_12]

  3. 完美者
    完美者 Lv 5

    最近访问,比之前快多了,就是CDN的锅吧

  4. 1648974181
    1648974181 Lv 1

    求助一下孟坤大佬,我的网站被反代理了怎么解决[aru_15]

    • mengkun
      mengkun 站长

      @1648974181https://www.ilxtx.com/mirrored-website.html

  5. 楚轩大人
    楚轩大人 Lv 1

    水水更健康啊

  6. 阿珏
    阿珏 Lv 3

    所有人都看出来你是在水博客了[aru_145]

  7. TO值得买
    TO值得买 Lv 1

    孟坤大佬你真牛逼,收下我的膝盖。[aru_15]

  8. 完美者
    完美者 Lv 5

    我就喜欢这么水的帖,因为都是现成的

  9. 疆飞
    疆飞 Lv 1

    孟老大,最近我换了阿里云服务器, 换过来以后 sendmail 邮件好像出了一些问题,什么时候有时间,跟你请教一下啊!

    • mengkun
      mengkun 站长

      @疆飞可以试试用 SMTP 发送。如果 SMTP 也发不成,那就检查一下:
      1、邮件账号密码等是否设置正确(或压根就没有配置);
      2、服务器对应的端口没有打开;
      如果上面两项检查了没问题,就只能发工单求助客服了

      • 疆飞
        疆飞 Lv 1

        @mengkunsmtp 母问题!但是我想用sendmail 来发邮件。

  10. 杰新博客

    这么久没更新了,这么水啊![aru_1] 不过,我喜欢。[aru_59]

  11. 杨小杰博客

    好水的文章

  12. 燎原
    燎原 Lv 2

    竟然能在文章中执行js

    • mengkun
      mengkun 站长

      @燎原当然可以~[aru_22]

  13. Armin
    Armin Lv 1

    支持博主。[aru_17]那就给大家分享一个百度文库的免费下载方法吧
    下载网址 http://139.224.236.108
    卡号:906675024密码:531020
    卡号:921485865密码:393065
    卡号:292030164密码:216849
    卡号:482925242密码:940990

    • mengkun
      mengkun 站长

      @Armin这个不错。我来补充几个……
      http://www.1234866.com/
      http://www.ywppt.com/run/index/
      http://www.v977.com/

  14. Jack Cui
    Jack Cui Lv 1

    沙发,网站卡到爆啊。[aru_27]

    • mengkun
      mengkun 站长

      @Jack Cui服务器最近出故障了,还没有解决……

      • 孟坤粉丝
        孟坤粉丝 Lv 1

        @mengkun还是阿里云好[aru_14]

      • mengkun
        mengkun 站长

        @孟坤粉丝现在这个是几十块钱一年的特价服务器,要啥自行车……

      • 孟坤粉丝
        孟坤粉丝 Lv 1

        @mengkun阿里云双11比腾讯云便宜呀,99一年

分享
微信
微博
QQ