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

mengkun 29.1K 60

很多网站都喜欢在页面中加个一言,不过一般都是调用的第三方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. hello
    hello Lv 1

    我怎么静态引用,不能正常显示,好像只能调用最后一行,其他都是空白

    • hello
      hello Lv 1

      @hello发现没显示的,都是 document.write("3 ") 的右括号换行了。。。最后一样没换行就可以显示

  2. moyi
    moyi Lv 1

    前辈,有人抄你的这篇文章,一模一样,标明自己是作者。https://www.n-1.cn/112.html

    • mengkun
      mengkun 站长

      @moyi[aru_59][aru_59][aru_59]

  3. 鱼七
    鱼七 Lv 1

    如何添加友盟的数据统计,老哥

  4. 轩沫
    轩沫 Lv 4

    大佬,下载诗句文件被防火墙拦截了。

  5. 游牧
    游牧 Lv 1

    请问 大佬 怎么在emlog侧栏引用这个代码

  6. 十七
    十七 Lv 1

    请问一下怎么嵌入html代码 需要在<hend>标签里面的(百度统计)

  7. 夏诗意
    夏诗意 Lv 1

    大佬,你php好像忘了写结尾的

    ?>

    [斜眼笑]

    • mengkun
      mengkun 站长

      @夏诗意php 文件后面如果没有了其它内容,可以不用写结尾

    • foxi
      foxi Lv 1

      @夏诗意结尾去掉?> 更安全,php官方推荐的用法,手册地址http://cn2.php.net/manual/zh/language.basic-syntax.phptags.php

  8. PHP简单实现一言 / 随机一句功能 - PHP - Mr.Li's Blog
    PHP简单实现一言 / 随机一句功能 - PHP - Mr.Li's Blog Pingback

    […] 发现好文:PHP简单实现一言/随机一句功能,文章来源孟坤博客 […]

  9. 嘤嘤怪
    嘤嘤怪 Lv 1

    有转载了一篇文章[aru_13]

  10. 免费主机
    免费主机 Lv 1

    真羡慕您的浏览量

  11. ソ穹ヲ
    ソ穹ヲ Lv 1

    请问,博主,能否把这个源码发给我吗,谢谢A Dark Room

    • 轻云
      轻云 Lv 2

      @ソ穹ヲA Dark Room的源码是github开源的。。。

  12. txh
    txh Lv 1

    不错,mark后期用上

  13. Vir
    Vir Lv 1

    感谢大佬的源码,新手拿去用了

  14. 欧小茶
    欧小茶 Lv 1

    怎么网站有时候打不开呢[aru_6]

  15. 左爱
    左爱 Lv 1

    这个有用 谢谢[aru_1]

  16. 某昴486
    某昴486 Lv 1

    码一个,看起来很实用[aru_53]

  17. 楚狂人
    楚狂人 Lv 1

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

  18. cn
    cn Lv 1

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

    • mengkun
      mengkun 站长

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

  19. 完美者
    完美者 Lv 5

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

  20. 1648974181
    1648974181 Lv 1

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

    • mengkun
      mengkun 站长

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

  21. 楚轩大人
    楚轩大人 Lv 1

    水水更健康啊

  22. 阿珏
    阿珏 Lv 3

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

  23. TO值得买
    TO值得买 Lv 1

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

  24. 完美者
    完美者 Lv 5

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

  25. 疆飞
    疆飞 Lv 2

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

    • mengkun
      mengkun 站长

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

      • 疆飞
        疆飞 Lv 2

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

  26. 杰新博客
    杰新博客 Lv 3

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

    • mengkun
      mengkun 站长

      @杰新博客最近一直在憋大招中……只能先水水了

      • 杰新博客
        杰新博客 Lv 3

        @mengkun说的我更期待了。[aru_50]

  27. 杨小杰博客
    杨小杰博客 Lv 3

    好水的文章

  28. 燎原
    燎原 Lv 2

    竟然能在文章中执行js

    • mengkun
      mengkun 站长

      @燎原当然可以~[aru_22]

  29. 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/

  30. Jack Cui
    Jack Cui Lv 1

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

    • mengkun
      mengkun 站长

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

      • 孟坤粉丝
        孟坤粉丝 Lv 1

        @mengkun还是阿里云好[aru_14]

      • mengkun
        mengkun 站长

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

      • 孟坤粉丝
        孟坤粉丝 Lv 1

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

分享