/** * JPEG image auto rotation by EXIF info for OnUpLoadPreSave callback * * @param string $path * @param string $name * @param string $src * @param object $elfinder * @param object $volume * @return boolean */ public function autoRotateOnUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) { if (!class_exists('HypCommonFunc') || version_compare(HypCommonFunc::get_version(), '20150515', '<')) { return false; } $srcImgInfo = @getimagesize($src); if ($srcImgInfo === false) { return false; } if (!in_array($srcImgInfo[2], array(IMAGETYPE_JPEG, IMAGETYPE_JPEG2000))) { return false; } $ret = HypCommonFunc::rotateImage($src, 0, 95, $srcImgInfo); // remove exif gps info HypCommonFunc::removeExifGps($src, $srcImgInfo); return $ret; }
function do_upload($page, $fname, $tmpname, $copyright = FALSE, $pass = NULL, $notouch = FALSE, $options = NULL) { // ページが無ければ空ページを作成(他のプラグインから呼ばれた時のため) if (!$this->func->is_page($page)) { $this->func->make_empty_page($page, false); } $overwrite = !empty($options['overwrite']); $changelog = isset($options['changelog']) ? $options['changelog'] : ''; $add_mes = array(); $has_json_msg = false; // ファイル名の正規化 $fname = str_replace("", '', $fname); $fname = $this->func->basename(str_replace("\\", "/", $fname)); $_action = 'insert'; // style.css if ($fname === 'style.css' && $this->func->is_owner($page)) { if (is_file($tmpname)) { $_pagecss_file = $this->cont['CACHE_DIR'] . $this->func->get_pgid_by_name($page) . ".css"; if (is_file($_pagecss_file)) { unlink($_pagecss_file); } if (is_uploaded_file($tmpname) && move_uploaded_file($tmpname, $_pagecss_file) || @rename($tmpname, $_pagecss_file)) { $this->attach_chmod($_pagecss_file); // 空のファイルの場合はファイル削除 if (!trim(file_get_contents($_pagecss_file))) { unlink($_pagecss_file); return array('result' => TRUE, 'msg' => $this->root->_attach_messages['msg_unset_css'], 'has_json_msg' => TRUE); } else { $_data = file_get_contents($_pagecss_file); // 管理者以外は外部ファイルの参照を禁止するなどの書き換え if (!$this->root->userinfo['admin']) { $_data = preg_replace('#(?:url\\s*\\(\\s*[\'"]?(?:(?:ht|f)tps?:)?//[^\\)]+?\\)|@import[^;\\r\\n]*?;|@import|(?:ht|f)tps?://)#i', '', $_data); } if (file_put_contents($_pagecss_file, $_data)) { $add_mes[] = $this->root->_attach_messages['msg_set_css']; $has_json_msg = true; } // 元ファイルを添付ファイルとして保存 if ($tmpname = tempnam($this->cont['CACHE_DIR'], 'atf')) { file_put_contents($tmpname, $_data); $overwrite = true; } clearstatcache(); } } else { @unlink($tmpname); return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_exists']); } } } // ページオーナー権限がない場合は拡張子をチェック $allow_extensions = $this->get_allow_extensions(); if (empty($options['asSystem']) && !$overwrite && $allow_extensions && !$this->func->is_owner($page) && !preg_match("/\\.(" . join("|", $allow_extensions) . ")\$/i", $fname)) { return array('result' => FALSE, 'msg' => str_replace('$1', $this->func->htmlspecialchars(preg_replace('/.*\\.([^.]*)$/', "\$1", $fname)), $this->root->_attach_messages['err_extension'])); } $_size = @getimagesize($tmpname); // イメージファイルの内容をチェック if ($_size) { $checkStr = $this->func->file_get_contents($tmpname, FALSE, NULL, 0, 10240); if (preg_match('/<(?:script|\\?php)/i', $checkStr)) { return array('result' => FALSE, 'msg' => 'It isn\'t a image file.'); } // Flashファイルの検査 if ($this->cont['ATTACH_UPLOAD_FLASH_ADMIN_ONLY']) { if (!$this->root->userinfo['admin'] && ($_size[2] === 4 || $_size[2] === 13)) { return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_isflash']); } } } // オリジナルファイル名 $org_fname = $fname; // 格納ファイル名指定あり if (!empty($this->root->vars['filename'])) { $fname = $this->root->vars['filename']; } // 格納ファイル名文字数チェック(SQL varchar(255) - strlen('_\d\d\d')) $fname = function_exists('mb_strcut') ? mb_strcut($fname, 0, 251) : substr($fname, 0, 251); // ファイル名 文字数のチェック $fname = $this->regularize_fname($fname, $page); if (!$overwrite) { // ファイル名が存在する場合は、数字を付け加える if (preg_match("/^(.+)(\\.[^.]*)\$/", $fname, $match)) { $_fname = $match[1]; $_ext = $match[2]; } else { $_fname = $fname; $_ext = ''; } $fi = 0; do { $obj = new XpWikiAttachFile($this->xpwiki, $page, $fname); $fname = $_fname . '_' . $fi++ . $_ext; } while ($obj->exist); } else { $obj = new XpWikiAttachFile($this->xpwiki, $page, $fname); if (is_file($obj->filename)) { unlink($obj->filename); $_action = "update"; } } if (is_uploaded_file($tmpname)) { if (move_uploaded_file($tmpname, $obj->filename)) { $this->attach_chmod($obj->filename); } else { return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_noexist']); } } else { if (!is_file($tmpname) || !filesize($tmpname)) { if (is_file($tmpname)) { unlink($tmpname); } return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_noexist']); } if (rename($tmpname, $obj->filename)) { $this->attach_chmod($obj->filename); } else { unlink($tmpname); return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_noexist']); } } if ($this->func->is_page($page)) { if (!$notouch) { if (!$changelog) { $changelog = 'Attached file: ' . $this->func->htmlspecialchars($obj->file); } $this->root->rtf['page_touch'][$page][] = $changelog; } $this->func->clear_page_cache($page); } if (!empty($options['asSystem'])) { $_uid = 0; $_ucd = 'SYSTEM'; $_uname = 'System'; $_admins = 0; } else { $_uid = $this->root->userinfo['uid']; $_ucd = $this->root->userinfo['ucd']; $_uname = $this->root->userinfo['uname']; $_admins = (int) $this->func->check_admin($this->root->userinfo['uid']); } if ($_size && version_compare(HypCommonFunc::get_version(), '20150515', '>=')) { // 自動回転を試みる HypCommonFunc::rotateImage($obj->filename, 0, 95, $_size); if (!empty($this->root->vars['rmgps'])) { HypCommonFunc::removeExifGps($obj->filename, $_size); } } $obj->getstatus(); $obj->status['age'] = 0; $obj->status['pass'] = ($pass !== TRUE and $pass !== NULL) ? $pass : ''; $obj->status['copyright'] = $copyright; $obj->status['owner'] = $_uid; $obj->status['ucd'] = $_ucd; $obj->status['uname'] = $_uname; $obj->status['md5'] = md5_file($obj->filename); $obj->status['admins'] = $_admins; $obj->status['org_fname'] = $org_fname; $obj->status['imagesize'] = $obj->getimagesize($obj->filename); $obj->status['mime'] = $this->attach_mime_content_type($obj->filename, $obj->status); $obj->action = $_action; $obj->putstatus(); if (!empty($this->root->vars['refid'])) { $this->ref_replace($page, $this->root->vars['refid'], $obj->file, $obj->status['imagesize']); } return array('result' => TRUE, 'msg' => $add_mes ? join("\n", $add_mes) : $this->root->_attach_messages['msg_uploaded'], 'name' => $obj->file, 'has_json_msg' => $has_json_msg); }
function plugin_moblog_action() { error_reporting(0); $this->debug = array(); $this->admin = $this->root->userinfo['admin']; $this->chk_fp = NULL; $this->output_mode = isset($this->root->vars['om']) && $this->root->vars['om'] === 'rss' ? 'rss' : 'img'; $host = $user = $pass = $port = ''; $execution_time = intval(ini_get('max_execution_time')); //設定ファイル読み込み if (isset($this->config['host'])) { $host = (string) $this->config['host']; } if (isset($this->config['mail'])) { $mail = (string) $this->config['mail']; } if (isset($this->config['user'])) { $user = (string) $this->config['user']; } if (isset($this->config['pass'])) { $pass = (string) $this->config['pass']; } if (isset($this->config['port'])) { $port = (int) $this->config['port']; } foreach (array('mail', 'host', 'port', 'user', 'pass') as $key) { $_key = 'moblog_pop_' . $key; if (!empty($this->root->{$_key})) { ${$key} = $this->root->{$_key}; } } if (!$host || !$user || !$pass || !$port) { $this->plugin_moblog_output(); } $ref_option = (string) $this->config['ref']; $maxbyte = (int) $this->config['maxbyte']; $body_limit = (int) $this->config['body_limit']; $refresh_min = (int) $this->config['refresh_min']; $nosubject = (string) $this->config['nosubject']; $deny = (array) $this->config['deny']; $deny_mailer = (string) $this->config['deny_mailer']; $deny_title = (string) $this->config['deny_title']; $deny_lang = (string) $this->config['deny_lang']; $subtype = (string) $this->config['subtype']; $viri = (string) $this->config['viri']; $del_ereg = (string) $this->config['del_ereg']; $word = (array) $this->config['word']; $imgonly = (int) $this->config['imgonly']; $chk_file = $this->cont['CACHE_DIR'] . "moblog.chk"; if (!is_file($chk_file)) { touch($chk_file); } else { if ($refresh_min * 60 > $this->cont['UTC'] - filemtime($chk_file) && empty($this->root->vars['now'])) { $this->plugin_moblog_output(); } else { $this->func->pkwk_touch_file($chk_file); } } if ($this->config['check_interval']) { $interval = max($this->config['check_interval'], $this->config['refresh_min']); $data = array('action' => 'plugin_func', 'plugin' => 'moblog', 'func' => 'plugin_moblog_action'); $this->func->regist_jobstack($data, 0, $interval * 60); } $this->chk_fp = fopen($chk_file, 'wb'); if (!flock($this->chk_fp, LOCK_EX)) { $this->plugin_moblog_output(); } // user_pref 読み込み $adr2page = (array) $this->config['adr2page']; $user_pref_all = $this->func->get_user_pref(); if ($user_pref_all) { foreach ($user_pref_all as $_uid => $_dat) { $_dat = unserialize($_dat); if (!empty($_dat['moblog_base_page'])) { if (!empty($_dat['moblog_mail_address'])) { $adr2page[strtolower($_dat['moblog_mail_address'])] = array($_dat['moblog_base_page'], $_uid); } else { if (!empty($_dat['moblog_user_mail'])) { $adr2page[strtolower($_dat['moblog_user_mail'])] = array($_dat['moblog_base_page'], $_uid); } } } } } // SMS(MMS) 経由のデーター読み込み if ($smsdata = $this->func->cache_get_db(null, 'moblog')) { foreach ($smsdata as $_data) { $_data = unserialize($_data); $adr2page = array_merge($adr2page, $_data); } } // attach プラグイン読み込み $attach = $this->func->get_plugin_instance('attach'); // wait 指定 $wait = empty($this->root->vars['wait']) ? 0 : (int) $this->root->vars['wait']; sleep(min(5, $wait)); // 接続開始 $err = ""; $num = $size = $errno = 0; $this->sock = fsockopen($host, $port, $err, $errno, 10) or $this->plugin_moblog_error_output('Could not connect to ' . $host . ':' . $port); $buf = fgets($this->sock, 512); if (substr($buf, 0, 3) != '+OK') { $this->plugin_moblog_error_output($buf); } $buf = $this->plugin_moblog_sendcmd("USER {$user}"); if (substr($buf, 0, 3) != '+OK') { $this->plugin_moblog_error_output($buf); } $buf = $this->plugin_moblog_sendcmd("PASS {$pass}"); if (substr($buf, 0, 3) != '+OK') { $this->plugin_moblog_error_output($buf); } $data = $this->plugin_moblog_sendcmd("STAT"); //STAT -件数とサイズ取得 +OK 8 1234 sscanf($data, '+OK %d %d', $num, $size); if ($num == "0") { $buf = $this->plugin_moblog_sendcmd("QUIT"); //バイバイ fclose($this->sock); $this->debug[] = 'No mail.'; $this->plugin_moblog_output(); } $this->debug[] = $num . ' message(s) found.'; $tmpfiles = array(); // 件数分 for ($i = 1; $i <= $num; $i++) { $line = $this->plugin_moblog_sendcmd("RETR {$i}"); //RETR n -n番目のメッセージ取得(ヘッダ含 $dat = ''; while (!preg_match("/^\\.\r\n/", $line) && $line !== false) { //EOFの.まで読む $line = fgets($this->sock, 4096); $dat .= $line; } $data = $this->plugin_moblog_sendcmd("DELE {$i}"); //DELE n n番目のメッセージ削除 $tmpfname = tempnam($this->cont['CACHE_DIR'], 'moblog'); file_put_contents($tmpfname, $dat); $tmpfiles[] = $tmpfname; } $buf = $this->plugin_moblog_sendcmd("QUIT"); //バイバイ fclose($this->sock); foreach ($tmpfiles as $tmpfname) { if ($execution_time) { @set_time_limit($execution_time); } $write = true; $subject = $from = $text = $atta = $part = $filename = $charset = ''; $this->user_pref = array(); $this->post_options = array(); $this->is_newpage = 0; $filenames = array(); $body_text = array(); $rotate = 0; $page = ''; $exifgeo = array(); $attach_only = false; $this->root->vars['refid'] = ''; unset($this->root->rtf['esummary'], $this->root->rtf['twitter_update']); $dat = file_get_contents($tmpfname); unlink($tmpfname); list($head, $body) = $this->plugin_moblog_mime_split($dat); // To:ヘッダ確認 $treg = array(); $to_ok = FALSE; if (preg_match("/^To:[ \t]*([^\r\n]+)/im", $head, $treg)) { $treg[1] = $this->plugin_moblog_addr_search($treg[1]); $mail_reg = preg_quote($mail, '/'); $mail_reg = '/' . str_replace('\\*', '[^@]*?', $mail_reg) . '/i'; //if ($mail === $treg[1]) { if (preg_match($mail_reg, $treg[1])) { $to = $treg[1]; $to_ok = TRUE; } else { if (preg_match("/^X-Forwarded-To:[ \t]*([^\r\n]+)/im", $head, $treg)) { //if ($mail === $treg[1]) { $treg[1] = $this->plugin_moblog_addr_search($treg[1]); if (preg_match($mail_reg, $treg[1])) { $to = $treg[1]; $to_ok = TRUE; } } } } if (!$to_ok) { $write = false; $this->debug[] = 'Bad To: ' . $to; } $to = strtolower($to); // Received-SPF: のチェック if ($this->config['allow_spf']) { if (preg_match('/^Received-SPF:\\s*([a-z]+)/im', $head, $match)) { if (!preg_match($this->config['allow_spf'], $match[1])) { $write = false; $this->debug[] = 'Bad SPF.'; } } } // メーラーのチェック $mreg = array(); if ($write && preg_match("#^(X-Mailer|X-Mail-Agent):[ \t]*([^\r\n]+)#im", $head, $mreg)) { if ($deny_mailer) { if (preg_match($deny_mailer, $mreg[2])) { $write = false; $this->debug[] = 'Bad mailer.'; } } } // キャラクターセットのチェック if ($write && preg_match('/charset\\s*=\\s*"?([^"\\r\\n]+)/i', $head, $mreg)) { $charset = $mreg[1]; if ($deny_lang) { if (preg_match($deny_lang, $charset)) { $write = false; $this->debug[] = 'Bad charset.'; } } } // 日付の抽出 $datereg = array(); preg_match("#^Date:[ \t]*([^\r\n]+)#im", $head, $datereg); $now = strtotime($datereg[1]); if ($now == -1) { $now = $this->cont['UTC']; } // 送信者アドレスの抽出 $freg = array(); if (preg_match("#^From:[ \t]*([^\r\n]+)#im", $head, $freg)) { $from = $this->plugin_moblog_addr_search($freg[1]); } elseif (preg_match("#^Reply-To:[ \t]*([^\r\n]+)#im", $head, $freg)) { $from = $this->plugin_moblog_addr_search($freg[1]); } elseif (preg_match("#^Return-Path:[ \t]*([^\r\n]+)#im", $head, $freg)) { $from = $this->plugin_moblog_addr_search($freg[1]); } $from = strtolower($from); // サブジェクトの抽出 $subreg = array(); if (preg_match("#^Subject:[ \t]*([^\r\n]+)#im", $head, $subreg)) { if (HypCommonFunc::get_version() >= '20081215') { if (!XC_CLASS_EXISTS('MobilePictogramConverter')) { HypCommonFunc::loadClass('MobilePictogramConverter'); } $mpc =& MobilePictogramConverter::factory_common(); } else { $mpc = null; } // 改行文字削除 $subject = str_replace(array("\r", "\n"), "", $subreg[1]); $subject = $this->mime_decode($subject, $mpc, $from); // ^\*\d+ 認証キー抽出 $_reg = '/^\\*(\\d+)/i'; if (preg_match($_reg, $subject, $match)) { $this->post_options['auth_code'] = $match[1]; $subject = trim(preg_replace($_reg, '', $subject, 1)); } // ページ指定コマンド検出 $_reg = '/@&([^&]+)&/'; if (preg_match($_reg, $subject, $match)) { $page = $match[1]; $subject = trim(preg_replace($_reg, '', $subject, 1)); } // ダイレクトページ指定コマンド検出 $_reg = '/@&([^\\$]+)\\$/'; if (preg_match($_reg, $subject, $match)) { $page = $match[1]; $subject = trim(preg_replace($_reg, '', $subject, 1)); $this->post_options['directpage'] = 1; } // 回転指定コマンド検出 $_reg = '/@(r|l)\\b/i'; if (preg_match($_reg, $subject, $match)) { $rotate = strtolower($match[1]) == "r" ? 1 : 3; $subject = trim(preg_replace($_reg, '', $subject, 1)); } $_reg = '/\\b(r|l)@/i'; // compat for old type if (preg_match($_reg, $subject, $match)) { $rotate = strtolower($match[1]) == "r" ? 1 : 3; $subject = trim(preg_replace($_reg, '', $subject, 1)); } // @new 新規ページ指定コマンド検出 $_reg = '/@new\\b/i'; if (preg_match($_reg, $subject)) { $this->post_options['new'] = true; $subject = trim(preg_replace($_reg, '', $subject, 1)); } // @p\d+ 対象ページ指定(過去へxページ)コマンド検出 $_reg = '/@p(\\d+)/i'; if (preg_match($_reg, $subject, $match)) { $this->post_options['page_past'] = $match[1]; $subject = trim(preg_replace($_reg, '', $subject)); } // マップ作成コマンド検出 $_reg = '/@map\\b/i'; if (preg_match($_reg, $subject, $match)) { $this->post_options['makemap'] = true; $subject = trim(preg_replace($_reg, '', $subject)); } // タグの抽出 $_reg = '/#([^#]*)/'; if (preg_match($_reg, $subject, $match)) { $_tag = trim($match[1]); if ($_tag) { $this->post_options['tag'] = $_tag; } $subject = trim(preg_replace($_reg, '', $subject, 1)); } // 未承諾広告カット if ($write && $deny_title) { if (preg_match($deny_title, $subject)) { $write = false; $this->debug[] = 'Bad title.'; } } } $today = getdate($now); $date = sprintf("/%04d-%02d-%02d-0", $today['year'], $today['mon'], $today['mday']); // 拒否アドレス if ($write) { for ($f = 0; $f < count($deny); $f++) { if (strpos($from, $deny[$f]) !== false) { $write = false; $this->debug[] = 'Bad from addr.'; } } } // 登録対象ページを設定 if ($write) { $uid = 0; if (!empty($adr2page[$to])) { if (!$page) { $page = is_array($adr2page[$to]) ? $adr2page[$to][0] : $adr2page[$to]; } if (is_array($adr2page[$to])) { $uid = $adr2page[$to][1]; if (!empty($adr2page[$to][2])) { $attach_only = true; $this->post_options['directpage'] = 1; if (!empty($adr2page[$to][3])) { $this->root->vars['refid'] = $adr2page[$to][3]; } } } } else { if (!empty($adr2page[$from])) { if (!$page) { $page = is_array($adr2page[$from]) ? $adr2page[$from][0] : $adr2page[$from]; } if (is_array($adr2page[$from])) { $uid = $adr2page[$from][1]; } } else { if (!$page) { $page = is_array($adr2page['other']) ? $adr2page['other'][0] : $adr2page['other']; } } } $uid = intval($uid); // userinfo を設定 $this->func->set_userinfo($uid); $this->root->userinfo['ucd'] = ''; $this->root->cookie['name'] = ''; // pginfo のキャッシュをクリア $this->func->get_pginfo($page, '', TRUE); if ($page) { $page = $this->get_pagename($page, $uid, $today); } if ($page) { if (!$this->func->is_pagename($page)) { $write = false; $this->debug[] = '"' . $page . '" is not the WikiName.'; } else { if (!$attach_only) { $this->user_pref = $this->func->get_user_pref($uid); if (!empty($this->user_pref['moblog_auth_code'])) { if ($this->user_pref['moblog_auth_code'] != $this->post_options['auth_code']) { $write = false; $this->debug[] = 'User auth key dose not mutch.'; } } } } } else { $write = false; $this->debug[] = 'Allow page not found.' . $page; } } if ($write) { // マルチパートならばバウンダリに分割 if (preg_match("#^Content-type:.*multipart/#im", $head)) { $boureg = array(); preg_match('#boundary="([^"]+)"#i', $head, $boureg); $body = str_replace($boureg[1], urlencode($boureg[1]), $body); $part = split("\r\n--" . urlencode($boureg[1]) . "-?-?", $body); $boureg2 = array(); if (preg_match('#boundary="([^"]+)"#i', $body, $boureg2)) { //multipart/altanative $body = str_replace($boureg2[1], urlencode($boureg2[1]), $body); $body = preg_replace("#\r\n--" . urlencode($boureg[1]) . "-?-?\r\n#i", "", $body); $part = split("\r\n--" . urlencode($boureg2[1]) . "-?-?", $body); } } else { $part[0] = $dat; // 普通のテキストメール } foreach ($part as $multi) { if (!$write) { break; } @(list($m_head, $m_body) = $this->plugin_moblog_mime_split($multi)); if (!$m_body) { continue; } $filename = ''; $m_body = preg_replace("/\r\n\\.\r\n\$/", "", $m_body); if (!preg_match("#^Content-type:(.+)\$#im", $m_head, $match)) { continue; } $match = trim($match[1]); list($type, $charset) = array_pad(explode(';', $match), 2, ''); if ($charset) { $charset = trim($charset); if (preg_match('/^charset=(.+)$/i', $charset)) { $charset = substr($charset, 8); } else { $charset = ''; } } list($main, $sub) = explode('/', trim($type)); $sub = strtolower($sub); // 本文をデコード if (strtolower($main) === 'text') { if (!empty($body_text['plain']) && $sub === 'html') { continue; } // キャラクターセットのチェック if ($charset) { if ($deny_lang) { if (preg_match($deny_lang, $charset)) { $write = false; $this->debug[] = 'Bad charset.'; break; } } } else { $charset = 'AUTO'; } if (preg_match("#^Content-Transfer-Encoding:.*base64#im", $m_head)) { $m_body = base64_decode($m_body); } if (preg_match("#^Content-Transfer-Encoding:.*quoted-printable#im", $m_head)) { $m_body = quoted_printable_decode($m_body); } if (HypCommonFunc::get_version() >= '20081215') { if (!isset($mpc)) { if (!XC_CLASS_EXISTS('MobilePictogramConverter')) { HypCommonFunc::loadClass('MobilePictogramConverter'); } $mpc =& MobilePictogramConverter::factory_common(); } $m_body = $mpc->mail2ModKtai($m_body, $from, $charset); } $text = trim(mb_convert_encoding($m_body, $this->cont['SOURCE_ENCODING'], $charset)); // 改行文字統一 $text = str_replace(array("\r\n", "\r"), array("\n", "\n"), $text); if ($sub === 'html') { $text = str_replace("\n", '', $text); $text = preg_replace('#<br([^>]+)?>#i', "\n", $text); $text = preg_replace('#</?(?:p|tr|table|div)([^>]+)?>#i', "\n\n", $text); $text = strip_tags($text); } // 改行3連続以上を #clear に置換 $text = preg_replace("/\n{3,}/", "\n#clear\n", $text); if ($write) { // 電話番号削除 //$text = preg_replace("#([[:digit:]]{11})|([[:digit:]\-]{13})#", "", $text); // 下線削除 $text = preg_replace('#' . $del_ereg . '#', '', $text); // mac削除 $text = preg_replace("#Content-type: multipart/appledouble;[[:space:]]boundary=(.*)#", "", $text); // 広告等削除 if (is_array($word)) { foreach ($word as $delstr) { $text = str_replace($delstr, "", $text); } } if (strlen($text) > $body_limit) { $text = substr($text, 0, $body_limit) . "..."; } } // ISBN, ASIN 変換 if (!empty($this->config['isbn'])) { $isbn = $this->config['isbn']; $text = preg_replace('/^([A-Za-z0-9]{10}|\\d{13})$/me', 'str_replace(\'__ISBN__\', \'$1\', \'' . $isbn . '\')', $text); } // キーワード@amazon 変換 if (!empty($this->config['amazon'])) { $amazon = $this->config['amazon']; $text = preg_replace('/^(.+)@amazon$/mei', 'str_replace(\'__KEYWORD__\', \'$1\', \'' . $amazon . '\')', $text); } $body_text[$sub][] = trim($text); } else { // ファイル名を抽出 $filereg = array(); if (preg_match("#name=\"?([^\"\n]+)\"?#i", $m_head, $filereg)) { $filename = trim($filereg[1]); $filename = $this->mime_decode($filename); } // 添付データをデコードして保存 if (preg_match("#^Content-Transfer-Encoding:.*base64#im", $m_head) && preg_match('#' . $subtype . '#i', $sub)) { $tmp = base64_decode($m_body); //$save_file = $this->cont['CACHE_DIR'].$this->func->encode($filename).".tmp"; if (strlen($tmp) < $maxbyte && $write && $attach) { $save_file = tempnam(rtrim($this->cont['UPLOAD_DIR'], '/'), 'moblog'); chmod($save_file, 0606); if (file_put_contents($save_file, $tmp, LOCK_EX)) { //Exif geo $exifgeo = $this->getExifGeo($save_file); list($usec) = explode(' ', microtime()); if (!$filename) { $filename = $this->cont['UTC'] . '_' . $usec . '.' . $sub; } //回転指定 or 自動回転($rotate = 0) HypCommonFunc::rotateImage($save_file, $rotate); // GPS 情報除去 if ($_size && version_compare(HypCommonFunc::get_version(), '20150515', '>=')) { if (!empty($this->root->vars['rmgps'])) { HypCommonFunc::removeExifGps($save_file); } } // ページが無ければ空ページを作成 if (!$this->func->is_page($page)) { $this->func->make_empty_page($page, false); } //$attach = $this->func->get_plugin_instance('attach'); $pass = null; if (!$uid) { list($pass) = explode('@', $from); } $res = $attach->do_upload($page, $filename, $save_file, false, $pass, true); if ($res['result']) { $filenames[] = array('name' => $res['name'], 'exifgeo' => $exifgeo); } else { $this->debug[] = $res['msg']; } } else { $write = false; $this->debug[] = 'Can not make temp-file.'; } } else { $write = false; $this->debug[] = 'Plugin attach was not found.'; } } } } if ($imgonly && !$filenames) { $write = false; $this->debug[] = 'Attach file was not found.'; } $subject = trim($subject); } if (!empty($body_text['plain'])) { $text = join("\n\n", $body_text['plain']); } else { if (!empty($body_text['html'])) { $text = join("\n\n", $body_text['html']); } else { $text = ''; } } // wikiページ書き込み if ($write && !$attach_only) { $this->plugin_moblog_page_write($page, $subject, $text, $filenames, $ref_option, $now); } } // imgタグ呼び出し $this->plugin_moblog_output(); }