/** * ファイルをダウンロード保存する */ public static function fileDownload($url, $localfile, $disp_error = true, $trace_redirection = false) { global $_conf; $perm = isset($_conf['dl_perm']) ? $_conf['dl_perm'] : 0606; if (file_exists($localfile)) { $modified = http_date(filemtime($localfile)); } else { $modified = false; } // DL $wap_ua = new WapUserAgent(); $wap_ua->setTimeout($_conf['http_conn_timeout'], $_conf['http_read_timeout']); $wap_ua->setAtFsockopen(true); $wap_req = new WapRequest(); $wap_req->setUrl($url); $wap_req->setModified($modified); if ($_conf['proxy_use']) { $wap_req->setProxy($_conf['proxy_host'], $_conf['proxy_port']); } $wap_res = $wap_ua->request($wap_req); // 1段階だけリダイレクトを追跡 if ($wap_res->isRedirect() && array_key_exists('Location', $wap_res->headers) && ($trace_redirection === true || $trace_redirection == $wap_res->code)) { $wap_req->setUrl($wap_res->headers['Location']); $wap_res = $wap_ua->request($wap_req); } // エラーメッセージを設定 if ($wap_res->isError() && $disp_error) { $url_t = self::throughIme($wap_req->url); $info_msg_ht = "<p class=\"info-msg\">Error: {$wap_res->code} {$wap_res->message}<br>"; if ($wap_res->isRedirect() && array_key_exists('Location', $wap_res->headers)) { $location = $wap_res->headers['Location']; $location_ht = htmlspecialchars($location, ENT_QUOTES); $location_t = self::throughIme($location); $info_msg_ht .= "Location: <a href=\"{$location_t}\"{$_conf['ext_win_target_at']}>{$location_ht}</a><br>"; } $info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$wap_req->url}</a> に接続できませんでした。</p>"; self::pushInfoHtml($info_msg_ht); } // 更新されていたら if ($wap_res->isSuccess() && $wap_res->code != 304) { if (FileCtl::file_write_contents($localfile, $wap_res->content) === false) { p2die('cannot write file.'); } chmod($localfile, $perm); } return $wap_res; }
/** * ファイルをダウンロード保存する * * @access public * @param $options array('disp_error' => true, 'use_tmp_file' => false, 'modified' = null) * @return WapResponse|false */ function fileDownload($url, $localfile, $options = array()) { global $_conf; $me = __CLASS__ . '::' . __FUNCTION__ . '()'; $disp_error = isset($options['disp_error']) ? $options['disp_error'] : true; $use_tmp_file = isset($options['use_tmp_file']) ? $options['use_tmp_file'] : false; $modified = isset($options['modified']) ? $options['modified'] : null; if (strlen($localfile) == 0) { trigger_error("{$me}, localfile is null", E_USER_WARNING); return false; } $perm = isset($_conf['dl_perm']) ? $_conf['dl_perm'] : 0606; // {{{ modifiedの指定 // 指定なし(null)なら、ファイルの更新時間 if (is_null($modified) && file_exists($localfile)) { $modified = gmdate("D, d M Y H:i:s", filemtime($localfile)) . " GMT"; // UNIX TIME } elseif (is_numeric($modified)) { $modified = gmdate("D, d M Y H:i:s", $modified) . " GMT"; // 日付時間文字列 } elseif (is_string($modified)) { // $modified はそのまま } else { // modified ヘッダはなし $modified = false; } // }}} // DL require_once P2_LIB_DIR . '/wap.class.php'; $wap_ua = new WapUserAgent(); $wap_ua->setTimeout($_conf['fsockopen_time_limit']); $wap_req = new WapRequest(); $wap_req->setUrl($url); $modified and $wap_req->setModified($modified); if ($_conf['proxy_use']) { $wap_req->setProxy($_conf['proxy_host'], $_conf['proxy_port']); } $wap_res = $wap_ua->request($wap_req); if (!$wap_res or !$wap_res->is_success() && $disp_error) { $url_t = P2Util::throughIme($wap_req->url); $atag = P2View::tagA($url_t, hs($wap_req->url), array('target' => $_conf['ext_win_target'])); $msgHtml = sprintf('<div>Error: %s %s<br>p2 info - %s に接続できませんでした。</div>', hs($wap_res->code), hs($wap_res->message), $atag); P2Util::pushInfoHtml($msgHtml); } // 更新されていたらファイルに保存 if ($wap_res->is_success() && $wap_res->code != '304') { if ($use_tmp_file) { if (!is_dir($_conf['tmp_dir'])) { if (!FileCtl::mkdirR($_conf['tmp_dir'])) { die("Error: {$me}, cannot mkdir."); return false; } } if (false === FileCtl::filePutRename($localfile, $wap_res->content)) { trigger_error("{$me}, FileCtl::filePutRename() return false. " . $localfile, E_USER_WARNING); die("Error: {$me}, cannot write file."); return false; } } else { if (false === file_put_contents($localfile, $wap_res->content, LOCK_EX)) { die("Error: {$me}, cannot write file."); return false; } } chmod($localfile, $perm); } return $wap_res; }