百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

如何在Eclipse中搭建Zabbix源码的调试和开发环境

moboyou 2025-07-09 16:58 4 浏览

Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来复现和修复bug;当有特殊的监控需求时(例如:监控物联网设备),我们也可以很方便地进行二次开发,编译和安装自定义的Zabbix版本。

本文将会演示如何在Eclipse中导入Zabbix的源码,并且对Zabbix的zabbix_agentd、zabbix_server、zabbix_get和zabbix_sender进行简单调试。

一、环境描述

  1. 操作系统

    版本:CentOS 6.6 x86_64

    安装方式:Desktop

    IP地址:10.24.16.28

    YUM源-1:EPEL Release

    YUM源-2:RPM Forge

    YUM源-3:MySQL Community

  2. MySQL

    版本:
    mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz

    安装方式:TAR压缩包

  3. nginx

    版本:nginx-1.10.1.tar.gz

    安装方式:编译源码安装

  4. PHP

    版本:php-5.6.22.tar.gz

    安装方式:编译源码安装

  5. Java

    版本:jdk-8u51-linux-x64.gz

    安装方式:TAR压缩包

  6. Zabbix

    版本:zabbix-2.4.8.tar.gz

    安装方式:调试源码

  7. 调试环境

    IDE:eclipse-cpp-neon-R-linux-gtk-x86_64

    GCC:4.4.7 20120313

    GDB:7.2-75.el6

二、准备Zabbix调试环境

1. 更新系统

在Shell中运行以下命令,安装yum源:

rpm -ivh http://repo.mysql.com//mysql57-community-release-el6-8.noarch.rpm

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

rpm -ivh http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

在Shell中运行以下命令,更新系统软件:

yum update -y

2. 安装MySQL

按照《在CentOS上安装MySQL数据库》的步骤进行安装。

3. 安装nginx

按照《在CentOS上安装nginx服务器》的步骤进行安装。

4. 安装PHP

按照《在CentOS上安装PHP》的步骤进行安装。

5. 安装Java

按照《在CentOS上安装Java》的步骤进行安装。

6. 下载Zabbix源码包

在Shell中运行以下命令,下载Zabbix源码包:

cd /root/Downloads

wget http://tenet.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.8/zabbix-2.4.8.tar.gz

7. 安装依赖包

在Shell中运行以下命令,安装调试时必须的依赖包:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/iksemel-1.4-2.el6.x86_64.rpm

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/iksemel-devel-1.4-2.el6.x86_64.rpm

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/fping-2.4b2-10.el6.x86_64.rpm

wget http://cdn.mysql.com//Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.6-1.el6.x86_64.rpm

yum localinstall -y iksemel-1.4-2.el6.x86_64.rpm iksemel-devel-1.4-2.el6.x86_64.rpm fping-2.4b2-10.el6.x86_64.rpm mysql-connector-odbc-5.3.6-1.el6.x86_64.rpm

yum install -y OpenIPMI OpenIPMI-devel libssh2 libssh2-devel libcurl libcurl-devel net-snmp net-snmp-devel libxml2 libxml2-devel openldap openldap-devel unixODBC unixODBC-devel

8. 创建用户账户

在Shell中运行以下命令,创建用户和组:

groupadd zabbix

useradd -g zabbix zabbix

9. 创建Zabbix数据库

在Shell中运行以下命令,登录MySQL命令行(密码为password):

mysql -uroot -p

在MySQL命令行中运行以下命令,创建Zabbix数据库:

create database zabbix character set utf8 collate utf8_bin;

grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';

GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';

FLUSH PRIVILEGES;

quit

由于本文将会调试Zabbix Server,因此需要在Shell中运行以下命令,建立服务端数据库的表结构(密码为password):

tar xvzf zabbix-2.4.8.tar.gz

cd zabbix-2.4.8/database/mysql/

mysql -uroot -p zabbix < schema.sql

mysql -uroot -p zabbix < images.sql

mysql -uroot -p zabbix < data.sql

10. 配置PHP

在Shell中运行以下命令,配置php.ini文件:

vi /usr/local/PHP/etc/php.ini

在上述文件中配置以下参数:

post_max_size = 16M

max_execution_time = 300

