精华内容
下载资源
问答
  • 本节包含以下主题:完成验证的方法前端服务器使用数据库有线协议 (DWP) 与后端服务器通信。由于 DWP 使用 HTTP 作为传输机制,因此,Calendar Server 使用配置参数对前端服务器后端服务器之间的 DWP 连接进行验证...

    维护前端服务器与后端服务器之间的安全

    您可以配置前端服务器和后端服务器之间的密码验证。本节介绍了这两种服务器之间的安全通信的设置方法及其工作原理。本节包含以下主题:

    完成验证的方法

    前端服务器使用数据库有线协议 (DWP) 与后端服务器通信。由于 DWP 使用 HTTP 作为传输机制,因此,Calendar Server 使用配置参数对前端服务器和后端服务器之间的 DWP 连接进行验证。

    当前端服务器第一次连接到后端服务器时,它将发送在 ics.conf 文件中指定的用户 ID 和密码。后端服务器将在其 ics.conf 文件中核对参数,如果所有参数均匹配,则验证成功。后端服务器然后向前端服务器发送会话 ID。前端服务器在对后端服务器执行的后续 DWP 命令中使用该会话 ID。

    来自同一个前端服务器的后续连接不需要再次验证,除非重新启动了后端服务器或者由于两个服务器之间没有活动而导致该会话过期。

    如果有多个前端服务器和多个后端服务器,则可以对每个服务器使用相同的用户 ID 和密码。

    如果后端服务器不指定用户 ID 和密码,则不执行验证。

    procedure.gif设置前端服务器的 DWP 连接验证

    开始之前

    caution.gif注意 –

    这些参数不包括在已装版本的 ics.conf 文件中。要使用 DWP 连接验证,必须在每个前端服务器上将所需的参数添加到 ics.conf 文件中。

    步骤在每个前端服务器上,以有权更改此配置的管理员身份登录。

    转至 /etc/opt/SUNWics5/cal/config 目录。

    通过复制和重命名旧的 ics.conf 文件来保存该文件。

    添加下表中所示的 ics.conf 参数:

    参数说明

    caldb.dwp.server.back-end-server.admin在前端服务器上,指定用来对到后端服务器的 DWP 连接进行验证的管理员的用户 ID。其中的 back-end-server 是服务器的名称。

    caldb.dwp.server.back-end-server.cred在前端服务器上,指定用来对到后端服务器的 DWP 连接进行验证的密码。其中的 back-end-server 是服务器的名称。

    将此文件另存为 ics.conf。

    重新启动 Calendar Server。

    cal_svr_base/SUNWics5/cal/sbin/start-cal

    procedure.gif设置后端服务器的 DWP 连接验证

    开始之前

    caution.gif注意 –

    这些参数不包括在已装版本的 ics.conf 文件中。要使用 DWP 连接验证,必须在每个后端服务器上将所需的参数添加到 ics.conf 文件中。

    步骤在每个后端服务器上,以有权更改此配置的管理员身份登录。

    转至 /etc/opt/SUNWics5/cal/config 目录。

    通过复制和重命名旧的 ics.conf 文件来保存该文件。

    添加下表中所示的 ics.conf 参数:

    参数说明

    service.dwp.admin.userid在后端服务器上,指定用来验证 DWP 连接的用户 ID。如果后端服务器不指定用户 ID,则不执行验证。

    service.dwp.admin.cred在后端服务上,指定用来对 DWP 连接进行验证的密码。如果后端服务器不指定密码,则不执行验证。

    将此文件另存为 ics.conf。

    重新启动 Calendar Server。

    cal_svr_base/SUNWics5/cal/sbin/start-cal

    展开全文
  • 多存储后端某些使用场景下,需要 Seafile 服务可以支持多个存储后端,例如:要将不同的文件类型存储到不同的存储后端。例如,普通文件可以存储到主存储(disks, SSD);文档文件可以存储到 “冷存储”(其他存储系统)。...

    多存储后端

    某些使用场景下,需要 Seafile 服务可以支持多个存储后端,例如:要将不同的文件类型存储到不同的存储后端。例如,普通文件可以存储到主存储(disks, SSD);文档文件可以存储到 “冷存储”(其他存储系统)。

    结合多个存储后端来扩展存储的可扩展性。例如,单独使用一个 NFS 挂载卷时可能会受到大小限制;单独使用一个 S3 后端存储时,当对象数量变得很大时,Ceph RGW 的性能可能会受到很大影响。

    在 Seafile 中,以资料库为单位,将数据分散存储到多个存储后端中。在同一个资料库中的所有数据将被存储到同一个存储后端。每个资料库和存储后端之间的映射关系存储在数据库中。根据使用情况选择不同的映射策略。

    为了使用该功能,您需要:在 seafile.conf 中定义存储后端。

    在 seahub_settings.py 中开启多存储后端功能,并选择一个映射策略。

    定义存储后端

    在 Seafile 中,每一个存储后端都由一个 "storage class" 代表。存储后端由以下信息定义:storage_id:用来定义存储后端的内部 ID 字符串,对用户不可见。例如:'primary storage'。

    name:用户可见的存储名称。

    is_default:定义该存储是否是默认的。如果这个存储后端允许用户使用,当用户不选择时,将默认采用该存储后端。

    commits:该存储后端中,用来存放 commit 对象的存储位置。它可以是任何 Seafile 支持的存储,比如:文件系统、S3 或者 ceph。

    fs:该存储后端中,用来存放 fs 对象的存储位置。它可以是任何 Seafile 支持的存储,比如:文件系统、S3 或者 ceph。

    blocks:该存储后端中,用来存放 block 对象的存储位置。它可以是任何 Seafile 支持的存储,比如:文件系统、S3 或者 ceph。

    commit, fs, 和 blocks 能够被存储在不同的存储中。这为定义存储后端提供了最为灵活的方式。

    在 Seafile 6.3 之前的版本中,不支持多个存储后端。您必须明确地启用这个新功能,并使用与以前定义存储后端不同的语法格式定义存储后端。

    首先,你必须在 seafile.conf 中启用这个功能:[storage]

    enable_storage_classes=true

    storage_classes_file=/opt/seafile_storage_classes.jsonenable_storage_classes:设置为 True,开启多存储后端功能;接下来你必须在下一个配置项指定的 JSON 文件中定义出这些存储后端。

    storage_classes_file:指定包含有存储后端定义的 JSON 文件的位置。

    JSON 文件是一个对象数组。每个对象定义一个存储后端。定义中的字段对应于我们需要为存储后端指定的信息。下面是一个例子:[

    {

    "storage_id":"hot_storage",

    "name":"Hot Storage",

    "is_default":true,

    "commits":{"backend":"s3","bucket":"seafile-commits","key":"ZjoJ8RPNDqP1vcdD60U4wAHwUQf2oJYqxN27oR09","key_id":"AKIAIOT3GCU5VGCCL44A"},

    "fs":{"backend":"s3","bucket":"seafile-fs","key":"ZjoJ8RPNDqP1vcdD60U4wAHwUQf2oJYqxN27oR09","key_id":"AKIAIOT3GCU5VGCCL44A"},

    "blocks":{"backend":"s3","bucket":"seafile-blocks","key":"ZjoJ8RPNDqP1vcdD60U4wAHwUQf2oJYqxN27oR09","key_id":"AKIAIOT3GCU5VGCCL44A"}

    },

    {

    "storage_id":"cold_storage",

    "name":"Cold Storage",

    "is_default":false,

    "fs":{"backend":"fs","dir":"/storage/seafile/seafile-data"},

    "commits":{"backend":"fs","dir":"/storage/seafile/seafile-data"},

    "blocks":{"backend":"fs","dir":"/storage/seafile/seaflle-data"}

    },

    {

    "storage_id":"swift_storage",

    "name":"Swift Storage",

    "fs":{"backend":"swift","tenant":"adminTenant","user_name":"admin","password":"openstack","container":"seafile-commits","auth_host":"192.168.56.31:5000","auth_ver":"v2.0"},

    "commits":{"backend":"swift","tenant":"adminTenant","user_name":"admin","password":"openstack","container":"seafile-fs","auth_host":"192.168.56.31:5000","auth_ver":"v2.0"},

    "blocks":{"backend":"swift","tenant":"adminTenant","user_name":"admin","password":"openstack","container":"seafile-blocks","auth_host":"192.168.56.31:5000","auth_ver":"v2.0","region":"RegionTwo"}

    }

    ]

    如上所示:commits,fs 和 blocks 信息的语法格式与 seafile.conf 中定义的 [commit_object_backend], [fs_object_backend] 和 [block_backend] 语法格式相似。

    如果你是用文件系统作为 commits,fs 或 blocks 的存储位置,您必须明确地提供"seafile-data"目录的路径。这些对象将会被存储在这个路径下的 storage/commits, storage/fs, storage/blocks 中。

    注意:一般的文件系统,S3 和 Swift 后端是支持的,但 Ceph/RADOS 目前还不支持。

    资料库映射策略

    资料库映射策略决定了资料库使用的存储后端。目前我们为3个不同的用例提供3个策略。资料库的存储后端被创建和存储在一个数据表中。如果之后再更改映射策略各资料库对应的存储后端将不会改变。

    选择映射策略之前,你需要在 seahub_settings.py 开启该功能:ENABLE_STORAGE_CLASSES=True

    用户选择

    该策略需要用户在创建新资料库的时候选择存储后端。用户可以选择定义在 JSON 文件中的任何一个存储后端。

    如果要使用该策略,需要在 seahub_settings.py 中添加以下配置:STORAGE_CLASS_MAPPING_POLICY='USER_SELECT'

    如果你开启了 STORAGE_CLASSES,但没有在 seahub_settings.py 中明确定义 STORAGE_CLASS_MAPPING_POLIICY,则默认使用“用户选择”策略。

    基于角色映射

    您还可以根据用户的角色配置用户可使用的存储后端。

    在 seahub_settings.py 中加一个新的配置项 storage_ids 到角色配置段中,给每一个角色分配存储后端。如果给某个角色只分配了一个存储后端,这个角色下的用户将不能选择其他存储后端给资料库使用。否则,如果分配了多个存储后端,用户在创建资料库时可以从中选择一个存储后端。如果没有为角色分配任何存储后端,将使用JSON文件中指定的默认后端。

    这里有一个简单的 seahub_settings.py 中的配置,使用该策略:ENABLE_STORAGE_CLASSES=True

    STORAGE_CLASS_MAPPING_POLICY='ROLE_BASED'

    ENABLED_ROLE_PERMISSIONS={

    'default':{

    'can_add_repo':True,

    'can_add_group':True,

    'can_view_org':True,

    'can_use_global_address_book':True,

    'can_generate_share_link':True,

    'can_generate_upload_link':True,

    'can_invite_guest':True,

    'can_connect_with_android_clients':True,

    'can_connect_with_ios_clients':True,

    'can_connect_with_desktop_clients':True,

    'storage_ids':['old_version_id','hot_storage','cold_storage','a_storage'],

    },

    'guest':{

    'can_add_repo':True,

    'can_add_group':False,

    'can_view_org':False,

    'can_use_global_address_book':False,

    'can_generate_share_link':False,

    'can_generate_upload_link':False,

    'can_invite_guest':False,

    'can_connect_with_android_clients':False,

    'can_connect_with_ios_clients':False,

    'can_connect_with_desktop_clients':False,

    'storage_ids':['hot_storage','cold_storage'],

    },

    }

    基于资料库 ID 的映射

    这个策略根据资料库的ID映射到存储后端。资料库的ID是UUID。这样,系统中的数据就可以在存储后端之间均匀地分配。

    注意,这个策略并不是设计成完整的分布式存储解决方案。它不处理资料库数据在各存储后端之间的自动迁移。如果需要向配置文件添加更多的存储后端,则现有资料库将保留在它们的原始存储中。新的资料库可以在新的存储后端之间分布。您仍然需要在开始时计划系统的总存储容量。

    要使用该策略,先在 seahub_settings.py 中添加以下配置项:STORAGE_CLASS_MAPPING_POLICY='REPO_ID_MAPPING'

    然后可以在 JSON 文件中的存储后端中添加 for_new_library 选项来存储新的资料库:[

    {

    "storage_id":"new_backend",

    "name":"New store",

    "for_new_library":true,

    "is_default":false,

    "fs":{"backend":"fs","dir":"/storage/seafile/new-data"},

    "commits":{"backend":"fs","dir":"/storage/seafile/new-data"},

    "blocks":{"backend":"fs","dir":"/storage/seafile/new-data"}

    }

    ]

    展开全文
  • 问题:负载均衡实例最多支持添加多少 ...为了保证你对外服务的稳定与高效,建议你根据业务分类或应用服务的模块划分将提供不同服务或执行不同任务的应用服务器配置在不同的负载均衡实例上。问题:负载均衡运行中是否...

    问题:负载均衡实例最多支持添加多少 QVM 实例?

    默认每个负载均衡实例可以添加 200 个 QVM 实例,一个 QVM 实例可以被 50 个负载均衡实例关联。但是如果你需要添加更多 QVM 实例,请提交工单申请。通过审核后,为你提升配额。

    为了保证你对外服务的稳定与高效,建议你根据业务分类或应用服务的模块划分将提供不同服务或执行不同任务的应用服务器配置在不同的负载均衡实例上。

    问题:负载均衡运行中是否可调整服务器数量?

    可以

    你可以在任意时刻增加或减少负载均衡的后端服务器实例数量并且支持不同服务器实例之间的切换。但是为了保证你对外服务的稳定,确保在执行上述操作时,开启了负载均衡的健康检查功能并保证负载均衡后端至少有一台正常运行的服务器实例。

    问题:后端服务器实例为什么访问不了负载均衡服务?

    这和负载均衡 TCP 的实现机制有关。在四层 TCP 协议服务中,不支持后端服务器实例既作为 Real Server 又作为客户端向所在的负载均衡实例发送请求。因为返回的数据包只在云服务器内部转发,不经过负载均衡,所以在后端服务器实例上去访问负载均衡的服务地址是不通的。

    问题:QVM 实例在接入负载均衡服务前添加了白名单,对负载均衡服务有影响么?

    若 QVM 实例在接入负载均衡前设置了访问白名单,那么接入负载均衡后需要将负载均衡的白名单添加到 QVM 实例中,否则可能会引起网站403报错。

    需要添加的负载均衡地址包括 100.64.0.0/10、10.158.0.0/16、10.159.0.0/16 和 10.49.0.0/16。

    问题:为什么有 10 或 100 开头的 IP 在频繁访问 QVM 实例?

    负载均衡系统除了会通过系统服务器的内网 IP 将来自外部的访问请求转到后端 QVM 实例之外,还会对 QVM 实例进行健康检查和可用性监控,这些访问的来源都是由负载均衡系统发起的。

    负载均衡系统的地址段为 100.64.0.0/10、10.158.0.0/16、10.159.0.0/16 和 10.49.0.0/16,所以会有很多 10或 100 开头的 IP 地址访问 QVM 实例。

    为了确保你对外服务的可用性,确保对上述地址的访问配置了放行规则。

    问题:要使用负载均衡服务,QVM实例是否需要进行特殊配置?

    添加到负载均衡实例的后端 QVM 实例,一般不需要进行特别的配置。

    但是,如果后端 QVM 实例的操作系统为 Linux 并且使用了 TCP 监听,确保系统配置文件/etc/sysctl.conf中以下三个配置的值为零:

    net.ipv4.conf.default.rp_filter = 0

    net.ipv4.conf.all.rp_filter = 0

    net.ipv4.conf.eth0.rp_filter = 0

    如果部署在同一内网网段下的 QVM 实例之间有通信需求,需要检查如下参数的配置是否正确:

    net.ipv4.conf.default.arp_announce =2

    net.ipv4.conf.all.arp_announce =2

    更改配置后,执行 sysctl -p 更新配置。

    问题:QVM 实例设置权重的作用是什么?

    权重比越高的 QVM 实例将被分配到更多的访问请求,你可以根据后端 QVM 实例的对外服务能力和需求来区别设定。

    假设负载均衡池中的 A 和 B 两台 QVM 实例的权重均配置成 100 和均配置成 50 都是一样的,在 A 和 B 两台 QVM 实例健康检查状态均正常的情况下,QVM 实例 A 和 B 均分前端请求的流量。但是如果 A 和 B 的权重分别设置为 10 和 100,在 A 和 B 两台 QVM 实例健康检查状态均正常的情况下,A 承担 10/(10+100) 的流量,B 承担 100/(10+100) 的流量。

    如果你同时开启了会话保持功能,有可能会造成后端 QVM 实例访问不均衡,建议你暂时关闭会话保持功能再观察一下是否依然存在这种情况。

    当负载均衡分发到后端 QVM 实例的请求不均匀时,参考以下方法检查处理:

    统计一个时间段内后端 QVM 实例的 Web 服务访问日志的数据量。访问日志查看方法:

    Nginx 和 Apache:打开日志目录/access.log

    IIS:打开 IIS 管理界面,鼠标放在需要设置开启日志的站点上,单击右键,选择属性,选择网站选项卡,单击启用日志记录

    按照负载均衡的配置,对比多个 QVM 实例日志的数量是否有差距。

    如果设置了会话保持,需要剥离相同 IP 的访问日志。如果负载均衡配置了权重,要根据权重比例计算日志中访问比例是否正常。

    展开全文
  • 1.Windows系统下查看是否安装了mysql 输入services.msc打开服务窗口,查看是否有mysql服务 2. mysql下载安装、配置和使用 ...或者在Tomcat->conf->server文件修改端口号,换成一个没有被占用的端口

    1.Windows系统下查看是否安装了mysql
    输入services.msc打开服务窗口,查看是否有mysql服务
    2.mysql下载安装、配置和使用
    3.忘记初始密码时:

    1. 在mysql安装的目录下删除data文件夹
    2. 以管理员身份运行命令行
    3. 输入:mysqld --initialize --console回车
    4. 输入:net start mysql回车
    5. 输入:mysql -u root -p回车并接着输入第三步得到的临时密码进行登录
    6. 登录后输入:set password for root@localhost = password(‘123’);回车修改密码
    7. 输入quit;退出登录
    8. 再用新密码重新登录即可
    9. 查看本机IP地址:ipconfig
    10. Tomcat端口被占用:打开终端输入:netstat -ano 查看哪个进程占用了8080端口,然后打开任务管理器结束进程即可;或者在Tomcat->conf->server文件中修改端口号,换成一个没有被占用的端口
    展开全文
  • 对于文件后缀名的校验,无非前端和后端两种,先看一看前端源码,解雇,发现确实是前端JS验证导致的问题。 既然是前端校验,那方法就多了呀,首先可以考虑修改源码的匹配规则,或者是通过伪造后缀名绕过前端验证之后...
  • 直接使用表单时的文件上传 1. 直接使用表单时的文件上传 首先要在form 表单中的enctype属性设置固定值:multipart/form-data,method属性值必须是post,除此之外,还要有一个文件选择域<input type="file" />...
  • 使用基于VCS的后端(git,svn)文件被检出或克隆到本地文件系统。默认情况下,它们放在系统临时目录中,前缀为config-repo-。在linux上,例如可以是/tmp/config-repo-。一些操作系统会定期清除临时目录。这可能会...
  • UPchieve Web服务器 Web服务器为UPchieve Web客户端提供端点 吉比特实验室 注意:此项目的积极开发已移至 ,不再... 注意:启动服务器时运行的默认命令将填充/刷新所有种子数据,因此对种子数据的任何数据更改都将被
  • 关于微信小程序Tomcat服务器后端程序搭建

    万次阅读 热门讨论 2018-04-03 19:26:41
    关于Tomcat服务器小程序Java后端搭建 微信小程序采用的向服务器发送请求的api可以先看一下 wx.request(OBJECT) 发起网络请求。 这里重点关注data和url以及datatype 参数名 类型 必填 默认值 说明 ...
  • 后端_服务器

    2019-02-17 00:47:51
    本地搭建服务器 Nginx官网下载,解压放到本地文件夹. 打开文件nginx.conf文件 ,做出以下修改: server { # 启动后的端口 listen 8880; # 启动时的地址 server_name localhost;...
  • 文件的路径为basePath+filePath * @param filename 上传到FTP服务器上的文件名 * @param input 输入流 * @return 成功返回true,否则返回false */ public static boolean uploadFile(String host, int port, String ...
  • 记录一下这个问题 背景: 项目是我中途加入公司开始进行维护 ,写新需求改接口啊 发现测试环境一直...将代码中的环境配置修改下,公司是使用Jenkins打包构建 ,所以构建起来非常的简单快捷 配置一个服务器地址,配置gi...
  • 对于文件上传大家都不陌生,基本上都是上传到自己的服务器后再通过服务器上传到阿里oss服务器上,我现在做的项目是需要上传视频的,这个功能其实已经做好了,但是由于视频文件比较大上传到服务器再上传oss的耗时比较...
  • 主要提供了项目开发所需的各种帮助类:数据库访问帮助类、文件操作帮助类、二维码生成帮助类、分拣压缩帮助类等等其余帮助类;拓展类:字符串拓展类、集合操作拓展类、表达式树拓展类等等其余拓展类;还集成了个人...
  • WasedaTime后端 该存储库定义的无服务器应用程序体系结构,资源配置和基础结构提供策略。 关于该项目 建筑学 我们采用了一个简单的无服务器应用程序体系结构,该体系结构由四层组成:表示层,业务层,持久性层和...
  • 下面去准备一个处理上传文件请求的后端服务接口 .. 宁皓网有个专门的课程介绍了 Node 应用的上传文件的方法 ..这个视频我们再去准备一下这个可以上传文件后端服务接口 .. 你可以不用跟着做,我会把代码 push 到 ...
  • vue项目配置后端服务器地址 内容精选换一换查询负载均衡器状态树。可通过该接口查询负载均衡器关联的监听器、后端服务器组、后端服务器、健康检查、转发策略、转发规则的主要信息,了解负载均衡器下资源的拓扑...
  • 在Django中除了使用ModelForm之外,还可以手动处理上传的文件前言,关于在Django中处理文件上传Django Views(视图函数)Template(模板) 前言,关于在Django中处理文件上传 Django框架提供了非常便利的ModelForm,...
  • 后端发请求 2.服务端返回数据 3.根据服务端返回的数据,做相应的操作 首先,我们实例化一个XHR对象,代表我要使用AJAX技术。 var xhr = new XMLHttpRequest(); 然后向服务器发送请求,以下是两种...
  • 最简单的方式肯定是服务器通过请求获取文件路径,然后读取,然后回传到浏览器;这个中间遇到了几个问题,给自己做个笔记方便以后查看;附上代码如下:@RestController @RequestMapping("/downloadFile") ...
  • HospitalRun服务器 用于Node.js后端:适用于发展中国家免费软件。 要做出贡献,请遵循本自述文件中的准则,或者要求提供有关社区Slack频道的详细信息: 。 该存储库适用于HospitalRun v2,目前正在大量开发中。 ...
  • Nginx后端Web服务器健康检查 背景: 有一个问题,当Nginx没有后端检测功能,当后端某一服务器无法提供服务时,该链接先被转发到这台机器,然后发现该机故障,而后才转发到其它机器,导致资源浪费。 因此引入 nginx_...
  • (8)【修改文件权限】 chmod 755 FileName (9)【修改文件夹权限】 chmod -R 755 FolderName (10)【改变文件权限所有者】 chown -R Owner:Group FileName (11)【查看文件详细信息】 ll (12)【查看...
  • 新中大软件服务器地址修改 内容精选换一换客户端通过负载均衡器访问后端服务器异常,负载均衡器的“后端服务器组”页签显示后端服务器的健康检查结果为“异常”。共享型负载均衡在“负载均衡器”界面,单击后端...
  • haproxy动态下线需要用到socat工具 socat工具: 对服务器动态权重和其它状态可以利用 socat工具进行调整,Socat 是 Linux 下的... 更改线上的服务器的权重为0,使haproxy不往该服务器调度,从而达到下线的效果 ...
  • HAProxy后端web服务器状态检测

    千次阅读 2019-06-10 09:11:10
    后端web服务器状态检测 HAProxy有三种状态检测方式:1.基于四层的传输端口做状态监测2.基于指定的uri做状态监测3.基于指定的URI的resquest请求头部内容做状态监测 ...修改配置文件 [root@localhost...
  • thinkPHP5——后端文件上传

    千次阅读 2018-08-04 16:41:20
    所需文件文件上传代码: namespace app\index\controller; use think\Controller; class Lib extends Controller{ /** * 文件上传 */ public function upload(){ ...//查询当前服务器信息 ...
  • 服务器配置:LNMN Ubuntu16.0.4、nginx、mysql、nodejs 默认已经拥有Ubuntu系统 1、安装mysql sudo apt-get update#更新软件源 sudo apt-get install mysql-server#安装mysql 途中按照提示设置密码 配置...
  • PHP在图片中用 imagettftext() 添加水印(图文详解)_后端开发本文讲述了使用 “imagettftext()”在图片中添加水印,...php代码如何在html文件里面执行我们这里介绍的是通过js去执行,至于修改服务器上面的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 149,152
精华内容 59,660
关键字:

服务器修改后端文件