From cb0334367743a5b513b4e21cef14396faa31b5ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Tue, 30 Dec 2025 19:09:43 +0900 Subject: [PATCH] =?UTF-8?q?CSV=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9?= =?UTF-8?q?=E3=83=AA=E3=82=82=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.sample.php | 12 +--- route.php | 2 - src/Site/Lib/Csv.php | 85 -------------------------- src/Site/Test/LibCsv.php | 126 --------------------------------------- util.php | 5 -- 5 files changed, 1 insertion(+), 229 deletions(-) delete mode 100644 src/Site/Lib/Csv.php delete mode 100644 src/Site/Test/LibCsv.php diff --git a/config/config.sample.php b/config/config.sample.php index 86632a3..2d76c7f 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -21,22 +21,12 @@ define('FEDIINFO', [ 'pubkey' => ROOT.'/public/static/pub.pem', 'privkey' => ROOT.'/data/priv.pem', ]); -define('DBINFO', [ - 'host' => 'localhost', - 'username' => 'littlebeast', - 'password' => '', - 'dbname' => 'littlebeast', - 'port' => 3306, - 'debug' => false, -]); define('MAILER_ENABLED', false); define('LOGGING_ENABLED', true); define('ATOM_ENABLED', true); -define('RSS_ENABLED', false); define('ACTIVITYPUB_ENABLED', false); -define('CSV_ENABLED', false); define('CURL_ENABLED', true); define('AUTH_ENABLED', false); define('AUTH_REGISTER_ENABLED', false); -define('COPYRIGHT_YEAR', '2018-'.date('Y')); +define('COPYRIGHT_YEAR', '2018-'.date('Y')); \ No newline at end of file diff --git a/route.php b/route.php index 2d5d4ff..539659f 100644 --- a/route.php +++ b/route.php @@ -50,8 +50,6 @@ if (AUTH_ENABLED) { $routes[] = Route::add('GET', 'staffonly', Page::class.'@staffonly'); } -/* if (RSS_ENABLED) {} */ - if (ATOM_ENABLED) { $routes[] = Route::add('GET', 'blog.atom', Atom::class.'@feed'); } diff --git a/src/Site/Lib/Csv.php b/src/Site/Lib/Csv.php deleted file mode 100644 index 0f8b78e..0000000 --- a/src/Site/Lib/Csv.php +++ /dev/null @@ -1,85 +0,0 @@ - ",", - self::SEMICOLON => ";", - self::TAB => "\t", - self::PIPE => "|", - }; - } -} - -/** - * CSVパーシングクラス - */ -class Csv { - // リクエスト関連のプロパティ - private bool $isHeader = false; - private int $length = 8192; - private Delimiter $delimiter; - private string $filename; - private $fp; - - public function __construct(string $filename, int $length = 8192) { - $this->length = $length; - $this->filename = $filename; - $this->delimiter = Delimiter::default(); - - $this->fp = fopen($this->filename, 'r'); - if ($this->fp === false) { - $msg = "ファイルを開けられません。"; - logger(\LogType::Csv, $msg); - throw new \Exception($msg); - } - } - - public function __destruct() { - if ($this->fp !== false) { - fclose($this->fp); - } - } - - public function parse(?Delimiter $delimiter = null, bool $isHeader = false): array { - $res = []; - $this->isHeader = $isHeader; - $this->delimiter = $delimiter ?? $this->delimiter; - - $delimChar = $this->delimiter->getChar(); - - rewind($this->fp); - - if ($this->isHeader) { - $res = ['header' => [], 'body' => []]; - $head = fgets($this->fp, $this->length); - if ($head !== false) { - $res['header'] = str_getcsv($head, $delimChar); - } - } - - while (($buffer = fgets($this->fp, $this->length)) !== false) { - $row = str_getcsv($buffer, $delimChar); - if ($this->isHeader) $res['body'][] = $row; - else $res[] = $row; - } - - if (!feof($this->fp)) { - $msg = "エラー:fgets()の失敗"; - logger(\LogType::Csv, $msg); - throw new \Exception($msg); - } - - return $res; - } -} diff --git a/src/Site/Test/LibCsv.php b/src/Site/Test/LibCsv.php deleted file mode 100644 index e383322..0000000 --- a/src/Site/Test/LibCsv.php +++ /dev/null @@ -1,126 +0,0 @@ - true, - 'verboseOutput' => true - ]); - - $test->describe('Csvの基本的なパーシング', function($test): void { - $test->it('簡単なCSVファイルをパーシングするはず', function($test): void { - $str = "岩田聡,プロジューサー\n宮本茂,デザイナー\nJeffrey Epstein,幼児性愛者"; - - $tmpFile = tempnam(sys_get_temp_dir(), 'csv_test'); - file_put_contents($tmpFile, $str); - - $csv = new Csv($tmpFile); - $res = $csv->parse(); - - unlink($tmpFile); - - $expect = [ - ["岩田聡", "プロジューサー"], - ["宮本茂", "デザイナー"], - ["Jeffrey Epstein", "幼児性愛者"] - ]; - - $test->assertNotNull($res); - $test->assertEquals($res, $expect); - }); - - $test->it('異なるデリミタでCSVをパーシングするはず', function ($test): void { - // セミコロン - $semiStr = "岩田聡;プロジューサー\n宮本茂;デザイナー"; - $tmpFile = tempnam(sys_get_temp_dir(), 'csv_semi_test'); - file_put_contents($tmpFile, $semiStr); - - $csv = new Csv($tmpFile); - $res = $csv->parse(Delimiter::SEMICOLON); - - unlink($tmpFile); - - $expect = [ - ["岩田聡", "プロジューサー"], - ["宮本茂", "デザイナー"] - ]; - - $test->assertEquals($res, $expect, "セミコロンデリミタでパーシングに失敗"); - - // タブ - $tabStr = "岩田聡\tプロジューサー\n宮本茂\tデザイナー"; - $tmpFile = tempnam(sys_get_temp_dir(), 'csv_tab_test'); - file_put_contents($tmpFile, $tabStr); - - $csv = new Csv($tmpFile); - $res = $csv->parse(Delimiter::TAB); - - unlink($tmpFile); - - $test->assertEquals($res, $expect, "タブデリミタでパーシングに失敗"); - - // パイプ - $pipeStr = "岩田聡|プロジューサー\n宮本茂|デザイナー"; - $tmpFile = tempnam(sys_get_temp_dir(), 'csv_pipe_test'); - file_put_contents($tmpFile, $pipeStr); - - $csv = new Csv($tmpFile); - $res = $csv->parse(Delimiter::PIPE); - - unlink($tmpFile); - - $test->assertEquals($res, $expect, "パイプデリミタでパーシングに失敗"); - }); - - $test->it('ヘッダー付きCSVをパーシングするはず', function ($test) { - $str = "name,job title\n岩田聡,プロジューサー\n宮本茂,デザイナー"; - - $tmpFile = tempnam(sys_get_temp_dir(), 'csv_header_test'); - file_put_contents($tmpFile, $str); - - $csv = new Csv($tmpFile); - $res = $csv->parse(Delimiter::COMMA, true); // isHeader = true - - unlink($tmpFile); - - $expect = [ - 'header' => ["name", "job title"], - 'body' => [ - ["岩田聡", "プロジューサー"], - ["宮本茂", "デザイナー"], - ], - ]; - - $test->assertNotNull($res); - $test->assertEquals($res, $expect, "ヘッダーパーシングに失敗"); - }); - - $test->it('セル内にカンマを含むCSVをパーシングするはず', function ($test): void { - $str = "\"守矢, 諏訪子\",エンジニア\n\"青, 猫ちゃん\",サーバー管理者"; - - $tmpFile = tempnam(sys_get_temp_dir(), 'csv_quoted_comma_test'); - file_put_contents($tmpFile, $str); - - $csv = new Csv($tmpFile); - $res = $csv->parse(\Site\Lib\delimiter::COMMA); - - unlink($tmpFile); - - $expect = [ - ["守矢, 諏訪子", "エンジニア"], - ["青, 猫ちゃん", "サーバー管理者"] - ]; - - $test->assertNotNull($res); - $test->assertEquals($res, $expect, "セル内にカンマを含むパーシングに失敗"); - }); - }); - - $test->printSummary(); -} \ No newline at end of file diff --git a/util.php b/util.php index 49bb7d5..e88df0a 100644 --- a/util.php +++ b/util.php @@ -4,7 +4,6 @@ if (!CURL_ENABLED) define('ACTIVITYPUB_ENABLED', false); enum LogType { case ActivityPub; case Auth; - case Csv; case Mailer; } @@ -220,10 +219,6 @@ function logger(LogType $section, mixed $arg): void { $logfile .= 'auth_log.text'; $success = true; break; - case LogType::Csv: - $logfile .= 'csv_log.text'; - $success = true; - break; case LogType::Mailer: $logfile .= 'mail_log.text'; $success = true;