织梦文章时间为何无法保存?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 织梦建站 正文
  1. 完全无法保存:提交文章后,发布时间、更新时间等字段在数据库里是空的或者为0000-00-00 00:00:00。
  2. 时间不正确:时间被保存了,但显示的是错误的时间,比如1970年、服务器时间、或者一个固定的时间。

下面我将从最常见最罕见的顺序,为你提供详细的排查和解决方案。


第一步:检查最常见的原因 - 时间服务器设置

这是导致时间问题的首要原因,特别是对于新用户或刚迁移服务器的用户。

问题现象:文章发布后,时间显示为 1970-01-01 08:00:00 或者一个明显错误的时间。

原因分析: 织梦CMS在保存时间时,会调用PHP的 time() 函数。time() 函数返回的是服务器的Unix时间戳,如果服务器的时区设置不正确,或者服务器时间本身是错误的,那么织梦保存的时间自然就是错的。

解决方案

检查并设置服务器时区 登录你的服务器(通过SSH或宝塔面板等),找到并修改 php.ini 文件。

  • 定位php.ini:通常在 /etc/php.ini/usr/local/php/etc/php.ini,如果你使用的是宝塔面板,可以在“软件商店” -> “PHP设置” -> “配置修改”中找到。
  • 修改时区:找到 date.timezone 这一行,确保它被注释(前面有分号 )并且值设置为你需要的时区。
    ;date.timezone =

    修改为:

    date.timezone = PRC

    或者

    date.timezone = Asia/Shanghai

    PRC 是“中华人民共和国”的时区,等同于 Asia/Shanghai

  • 重启PHP服务:修改保存后,必须重启PHP服务才能生效。
    • 命令行service php-fpm restart/etc/init.d/php-fpm restart
    • 宝塔面板:在“PHP设置”页面点击“重启服务”。

检查服务器时间本身 如果时区设置正确但时间还是错的,那可能是服务器本身的时间就不对。

  • 查看当前时间:在服务器命令行输入 date 命令。

    date

    如果显示的时间和北京时间相差很大,就需要同步服务器时间。

  • 同步时间(以CentOS为例):

    # 安装ntpdate服务
    yum install ntpdate -y
    # 同步阿里云的时间服务器
    ntpdate ntp.aliyun.com
    # 将时间写入硬件时钟
    hwclock --systohc

检查织梦后台的全局参数设置 有时候织梦后台的设置会覆盖PHP的时区设置。

  • 登录织梦后台。
  • 进入 “系统” -> “系统基本参数” -> “核心设置”
  • 找到 “时间显示格式”“发布文章时,默认的时间” 这两项。
    • 时间显示格式:确保格式正确,Y-m-d H:i:s
    • 发布文章时,默认的时间:这里应该选择 当前时间,如果选择的是 0000-00-00 00:00:00,那么文章保存时时间就是空的。

第二步:检查数据库权限和字段问题

如果第一步的时区设置正确,但时间依然是空的,那么问题可能出在数据库上。

问题现象:提交文章后,数据库中 dede_archives 表的 pubdatesenddate 字段值为空或为0。

原因分析: 织梦在写入文章时,需要向数据库的 pubdate (发布时间) 和 senddate (更新时间) 字段写入时间戳,如果数据库用户没有写入权限,或者这两个字段在数据库中被错误地修改过(被设置成了不允许NULL值但没有默认值),就会导致写入失败。

解决方案

检查数据库表结构

  • 使用phpMyAdmin等工具登录你的数据库。
  • 找到织梦的数据库,点击 dede_archives 表。
  • 点击“结构”或“Structure”标签。
  • 检查 pubdatesenddate 这两个字段。
    • 类型:必须是 int(10)int(11),用来存储Unix时间戳,如果被改成了 varchar 或其他类型,就需要改回来。
    • 允许NULL:应该是 NO
    • 默认值:允许NULL”是“否”,默认值”最好是 0,如果为空,可能会导致写入失败。

修复数据库表 即使表结构看起来没问题,也可能存在轻微的损坏。

  • 在phpMyAdmin中,选中 dede_archives 表。
  • 点击“操作”或“Operations”标签。
  • 在“表维护”区域,点击“修复表”或 Repair table
  • 同样,对 dede_arctiny 表也执行一次修复操作。

检查数据库用户权限 确保你的数据库用户(在 data/common.inc.php 文件中配置的那个用户)对 dede_archives 表有 SELECT, INSERT, UPDATE 权限,这通常不是问题,但如果你修改过用户权限,就需要确认一下。


第三步:检查模板和JS冲突

这种情况相对少见,但确实发生过。

问题现象:只在后台保存文章时出问题,前台正常,或者页面加载时有JS错误。

原因分析: 织梦后台的文章编辑页面会加载一些JS文件来处理日期和时间,如果模板文件或自定义的JS代码与这些文件产生了冲突,可能会导致时间无法正确获取和提交。

解决方案

  • 恢复默认后台模板:进入后台目录 dede/templets/,将 article_add.htmarticle_edit.htm 这两个文件从官方织梦程序包中重新覆盖一遍,这可以排除模板文件被修改导致的问题。
  • 检查浏览器控制台:按F12打开浏览器开发者工具,切换到“Console”(控制台)标签,提交文章时,看看有没有红色的错误信息,如果有,根据错误信息去排查是哪个JS文件的问题。
  • 禁用插件:某些后台插件可能会干扰正常的表单提交,尝试在后台暂时禁用所有非必要的插件,然后看看问题是否解决。

第四步:检查文件被修改或病毒

这是最坏的情况,但也不能排除。

问题现象:以上所有方法都无效,或者网站出现其他异常。

原因分析: 织梦的核心文件被黑客或恶意程序修改过,导致其功能异常,或者被植入了木马,在提交数据时做了手脚。

解决方案

  • 比对核心文件:从织梦官网下载一个与你网站版本完全相同的官方程序包,使用工具(如WinDiff或Beyond Compare)将你网站上的核心文件(特别是 dede/archives_do.php,这是处理文章保存的核心文件)与官方的进行对比,看看是否有差异。
  • 全站杀毒:使用专业的网站杀毒工具(如D盾、安全狗等)对你的网站进行全面扫描。
  • 恢复备份:如果你有网站的全量备份(包括文件和数据库),这是最直接有效的解决方法,恢复到出现问题之前的时间点。

总结与排查顺序建议

遇到“织梦不能保存文章时间”的问题,请按照以下顺序进行排查,这样能最高效地解决问题:

  1. 【优先检查】服务器时区:修改 php.inidate.timezone = PRC,并重启PHP,这是80%的可能性所在。
  2. 【后台设置】检查织梦全局参数:确保后台“系统基本参数”中的时间设置是“当前时间”。
  3. 【数据库层面】检查表结构和修复表:用phpMyAdmin检查 dede_archives 表的 pubdatesenddate 字段类型,并执行“修复表”操作。
  4. 【文件层面】恢复默认模板:重新上传 article_add.htm 等后台模板文件。
  5. 【终极手段】检查文件完整性和恢复备份:如果以上都无效,考虑文件被篡改或恢复备份。

希望这些步骤能帮助你成功解决问题!如果在排查过程中遇到任何具体困难,可以随时提出。

-- 展开阅读全文 --
头像
织梦手机模板制作步骤有哪些?
« 上一篇 今天
c语言输出100以内素数
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]