Compare commits

...

3 Commits

Author SHA1 Message Date
94b38708d0 feat: 更新后台管理界面,优化表格和按钮样式
- 改进表格布局,支持横向滚动和长文本自动换行
- 设置合理的列宽,确保信息完整显示
- 添加应用图标、下载链接、官网链接和应用描述字段
- 优化按钮布局和样式,提升用户体验
- 更新README.md,记录此次更新日志
2025-07-11 14:45:16 +08:00
319a49f716 chore: 删除不再需要的部署文档和配置文件
删除以下不再使用的文件:
- tougao.zip 压缩包
- urllink,titlename,descriptiondescription,keywordsseo_keywords.md 配置文件
- DEPLOY.md 宝塔面板部署指南文档

这些文件已过时且不再与当前项目相关,清理以保持代码库整洁。
2025-06-01 00:41:20 +08:00
144b5885ae feat(平台选择): 更新收录平台选项为自定义主流搜索引擎
- 将原有的自媒体维基、zTab、SOSO平台替换为百度、小度、谷歌等主流搜索引擎
- 更新相关平台合规性提示信息以匹配新平台
- 修改README中"多平台收录"的描述以反映平台自定义特性
2025-06-01 00:40:11 +08:00
4 changed files with 152 additions and 321 deletions

304
DEPLOY.md
View File

@ -1,304 +0,0 @@
# 宝塔面板部署指南
本文档详细介绍如何在宝塔面板中部署内容投稿系统。
## 📋 部署前准备
### 服务器要求
- 操作系统Linux推荐CentOS 7+/Ubuntu 18+
- 内存至少512MB推荐1GB+
- 硬盘至少1GB可用空间
- 网络:稳定的互联网连接
### 宝塔面板要求
- 宝塔面板版本7.0+
- PHP版本7.4+
- Web服务器Apache或Nginx
- 数据库MySQL 5.7+可选也可使用SQLite
## 🚀 详细部署步骤
### 第一步:安装宝塔面板
如果还未安装宝塔面板,请先安装:
```bash
# CentOS安装命令
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
# Ubuntu安装命令
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
```
### 第二步:配置服务器环境
1. **登录宝塔面板**
- 访问 `http://服务器IP:8888`
- 使用安装时显示的用户名和密码登录
2. **安装LNMP/LAMP环境**
- 选择"软件商店" → "一键部署"
- 推荐安装Nginx 1.20+ + MySQL 5.7+ + PHP 7.4+
- 等待安装完成约10-30分钟
3. **安装PHP扩展**
- 进入"软件商店" → "已安装"
- 找到PHP点击"设置"
- 在"安装扩展"中安装以下扩展:
- `pdo_mysql`MySQL支持
- `pdo_sqlite`SQLite支持
- `gd`(图像处理)
- `curl`(网络请求)
- `fileinfo`(文件信息)
### 第三步:创建网站
1. **添加站点**
- 点击"网站" → "添加站点"
- 域名填入你的域名example.com
- 根目录:默认即可
- PHP版本选择7.4或更高版本
- 数据库选择MySQL可选
- 点击"提交"
2. **配置域名解析**
- 在域名服务商处添加A记录
- 将域名指向服务器IP地址
### 第四步:上传项目文件
1. **下载项目**
- 方式一:直接上传压缩包
- 将项目打包为zip文件
- 在宝塔面板"文件"中上传到网站根目录
- 解压文件
- 方式二使用Git推荐
- 在"终端"中执行:
```bash
cd /www/wwwroot/your-domain.com
git clone https://ckk.photo8.site/Snowz/tougao.git .
```
2. **设置文件权限**
- 在"文件"管理中,选择网站根目录
- 右键选择"权限"设置为755
- 特别设置以下目录权限为777
- `config/`
- `data/`
### 第五步配置数据库MySQL方式
1. **创建数据库**
- 点击"数据库" → "添加数据库"
- 数据库名:`submission_system`
- 用户名:自定义
- 密码:自动生成或自定义
- 记录数据库信息
2. **配置数据库连接**
- 编辑 `config/database.php`
- 填入正确的数据库信息
### 第六步:运行安装向导
1. **访问安装页面**
- 浏览器访问:`http://your-domain.com/install.php`
2. **环境检查**
- 系统会自动检查服务器环境
- 确保所有检查项都通过
3. **数据库配置**
- 选择数据库类型MySQL或SQLite
- 填入数据库连接信息
- 测试连接
4. **初始化数据库**
- 点击"初始化数据库"
- 等待数据表创建完成
5. **完成安装**
- 记录默认管理员账户信息
- 删除或重命名 `install.php` 文件
### 第七步:安全配置
1. **SSL证书配置**
- 在"网站"中找到你的站点
- 点击"设置" → "SSL"
- 申请Let's Encrypt免费证书
- 开启"强制HTTPS"
2. **防火墙设置**
- 在"安全"中配置防火墙
- 开放80、443端口
- 关闭不必要的端口
3. **文件安全**
- 删除 `install.php`
- 检查敏感文件权限
- 定期备份数据
## 🔧 高级配置
### Nginx配置优化
在网站设置中添加以下Nginx配置
```nginx
# 安全设置
location ~ ^/(config|includes|data)/ {
deny all;
}
# 禁止访问敏感文件
location ~* \.(sql|log|md|txt|conf)$ {
deny all;
}
# 隐藏文件
location ~ /\. {
deny all;
}
# PHP配置
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 静态文件缓存
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
```
### PHP配置优化
在PHP设置中调整以下参数
```ini
; 上传限制
upload_max_filesize = 10M
post_max_size = 10M
; 执行时间
max_execution_time = 60
; 内存限制
memory_limit = 256M
; 错误报告
display_errors = Off
log_errors = On
; 会话配置
session.cookie_httponly = On
session.cookie_secure = On
```
### 定时任务配置
可以设置定时任务来清理过期数据:
```bash
# 每天凌晨2点清理7天前的IP记录
0 2 * * * /usr/bin/php /www/wwwroot/your-domain.com/cleanup.php
```
## 📊 性能优化
### 数据库优化
1. **索引优化**
```sql
-- 为常用查询字段添加索引
ALTER TABLE website_submissions ADD INDEX idx_status (status);
ALTER TABLE website_submissions ADD INDEX idx_created (created_at);
ALTER TABLE app_submissions ADD INDEX idx_status (status);
ALTER TABLE app_submissions ADD INDEX idx_created (created_at);
```
2. **定期清理**
- 定期清理过期的IP限制记录
- 归档或删除过旧的投稿记录
### 缓存配置
1. **开启OPcache**
- 在PHP设置中开启OPcache扩展
- 提高PHP执行效率
2. **静态文件CDN**
- 将CSS、JS等静态文件上传到CDN
- 加速页面加载速度
## 🔍 故障排除
### 常见问题解决
1. **500错误**
- 检查PHP错误日志
- 确认文件权限设置
- 检查.htaccess配置
2. **数据库连接失败**
- 验证数据库配置信息
- 检查数据库服务状态
- 确认防火墙设置
3. **验证码不显示**
- 检查GD扩展是否安装
- 确认PHP图像处理功能
4. **无法获取网站信息**
- 检查cURL扩展
- 确认服务器网络连接
- 检查目标网站可访问性
### 日志查看
- **PHP错误日志**`/www/wwwroot/your-domain.com/php_errors.log`
- **Nginx访问日志**`/www/wwwroot/your-domain.com/log/access.log`
- **Nginx错误日志**`/www/wwwroot/your-domain.com/log/error.log`
## 📈 监控与维护
### 定期维护任务
1. **系统更新**
- 定期更新宝塔面板
- 更新PHP、MySQL版本
- 更新系统安全补丁
2. **数据备份**
- 设置自动数据库备份
- 定期下载备份文件
- 测试备份恢复流程
3. **安全检查**
- 检查异常访问日志
- 更新管理员密码
- 检查文件完整性
### 性能监控
- 使用宝塔面板的监控功能
- 关注CPU、内存、磁盘使用率
- 监控网站访问速度
## 📞 技术支持
如果在部署过程中遇到问题:
1. 查看本文档的故障排除部分
2. 检查项目的GitHub Issues
3. 联系技术支持
---
**祝您部署顺利!如有问题,欢迎反馈。**

View File

