Skip to content

Instantly share code, notes, and snippets.

@nanasess
Created September 6, 2013 07:11
Show Gist options
  • Save nanasess/6460494 to your computer and use it in GitHub Desktop.
Save nanasess/6460494 to your computer and use it in GitHub Desktop.
EC-CUBEファイルアップロードで tmpfile() を使う案
<?php
/**
* ファイルアップロードを行う.
*
* 以下のチェックを行い, ファイルを一時領域へアップロードする.
* 1. ファイルサイズチェック
* 2. 拡張子チェック
*
* ファイルアップロード後, 一時ファイルのファイルポインタを返す.
* アップロードに失敗した場合は, エラーメッセージを $this->arrErr に出力し, false を返す.
*
* SC_CheckError クラスや, SC_UploadFile クラスはファイルが残ってしまうため,
* 独自のロジックを使用している.
*
* @param SC_FormParam $objFormParam SC_FormParam インスタンス
* @return resouces|boolean
*/
public function doFileUpload(&$objFormParam)
{
if ($_FILES['csv_file']['size'] <= 0) {
$this->arrErr['csv_file'] = '※ ファイルがアップロードされていません';
} elseif ($_FILES['csv_file']['size'] > CSV_SIZE * 1024) {
$this->arrErr['csv_file'] = '※ CSVファイルのファイルサイズは' . $this->max_upload_csv_size . '以下のものを使用してください。<br />';
} else {
// SC_CheckError::FILE_EXT_CHECK とのソース互換を強めるための配列
$value = array(
0 => 'CSVファイル',
1 => 'csv_file',
2 => array('csv'),
);
// ▼SC_CheckError::FILE_EXT_CHECK から移植
$match = false;
if (strlen($_FILES[$value[1]]['name']) >= 1) {
$filename = $_FILES[$value[1]]['name'];
foreach ($value[2] as $check_ext) {
$match = preg_match('/' . preg_quote('.' . $check_ext) . '$/i', $filename) >= 1;
if ($match === true) {
break 1;
}
}
}
if ($match === false) {
$str_ext = implode('・', $value[2]);
$this->arrErr[$value[1]][$index] = '※ ' . $value[0] . 'で許可されている形式は、' . $str_ext . 'です。<br />';
// ▲SC_CheckError::FILE_EXT_CHECK から移植
} else {
if (is_uploaded_file($_FILES['csv_file']['tmp_name'])) {
$buf = mb_convert_encoding(file_get_contents($_FILES['csv_file']['tmp_name']), CHAR_CODE, 'SJIS-win');
$fp = tmpfile();
if ($fp !== false) {
fwrite($fp, $buf);
rewind($fp);
return $fp;
}
}
}
}
$this->arrErr['csv_file'] = '※ ファイルのアップロードに失敗しました。<br />';
GC_Utils_Ex::gfPrintLog('File Upload Error!: ' . $_FILES['csv_file']['name'] . ' -> ' . $_FILES['csv_file']['tmp_name']);
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment