当前位置:首页>java>那些年,我们在手机上写代码:一段被遗忘的移动编程史

那些年,我们在手机上写代码:一段被遗忘的移动编程史

  • 2026-01-15 21:24:13
那些年,我们在手机上写代码:一段被遗忘的移动编程史

想象一下,你坐在一节最无聊的文学课上:有人在睡觉,有人在笔记本上画画,有人在 ICQ 上聊天,有人在玩《重力反抗》(Gravity Defied)的下一关,而你正在用索尼爱立信手机疯狂地敲击着,编写一个 Basic 程序,随机显示一位同学的名字和一些稍微令人不快的虚假事实。终于,最后的几行代码写完了,你运行程序并展示给同桌看,然后手机传到了下一排……到下课时,班里已经有半数人摩拳擦掌,准备给你一记重重的后脑勺,因为你搞了这样的恶作剧。但后果并不重要,重要的是那种兴奋感——因为你的移动开发之路才刚刚开始。

那是 2006 年。我们很多人还没有电脑,但有带小屏幕的手机,有限的互联网接入,以及大量想要用来实现某个想法的空闲时间。

Mobile Basic

移动开发之父可以说是 David Firth——Mobile Basic 的创造者。即使这不是世界上第一个允许在手机上编程的应用程序,但它显然被广泛使用。Mobile Basic 拥有丰富的命令集:算术和字符串操作、日期和时间处理、RMS(应用内部存储)的读/写、用户输入(字符串和按键)、表单输出,以及在 Canvas 上绘图。但这并不总是正常工作:表单有时会导致第五代索爱手机重启,而 Canvas 在所有手机上都会闪烁。

程序输入是基于 Canvas 的方式,这意味着没有 T9 和剪贴板,因此在其他编辑器中输入文本、保存为 .lis 文件然后在 Mobile Basic 中打开会更容易。如果出现错误,你必须返回到另一个应用,修复错误并重复该过程,因为当时的手机无法将应用最小化到后台并打开另一个。然而,由于缺乏替代方案和丰富的功能集,Mobile Basic 受到了普遍欢迎。

Mobile Basic 还有另一个缺点:

作者只允许使用该应用 30 次,并要求 20 英镑(约 26 美元)来解除限制,尽管后来降到了 5 英镑,但我们没有支付能力。

当然,通过简单的重新安装程序很容易绕过限制,但这很麻烦。当时,民间高手(Bloodmage)找到了破解方法,并在翻译版本中直接提供了成功注册所需的数据,此外还添加了西里尔字母输入支持。

当时的最新官方版本是 Mobile Basic 1.8。移动 Basic 用户社区不断壮大,在知名论坛上出现了相关主题。有时甚至一个主题都不够,必须创建单独的主题:Mobile Basic 问题、Mobile Basic 游戏和程序等。还出现了 MBTeam 网站,聚集了当时相当可观的粉丝群体。举办了编程和游戏开发竞赛,其中移动 Basic 游戏经常让在 PC 上使用 MIDlet Pascal 或 Java ME 创建的游戏相形见绌。那些记得 Keitaro 和 Vapigor 的杰作的人会证实这一点。

然后 Mumey 来了,他反编译了 Mobile Basic,成功使获得的源文件可编译,并开始改进程序。Canvas 输入被改为表单,添加了正常的启动菜单、文件系统操作、可以向编译的程序添加资源等功能。

还有一个第五代索爱手机重启的问题,这是由于制造商在表单中的 wait/notify 同步 bug。如果显示表单时调用此代码,会导致重启:

123
synchronized(someObject){someObject.notify();}

这时我提供了帮助,虽然不是从源代码,而是通过编辑字节码。就这样,Mobile Basic 发展到了版本 1.8.6.2,并在很长时间内停留在这个版本。

MobilePascal

