diff --git a/admin/index.php b/admin/index.php index 2f844c29e..caa9162db 100755 --- a/admin/index.php +++ b/admin/index.php @@ -124,7 +124,7 @@ 简单图床登陆界面背景图
-
+

登录

diff --git a/api/index.php b/api/index.php index 3733f6ba9..eb8d4f53f 100755 --- a/api/index.php +++ b/api/index.php @@ -1,6 +1,5 @@ getMessage()); +} \ No newline at end of file diff --git a/app/base.php b/app/base.php index f7f62b73b..3f39c183a 100644 --- a/app/base.php +++ b/app/base.php @@ -24,7 +24,7 @@ // 设置html为utf8 header('Content-Type:text/html;charset=utf-8'); // 定义根目录 -define('APP_ROOT', str_replace('\\', '/', realpath(dirname(__FILE__) . '/../'))); +define('APP_ROOT', str_replace(DIRECTORY_SEPARATOR, '/', realpath(dirname(__FILE__) . '/../'))); // 时区设置 https://www.php.net/manual/zh/timezones.php require_once APP_ROOT . '/config/config.php'; empty($config['timezone']) ? date_default_timezone_set('Asia/Shanghai') : date_default_timezone_set($config['timezone']); diff --git a/app/function.php b/app/function.php index e1a3ac4c3..622dfefff 100644 --- a/app/function.php +++ b/app/function.php @@ -586,7 +586,7 @@ function getDel($url, $type) $url = urldecode(trim($url)); if ($type == 'url') { - $url = $_SERVER['DOCUMENT_ROOT'] . $url; + $url = APP_ROOT . $url; } if ($type == 'hash') { $url = APP_ROOT . $url; @@ -643,7 +643,7 @@ function easyimage_delete($url, $type) $url = urldecode(trim($url)); if ($type == 'url') { - $url = $_SERVER['DOCUMENT_ROOT'] . $url; + $url = APP_ROOT . $url; } if ($type == 'hash') { $url = APP_ROOT . $url; @@ -1544,7 +1544,7 @@ function write_upload_logs($filePath, $sourceName, $absolutePath, $fileSize, $fr // $name = trim(basename($filePath), " \t\n\r\0\x0B"); // 当前图片名称 $log = array(basename($filePath) => array( // 以上传图片名称为Array - 'source' => htmlspecialchars($sourceName), // 原始文件名称 + 'source' => htmlspecialchars($sourceName), // 原始文件名称 'date' => date('Y-m-d H:i:s'), // 上传日期 'ip' => real_ip(), // 上传IP 'port' => $_SERVER['REMOTE_PORT'], // IP端口 diff --git a/app/ip2region/Ip2Region.php b/app/ip2region/Ip2Region.php index e5bfa3f0e..20aea650f 100644 --- a/app/ip2region/Ip2Region.php +++ b/app/ip2region/Ip2Region.php @@ -68,7 +68,7 @@ public function simple($ip) $geo = $this->memorySearch($ip); $arr = explode('|', str_replace(['0|'], '|', isset($geo['region']) ? $geo['region'] : '')); if (($last = array_pop($arr)) === '内网IP') $last = ''; - return join('', $arr) . (empty($last) ? '' : "[{$last}]"); + return join('', $arr) . (empty($last) ? '' : "【{$last}】"); } /** diff --git a/app/ip2region/XdbSearcher.php b/app/ip2region/XdbSearcher.php index d3168d226..680f4cb73 100644 --- a/app/ip2region/XdbSearcher.php +++ b/app/ip2region/XdbSearcher.php @@ -126,7 +126,7 @@ function search($ip) // read the vector index block $buff = $this->read(self::HeaderInfoLength + $idx, 8); if ($buff === null) { - throw new Exception("failed to read vector index at ${idx}"); + throw new Exception("failed to read vector index at {$idx}"); } $sPtr = self::getLong($buff, 0); @@ -147,7 +147,7 @@ function search($ip) // read the segment index $buff = $this->read($p, self::SegmentIndexSize); if ($buff == null) { - throw new Exception("failed to read segment index at ${p}"); + throw new Exception("failed to read segment index at {$p}"); } $sip = self::getLong($buff, 0); diff --git a/app/ip2region/ip2region.xdb b/app/ip2region/ip2region.xdb index c78b79284..7052c0571 100644 Binary files a/app/ip2region/ip2region.xdb and b/app/ip2region/ip2region.xdb differ diff --git a/app/thumb.php b/app/thumb.php index 3297bd85d..7cfb73128 100644 --- a/app/thumb.php +++ b/app/thumb.php @@ -31,17 +31,17 @@ * 2022-1-30 06:35:08 * * TimThumb参数指南 - * 命令 作用 参数 描述 - * src 源 图像URL 告诉TimThumb调整哪个图片 - * w 宽度 宽度调整 调整输出图像的宽度 - * h 高度 高度调整 调整输出图像的高度 - * q 质量 0 - 100 压缩质量,值越大质量越高。不建议高于95 - * a 对齐 c, t, l, r, b, tl, tr, bl, br 图像对齐。 c = center, t = top, b = bottom, r = right, l = left。 可以创建对角位置 - * zc 缩放/裁剪 0、1、2、3 0:根据传入的值进行缩放(不裁剪), 1:以最合适的比例裁剪和调整大小(裁剪), 2:按比例调整大小,并添加边框(裁剪),3:按比例调整大小,不添加边框(裁剪) - * f 过滤器 太多了 可以改变亮度/对比度;甚至模糊图像 - * s 锐化 锐化 使得按比例缩小图片看起来有点;更清晰 - * cc 画布上的颜色 十六进制的颜色值(# ffffff) 改变背景颜色。 大多数更改缩放和作物设置时使用,进而可以添加图像边界。 - * ct 画布的透明度 true (1) 使用透明而忽略背景颜色 + * 命令 作用 参数 描述 + * src 源文件 图像URL 告诉TimThumb调整哪个图片 + * w 宽度 宽度调整 调整输出图像的宽度 + * h 高度 高度调整 调整输出图像的高度 + * q 质量 0-100 压缩质量,值越大质量越高。不建议高于95 + * a 对齐 c, t, l, r, b, tl, tr, bl, br 图像对齐。 c = center, t = top, b = bottom, r = right, l = left。 可以创建对角位置 + * zc 缩放/裁剪 0、1、2、3 0: 根据传入的值进行缩放(不裁剪), 1:以最合适的比例裁剪和调整大小(裁剪), 2:按比例调整大小,并添加边框(裁剪),3:按比例调整大小,不添加边框(裁剪) + * f 过滤器 太多了 可以改变亮度/对比度;甚至模糊图像 + * s 锐化 锐化 使得按比例缩小图片看起来有点;更清晰 + * cc 画布颜色 #ffffff 改变背景颜色。 大多数更改缩放和作物设置时使用,进而可以添加图像边界。 + * ct 画布透明度 true (1) 使用透明而忽略背景颜色 */ require_once __DIR__ . '/function.php'; @@ -74,7 +74,6 @@ $config['imgurl'], ); - /** * 修复无法生成生成webp动态图片的缩略图bug */ diff --git a/app/viewlog.php b/app/viewlog.php index c7765456a..834282e5b 100644 --- a/app/viewlog.php +++ b/app/viewlog.php @@ -42,7 +42,6 @@ throw new Exception('
没有上传日志!
'); } } catch (Exception $e) { - echo $e->getMessage(); require_once APP_ROOT . '/app/footer.php'; exit; } @@ -176,7 +175,7 @@ function(data, status) { checkImg: '', from: '', manage: '', - }, + }, ] }, diff --git a/docs/API.md b/docs/API.md index 45ddff63f..a6b42c74e 100644 --- a/docs/API.md +++ b/docs/API.md @@ -1,67 +1,94 @@ -返回状态可以参考 [常见状态代码](./常见状态代码.md) -- 上传成功后返回JSON - +### 上传成功后返回JSON示例 ```json { - "result":"success","code":200, + "result":"success", + "code":200, "url":"https:\/\/i2.100024.xyz\/2023\/01\/24\/10gwv0y-0.webp", "srcName":"195124", "thumb":"https:\/\/png.cm\/application\/thumb.php?img=\/i\/2023\/01\/24\/10gwv0y-0.webp", "del":"https:\/\/png.cm\/application\/del.php?hash=bW8vWG4vcG8yM2pLQzRJUGI0dHlTZkN4L2grVmtwUTFhd1A4czJsbHlMST0=" } ``` +- 返回示例解释 + `result` 返回状态 + `code` 返回状态编号 参考[常见状态代码](./常见状态代码.md) + `url` 文件链接 + `srcName` 原始名称 + `thumb` 缩略图 + `del` 文件删除链接 + +### 上传示例 仅供参考 -- html示例 +- html ```html - - + + + + ``` -- Python示例 +- Python -```python +```Python import requests -url = "https://png.cm/api/index.php" +# 本地图片文件路径 +image_path = "/path/to/your/image.jpg" -payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n8337effca0ddfcd9c5899f3509b23657\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"\r\n\r\n195124.jpg\r\n-----011000010111000001101001--\r\n\r\n" -headers = {"content-type": "multipart/form-data; boundary=---011000010111000001101001"} +# token值,需从实际来源获取(例如读取tokenList文件) +token = "your_token_value_here" -response = requests.request("POST", url, data=payload, headers=headers) +# 目标URL +url = "http://127.0.0.1/api/index.php" -print(response.text) +# 构建请求参数 +files = {'image': open(image_path, 'rb')} +data = {'token': token} + +# 发送POST请求 +response = requests.post(url, files=files, data=data) + +# 检查响应状态码 +if response.status_code == 200: + print("Upload successful.") +else: + print(f"Upload failed with status code {response.status_code}.") ``` -- curl示例 - -```curl -curl --request POST \ - --url https://png.cm/api/index.php \ - --header 'content-type: multipart/form-data' \ - --form token=8337effca0ddfcd9c5899f3509b23657 \ - --form image=@195124.jpg +- Curl + +```CURL +curl -X POST http://127.0.0.1/api/index.php \ +-F "image=@/path/to/your/file/example.jpg" \ +-F "token=your_token" ``` -- JQuery示例 - -```jQuery -const form = new FormData(); -form.append("token", "8337effca0ddfcd9c5899f3509b23657"); -form.append("image", "195124.jpg"); - -const settings = { - "async": true, - "crossDomain": true, - "url": "https://png.cm/api/index.php", - "method": "POST", - "headers": {}, - "processData": false, - "contentType": false, - "mimeType": "multipart/form-data", - "data": form -}; - -$.ajax(settings).done(function (response) { - console.log(response); + +- JQuery + +```JAVASCRIPT +// 获取文件和token +var file = document.querySelector('input[type="file"]').files[0]; +var token = $('input[name="token"]').val(); + +// 创建FormData对象 +var formData = new FormData(); +formData.append('image', file); +formData.append('token', token); + +// 发起上传请求 +$.ajax({ + url: 'http://127.0.0.1/api/index.php', + type: 'POST', + data: formData, + processData: false, + contentType: false, + success: function(response) { + console.log('文件上传成功'); + }, + error: function(xhr, status, error) { + console.error('文件上传失败: ' + error); + } }); + ``` diff --git a/docs/update.md b/docs/update.md index d8f2d5457..a9a239d8f 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,8 @@ -* 2024-03-04 v2.8.5 -- 返回状态统一 +* 2024-04-08 v2.8.5 +- 优化API示例 +- 优化二级目录使用 +- 修复对PHP8.2支持 +- 上传返回状态统一 - 增加返回状态文档解释 - 增加通过文件md5禁止上传