1
0
mirror of https://github.com/suk-ws/ph-Bookshelf.git synced 2025-01-19 07:22:26 +08:00

fix resource in "/" and mime-type problem

This commit is contained in:
A.C.Sukazyo Eyre 2023-05-19 23:08:46 +08:00
parent b17dd3cfeb
commit 0329392dd6
Signed by: Eyre_S
GPG Key ID: C17CE40291207874
5 changed files with 123 additions and 46 deletions

View File

@ -22,6 +22,7 @@
"ext-mbstring": "*",
"ext-fileinfo": "*",
"league/commonmark": ">=2.4",
"symfony/yaml": ">=4.0"
"symfony/yaml": ">=4.0",
"elephox/mimey": ">=4.0"
}
}

113
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "fc6b152675eaee41381b156736040f42",
"content-hash": "5b03081f00ca7fdde9829be69348733a",
"packages": [
{
"name": "dflydev/dot-access-data",
@ -81,6 +81,102 @@
},
"time": "2022-10-27T11:44:00+00:00"
},
{
"name": "elephox/mimey",
"version": "4.0.5",
"source": {
"type": "git",
"url": "https://github.com/elephox-dev/mimey.git",
"reference": "2b5910b3b35613feb47436d392f857e87183fcc9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/elephox-dev/mimey/zipball/2b5910b3b35613feb47436d392f857e87183fcc9",
"reference": "2b5910b3b35613feb47436d392f857e87183fcc9",
"shasum": ""
},
"require": {
"jetbrains/phpstorm-attributes": "^1.0",
"php": "^8.1 <8.3"
},
"require-dev": {
"phpunit/phpunit": "^9.6"
},
"suggest": {
"ext-mbstring": "For non-English (user) input parsing"
},
"type": "library",
"autoload": {
"psr-4": {
"Elephox\\Mimey\\": [
"src/",
"dist/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
},
{
"name": "Ricardo Boss",
"email": "contact@ricardoboss.de"
}
],
"description": "PHP package for converting file extensions to MIME types and vice versa.",
"support": {
"issues": "https://github.com/elephox-dev/mimey/issues",
"source": "https://github.com/elephox-dev/mimey/tree/4.0.5"
},
"time": "2023-02-21T14:45:43+00:00"
},
{
"name": "jetbrains/phpstorm-attributes",
"version": "1.0",
"source": {
"type": "git",
"url": "https://github.com/JetBrains/phpstorm-attributes.git",
"reference": "a7a83ae5df4dd3c0875484483de19de8edf60a9f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/JetBrains/phpstorm-attributes/zipball/a7a83ae5df4dd3c0875484483de19de8edf60a9f",
"reference": "a7a83ae5df4dd3c0875484483de19de8edf60a9f",
"shasum": ""
},
"type": "library",
"autoload": {
"psr-4": {
"JetBrains\\PhpStorm\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "JetBrains",
"homepage": "https://www.jetbrains.com"
}
],
"description": "PhpStorm specific attributes",
"keywords": [
"attributes",
"jetbrains",
"phpstorm"
],
"support": {
"issues": "https://youtrack.jetbrains.com/newIssue?project=WI",
"source": "https://github.com/JetBrains/phpstorm-attributes/tree/1.0"
},
"time": "2020-11-17T11:09:47+00:00"
},
{
"name": "league/commonmark",
"version": "2.4.0",
@ -702,16 +798,16 @@
},
{
"name": "symfony/yaml",
"version": "v6.2.7",
"version": "v6.3.0-BETA1",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57"
"reference": "a9a8337aa641ef2aa39c3e028f9107ec391e5927"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57",
"reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57",
"url": "https://api.github.com/repos/symfony/yaml/zipball/a9a8337aa641ef2aa39c3e028f9107ec391e5927",
"reference": "a9a8337aa641ef2aa39c3e028f9107ec391e5927",
"shasum": ""
},
"require": {
@ -724,9 +820,6 @@
"require-dev": {
"symfony/console": "^5.4|^6.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"bin": [
"Resources/bin/yaml-lint"
],
@ -756,7 +849,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v6.2.7"
"source": "https://github.com/symfony/yaml/tree/v6.3.0-BETA1"
},
"funding": [
{
@ -772,7 +865,7 @@
"type": "tidelift"
}
],
"time": "2023-02-16T09:57:23+00:00"
"time": "2023-04-28T13:28:14+00:00"
}
],
"packages-dev": [],

View File

@ -2,6 +2,6 @@
const APP_NAME = "ph-Bookshelf";
const VERSION = "0.5.0-alpha7";
const VERSION = "0.5.0-alpha8";
const CHANNEL = "suk-ws";
const BRANCH = "config-v2.0";

View File

@ -31,7 +31,7 @@ class PageMeta {
} else {
$tmp = SiteMeta::getBookshelf()->getBook($uri[0]);
if ($tmp == null)
throw new RequestNotExistException("Book required \"$uri[0]\" not found!");
return false;
self::$bookId = $uri[0];
self::$book = $tmp->getContentedNode();
}

View File

@ -2,7 +2,8 @@
namespace SukWs\Bookshelf\Utils;
use SukWs\Bookshelf\Resource\Resource;
use Elephox\Mimey\MimeType;
use JetBrains\PhpStorm\NoReturn;
class PageParse {
@ -26,20 +27,7 @@ class PageParse {
exit("File Can't Read!");
}
// 判定文件类型
$fileMime = mime_content_type($filePath);
$isText = false;
if ($fileMime == "text/plain") {
$isText = true;
switch ($fileExtension) {
case "css":
$fileMime = "text/css";
break;
case "js":
$fileMime = "application/javascript";
break;
default:
}
}
$fileMime = MimeType::fromExtension($fileExtension)->getValue();
// 文件类型是二进制流。设置为utf8编码支持中文文件名称
header('Content-type:'.$fileMime.'; charset=utf-8');
header("Access-Control-Allow-Origin: * ");
@ -47,28 +35,23 @@ class PageParse {
// 触发浏览器文件下载功能
header('Content-Disposition:attachment;filename="'.urlencode($filename).'"');
}
if ($isText) {
echo file_get_contents($filePath);
} else {
// 二进制文件数据头
header("Accept-Ranges: bytes");
header("Content-Length: ".filesize($filePath));
// 以只读方式打开文件,并强制使用二进制模式
$fileHandle = fopen($filePath, "rb");
if ($fileHandle === false) {
exit("read false");
}
// 循环读取文件内容,并输出
while (!feof($fileHandle)) {
// 从文件指针 handle 读取最多 length 个字节每次输出10k
echo fread($fileHandle, 10240);
}
// 关闭文件流
fclose($fileHandle);
// 二进制文件数据头
// 以只读方式打开文件,并强制使用二进制模式
$fileHandle = fopen($filePath, "rb");
if ($fileHandle === false) {
exit("read false");
}
// 循环读取文件内容,并输出
while (!feof($fileHandle)) {
// 从文件指针 handle 读取最多 length 个字节每次输出10k
echo fread($fileHandle, 10240);
}
// 关闭文件流
fclose($fileHandle);
return true;
}
#[NoReturn]
public static function output302 (string $url): void {
header("Location: $url", true, 302);
exit;