CPU 的 MobilePascal 可以说是第一个来自独联体开发者的移动编程语言。不要与 MIDlet Pascal 混淆,那是 PC 程序。像 MB 一样,MP 具有算术、表单、图形功能,甚至具有系统功能,可以拨打电话和发送短信。不幸的是,该程序的关键缺点是它严重针对西门子手机 API,因此即使在尝试移植后,应用也无法在其他手机上运行。尽管如此,许多人都有西门子手机,这种编程语言也有其受众。我见过几个用 Mobile Pascal 编写的优秀实用程序。

ClassEditor

除了在手机上编程,我们还从事 class 文件中的字节码研究。基本上,我们完全不是从通常教授 Java 的角度来学习它。dzanis 的 ClassEditor 是一个专注于编辑类的十六进制编辑器。除了十六进制编辑器标准的数制转换和按字节/字符串搜索功能外

 

ClassEditor 还有一个反汇编器:

在大多数情况下,我们只是通过更改常量池中的字符串来翻译程序。有时我们会修改游戏,添加无限生命或立即解锁的关卡。我们还会修复操纵杆按键代码,使针对一种手机品牌适配的游戏在另一种手机上正常工作。反汇编器非常有帮助,可以检查一切是否正确,节省时间。否则,就必须将编辑后的 class 文件从手机放入存档,重新安装程序并看到应用错误。

dzanis 不仅是这个程序的作者,还乐于与我们分享字节码知识,提供示例和任务。

LM

也有尝试创建自己的编程语言。第一个可能是 V.E.A. 的 LM(Language for Mobile phones)。

作者开始开发时,Mobile Basic 还没有西里尔字母输入,因此他的编程语言旨在解决这个问题。但随后 MB 发展非常快,V.E.A. 决定将 LM 重新定位为第一个带有俄语命令的手机编程语言。

LM 代码示例(取自作者自己的文档):

123456
{    цвет 100,100,255    стиль жирный    надпись "Привед медвед!",%1,%2    нарисовать}

TextCompiler

我们还有编译器。Counter 的 TextCompiler 是一个独特的项目,因为它允许将改进的 Basic 风格代码(不存在的 1.8.7 版本)转换为移动 Basic 1.8.6 的代码。而且该程序是用……Mobile Basic 1.8.6 编写的。

TextCompiler 没有强制命令编号,但有标签、带局部标签的块,可以连接多个源文件,通过指令将所有内容保存到临时文件(某种预处理器)。

 1 2 3 4 5 6 7 8 910111213141516171819
@inp:INPUT"X=?",X%IFX%<0THENGOTO@lessIFX%>0THENGOTO@greaterPRINT"X=0":END@less:IFX%=-100THENGOTO100PRINT"X<0, X<>-100"END100PRINT"X=-100":END@greater:IFX%=100THENGOTO100PRINT"X>0, X<>100"END100PRINT"X=100":END

程序运行速度不是很高,而且在访问文件系统时必须确认访问权限,因此 Counter 为了方便还在每次此类请求之前添加了声音播放(这是可配置的)。

Jasmin Java Assembler

尽管 Mobile Basic 很受欢迎,但 Basic 被认为不适合初学者,因为它没有面向对象思维,而且习惯了 GOTO 后,很难过渡到现代语言。因此社区的一部分人转向了 Java。

于是 Mumey 移植了 Jasmin 和 ProGuard 的预验证器,我们开始更深入地学习 Java 字节码,并尝试直接用它编写程序。

当然,我们不是从头开始编写,而是使用现成的示例或反汇编现有的 class 文件,幸好 Mumey 几乎立即制作了反汇编器。

Online Java Compiler

Counter 不仅作为 TextCompiler 的作者而闻名,还作为 php 编译和预验证源代码的 Web 服务 java2class 的作者。你可以从浏览器上传源代码,等待 2-5 分钟,获得编译和预验证的类。如果编译失败,可以看到编译器错误列表。

对于那个时代,这是一个非常好和高质量的服务,甚至可以说不逊色于用于创建 Java 组合的服务。

不幸的是,该服务经常迁移到其他域名,很快 Counter 本人消失了,之后最后一个已知实例也过期了,甚至在 Web 存档中也没有留下痕迹。