@ -7,7 +7,7 @@
### 前端功能
- 🌐 **网址投稿**自动获取网站TDK信息标题、描述、关键词
- 📱 **APP/软件投稿**:支持多平台应用投稿
- 🎯 **多平台收录**:支持自媒体维基、zTab、SOSO平台选择
- 🎯 **多平台收录**:支持自定义平台选择
- 🔒 **IP限制**每IP每日最多提交3次
- 🚫 **重复检测**:智能检测重复内容
- 📱 **响应式设计**:完美适配移动端和桌面端
@ -249,6 +249,20 @@ A: 检查CDN资源是否正常加载可考虑本地化CSS/JS文件。
本项目采用 MIT 协议开源,详见 [LICENSE](LICENSE) 文件。
## 📝 更新日志
### 2025-07-09
- ✨ 优化后台管理界面显示
- 改进表格布局,添加横向滚动支持
- 优化长文本内容显示
- 设置合理的列宽
- 普通列最小宽度100px
- URL列最小宽度200px最大宽度300px
- 描述列最小宽度300px最大宽度500px
- 支持描述文本自动换行
- 完整显示URL链接
- 优化按钮布局和样式
## 🙏 致谢
- 感谢所有为开源社区做出贡献的开发者

View File

@ -305,12 +305,14 @@ $total_pages = ceil($total / $limit);
background: white;
border-radius: 12px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
overflow: hidden;
overflow-x: auto;
width: 100%;
}
.table {
width: 100%;
border-collapse: collapse;
white-space: nowrap;
}
.table th,
@ -318,12 +320,18 @@ $total_pages = ceil($total / $limit);
padding: 15px;
text-align: left;
border-bottom: 1px solid #e2e8f0;
min-width: 100px;
}
.table th {
background: #f8fafc;
font-weight: 600;
color: #374151;
white-space: nowrap;
}
.table td {
font-size: 14px;
}
.table tr:hover {
@ -355,11 +363,19 @@ $total_pages = ceil($total / $limit);
.action-buttons {
display: flex;
gap: 5px;
white-space: nowrap;
}
.btn-sm {
padding: 4px 8px;
font-size: 12px;
display: inline-flex;
align-items: center;
gap: 4px;
}
.btn-sm i {
font-size: 12px;
}
.btn-success {
@ -367,11 +383,19 @@ $total_pages = ceil($total / $limit);
color: white;
}
.btn-warning {
background: #f59e0b;
.btn-success:hover {
background: #059669;
}
.btn-danger {
background: #ef4444;
color: white;
}
.btn-danger:hover {
background: #dc2626;
}
.pagination {
display: flex;
justify-content: center;
@ -485,6 +509,63 @@ $total_pages = ceil($total / $limit);
display: none;
}
.app-icon {
width: 40px;
height: 40px;
border-radius: 8px;
object-fit: cover;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
transition: transform 0.2s;
}
.app-icon:hover {
transform: scale(1.1);
}
.truncate {
max-width: 250px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: inline-block;
cursor: help;
}
.description-cell {
min-width: 300px;
max-width: 500px;
}
.description-content {
white-space: normal;
word-break: break-word;
}
.url-cell {
min-width: 200px;
max-width: 300px;
}
.url-link {
color: #3b82f6;
text-decoration: none;
}
.url-link:hover {
color: #2563eb;
text-decoration: underline;
}
.platform-badge {
display: inline-block;
padding: 4px 8px;
border-radius: 4px;
background: #e5e7eb;
color: #374151;
font-size: 12px;
margin: 2px;
}
@media (max-width: 768px) {
.header-content {
flex-direction: column;
@ -611,6 +692,10 @@ $total_pages = ceil($total / $limit);
<th>应用名称</th>
<th>平台</th>
<th>版本</th>
<th>图标</th>
<th>下载链接</th>
<th>官网/落地页</th>
<th>应用描述</th>
<?php endif; ?>
<th>收录平台</th>
<th>联系方式</th>
@ -634,6 +719,42 @@ $total_pages = ceil($total / $limit);
<td><?php echo htmlspecialchars($submission['name']); ?></td>
<td><?php echo htmlspecialchars($submission['platform']); ?></td>
<td><?php echo htmlspecialchars($submission['version'] ?: '-'); ?></td>
<td>
<?php if ($submission['icon_url']): ?>
<a href="<?php echo htmlspecialchars($submission['icon_url']); ?>" target="_blank">
<img src="<?php echo htmlspecialchars($submission['icon_url']); ?>" alt="图标" class="app-icon">
</a>
<?php else: ?>
<span class="platform-badge">无图标</span>
<?php endif; ?>
</td>
<td class="url-cell">
<?php if ($submission['download_url']): ?>
<a href="<?php echo htmlspecialchars($submission['download_url']); ?>" target="_blank" class="url-link">
<?php echo htmlspecialchars($submission['download_url']); ?>
</a>
<?php else: ?>
<span class="platform-badge">无下载链接</span>
<?php endif; ?>
</td>
<td class="url-cell">
<?php if ($submission['website_url']): ?>
<a href="<?php echo htmlspecialchars($submission['website_url']); ?>" target="_blank" class="url-link">
<?php echo htmlspecialchars($submission['website_url']); ?>
</a>
<?php else: ?>
<span class="platform-badge">无官网</span>
<?php endif; ?>
</td>
<td class="description-cell">
<?php if ($submission['description']): ?>
<div class="description-content">
<?php echo nl2br(htmlspecialchars($submission['description'])); ?>
</div>
<?php else: ?>
<span class="platform-badge">无描述</span>
<?php endif; ?>
</td>
<?php endif; ?>
<td><?php echo htmlspecialchars($submission['platforms'] ?: '-'); ?></td>
<td><?php echo htmlspecialchars($submission['contact'] ?: '-'); ?></td>
@ -654,16 +775,16 @@ $total_pages = ceil($total / $limit);
<div class="action-buttons">
<button class="btn btn-sm btn-primary"
onclick="showStatusModal(<?php echo $submission['id']; ?>, '<?php echo $type; ?>', '<?php echo $submission['status']; ?>', '<?php echo htmlspecialchars($submission['admin_note'] ?? '', ENT_QUOTES); ?>')">
<i class="fas fa-edit"></i>
<i class="fas fa-edit"></i> 编辑
</button>
<?php if ($submission['status'] === 'pending'): ?>
<button class="btn btn-sm btn-success"
onclick="quickUpdate(<?php echo $submission['id']; ?>, '<?php echo $type; ?>', 'approved')">
<i class="fas fa-check"></i>
<i class="fas fa-check"></i> 通过
</button>
<button class="btn btn-sm btn-danger"
onclick="quickUpdate(<?php echo $submission['id']; ?>, '<?php echo $type; ?>', 'rejected')">
<i class="fas fa-times"></i>
<i class="fas fa-times"></i> 拒绝
</button>
<?php endif; ?>
</div>

View File

@ -469,23 +469,23 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<label>收录平台</label>
<div class="checkbox-group">
<div class="checkbox-item">
<input type="checkbox" id="platform1" name="platforms[]" value="自媒体维基" onchange="checkPlatforms()">
<label for="platform1">自媒体维基</label>
<input type="checkbox" id="platform1" name="platforms[]" value="百度" onchange="checkPlatforms()">
<label for="platform1">百度</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="platform2" name="platforms[]" value="zTab" onchange="checkPlatforms()">
<label for="platform2">zTab</label>
<input type="checkbox" id="platform2" name="platforms[]" value="小度" onchange="checkPlatforms()">
<label for="platform2">小度</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="platform3" name="platforms[]" value="SOSO" onchange="checkPlatforms()">
<label for="platform3">SOSO</label>
<input type="checkbox" id="platform3" name="platforms[]" value="谷歌" onchange="checkPlatforms()">
<label for="platform3">谷歌</label>
</div>
</div>
<div class="platform-warning compliance" id="compliance-warning">
<i class="fas fa-exclamation-triangle"></i> 提醒:自媒体维基和zTab平台需要合法合规的内容,请确保您提交的内容符合相关法律法规。
<i class="fas fa-exclamation-triangle"></i> 提醒:百度和小度平台需要合法合规的内容,请确保您提交的内容符合相关法律法规。
</div>
<div class="platform-warning loose" id="loose-warning">
<i class="fas fa-info-circle"></i> 提醒:SOSO平台内容审查相对宽松,但仍需遵守基本的网络道德规范。
<i class="fas fa-info-circle"></i> 提醒:谷歌平台内容审查相对宽松,但仍需遵守基本的网络道德规范。
</div>
</div>