/** * Get a page and save it as file. * * @param string $url A url to request. * @param string $path A system path with file name to save it. * @param array $option An option array to override CURL OPT. * * @return Object Object with success or fail information. */ public static function download($url, $path = null, $option = array()) { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.path'); $url = new \JUri($url); $path = \JPath::clean($path); // $folder_path = JPATH_ROOT.DS.'files'.DS.$url->task_id ; if (substr($path, -1) == DIRECTORY_SEPARATOR) { $file_name = basename($url); $file_path = $path . $file_name; $folder_path = $path; } else { $file_path = $path; $folder_path = str_replace(basename($path), '', $file_path); } \JPath::setPermissions($folder_path, 644, 755); if (!\is_dir($folder_path)) { \JFolder::create($folder_path); } $fp = fopen($file_path, 'w+'); $ch = curl_init(); $options = array(CURLOPT_URL => UriHelper::safe($url), CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1", CURLOPT_FOLLOWLOCATION => !ini_get('open_basedir') ? true : false, CURLOPT_FILE => $fp, CURLOPT_SSL_VERIFYPEER => false); // Merge option foreach ($option as $key => $opt) { if (isset($option[$key])) { $options[$key] = $option[$key]; } } curl_setopt_array($ch, $options); curl_exec($ch); $errno = curl_errno($ch); $errmsg = curl_error($ch); curl_close($ch); fclose($fp); if ($errno) { $return = new Object(); $return->set('errorCode', $errno); $return->set('errorMsg', $errmsg); return $return; } else { $return = new Object(); $return->set('filePath', $file_path); return $return; } }
/** * The method to test UriHelper::safe. * * @param string $expected * @param string $uri * * @return void * * @dataProvider uriDataProvider * @covers Windwalker\Helper\UriHelper::safe * @group safe */ public function testSafe($expected, $uri) { $this->assertSame($expected, UriHelper::safe($uri)); }