Janino

Mumey 没有停留在 Jasmin 上,很快移植了 Janino 编译器。不可能的事情变得可能了。这是一个突破,因为现在我们拥有在手机上用 Java ME 编程所需的一切。

Jcc

Jcc 是 J.Peter 的编程语言和虚拟机。它有三个版本:前两个更像 C,第三个像 Java。解析器是在 JavaCC 中生成的并适应了 Java ME。这里的代码编辑器是自己的(比 MB 方便得多),带有语法高亮——J.Peter 将 Jane 编辑器开发为单独的程序,在这里只是嵌入了开发成果。

到第三版本,Jcc3 获得了良好的工具,包括元类生成器(Jcc 的 API)和单独的运行时,将程序字节码放入其中就得到了自己的应用。

尽管作者投入了巨大的资源,该语言并没有获得大量粉丝。但 Jcc 可以用作程序,在其中轻松编写某个算法并在运行时检查其工作,然后将代码转移到 Java 并用 Janino 编译。

J2ME SDK Mobile

进步没有停滞,手机变得越来越强大,用户需求增长,但我们绝对没想到 Mumey 会制作 IDE。尽管如此,作者将带语法高亮的编辑器、编译器、预验证器和 jar 打包器合并到一个程序中,该死的,这一切都在 RAM 约 1MB 和存储约 32MB 的手机上运行!

该应用的一个非常酷的功能是使用 MIDP 2.0 API 自动启动。首先,你打开文件,编辑源代码,当你按下 Compile 时——程序保存所有编译参数,将自己设置为下一分钟的自动启动(需要用户许可)并关闭。然后按定时器启动并开始编译。此时 RAM 已不再被编辑器占用。编译后,过程重复:再次定时器、关闭、预验证模式自动启动。最后,再次进行 jar 打包。

MobPascal

当时 PC 上的 MIDlet Pascal 已经获得了大量粉丝、库和示例,因此 P@bloid 尝试创建移动版本,重复其语法并与大哥的库兼容。就这样出现了 MobPascal。

它具有来自 Jcc 的带语法高亮的编辑器,编译成单个 class 文件,然后需要通过 Mumey 的预验证器运行。项目的成功被严重的编译错误所阻碍:比小型演示更复杂的东西可能无法正确编译,预验证器或手机本身都会拒绝与编译的程序一起工作。

很快 P@bloid 放弃了开发,发布了源代码,Vasiliy_LiGHT 和 vl@volk 继续修改,添加了库支持并修复了微小的错误。

Mobile Basic 1.9

当一些人从手机上征服 Java ME 的高峰时,另一些人继续发展 Mobile Basic。

David Firth 发布了 1.9 版本,只添加了一个功能。同时,1.8 版本中的所有问题仍然存在。但是 Firth 开放了源代码,于是 kiriman 基于这些源代码和反编译的 1.8.6.2 版本(Mumey 没有开放他的版本的源代码)开始进行修改。后来 dzanis 加入(是的,就是他)。他们一起优化了解释器速度,删除了浮点数的软件模拟(在 CLDC1.1 规范中 float/double 早就有了),并重绘了图形,结果修复了 Basic 最古老的问题——游戏中的闪烁。

然后 vl@volk 和 garfild63 接手了修改,添加了更多命令和修复。

Mobile Eclipse JDT

来自菲律宾的开发者 Assembler 将 Eclipse JDT 的编译器移植到 Java ME。外表上,该程序类似于 Janino,只是重量超过 800KB 且没有优化,因此只能在强大的设备上使用或编译非常简单的源代码。由于整个俄语社区习惯了 Janino 和 J2ME SDK Mobile,该程序仅用于测试或在紧急情况下,万一它能编译 Janino 无法编译的东西。

Mobile Basic 的附加工具

还有几个项目值得一提,它们影响了移动编程的进步。

grafmoto 的 RMSBackup

