2015-04-10 4 views
-3

Этот вопрос меня смутил в течение нескольких дней, я очень признателен, что кто-то может помочь разобраться.stripos() ожидает, что параметр 1 будет строкой

Я бег WP на апаш + Ubuntu 14,04 64.

Кто-то написало мне небольшие PHP кодов для отображения грядущей URL и спички/дисплей ключевого слова из текстового файла (говоря участие aaa.txt, не базы данных) ,

Коды являются «умными», но с некоторыми ошибками php. Но я не могу это исправить:

Предупреждение: stripos() ожидает параметр 1, чтобы быть строка, массив приведен в {отредактирован} .php (373): Eval() 'D кода на линии 15

Неверный вопрос if (0 === strpos($host, $suffix)) {, но я новичок, как его изменить?

Вот коды:

define('ROOT', dirname(__FILE__)); 
@$cnText = file_get_contents('aaa.txt'); 
$cnText = str_replace('?', '', $cnText); 
$cnText = preg_split('/\n|\r\n/', $cnText); 
foreach ($cnText as $text) { 
    $pos = strpos($text, ' '); 
    $cnText[substr($text, 0, $pos)] = trim(substr($text, $pos)); 
} 
$host = strrev(strtolower($_SERVER['HTTP_HOST'])); 
$domain = null; 
$domainSuffix = array('.com.cn','.net.cn','.org.cn','.gov.cn','.com','.cn','.net','.cc','.org','.info','.biz','.tv','.guru'); 
$keyword = array(); 
foreach ($domainSuffix as $suffix) { 
    $suffix = strrev($suffix); 
if (0 === strpos($host, $suffix)) { 
     $host = explode('.', substr($host, strlen($suffix))); 
     $keyword[0] = strrev($host[0]); 
     if(0 === strpos($keyword[0], 'xn--')) { 
      require_once('idna_convert.class.php'); 
      $IDN = new idna_convert(); 
      $keyword[0] = $IDN->decode($keyword[0]); 
     } 
     $domain = $keyword[0] . strrev($suffix); 
    } 
    } 
if (!empty($domain)) { 
    $keywords = ''; 
    if (array_key_exists($domain, $cnText)) { 
     $data = explode(' ', $cnText[$domain]); 
     foreach($data as $key => $value) { 
      $value = trim($value); 
       $keyword[$key] = $value; 
       $keywords .= " $value"; 
      } 
     } 
    } 
    echo $keywords; 
?> 
+1

Посмотрите руководство, http://php.net/strpos. – chris85

+0

Что вы ожидаете отсюда: '$ host = strrev (strtolower ($ _ SERVER ['HTTP_HOST']));' – Twisty

+0

@Twisty Алгоритм сравнивает суффиксы, изменяя все строки, а затем сравнивая префиксы. Необязательно сложно, возможно, но не ошибка. – IMSoP

ответ

3

Проблема заключается в том, что переменная $host используется для двух разных целей одновременно. Прежде всего, он представляет обрабатываемое имя хоста (обратное, как часть несколько чрезмерно спроектированного алгоритма). Но на этой линии то же имя переменной используется для массива:

$host = explode('.', substr($host, strlen($suffix))); 

Как только эта линия закончилась, весь код ожидает предыдущее значение переменной будет либо ошибка или делать неправильные вещи.

Вам необходимо назначить новое имя переменной в этой строке, например. $host_parts и выяснить, какие ссылки на $host должны быть действительно на этот массив ($host_parts).

Обратите внимание, что это в значительной степени проблема, потому что код находится внутри цикла. Глядя на алгоритм, возможно, что он должен остановиться после первого совпадения, с соответствующим образом размещенным break statement. Тем не менее, повторное использование такого имени переменной, как это, обычно является плохим.

Смежные вопросы