protected function check_url($v) { $CI =& get_instance(); if (strpos($v, str_replace(array('http://', 'https://'), '', $CI->config->item('base_url')))) { return FALSE; } else { if (filter_var(_make_clean_url($v), FILTER_VALIDATE_URL) === FALSE) { return FALSE; } else { return TRUE; } } }
function _parse_external_js($url) { $url = _make_clean_url($url); if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { return FALSE; } else { $url_header = _is_url_exist($url); if ($url_header) { /*_request_timeout(3); $html = @file_get_contents($url);*/ $html = @file_get_html($url_header, false, stream_context_create(array('http' => array('timeout' => 3)))); if ($html) { $external_js = array(); $external_js_count = 0; $external_js_count_max = 20; foreach ($html->find('script') as $script) { $src = $script->src; if ($src != null) { if (strpos($src, '//') === FALSE) { /*if($src[0] === '/') { $src = $url.$src; } elseif($src[0] != '.') { $src = $url.'/'.$src; } else { $src = null; }*/ if (isset($url_header[strlen($url_header) - 1]) && $url_header[strlen($url_header) - 1] !== '/') { $url_header .= '/'; } $src = url_to_absolute($url_header, $src); } if (_is_url_exist($src)) { $external_js[] = $src; } } $external_js_count++; if ($external_js_count === $external_js_count_max) { unset($external_js_count, $external_js_count_max); break; } } $html = NULL; unset($url_header); if (!empty($external_js)) { return $external_js; } else { unset($external_js); return FALSE; } } else { $html = NULL; unset($url_header); return FALSE; } } else { unset($url_header); return FALSE; } } }
public function index() { $this->load->helper(array('security', 'form', 'captcha')); $this->load->library(array('form_validation', 'punycode', 'email', 'session')); $data = array('title' => 'Проверка URL', 'error' => '', 'output' => ''); $this->form_validation->set_rules(array(array('field' => 'url', 'label' => 'URL', 'rules' => 'required|trim|xss_clean|max_length[2083]|check_url'), array('field' => 'email', 'label' => 'E-mail', 'rules' => 'trim|xss_clean|max_length[254]|valid_email'), array('field' => 'captcha', 'label' => 'Проверочный код', 'rules' => 'required|trim|xss_clean|max_length[8]|check_captcha'))); if ($this->form_validation->run() == FALSE) { $data['output'] = $this->load->view('home/home', array('captcha' => _captcha_activate()), TRUE); } else { _captcha_destroy(); $this->load->model('home_model'); $cleaned_url = _make_clean_url($this->input->post('url')); $cleaned_url_hash = md5($cleaned_url . $this->config->item('secret_url')); $already_checked = $this->home_model->_already_checked(array('url' => $cleaned_url)); if ($already_checked) { if ($this->session->flashdata('last_check') && $this->session->flashdata('last_check') === $cleaned_url) { $this->session->keep_flashdata('last_check'); } else { if ($this->input->post('email')) { _send_mail_url($this->input->post('email'), $cleaned_url_hash, $cleaned_url); $this->session->set_flashdata('last_check', $cleaned_url); } } redirect('check/' . $cleaned_url_hash); /*if(is_object($already_checked)) { $already_checked_row = $already_checked->row(); $data['title'] .= ': '.$cleaned_url; $data['error'] = 'Ссылка на результаты проверки будет выслана на e-mail: '._mask_email($this->input->post('email')); if($this->session->flashdata('last_check') && $this->session->flashdata('last_check') === $cleaned_url) { $this->session->keep_flashdata('last_check'); } else { _send_mail_url($this->input->post('email'),$cleaned_url_hash,$cleaned_url); $this->session->set_flashdata('last_check',$cleaned_url); } $already_checked = NULL; $already_checked_row = NULL; } else { $data['error'] = 'Ошибка отправки данных. (#1)'; }*/ } else { if (!_is_url_exist($cleaned_url)) { $data['error'] = 'URL недоступен, не существует, либо слишком большой объём данных. (#2)'; $data['output'] = $this->load->view('home/home', array('captcha' => _captcha_activate()), TRUE); } else { $add_queue = $this->home_model->_add_queue(array('url' => $cleaned_url, 'ip' => $this->input->ip_address(), 'email' => $this->input->post('email') ? $this->input->post('email') : '')); $add_queue = NULL; $this->session->set_flashdata('last_check', $cleaned_url); redirect('check/' . $cleaned_url_hash); /*$result = $this->home_model->_get_result(array( 'hash' => $cleaned_url_hash, )); if($result) { $result_row = $result->row(); $rumonth = $this->config->item('rumonth'); if(isset($result_row->domain)) { $data['title'] .= ': '.$cleaned_url; $data['error'] = 'Ссылка на результаты проверки будет выслана на e-mail: '._mask_email($this->input->post('email')); $this->session->set_flashdata('last_check',$cleaned_url); } else { foreach($result->result() as $row) { if($row->hash === $cleaned_url_hash) { $data['title'] .= ': '.$row->url; $data['error'] = $row->url." в очереди на проверку (".$row->qorder." из ".$result->num_rows().").<br>\n". "Добавлен в базу ".date("j ".$rumonth[date("n",strtotime($row->date))]." Y г. в H:i",strtotime($row->date))." (прошло "._relative_time($row->date).").<br>\n". "Ссылка на результаты проверки будет выслана на e-mail: "._mask_email($row->email); $this->session->set_flashdata('last_check',$row->url); break; } } if(empty($data['error'])) { $data['error'] = 'Ошибка отправки данных. (#3)'; } } $result_row = NULL; } else { $data['error'] = 'Ошибка отправки данных. (#4)'; $data['output'] = $this->load->view('home/home','',TRUE); } $result = NULL;*/ } } unset($cleaned_url, $cleaned_url_hash, $already_checked); } _no_cache(); $this->load->view('home/index', array('auto_version_js' => _auto_version('js/app.js'), 'auto_version_css' => _auto_version('css/app.css'), 'title' => $data['title'], 'output' => $data['output'], 'error' => $data['error'])); }