在 1.8.3 版本之前,Mobile Basic 无法保存到手机文件系统。当时找到了一个变通方法:将一个特殊的类放入所需程序的 jar 中,将其注册为第二个 midlet,启动时可以将应用内部存储(RMS)中的保存备份到文件,然后在需要时恢复。这是一个通用工具,被高级用户广泛用于游戏和应用中备份保存。

kiriman 的 MB Refactor

到 MB 1.9.1 版本时,Basic 的二进制 BAS 文件结构已经被彻底研究,所以这个小工具应运而生。它能够重命名变量、增加行步长、格式化源代码,以及进行混淆。后者是必需的,以免源代码被盗。

HoldFast 和 vl@volk 的 MB Compiler Online

在线转换器 bas 到 lis 及反向转换、混淆器和 jar 文件打包器,包括添加资源。支持版本 1.8.x 和 1.9.1。不仅从 PC 使用,还在弱手机上使用,当 RAM 不足以用图像编译游戏时。

MB IDE

这可能已经不属于手机上的移动编程,但这个项目值得一提。MB IDE 存在于三个版本中:MB IDE .NET。JGDger 的第一个版本MB IDE。HoldFast 的 Java SE 版本。语法高亮和错误行,能够使用版本 1.8.x 和 1.9.1,支持将程序打包为 jar 并在 MicroEmulator 模拟器中运行。后来还添加了在 Android 上的 Java ME 模拟器 J2ME Loader 下的打包。

HoldFast 的 php 在线 MB IDE。能够做 Java SE 版本的所有事情,只是在模拟器中运行。

特别感谢

实际上,不仅是上述应用程序的作者在发展移动编程。以归档器为例。没有它,就不可能打包 Mobile Basic 的游戏或向其中添加图片,也无法从程序/游戏中提取必要的文件进行后续修改,然后再添加回去。感谢:

kys

开发了 MiniCommander——带有出色归档器的文件管理器,在 Nokia、Motorola、Samsung 和其他品牌上运行良好。

Malcolm

开发了 PowerGrasp——zip/gzip/tar 归档器。主要在 Sony Ericsson 上使用。Malcolm 是索尼爱立信俱乐部论坛的明星,帮助初学者编程,包括我,因此我要特别感谢他。

Salat-Cx65

他提议将专门用于编程的程序的主题移至西门子手机俱乐部论坛的 Java ME 开发部分。他还是该部分的版主,提出想法并将我们联系成一个群体。他还是 Janino 的 beta 测试员。

上述论坛的所有常客

他们提出了实现有趣功能、编写手册、分享示例源代码并帮助解答问题。

MierivaL

提供了真实手机上的截图。

日落之后

日落之后是黄昏,天空中出现第一批星星。然后是夜晚,照亮天空的是无数这样的星星。我愿意相信,其中一些星星至今仍在闪耀。我愿意相信,那些通过手机学习编程的人中,有一部分达到了目标,至今仍是程序员。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 18:26:16 HTTP/2.0 GET : https://f.mffb.com.cn/a/461652.html
  2. 运行时间 : 0.120415s [ 吞吐率:8.30req/s ] 内存消耗:4,624.13kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f7e11868e873e5f9d1310677831cdc5b
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000628s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000829s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.004015s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000385s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000646s ]
  6. SELECT * FROM `set` [ RunTime:0.002873s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000830s ]
  8. SELECT * FROM `article` WHERE `id` = 461652 LIMIT 1 [ RunTime:0.002321s ]
  9. UPDATE `article` SET `lasttime` = 1770546376 WHERE `id` = 461652 [ RunTime:0.002235s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000241s ]
  11. SELECT * FROM `article` WHERE `id` < 461652 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003005s ]
  12. SELECT * FROM `article` WHERE `id` > 461652 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000405s ]
  13. SELECT * FROM `article` WHERE `id` < 461652 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007127s ]
  14. SELECT * FROM `article` WHERE `id` < 461652 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.015725s ]
  15. SELECT * FROM `article` WHERE `id` < 461652 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007560s ]
0.122062s