max_input_time = 300

date.timezone = Asia/Shanghai

always_populate_raw_post_data = -1

11. 配置unixODBC

在Shell中运行以下命令,创建软链接:

ln -s /usr/lib64/libmyodbc5w.so /usr/lib64/libmyodbc5.so

ln -s /usr/local/MySQL/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

在Shell中运行以下命令,创建ODBC数据源配置文件:

vi /etc/odbc.ini

上述文件的内容如下所示:

[localhost]

Description = MySQL Localhost Database

Driver = MySQL

Server = 127.0.0.1

User = zabbix

Password = zabbix

Port = 3306

Database = zabbix

在Shell中运行以下命令,测试ODBC数据源配置:

isql -v localhost

若上述命令返回信息如下图所示,则表示ODBC数据源配置正确(若配置正确,则可以使用quit命令退出SQL命令行):

在SQL命令行中输入以下命令:

show tables;

若上述命令的输出信息如下图所示,则表明zabbix数据库建立成功,总共创建了104张表:

12. 安装Zabbix前端页面

在Shell中运行以下命令,安装前端页面:

mkdir -p /home/www/zabbix

cp -a /root/Downloads/zabbix-2.4.8/frontends/php/* /home/www/zabbix/

chown -R nginx.nginx /home/www/zabbix

三、下载和安装Eclipse CPP

1. 下载Eclipse CPP

在Shell中运行以下命令:

cd /root/Downloads

wget http://mirror.bit.edu.cn/eclipse/technology/epp/downloads/release/neon/R/eclipse-cpp-neon-R-linux-gtk-x86_64.tar.gz

2. 安装Eclipse CPP

在Shell中运行以下命令,将Eclipse安装至/usr/local目录:

tar xvzf eclipse-cpp-neon-R-linux-gtk-x86_64.tar.gz

mv eclipse /usr/local/Eclipse4C

3. 创建桌面快捷方式

在Shell中运行以下命令,在桌面上创建Eclipse的快捷方式:

vi /root/Desktop/Eclipse4C.desktop

这个文件的内容如下所示:

#!/usr/bin/env xdg-open

[Desktop Entry]

Version=1.0

Type=Application

Terminal=false

Icon[en_US]=/usr/local/Eclipse4C/icon.xpm

Name[en_US]=Eclipse4C

Exec=/usr/local/Eclipse4C/eclipse

Comment[en_US]=Eclipse CPP

Name=Eclipse4C

Comment=Eclipse CPP

Icon=/usr/local/Eclipse4C/icon.xpm

保存上述文件之后,修改它的执行权限:

chmod 755 /root/Desktop/Eclipse4C.desktop

现在,可以在桌面上看到Eclipse的快捷方式图标,如下图所示:

4. 配置工作空间

在桌面上双击运行Eclipse的快捷方式图标,将工作空间配置为/root/workspace目录,如下图所示:

四、导入和配置Zabbix源码

1. 将源码导入Eclipse

在Shell中运行以下命令,将zabbix的源码移动至工作空间中:

mv /root/Downloads/zabbix-2.4.8 /root/workspace/

然后,访问Eclipse的File → Import菜单,打开“导入工程”窗口,选择C/C++ → Existing code as Autotools project,如下图所示:

点击上图中的Next按钮,进入“导入已有代码”窗口,点击Browse按钮,找到zabbix-2.4.8源码目录的路径,然后再选择C project language选项,如下图所示:

点击上图中的Next按钮,进入编译和调试配置窗口,勾选“Build (GNU)”和“Debug (GNU)”,如下图所示:

最后,点击上图中的Finish按钮,Zabbix源码导入成功。在Eclipse的Project Explorer视图中,可以看到Zabbix源码的工程,如下图所示:

2. 配置编译参数

在Eclipse的Project Explorer视图中,右键单击zabbix-2.4.8工程,然后在右键右键菜单中选择Properties,打开工程属性窗口,如下图所示:

在工程属性窗口中访问Autotools → Configure Settings,如下图所示:

在上图中访问configure → Directory specifiers,将安装的目录前缀指定为/usr/local/Zabbix,如下图所示:

在上图中访问configure → Advanced,勾选调试选项,并且指定其他的编译选项,如下图所示:

编译选项配置完成之后,最终状态如下图所示:

在上图中的All Options文本框中的编译选项如下所示(每个编译选项的具体含义,请参考《Zabbix 2.4.8源码配置选项解析》):

--prefix=/usr/local/Zabbix CFLAGS="-g" CXXFLAGS="-g" --enable-server --enable-agent --enable-java --enable-ipv6 --with-mysql --with-jabber --with-libxml2 --with-unixodbc --with-net-snmp --with-ssh2 --with-openipmi --with-ldap --with-libcurl --with-iconv --with-iconv-include --with-iconv-lib

点击上图中的OK按钮,然后回到Eclipse的Project Explorer视图,右键单击zabbix-2.4.8工程,在右键菜单中选择Reconfigure Project,若configure脚本在控制台的输出如下图所示,则表示配置成功:

3. 编译源码

在Eclipse的Project Explorer视图中,右键单击zabbix-2.4.8工程,在右键菜单中选择Build Project,编译Zabbix源码。编译完成之后,就可以在zabbix-2.4.8工程的Binaries目录中看到编译得到的二进制文件,如下图所示:

4. 配置文件

在Shell中运行以下命令,拷贝配置文件:

mkdir -p /usr/local/Zabbix/etc/

cp -a /root/workspace/zabbix-2.4.8/conf/zabbix_agentd.conf /usr/local/Zabbix/etc/

cp -a /root/workspace/zabbix-2.4.8/conf/zabbix_server.conf /usr/local/Zabbix/etc/

在Shell中运行以下命令,配置Zabbix Server:

vi /usr/local/Zabbix/etc/zabbix_server.conf

在上述文件中配置以下参数:

DBHost=localhost

DBName=zabbix

DBUser=zabbix

DBPassword=zabbix

DBSocket=/usr/local/MySQL/sock/mysql.sock

5. 启动Zabbix Server/Agent后台服务

在Eclipse的菜单栏中访问Run → Run Configurations...,打开运行配置窗口,如下图所示:

双击上图左边栏中的C/C++ Application,然后新建一个名为zabbix_server的运行配置项,它的各项配置如下图所示:

  • Main配置:

  • Arguments配置:

还需要新建一个名为zabbix_agentd的运行配置项,它的各项配置如下图所示:

  • Main配置:

  • Arguments配置:

配置完成之后,点击窗口中的Run按钮,便可以运行Zabbix Server/Agent的后台服务了。在Shell中运行以下命令:

pstree zabbix -ap

若上述命令的输出信息如下图所示,则表示Zabbix Server/Agent的后台服务成功运行:

6. 配置Zabbix前端页面

在浏览器中访问Zabbix的前端页面,URL如下所示:

http://10.24.16.28/zabbix/setup.php

进入Zabbix前端安装页面的首页,如下图所示:

点击“Next”按钮,进入必要条件检查页面,如下图所示:

若各项配置检查无误,则点击“Next”按钮,进入数据库连接配置页面,如下图所示:

数据库连接配置完成之后,必须首先点击“Test Connection”按钮,确保配置无误之后,才能点击“Next”按钮,进入Zabbix服务端详情页面,如下图所示:

填写好服务端主机的IP、端口号和主机名之后,点击“Next”按钮,进入安装前预览页面,如下图所示:

确认安装配置信息无误之后,点击“Next”按钮,进入安装结束页面,如下图所示:

点击“Finish”按钮,Zabbix前端页面便安装完成了。此时,会自动跳转到Zabbix的登录页面,如下图所示:

默认的用户名和密码分别是Admin和zabbix,进入Zabbix监控的首屏,如下图所示:

进入首屏之后,点击首屏菜单中的“Configuration → Hosts”,进入主机配置页面,如下图所示:

由上图可知,作为Zabbix服务端的这台主机监控状态为“Disabled”,也就是没有对自己进行监控。此时,可以点击红色的“Disabled”,使监控状态变为绿色的“Enabled”,过几分钟刷新页面之后,便会发现Availability栏中的Z图标也会变绿,这就表明这台服务器目前是可用状态,如下图所示:

至此,Zabbix的前端页面已经安装和配置完成了。

五、调试Zabbix源码

1. 停止运行Zabbix后台服务

在Shell中运行以下命令,停止运行上文中运行的Zabbix后台服务:

killall zabbix_agentd

killall zabbix_server

几分钟之后,运行以下命令,确认Zabbix后台服务已经停止:

ps aux | grep zabbix

2. 安装debuginfo

在CentOS(或其他Linux发行版)中,通常安装的软件(可执行文件和库文件)是不带有调试信息的。因此,在使用GDB调试时,会出现以下警告信息:

上述警告表示缺乏相应软件包的调试信息,需要在Shell中运行以下命令,安装相应的debuginfo:

debuginfo-install OpenIPMI-libs cyrus-sasl-lib glibc gnutls iksemel keyutils krb5-libs libcom_err libcurl libgcc libgcrypt libgpg-error libselinux libssh2 libstdc++ libtasn1 libxml2-2.7.6 net-snmp-libs nspr nss nss-softokn-freebl nss-util openldap openssl unixODBC zlib

yum install ncurses-debuginfo gdbm-debuginfo

在本文使用的三个YUM源中都找不到libidn和libtool的调试信息,因此需要通过编译源码和替换文件的方式添加这两个软件相应的调试信息,运行如下命令:

# 编译和添加libidn的debuginfo

cd /root/Downloads

wget http://ftp.gnu.org/gnu/libidn/libidn-1.18.tar.gz

tar xvzf libidn-1.18.tar.gz

cd libidn-1.18

./configure

make

mv /lib64/libidn.so.11.6.1 /lib64/libidn.so.11.6.1.bak

cp ./lib/.libs/libidn.so.11.6.1 /lib64/

# 编译和添加libtool的debuginfo

cd /root/Downloads

wget http://mirror.hust.edu.cn/gnu/libtool/libtool-2.2.6b.tar.gz

tar xvzf libtool-2.2.6b.tar.gz

cd libtool-2.2.6b

./configure

make

mv /usr/lib64/libltdl.so.7.2.1 /usr/lib64/libltdl.so.7.2.1.bak

cp ./libltdl/.libs/libltdl.so.7.2.1 /usr/lib64/

在Shell中运行以下命令,查看上述两个库文件是否包含调试信息:

file /lib64/libidn.so.11.6.1

file /usr/lib64/libltdl.so.7.2.1

若上述两条命令的输出如下图所示,则表明编译和替换的库文件包含调试信息(not stripped):

至此,所有相关软件的debuginfo全部安装完成。关于调试信息,请参考《详解Linux平台的调试信息文件》。

3. 创建GDB初始化脚本

在Shell中运行以下命令,创建GDB的初始化脚本文件:

vi /root/workspace/zabbix-2.4.8/.gdbinit

上述文件的内容如下所示:

set schedule-multiple on

set detach-on-fork off

set print thread-events on

handle SIGPIPE nostop

上面的配置表示:

  • set schedule-multiple on:表示所有进程的所有线程都允许运行。这个选项是必须设置的。

  • set detach-on-fork off:表示可以同时调试父进程和子进程。

  • set print thread-events on:表示当GDB发现新的线程启动或退出时,输出调试信息至控制台。

  • handle SIGPIPE nostop:表示当发生SIGPIPE信号时,当前进程不会停止运行。

这个.gdbinit文件将会在Eclipse的调试器配置中使用。

4. 调试zabbix_server

在Eclipse的菜单栏上访问Run → Debug Configurations,打开调试配置窗口,这时可以发现已经存在一个名为zabbix_server的调试配置项,这是因为Eclipse会将先前新建的运行配置项的信息导入调试配置项之中。可以发现调试配置窗口中的MainArguments标签页中的配置信息与运行配置项完全相同,并且还多出一个名为Debugger的标签页,这个标签页可用于配置GDB,如下图所示:

上图中的配置表示:

  • main函数的首行不要暂停执行;

  • 使用gdb命令作为调试器;

  • 使用
    /root/workspace/zabbix-2.4.8/.gdbinit
    文件作为GDB的启动命令文件;

  • 启用多进程GDB,自动调试创建的子进程。

点击上图中的Debug按钮,然后在Eclipse的Debug视图中恢复所有暂停进程的运行,zabbix_server的所有运行进程如下图所示(共有28个进程):

现在,只需要在待调试的代码行上打上断点,即可进行断点调试,例如在server.c源码中进行调试:

5. 调试zabbix_agentd

在Eclipse的菜单栏上访问Run → Debug Configurations,打开调试配置窗口,这时可以发现已经存在一个名为zabbix_agentd的调试配置项,而且调试配置窗口中的MainArguments标签页中的配置信息与运行配置项完全相同,并且还多出一个名为Debugger的标签页,这个标签页可用于配置GDB,如下图所示:

上图中的配置表示:

  • main函数的首行不要暂停执行;

  • 使用gdb命令作为调试器;

  • 使用
    /root/workspace/zabbix-2.4.8/.gdbinit
    文件作为GDB的启动命令文件;

  • 启用多进程GDB,自动调试创建的子进程。

点击上图中的Debug按钮,然后在Eclipse的Debug视图中恢复所有暂停进程的运行,zabbix_agentd的所有运行进程如下图所示(共有8个进程):

现在,只需要在待调试的代码行上打上断点,即可进行断点调试,例如在zabbix_agentd.c源码中进行调试:

6. 调试zabbix_get

zabbix_get是一个命令行工具,可用于从一个远程的Zabbix探针获取监控数据,其用法可以参考《zabbix_get和zabbix_sender工具的使用方法》。

首先,按照上文描述的方法,运行Zabbix Agent的后台服务。然后,在Eclipse的菜单栏上访问Run → Debug Configurations,打开调试配置窗口,新建一个名为zabbix_get的调试配置项:

  • Main标签页中的配置信息如下图所示:

  • Arguments标签页中的配置信息如下图所示:

根据上图的输入参数可知,以127.0.0.1(本机)作为受监控主机,10050作为被动监听的端口,system.cpu.load[all,avg1]作为获取数据的监控项。

  • Debugger标签页中的配置信息如下图所示:

各个配置信息和zabbix_server、zabbix_agentd相同。

zabbix_get.c源码中打好断点,然后开始调试,如下图所示:

运行结束之后,可以在Eclipse的控制台上看到此次调试指定监控项的监控数据,如下图所示:

7. 调试zabbix_sender

zabbix_sender是一个命令行工具,可用于向一个远程的Zabbix服务器发送监控数据,其用法可以参考《zabbix_get和zabbix_sender工具的使用方法》(
http://toutiao.com/i6305830442683597313/)。

首先,按照上文描述的方法,运行Zabbix Server/Agent的后台服务。然后,在上文配置的Zabbix前端页面中,为本机添加一个名为Test Query的监控项,每项配置如下图所示:

由上图可知:

  • 监控项的名称:Test Query

  • 监控项的类型:Zabbix trapper

  • 监控项的关键字:test.queries

  • 监控项的返回类型:Numeric (float)

这个监控项的其余配置保持默认即可。然后,在Eclipse的菜单栏上访问Run → Debug Configurations,打开调试配置窗口,新建一个名为zabbix_sender的调试配置项:

  • Main标签页中的配置信息如下图所示:

  • Arguments标签页中的配置信息如下图所示:

根据上图的输入参数可知,使用
/usr/local/Zabbix/etc/zabbix_agentd.conf
作为Zabbix Agent的配置文件,使用Zabbix server作为Zabbix Agent的主机名(在Zabbix前端页面上为本机配置的主机名和此处的主机名相同),使用test.queries作为待发送的监控项,使用342.45作为待发送的监控数据。

  • Debugger标签页中的配置信息如下图所示:

各个配置信息和zabbix_server、zabbix_agentd相同。

zabbix_sender.c源码中打好断点,然后开始调试,如下图所示:

运行结束之后,可以在Eclipse的控制台中看到zabbix_sender的输出结果,如下图所示:

除此之外,还可以在Zabbix的前端页面上看到此次调试指定监控项的监控数据,如下图所示:

至此,基于Eclipse的Zabbix源代码的调试和二次开发的环境已经全部搭建完成了,以后还会逐步分析Zabbix各个组件源码的工作原理,敬请期待!

相关推荐

jQuery EasyUI使用教程:创建展开行详细编辑表单的CRUD应用

当切换datagrid视图到"detailview"时,用户可以展开一行来显示该行下面的任何详细信息。此功能允许用户为放置在行详细信息面板中的编辑表单提供恰当的布局。在本教程中,我们使用DataGri...

前端入门——html 表单控件使用(html表单组件)

上篇介绍了表单的使用,表单有很多控件,比如输入框,密码框、文本域,按钮等。按类型可分如下:输入类控件菜单类控件输入类组件——input此类控件有很多种类型,使用<inputtype=...

[北大青鸟广州新嘉华]HTML5 表单属性有哪些?(1)

在编写HTML5页面时,我们很多时候都需要用到表单属性,那么HTML5作为一个新晋IT界红人,HTML5表单属性有哪些呢?今天先来分享一下其中的<form>/<input>...

JavaScript FormData 对象(js file对象)

下面的代码创建了一个空的FormData对象:varformData=newFormData();//CurrentlyemptyFormData.append()FormData...

「layui」表单验证:验证注册(表单验证是什么)

注册界面手动验证获取短信验证码代码原文<!DOCTYPEhtml><htmllang="zh"><head>&...

php使用file_get_contents(‘php://input‘)和$_POST的区别

为什么和第三方平台对接接口的时候,在接收http请求数据包时,一般都是用file_get_contents("php://input"),而不是用$_POST呢?file_get_co...

专为Vue打造的开源表单验证框架,Github star7k+——VeeValidate

介绍vee-validate是Vue.js的基于模板的验证框架,可以验证输入并显示错误。基于模板,只需为每个输入值更改时指定应使用哪种验证器。系统会在支持40多种语言环境的情况下自动生成错误。现成的规...

如何通过FORScan修改福特汽车系统模块内置数据

如何在Windows电脑或平板电脑上使用FORScan进行各种调整或编程MOD。FORScan与多个蓝牙或Wi-FiOBD适配器兼容。我个人建议您使用vlinkerMC蓝牙或vlinerMCW...

PHP如何上传文件(php中实现文件上传需要用到哪几个函数)

文件上传是网站开发中常见的功能之一,它可以使用户轻松上传图片、音频、视频等文件。在PHP中,实现文件上传也非常简单。下面为大家介绍具体的步骤,让你的网站功能更加强大。步骤一:创建文件上传表单首先,我们...

PHP入门读书笔记(十六):WEB页面使用PHP

Web表单主要用来在网页中发送数据到服务器,经过程序处理中,将用户所需要的信息再传递给客户端的浏览器上。这样就形成了一个浏览者和网站之间的一个互动。一、表单的提交方式<formname=’NA...

前端入门——html 表单(前端的表单是怎么实现的)

前言前面已经学习相关html大部分知识,基本上可以制作出简单的页面,但是这些页面都是静态的,一个网站如果要实现用户的互动交流,这时表单就起到关键的作用,表单的用途很多,它主要用来收集用户的相关信息,是...

HTML表单4(form的action、method属性)——零基础自学网页制作

表单的工作过程表单的信息发送与处理过程可以简单的进行图示,如下图。以注册会员为例,用户在自己的电脑上打开相应的注册表单页面填写信息,完成填写后点击提交按钮,也就是图中1所示过程。这时浏览器会将这些信息...

为你的WordPress widget建立表单(wordpress divi)

通过之前的三部分教程我们已经创建了一个自己的WordPresswidget。今天我们将给大家介绍如何为你的widget创建表单,以至于WordPress可以及时的更新widget设置。为widget...

如何使用PHP编写一个简单的留言板?

留言板是一个常见的Web应用程序,允许用户在网站上发布和查看留言。在本文中,我们将使用PHP编写一个简单的留言板,介绍构建过程中的关键步骤和技巧。一、准备工作在开始编写留言板之前,我们需要准备好以下工...

3分钟拥有一个属于自己的博客网站「腾讯云篇」

一、前言想要搭建一个让全世界的人都可以访问的网站,我们最少需要准备三样东西:①服务器腾讯云服务器首年低至40元/年,「链接」阿里云服务器新用户可以免费使用6个月,新人特惠_云产品推荐_云服务器-阿里云...