проверка результатов foreach - PullRequest
0 голосов
/ 10 сентября 2011

мой сценарий позволяет отправлять людям короткие и короткие 15 адресов за раз:

$err_msg = isValidFLR($flr_post, $ip);
    if (!$err_msg) {
    list($randlink, $lastid, $scr) = addLink($flr_post, $ip);
      $flr_post = check_input($flr_post);
      $url_array[$i]['number'] = $i + 1;
      $url_array[$i]['flr'] = $flr_post;
      $url_array[$i]['flr_substr'] = (strlen($flr_post) > 33) ? substr($flr_post, 0, 33) . '...' : $flr_post;
      $url_array[$i]['randlink'] = $randlink;
      $url_array[$i]['fullrand'] = $config['indexurl'] . $config['mod_rewrite_char'] . $randlink;
      $url_array[$i]['scr'] = $scr;
      $url_array[$i]['id'] = $lastid;
      $url_array[$i]['flr_length'] = strlen($flr_post);
      $url_array[$i++]['randlink_length'] = strlen($config['indexurl'] . $config['mod_rewrite_char'] . $randlink);
        } else {
        die('Error, omg');
         }

Функция isValidFLR проверяет адрес имени хоста, preg_match (если это URL) и, если его нет в списке заблокированных.* Проблема в том, что если пользователь публикует подобное (по одному адресу на строку):

google.com
google.net
ksajdkljaskldjalsd.com

Сценарий возвращает, что все адреса неверны.Если пользователь попытается опубликовать только один, ВЕСЬ хороший, действительный адресный скрипт работает отлично.

Итак, проблема с этим сценарием или проверкой URL-адреса может быть?

Что вы предлагаете?

РЕДАКТИРОВАТЬ:

function isValidFLR(&$flr_post,&$ip) {
preg_match_all("!://!",$flr_post,$matches);
  $match_count = count($matches[0]);
  if ($match_count>=2) {
    $flr_post = preg_replace("!(.+)://((.+)://(.+))!",'\2',$flr_post);
  }
  elseif ($match_count==0) $flr_post = 'http://'.$flr_post;
  if (!preg_match('!^(http|https|ftp)://[\w-]+\.[\w-]+(\S+)?$!i', $flr_post)) {
      //if (!preg_match('/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i', $flr)) {
    return 'wromg address: '.$flr_post;
  }
  else {
    $m = parse_url($flr_post);
    $hostname = strtolower($m['host']);
  }

  // is such host..
  if (preg_match('/^\d+\.\d+\.\d+\.\d+/', $hostname)) {
    $ip = $hostname;
  } else {
    $ip = gethostbyname($hostname);
    if ($ip===$hostname) 
    return 'host not found: '.$flr_post;
  }

  // does host not blocked..
  if (in_array($ip,getIPs_array())) {
    return 'host blocked: '.$flr_post;
  }
  return false;
}

1 Ответ

0 голосов
/ 10 сентября 2011

Вы должны разделить ввод, используя ‘explode ()‘, ища «\ n», а затем выполните проверку в каждой из строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...