Laravel에서 은행 마스터 업데이트 일괄 처리
목적
은행 마스터의 Zip 파일을 아래 URL에서 다운로드하여 Laravel 배치로 은행 마스터를 정기적으로 업데이트하는 프로세스를 구현합니다.
h tp : // y. 코 m / 긴코 켄사쿠 / 긴코 신 1. 지 p
명령의 클래스 정의 추가
app/Console/Kernel.php
protected $commands = [
DownLoadBankMasterZipFile::class,
];
protected function schedule(Schedule $schedule)
{
$schedule->command('downLoadBankMaster')->dailyAt('02:00');
}
배치 클래스 만들기
아래 명령 실행으로 배치 클래스 만들기
php artisan make:console DownLoadBankMasterZipFile --command="downLoadBankMaster"
배치 클래스의 내용
app/Console/Commands/DownLoadBankMasterZipFile.php
class DownLoadBankMasterZipFile extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'downLoadBankMaster';
/**
* The console command description.
*
* @var string
*/
protected $description = '銀行マスタZIPファイルダウンロード';
/**
* Create a new command instance.
*
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//
}
}
handle 메소드에 메인 처리를 작성합니다.
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
echo '▲▲▲▲▲▲▲処理開始▲▲▲▲▲▲'.PHP_EOL;
// ファイル名「bank_master.zip」でディレクトリ「bank/」に保存する場合
$saveFileName = 'bank_master';
$this->file_download('http://ykaku.com/ginkokensaku/ginkositen1.zip', 'bank', $saveFileName);
//zipファイルを解凍せずにファイルの内容を読み取る
$zip = new \ZipArchive();
if (!$zip->open('bank/'.$saveFileName. '.zip')) {
echo '▲▲▲zipファイルのオープンに失敗しました。▲▲▲'.PHP_EOL;
exit(1);
}
// ginkositen1.txtというファイル名が取得できる
$filename = $zip->getNameIndex(0);
// ファイルポインタを取得
$fp = $zip->getStream($filename);
$i=0;
while (!feof($fp)) {
$i++;
$line = fgets($fp);
echo $line;
//読取&DB更新処理書けばOK
}
fclose($fp);
$zip->close();
echo '▲▲▲▲▲▲▲処理終了▲▲▲▲▲▲'.PHP_EOL;
}
}
PHP로 URL에서 로컬로 파일 다운로드
/**
* PHPでURLからローカルにファイルをダウンロードする
*
* @param $url
* @param $dir
* @param $save_base_name
* @return
*/
private function file_download($url, $dir='.', $save_base_name='' ){
if ( ! is_dir($dir) ){ die("ディレクトリ({$dir})が存在しません。");}
$dir = preg_replace("{/$}","",$dir);
$p = pathinfo($url);
$local_filename = '';
if ( $save_base_name ){ $local_filename = "{$dir}/{$save_base_name}.{$p['extension']}"; }
else{ $local_filename = "{$dir}/{$p['filename']}.{$p['extension']}"; }
if ( is_file( $local_filename ) ){ print "すでにファイル({$local_filename})が存在します<br>\n";}
$tmp = file_get_contents($url);
if (! $tmp){ die("URL({$url})からダウンロードできませんでした。");}
$fp = fopen($local_filename, 'w');
fwrite($fp, $tmp);
fclose($fp);
}
런타임에 발생한 오류 및 해결 방법
//zipファイルを解凍せずにファイルの内容を読み取る
$zip = new ZipArchive();
다음 오류가 발생
실제로는 App\Http\Controllers\ZipArchive 라고 하는 클래스명이라고 해석되는 것 같고,
다음과 같이 클래스 이름 앞에\를 붙여 해결
$zip = new \ZipArchive();
cron 등록해보기
crontab을 작성하면 app/Console/Kernel.php의 schedule 메소드에 작성된 배치가 지정된 시간에 작동합니다.
* * * * * php /path/to/project/artisan schedule:run 1>> /dev/null 2>&1
참조 링크
htps : // pg도. 토키 / 다타 / 아 r ゔ ぇ s / 825. HTML
h tps://sym 포 균열. bぉg. FC2. 소 m/bぉg-엔try-1891. html
htps : // 코 m / 야미 코오 @ 큐 b / ms / c0250 8f0548534 db2
htps : // 하고 싶다 l. 코 m / 쿠에 s 치온 s / 32085
h tps:// 퀵했다. 소 m/리 붙이 좋다/있어 MS/아 70d89파 988b2d9아 FBC4
Reference
이 문제에 관하여(Laravel에서 은행 마스터 업데이트 일괄 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kerry/items/db03dcbe7c44ed011a86텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)