134 lines
4.0 KiB
PHP
134 lines
4.0 KiB
PHP
<?php
|
||
/**
|
||
* ユーティリティクラス
|
||
* Laravel 5.7から引き継いだヘルパー機能
|
||
* Created by PhpStorm.
|
||
* User: mrpha
|
||
* Date: 5/31/2016
|
||
* Time: 1:49 PM
|
||
*/
|
||
|
||
namespace App;
|
||
|
||
use File;
|
||
use Illuminate\Support\Facades\Hash;
|
||
|
||
/**
|
||
* 共通ユーティリティクラス
|
||
* ファイルアップロード、パスワード暗号化、CSV処理など
|
||
*/
|
||
class Utils
|
||
{
|
||
// ページあたりのアイテム数(旧システムから継承)
|
||
const item_per_page = 50;
|
||
|
||
// 画像保存パス(旧システムから継承)
|
||
const image_path = 'storage/images/';
|
||
|
||
|
||
/**
|
||
* 画像ファイルをimagesフォルダにアップロード
|
||
* Laravel 5.7から継承したメソッド
|
||
*
|
||
* @param \Illuminate\Http\UploadedFile $file アップロードファイル
|
||
* @param string|null $fileName ファイル名(指定しない場合は自動生成)
|
||
* @return string|false アップロード成功時はファイル名、失敗時はfalse
|
||
*/
|
||
public static function uploadFile($file, $fileName = null)
|
||
{
|
||
$destinationPath = self::getImagePath();
|
||
$date = strtotime(date('Y-m-d H:i:s'));
|
||
|
||
// ファイルをフォルダに移動
|
||
$fileName = $fileName . $date . '.' . $file->getClientOriginalExtension();
|
||
|
||
if ($file->move($destinationPath, $fileName)) {
|
||
$filePath = $destinationPath.$fileName;
|
||
if (file_exists($filePath)){
|
||
chmod($filePath, 0755); // ファイル権限設定
|
||
}
|
||
return $fileName;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* 画像パスを取得
|
||
*
|
||
* @param string $filname ファイル名
|
||
* @return string 画像パス
|
||
*/
|
||
public static function getImagePath($filname = '')
|
||
{
|
||
$path = self::image_path;
|
||
if ($filname) $path .= $filname;
|
||
return $path;
|
||
}
|
||
|
||
/**
|
||
* 画像URLを取得
|
||
*
|
||
* @param string $filname ファイル名
|
||
* @return string 画像URL
|
||
*/
|
||
public static function getImageUrl($filname = '')
|
||
{
|
||
return url(self::getImagePath($filname));
|
||
}
|
||
|
||
/**
|
||
* パスワードのハッシュ化
|
||
* Laravel 12変更点:Hashファサードを使用してハッシュ化
|
||
* Laravel 5.7: 独自のソルト処理を実装していた
|
||
*
|
||
* @param string $pw 平文パスワード
|
||
* @param string $seq ユーザーシーケンス(ソルト用)
|
||
* @return string ハッシュ化されたパスワード
|
||
*/
|
||
public static function getHashPassword($pw, $seq)
|
||
{
|
||
// 旧システムと同じソルト形式を維持
|
||
$salt = $seq.'SOMSALT';
|
||
|
||
// Laravel 12: Argon2ハッシュアルゴリズムを使用
|
||
return Hash::make($pw, [
|
||
'memory' => 1024,
|
||
'time' => 25,
|
||
'threads' => 2,
|
||
'salt' => $salt
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* CSVファイルを配列に変換
|
||
* Laravel 5.7から継承したメソッド(データインポート用)
|
||
*
|
||
* @param string $filename CSVファイルパス
|
||
* @param string $delimiter 区切り文字(デフォルト:カンマ)
|
||
* @return array|false 変換された配列、またはfalse(失敗時)
|
||
*/
|
||
public static function csvToArray($filename = '', $delimiter = ',')
|
||
{
|
||
// ファイル存在確認
|
||
if (!file_exists($filename) || !is_readable($filename))
|
||
return false;
|
||
|
||
$header = null;
|
||
$data = array();
|
||
|
||
// CSVファイルを読み込み
|
||
if (($handle = fopen($filename, 'r')) !== false)
|
||
{
|
||
while (($row = fgetcsv($handle, 1000, $delimiter)) !== false)
|
||
{
|
||
if (!$header)
|
||
$header = $row; // 最初の行はヘッダーとして扱う
|
||
else
|
||
$data[] = $row; // データ行として配列に追加
|
||
}
|
||
fclose($handle);
|
||
}
|
||
|
||
return $data;
|
||
}
|
||
}
|